Python操作串口通信
注意Linux下先要修改串口的权限:
sudo chmod 777 /dev/ttyUSB0
以下是python代码:
python
# coding=utf-8
# 包:pyserial,pymysql
# 权限:sudo chmod 777 /dev/ttyUSB0
import serial
# import pymysql
import threading
import time
# x=serial.Serial('COM3',9600) # winsows系统使用com3口连接串行口
# x=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5) # 使用USB连接串行口
x=serial.Serial("/dev/ttyS4",9600,timeout=0.5) # Linux系统使用com4口连接串行口
def fasong():#发送函数
while True:
time.sleep(3)
myinput= bytes([0x01,0X03,0X00,0X00,0X00,0X01,0X84,0X0A])
#这是我要发送的命令,原本命令是:01 03 00 00 00 01 84 0A
x.write(myinput)
def jieshou():#接收函数
while True:
while x.inWaiting()>0:
myout=x.read(7)#读取串口传过来的字节流,这里我根据文档只接收7个字节的数据
datas =''.join(map(lambda x:('/x' if len(hex(x))>=4 else '/x0')+hex(x)[2:],myout))#将数据转成十六进制的形式
new_datas = datas.split("/x")#将字符串分割,拼接下标4和5部分的数据
need = new_datas[4]+new_datas[5];#need是拼接出来的数据,比如:001a
my_need = int(hex(int(need,16)),16)#将十六进制转化为十进制
sql = "INSERT INTO VOC_DATA(value,create_time)VALUES('"+str(my_need)+"',"+str(int(time.time()))+")"
print(sql)
# 使用 execute() 方法执行 SQL 查询
# 执行sql语句
# cursor.execute(sql)
# 提交到数据库执行
# db.commit()
if __name__== '__main__':
# 打开数据库连接
# db = pymysql.connect("localhost","root","123456789","voc" )
# 使用 cursor() 方法创建一个游标对象 cursor
# cursor = db.cursor()
t1 = threading.Thread(target=jieshou,name="jieshou")#线程1:不断的去请求数据
t2= threading.Thread(target=fasong, name="fasong")#线程2:不断地去接收数据
t2.start()#开启线程1
t1.start()#开启线程2
#import serial
#ser = serial.Serial('/dev/ttyS3') # 'COM3'
#ser.setBaudrate(9600)
#ser.setByteSize(8)
#ser.setStopbits(1)
#print(ser.portstr)
#data = ser.readline(0,'\r\n')
#data = ser.read(20)
#print(data)