十六进制数据传输效果:
使用树莓派硬件串口前,一般都需要先配置串口,基本步骤如下:
1、修改 /boot/config.txt 文件,修改 dtoverlay 为 dtoverlay=pi3-miniuart-bt ,实现串口映射关系对换,可使用 ls -l /dev 命令查看。
2、禁用串口控制台功能
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
3、编辑 /boot/cmdline.txt ,修改其内容为:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
4、重启树莓派,使修改生效
串口通信实现代码:
# -*- coding: utf-8 -*
import serial
import binascii
import time
import _thread
# 打开串口
ser = serial.Serial("/dev/ttyAMA0", 9600)
# 为线程定义一个函数
def myWrite():
while(1):
msg = input()
try:
Hex_str = bytes.fromhex(msg) #文本转换Hex
#ser.write(msg.encode())
ser.write(Hex_str)
except Exception as e:
print ("输入格式错误")
print(e)
def main():
if ser.isOpen == False:
ser.open()# 打开串口
# 创建两个线程
try:
_thread.start_new_thread(myWrite,())
except Exception as e:
print ("Error: 无法启动线程")
print(e)
while True:
# 获得接收缓冲区字符
count = ser.inWaiting()
if count != 0:
# 读取内容并回显
#recv = ser.read(count).decode()
try:
recv = str(binascii.b2a_hex(ser.read(count)))[2:-1]#Hex转换成字符串
print("recv:",recv)
except Exception as e:
print ("接受格式错误")
print(e)
# 清空接收缓冲区
ser.flushInput()
# 必要的软件延时
time.sleep(0.1)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()