树莓派与Arduino通过GPIO串口通讯
(感谢大佬,传送门)
首先,启用串口ttyS0
在root权限下
#raspi-config
进入系统配置界面
选择Interfacing options
在下方看到Serial
回车
先选No,禁用串口登陆
然后Yes,启用串口ttyS0
接着OK,并重启
重启后
#ls -la /dev/
查看是否有ttyS0
第二,关闭console
root权限下
#systemctl stop serial-getty@ttyS0.service
#systemctl disable serial-getty@ttyS0.service
这两行指令之后,重启
重启后
#systemctl mask serial-getty@ttyS0.service
然后连线
树莓派 RX ————> Arduino的 TX
树莓派 TX ————> Arduino的 RX
树莓派 GND ————> Arduino的 GND
写一个py文件
先展示下Python3的
#Communication.py
#Python3.7.3
import serial
ser = serial.Serial("/dev/ttyS0", 9600, timeout=1) #初始化串口,9600为波特率,timeout为读取时间延迟
ser.flushInput()
def main():
while True:
ser.write("s".encode("utf-8")) #向串口发送信息“s”,python3需要编码
recv = ser.readall().decode() #接收串口信息,并将二进制信息解码
print(recv)
ser.flushInput() #清空串口缓存区
if __name__ == '__main__':
main()
然后Python2的
#Communication.py
import serial #import serial module
ser = serial.Serial('/dev/ttyACM1', 9600,timeout=1); #open named port at 9600,1s timeot
#try and exceptstructure are exception handler
try:
while 1:
ser.write('s');#writ a string to port
response = ser.readall();#read a string from port
print response;
except:
ser.close();
然后运行代码
如果不行是因为ttyS0串口权限不够
可以
#chmod 666 /dev/ttyS0
但这样每次都需要给他一次权限,很麻烦
所以修改.rules文件让他自动获取
#vim /etc/udev/rules.d/99-com.rules
Tip:这里的rules文件可能名字不一样,请自行到该文件夹下去ls下
在里面加上
KERNEL=="ttyS0*", OWNER="root", GROUP="tty", MODE="0666"
保存退出重启就好了。ヾ(๑╹◡╹)ノ"