前言
树莓派3/4b的外设一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠,mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供。在树莓派4代中,由于板载蓝牙模块,因此这个硬件串口被默认分配给与蓝牙模块通信了,而把那个mini串口默认分配给了排针引出的GPIO Tx Rx。
提示:以下是本篇文章正文内容,下面案例可供参考
一、启动串口
在命令行中输入以下内容:
ls -l /dev
在没有配置过正常情况下看到的应该是:
serial1 -> ttyAMA0
此时,在终端输入:
sudo nano /boot/config.txt
在打开的文件最后面添加:
#ENABLE UART
enable_uart=1
保存退出后,重启树莓派;
reboot
在终端输入:
sudo raspi-config
根据以下步骤进行设置:
选择 Interfacing Options ->Serial ->no -> yes 关闭串口调试功能,打开串口
选择Interfacing Options
选择serial
再选择 no,禁用串口登录功能,将串口用于通信。
再选择 yes,启动串口硬件。
在命令行中输入以下内容:
ls -l /dev
在设置中启用串口后,会发现 /dev目录下变成了两个:
serial0 -> ttyS0 和 serial1 ->ttyAMA0
二、禁用蓝牙(硬件串口与mini串口默认映射对换)
在终端输入:
sudo nano /boot/config.txt
在打开的文件最后面添加:
(注意:树莓派4b也一样是pi3,但不知具体原因是啥)
dtoverlay=pi3-disable-bt
修改保存后重启树莓派:
reboot
三、查找是否有serial的包
在终端输入:
pip list
查找是否有serial的包,若没有,则在终端输入:
pip install serial
四、CH340分别连接树莓派与电脑
- CH340的USB口端连接电脑USB口
- CH340的5P插针分别与树莓派串口引脚相连
- VCC <——> VCC、RXD <——> TXD、TXD <——> RXD、GND <——> GND
五、python串口通信程序
# -*- coding: utf-8 -*
import serial
import time
# 打开串口,配置波特率为9600,电脑端接收数据波特率也应相同
ser = serial.Serial("/dev/ttyAMA0", 9600)
def main():
while True:
# 获得接收缓冲区字符
count = ser.inWaiting()
if count != 0:
# 树莓派读取电脑端发送数据,并将此数据重新发送至电脑端
recv = ser.read(count)
ser.write(recv)
# 清空接收缓冲区
ser.flushInput()
# 必要的软件延时
time.sleep(0.1)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()
六、C语言通信程序
//使用ch340实现树莓派和电脑端的通信,文件名“uartex.c”
#include<stdio.h>
#include<stdlib.h>
#include<wiringSerial.h>
int main(void)
{
int fd,n;
char a;
if((fd = serialOpen("/dev/ttyAMA0",115200))<0)//若无法通信,可检查更改串口波特率
{
printf("serial ERROR!!!\n");
}
printf("This is just for test================== BY WAN\n");
serialPuts(fd,"START NOW====>");
while(1)
{
printf("Please input:\n");
//键盘输入想要发送的数据,并发送
scanf("%c",&a);
if(a>0)
{
serialPutchar(fd,a);
}
//检测对端是否有数据发来,若有则打印出来
while(n=serialDataAvail(fd)>0)//检测兑端是否有数据
{
printf("====返回的数据为===>%c\n",serialGetchar(fd));//若有返回数据,则打印输出
}
}
return 0;
}
总结
通过CH340连接树莓派与电脑,在树莓派中运行Python或C语言程序,在电脑端打开串口助手即可验证是否通信成功。