背景

最近从小伙伴那里低价“买”来了一个树莓派Zero W,但是上手后,如何连接树莓派Zero W就成了问题。我尝试借助搜索引擎解决我的问题,但并没有找到一篇很完整、很完美解决我问题的文章。因此,我决定将自己折腾的过程记录下来。通过这篇文章,您将了解到从格式化SD卡开始,到烧写镜像,最后连接树莓派的全过程。

我这篇文章的题目叫“只有一根电源线?照样玩转树莓派Zero W!”,这其实明确了我期望的使用场景:

  • 除了一根电源线,我不希望使用更多的配件了。比如额外的屏幕、键盘等等。插上电,我可以抱着自己的笔记本在房子里面到处走动,不需要担心一条随时会掉的“尾巴”。
  • 我不希望占用树莓派Zero W的串口。因为树莓派的串口默认是给蓝牙使用的,某些情况下我可能依然需要使用蓝牙。
  • 我不希望占用树莓派Zero W的USB数据接口,某些情况下我可能需要使用USB转TTL,连接一些传感器、模块。

面向搜索引擎解决问题的过程中,我搜到了一种解决方案:如何优雅地食用树莓派Zero W,但这种方式需要占用树莓派Zero的USB数据接口,因此不满足上述的要求。最终,我决定通过网络,使用SSH连接树莓派。但树莓派Zero W没有网口,所以最终就只能通过WiFi来连接了。

ps:你可能会发现,“我的树莓派Zero上电之后怎么什么都不亮”,这其实因为树莓派Zero没有电源灯,只有一个读写SD卡的指示灯,所以烧录好镜像以后,就会亮灯了因为这个事我一度怀疑我的小伙伴是奸商

所需材料

  • 树莓派Zero w
  • SD卡和读卡器
  • 数据线
  • 没有了

全过程

1.格式化SD卡

格式化SD卡,使用树莓派论坛推荐的SD Memory Card Formatter就行了,Windows和Mac平台都能使用(打不开官网的,给出百度云链接吧)。打开软件,选择对应的SD卡,点击格式化即可。

2. 烧写镜像

我们可以在树莓派的官网看到两种镜像:NOOBSRaspbian。NOOBS是树莓派官方发布的工具,其实是集成了安装程序、恢复程序和镜像等。NOOBS对初次接触树莓派的人非常友好,下载好NOOBS的镜像,把内容解压到SD卡根目录,给树莓派插上 SD卡、键盘、鼠标、屏幕,上电即可,之后根据提示即可完成系统的安装。由于本次我们不单独给树莓派配备屏幕等配件,所以选择安装RaspbianRaspbian“lite”、“desktop”或者“desktop and recommended software”几个版本。我是程序猿,我想装逼,我不需要图形界面,所以就选择“lite”了。开玩笑啦,其实,毕竟Zero的性能有限,我不需要使用它的图形界面做一些其他事,只想在上面跑一些python脚本。当然也可以选择“desktop”或者“desktop and recommended software”版本的镜像,安装好之后可以使用VNC连接Zero,不过这不是本篇文章讨论的内容。

树莓派官方推荐使用开源工具balenaEtcher完成烧写镜像的过程,对于大多数用户而言,这是最简单的选择。使用balenaEtcher烧写镜像的过程如下:

  • 下载balenaEtcher并安装
  • 把SD卡插入读卡器
  • 打开balenaEtcher并从硬盘中选择要写入SD卡的镜像文件(.img或.zip)
  • 选择要写入镜像的SD卡
  • 最后写入镜像即可

我在Windows平台测试,没有问题的,但是在Mac Mojave和Mac Catalina,该开源工具似乎并无法正常使用,不知道是不是我的打开姿势不对,所以无奈,Mac上只能使用命令行进行整个烧录过程。还是强烈建议各位使用balenaEtcher在Windows完成镜像的烧写过程,使用命令行烧写镜像,一旦选择错硬盘,将直接覆盖磁盘内的数据,三思而后行。

