开辟线程进行pc(ubuntu)和arduino串口通信的python程序

#!/usr/bin/env python
#coding=utf-8
import serial
import time
import threading
import glob

inhead = 'RECV'			#接收数据头
outhead = 'SEND'		#发送数据头
	
class SerialData(threading.Thread):#创建threading.Thread的子类SerialData
	def __init__(self):
		threading.Thread.__init__(self)		#初始化线程
	def open_com(self, port, baud):			#打开串口
		self.ser = serial.Serial(port, baud, timeout = 0.5)
		return self.ser
	def com_isopen(self):  						#判断串口是否打开
		return self.ser.isOpen()
	def send_data(self, data, outhead = outhead):	#发送数据
		self.ser.write(outhead + data)	
	def next(self):  									#接收的数据组  
		all_data = ''							
		#if inhead == self.ser.read(1) :
		all_data =  self.ser.readline()		#读一行数据
		return  all_data
	def close_listen_com(self):					#关闭串口
		return self.ser.close()
	
if __name__ == '__main__':
	try:
		rec_data = SerialData()  				#为串口开辟线程  
		allport = glob.glob('/dev/ttyACM*')  #搜索匹配字符 ‘/dev/ttyACM’的设备
		port = allport[0]  							
		baud = 9600  
		openflag = rec_data.open_com(port, baud) #打开串口
		if openflag:
			print 'i open %s at %s successfully!'%(allport[0], baud)
		rec_data.send_data('---I am the data from pc to mcu ,now i am back to pc !:)')#发送数据
		while True:  
			com_data = rec_data.next()			
			if not com_data == '':
				print 'Look what i got :%s'%(com_data)
		rec_data.close_listen_com()#关闭串口
		
	except KeyboardInterrupt:			
		rec_data.close_listen_com()#关闭串口
		if not rec_data.com_isopen():#判断串口是否关闭
			print '''i..........closed........the serial......
							i........am ...........dead......!!!!!!'''
		
	
	
	
	
	
	
	
	
	
	
	
	
	


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值