目前搜到的大多数描述树莓派 4 串口的文章,大多数开头都是禁用下蓝牙,这个做法针对树莓派0-3 是必须的,因为本身串口不够用,但对树莓派 4 来说并不需要,因为有额外 4 个串口可以利用,默认配置好的两串口一个用于蓝牙(UART0)另一个是 miniUART 可以保留设置。此方面的文章大多都是一个流程,原因是参考的最初版本是树莓派 3 的设置;树莓派 4 的额外串口设置在树莓派论坛中可以看到相关的介绍,外面的文章不太多。除此之外,还有USB的4个口可以使用,也就是说,树莓派4将有10个串口可以使用。

树莓派正确识别CH340

https://lightningleader.github.io/posts/4.html

首先正常开启树莓派,不要插入CH340,然后进入树莓派桌面,打开命令行,输入命令lsusb,可以查看本机的USB设备列表,以及USB设备的详细信息。

然后插入CH340,再次运行lsusb命令,这个时候再看界面。可以明显看出多了一个设备,后面的设备详情也明确表示这个是CH340,这就表明树莓派正确识别到了插入的CH340。

接着在命令行输入命令 ls -l /dev/tty*

不出意外的话最后一个就是你插入的ch340,然后就记住这个黄色字体即/dev/ttyUSB0。这里的USB0也可能是USB1,这个是不确定的。

到了这里就代表你的树莓派可以正常识别CH34,下面就是写代码来验证效果了。

树莓派4B如何使用串口与外部进行通信

https://blog.csdn.net/weixin_42108484/article/details/104039992

硬件串口 (PL011) mini串口
/dev/ttyAMA0 /dev/ttyS0
硬件串口有单独的波特率时钟源,性能好,稳定性强 mini串口功能简单,稳定性较差,波特率由CPU内核时钟提供,受内核时钟影响
分配给蓝牙模块使用的 性能较差的mini串口是分配给GPIO串口 TXD0(GPIO14)、RXD0(GPIO15)

相比树莓派零、1、2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置参考。

树莓派 4 UART 多串口配置通信

https://blog.csdn.net/weixin_40796925/article/details/107907991

展示所有串口命令

$ dtoverlay -a | grep uart
pi@raspberrypi:~ $ dtoverlay -a | grep uart
midi-uart0
midi-uart1
miniuart-bt
uart0
uart1
uart2
uart3
uart4
uart5

GPIO14 = TXD0 -> ttyAMA0
GPIO0 = TXD2 -> ttyAMA1
GPIO4 = TXD3 -> ttyAMA2
GPIO8 = TXD4 -> ttyAMA3
GPIO12 = TXD5 -> ttyAMA4

GPIO15 = RXD0 -> ttyAMA0
GPIO1 = RXD2 -> ttyAMA1
GPIO5 = RXD3 -> ttyAMA2
GPIO9 = RXD4 -> ttyAMA3
GPIO13 = RXD5 -> ttyAMA4

NodeJs示例程序

const SerialPort = require('serialport')
var port = new SerialPort('/dev/ttyUSB0', {
baudRate: 9600, //波特率
dataBits: 8, //数据位
parity: 'none', //奇偶校验
stopBits: 1, //停止位
flowControl: false
}, false); // this is the openImmediately flag [default is true]

//指令监听
port.on('open', function () {
port.write('main screen turn on ', function (err) {
if (err) {
return console.log('Error on write: ', err.message);
}
console.log('send success');
});
port.on('data', function (data) {
console.log('data received: ' + data);
});
});

//打开错误将会发出一个错误事件
port.on('error', function (err) {
console.log('Error: ', err.message);
});

这里的/dev/ttyUSB0还可以替换成/dev/ttyAMA1