背景
通常我们将树莓派接入网络(网线或wifi),然后通过ssh登陆。如果这种方式有困难,比如没有网线或者初次进入系统不能自动连接Wi-Fi,这时候就需要键盘和显示器的帮助了,但如果没有键盘,操作树莓派将会很艰难。我听说可以使用树莓派的UART串口进入linux console。UART(Universal Asynchronous Receiver/Transmitter)是一种串行通信接口,有TX和RX两条线,分别负责发送和接收串行数据流(即比特)。
我的博客本不应该出现这么水的文章,而且通过串口登陆树莓派的教程用google一搜一大把,那为什么我还要写这篇教程呢?原因有三:
- 现有的教程几乎都是使用pl2302芯片的usb转串口(比如Mac OS X上使用USB转串口线连接树莓派),而淘宝上销量最高的usb转串口都是ch340芯片,不同的芯片需要使用不同的驱动;
- 网上针对树莓派3串口登陆的大部分中文教程(比如树莓派3 UART(串口)不可用的解决方法)都具有误导性并且操作麻烦,比如使用UART并不需要关闭蓝牙;由于被误导,看似简单的问题,却折腾了3个小时才成功;通过这次经历,我再次意识到官方文档的重要性。
- 很多玩树莓派的程序员对硬件知识为0,包括我,因此文中附带了对UART,TTL,RS232,GPIO,CH340G这些名词的解释;
工具
我所用的工具以及型号如下:
- macbook pro(macos 10.12即sierra)
- raspberry pi 3 model B
- ch340g芯片的USB转TTL小板+杜邦线
注意:如果你的情况不同,后面的步骤可能不再适用,但仍具有一定的参考意义。
步骤
1. 安装驱动
CH340G是实现usb转串口的芯片之一。这里的串口是指硬件层的接口,比如RS-232、TTL等。RS-232是一种串行接口,它比UART更低层,负责指定物理层的电平高低。TTL与RS-232类似也是一种串行接口,区别是它们工作的电平不同。树莓派3b使用的是TTL。
类似CH340G的芯片还有PL2302,需要注意的是不同的芯片需要使用不同的驱动。 网上好多教程都是针对pl2302芯片的,对应的下载链接是PL2303 Mac OS X Driver Download。 我从淘宝上买的usb转串口是ch340g芯片的,需要从Github: adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver下载CH340G芯片的MACOS驱动CH34x_Install_V1.3.pkg,安装后需要重启才会生效。
检查驱动是否生效:打开系统偏好设置->网络
,在左侧能看到USB2.0-Serial的接口。
插入usb转串口后会看到/dev/cu.wchusbserial1420这个设备文件:
$ ls /dev/cu.wchusbserial1420
2. 连线
树莓派3B的引脚对照表如下: 使用杜邦线将USB转TTL的TX与树莓派的RX(图中的GPIO 15)相连,RX与TX(图中的GPIO 14)相连。这个应该很好理解,TX即发送线,相当于输出;RX即接收线,相当于输入,输出应当与输入相连。然后将小板的GND(即地线)与树莓派的GND相连。
对上面提到的GPIO进行一下说明,GPIO即General-Purpose Input /Output Ports,这里进行一下说明,树莓派提供了40个管脚(pin),其中有些管脚已经被定义了,比如接电源、地线等。另外的17个可以被设置成输入或输出,比如用来点亮LED灯,这些才是GPIO。
最后将小板的USB插入mac。
3. 树莓派启用UART
树莓派3上有两个UART,一个用于蓝牙模块上,另一个(mini AURT)用于linux console。
By default, on Raspberry Pis equipped with the wireless/Bluetooth module (Raspberry Pi 3 and Raspberry Pi Zero W), the PL011 UART is connected to the BT module, while the mini UART is used for Linux console output.
相应的设备文件和UART的对应关系如下:
/dev/ttyAMA0 -> Bluetooth
/dev/ttyS0 -> GPIO serial port
这个mini UART默认是禁用的
Also when the linux console uses the mini UART (Raspberry Pi 3, Raspberry Pi Zero W), as a consequence of the UART being disabled, the console is also disabled.
通过UART登陆树莓派也就是要①通过UART与树莓派通信,并且将②该UART接口分配给linux console,好在后者是默认行为,如果不放心,可以通过sudo raspi-config->Interfacing options-> Serial->Yes
开启。
因此要通过串口进入linux console只需要启用mini UART即可:
在/boot/config.txt追加一行enable_uart=1
,然后重启sudo reboot
。
4. 使用screen与树莓派通信
在mac上安装screen
$ brew install screen
通过串口与树莓派通信
$ screen /dev/cu.wchusbserial1420 115200
这里的11520是波特率,在树莓派上的/boot/cmdline.txt进行设置。
如果执行以上命令总是出现screen is terminating
请重新拔插usb接口,我就是在这里卡住的。
UART的其他用途
除了通过UART使用Linux console外还可以进行其他的串口通信,与读写文件类似,使用pyserial模块可以非常方便的操作串口文件。