本文参考《爱上Raspberry Pi》第六章,同学们可以选择直接看书,本文只是把关键的部分提炼了出来,仅供大家参考~~~
一、定位串口
想要使树莓派和Arduino进行串口通信,首先要确定Arduino连在树莓派上的串口设备名,就像在Windows上打开设备管理器查看所连接的端口(COM)是多少一样。
与Windows的查看方式不同,树莓派等linux系统的设备管理是在/dev/目录下的,可以通过 ls /dev/tty*查看;
也可以直接在树莓派上的Arduino IDE的Serial Port中查看;
第一次连上一般都是 ttyACM0 ,之后如果进行过插拔,这个端口号可能会变,在编写代码和烧写程序的时候要记得调整。
二、串口通信
要让树莓派和Arduino通过串口通信,在Arduino端需要使用内置的Serial库,在树莓派端需要使用Python的pySerial串口通信模块。
安装Python的串口通信模块:
sudo apt-get install python-serial python3-serial
安装好通信模块之后,接下来就可以开始进行测试了。
首先打开Arduino IDE,把下面的代码输入到Arduino上,并进行编译和烧写;
void setup()
{
Serial.begin(9600); //定义波特率
}
void loop()
{
for (byte n = 0; n < 255; n++) {
Serial.write(n); //向串口写入n
delay(50); //延时0.05s
}
}
(这段程序把一个递增的数字序列发送到串口上。)
然后编写在树莓派上运行的Python脚本:
import serial
port = "/dev/ttyACM0"
serialFromArduino = serial.Serial(port,9600) //打开串口,连接到Arduino上
serialFromArduino.flushInput() //清空输入缓冲区
while True:
if (serialFromArduino.inWaiting() > 0):
input = serialFromArduino.read(1) //从串口缓冲区读入一个字节的数据
print(ord(input)) //用ord()函数把读入的字节数据转换为实际的数值
上面这段代码可以先使用vim 进行编辑,保存退出之后再用 python example.py 运行。
运行Python代码之后就可以看到命令行界面收到Arduino发送来的数据了。
注意:在创建Python代码文件的时候,一定要先使用sudo touch example.py 创建一个空文件出来,然后修改权限为777(sudo chmod 777 example.py ),之后再vim example.py 进去进行编辑;如果直接vim创建并编辑的话会因为权限问题导致不能保存,功亏一篑!
三、进一步学习
上面只是简单的介绍了如何使用 serial 串口通信模块,还有py脚本的编辑和运行,想要实现树莓派和Arduino IDE真正的串口通信(一发一收),可以参考《爱上Raspberry Pi》的P109-P111.
思路提示:
为了完成后期的物联网控制效果,我们大致要实现的功能就是能够通过串口收发数据来控制LED灯的开关,还要能获取到光强传感器感应到的值并且展示出来。
同学们可以先写一个Python脚本,先测试一下树莓派和Arduino的串口通信,实现LED灯的控制和光强值的获取,方便后期整合到自己的应用中。