树莓派 串口通信

十六进制数据传输效果:

使用树莓派硬件串口前,一般都需要先配置串口,基本步骤如下:

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() 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值