2.1 查找SD卡

格式化SD卡之后,首先使用diskutil list查找SD卡的磁盘,我们可以从磁盘的描述、容量信息以及名称(注意/dev/disk2后面括号内的(external,physical)标识,看出我们SD卡对应的磁盘,这里,我的SD卡为:/dev/disk2,如下所示:

1
scarleastdeMacBook-Pro:~ scarleast$ diskutil list
2
/dev/disk0 (internal, physical):
3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
4
   0:      GUID_partition_scheme                        *500.3 GB   disk0
5
   1:                        EFI EFI                     314.6 MB   disk0s1
6
   2:                 Apple_APFS Container disk1         500.0 GB   disk0s2
7
8
/dev/disk1 (synthesized):
9
   #:                       TYPE NAME                    SIZE       IDENTIFIER
10
   0:      APFS Container Scheme -                      +500.0 GB   disk1
11
                                 Physical Store disk0s2
12
   1:                APFS Volume Macintosh HD - 数据     107.9 GB   disk1s1
13
   2:                APFS Volume Preboot                 82.4 MB    disk1s2
14
   3:                APFS Volume Recovery                528.9 MB   disk1s3
15
   4:                APFS Volume VM                      3.2 GB     disk1s4
16
   5:                APFS Volume Macintosh HD            10.6 GB    disk1s5
17
18
/dev/disk2 (external, physical):
19
   #:                       TYPE NAME                    SIZE       IDENTIFIER
20
   0:     FDisk_partition_scheme                        *15.9 GB    disk2
21
   1:             Windows_FAT_32 BOOT                    15.9 GB    disk2s1

2.2 为烧写镜像做准备

确定了SD卡的磁盘后,需要卸载SD卡,为烧写镜像做准备,使用diskutil unmountDisk /dev/disk<disk# from diskutil>即可,这里注意,需要自行替换/dev/disk<disk# from diskutil>为SD卡实际的设备名,如下所示(我的为/dev/disk2):

1
scarleastdeMacBook-Pro:~ scarleast$ diskutil unmountDisk /dev/disk2
2
Unmount of all volumes on disk2 was successful

2.3 烧写镜像

使用sudo dd bs=1m if=image.img of=/dev/rdisk<disk# from diskutil> conv=sync,即可将镜像烧录到SD卡中,几个参数的含义:

  • if:树莓派镜像的路径
  • of:SD卡的路径,务必确定这里填写的是SD卡的路径,否则有可能直接覆盖相应磁盘上的所有文件

执行命令后,需要输入root密码,之后等待即可,期间希望查看进度,可以按Ctrl + T查看,过程如下所示:

1
scarleastdeMacBook-Pro:~ scarleast$ sudo dd bs=1m if=~/Desktop/2019-09-26-raspbian-buster-lite.img  of=/dev/rdisk2  conv=sync
2
load: 1.98  cmd: dd 6571 uninterruptible 0.00u 0.05s
3
48+0 records in
4
47+0 records out
5
49283072 bytes transferred in 2.859712 secs (17233578 bytes/sec)
6
load: 1.98  cmd: dd 6571 uninterruptible 0.00u 0.07s
7
73+0 records in
8
72+0 records out
9
75497472 bytes transferred in 4.517975 secs (16710467 bytes/sec)
10
load: 1.98  cmd: dd 6571 uninterruptible 0.01u 0.08s
11
85+0 records in
12
84+0 records out
13
88080384 bytes transferred in 5.720841 secs (15396405 bytes/sec)
14
load: 1.98  cmd: dd 6571 uninterruptible 0.01u 0.10s
15
98+0 records in
16
97+0 records out
17
101711872 bytes transferred in 6.617933 secs (15369130 bytes/sec)
18
2144+0 records in
19
2144+0 records out
20
2248146944 bytes transferred in 165.306870 secs (13599840 bytes/sec)

烧写完成之后,SD卡会自动挂载到/Volume/<volume_label>路径下,可以直接查看SD卡中的内容:

1
 ls /Volumes/boot/
2
COPYING.linux			bcm2710-rpi-3-b.dtb		fixup4x.dat			start.elf
3
LICENCE.broadcom		bcm2710-rpi-cm3.dtb		fixup_cd.dat			start4.elf
4
bcm2708-rpi-b-plus.dtb		bcm2711-rpi-4-b.dtb		fixup_db.dat			start4cd.elf
5
bcm2708-rpi-b.dtb		bootcode.bin			fixup_x.dat			start4db.elf
6
bcm2708-rpi-cm.dtb		cmdline.txt			issue.txt			start4x.elf
7
bcm2708-rpi-Zero-w.dtb		config.txt			kernel.img			start_cd.elf
8
bcm2708-rpi-Zero.dtb		fixup.dat			kernel7.img			start_db.elf
9
bcm2709-rpi-2-b.dtb		fixup4.dat			kernel7l.img			start_x.elf
10
bcm2710-rpi-2-b.dtb		fixup4cd.dat			kernel8.img
11
bcm2710-rpi-3-b-plus.dtb	fixup4db.dat			overlays

3. 设置wifi连接-重点

这一步是整个过程的重点,这一能让树莓派上电之后自动连接WiFi,连接了WiFi我们就可以通过SSH登录树莓派,进行一些操作了。

3.1 新建WiFi配置文件

用读卡器连接电脑,在SD卡根目录下,新建一个名称为wpa_supplicant.conf的文件,内容如下:

1
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
2
update_config=1
3
4
network={
5
ssid="Test_WiFi_2.4G"
6
psk="HmBePxIi.3"
7
key_mgmt=WPA-PSK
8
}

我们只需要关注和修改network中的内容即可:

  • ssid:WiFi的名称
  • psk:WiFi的密码
  • key_mgmt:加密方式,以实际情况填写,家用目前通常为WPA/WPA2,我这里填写WPA-PSK即可。

3.2 为树莓派开启ssh

在SD卡根目录新建一个名称为ssh的空文件,可以使用touch命令,touch ssh

4. 上电

将SD卡安装到树莓派上,通电,等待1-2分钟,若配置没有问题,就可以在路由器的后台页面中,看到树莓派已经连接上WiFi了。

此时使用ssh,默认账户名pi,默认密码raspberry,即可连接树莓派:

1
scarleastdeMacBook-Pro:~ scarleast$ ssh pi@192.168.0.153
2
The authenticity of host '192.168.0.153 (192.168.0.153)' can't be established.
3
ECDSA key fingerprint is SHA256:w8A0kgEd0oZDCF08dfoRYy2YYPA+Q+r8SObvsmETL2w.
4
Are you sure you want to continue connecting (yes/no)? yes
5
Warning: Permanently added '192.168.0.153' (ECDSA) to the list of known hosts.
6
pi@192.168.0.153's password: 
7
Linux raspberrypi 4.19.75+ #1270 Tue Sep 24 18:38:54 BST 2019 armv6l
8
9
The programs included with the Debian GNU/Linux system are free software;
10
the exact distribution terms for each program are described in the
11
individual files in /usr/share/doc/*/copyright.
12
13
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
14
permitted by applicable law.
15
16
SSH is enabled and the default password for the 'pi' user has not been changed.
17
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.
18
19
pi@raspberrypi:~ $ exit

最后,不要忘了根据命令行提示修改密码~

尾巴

其实之前,我一直使用使用的树莓派3b+,配套有屏幕和无线键盘鼠标,镜像也是选择NOOBS直接安装,连接树莓派选择就更多了。本文是在接触到了Zero之后,被逼无奈折腾的结果,有些时候不逼自己一把,怎么知道自己闲时间那么多呢?当然,这种配置WiFi的方式,在其他的树莓派硬件上同样适用。Happy Maker~