• Python操作串口通信


    Python操作串口通信

    注意Linux下先要修改串口的权限:
    sudo chmod 777 /dev/ttyUSB0

    以下是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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    参考博客:

    https://www.cnblogs.com/zhengweizhao/p/8426826.html
    https://blog.csdn.net/xuzhexing/article/details/91043579

  • 相关阅读:
    15【react-Hook (下)】
    7.新增类型Symbol
    Mysql之执行计划
    【LeetCode】链表OJ题
    西南科技大学派森全套作业
    【LeetCode】2651.计算列车到站时间
    【数据结构】线性表之顺序表详解
    酷柚易汛ERP - 序列号盘点操作指南
    Python练手算法
    SUB-1G 无线收发芯片CC1101国产替代方案
  • 原文地址:https://blog.csdn.net/Tosonw/article/details/133895065