• python 串口通讯


    1. 查看可用串口命令

      ls /dev/chesis/ -l

      也可以使用 ls /dev/*USB* -l 查看,但是串口可能会发生改变,故使用chesis查看更为安全

    2.需要安装及导入的包:

      串口包:serial

      结构体包:struct

      c++数据类型包:ctypes

    3.发送命令的代码:

     1 import serial
     2 import struct
     3 import time
     4 from ctypes import *
     5 def func1():
     6     portx = "/dev/chesis"
     7     bps=115200
     8     timex=None
     9     ser=serial.Serial(portx,bps,timeout=timex)
    10     class MyStruct(Structure):
    11         _fields_ = [
    12             ("head1", c_byte),
    13             ("head2", c_byte),
    14             ("v1", c_byte),
    15             ("v2", c_byte),
    16             ("v1_dire", c_byte),
    17             ("v2_dire", c_byte),
    18             ("res1", c_byte),
    19             ("res2", c_byte),
    20             ("res3", c_byte),
    21             ("res4", c_byte)
    22         ]
    23 
    24     mys = MyStruct()
    25     mys.head1 = c_byte(255)
    26     mys.head2 = c_byte(254)
    27     mys.v1 = c_byte(30)
    28     mys.v2 = c_byte(20)
    29     mys.v1_dire = c_byte(0)
    30     mys.v2_dire = c_byte(0)
    31     mys.res1 = c_byte(0)
    32     mys.res2 = c_byte(0)
    33     mys.res3 = c_byte(0)
    34     mys.res4 = c_byte(0)
    35     msg = struct.pack('bbBBBBBBBB', mys.head1, mys.head2, mys.v1, mys.v2, mys.v1_dire, mys.v2_dire, mys.res1, mys.res2, mys.res3, mys.res4)
    36     ser.write(msg)
    37     # read data from serial
    38     #threading.Thread(target=ReadData,args=(ser,)).start()
    39     #ReadData(ser)
    40     ser.close()
    41 
    42 
    43 for i in range(200):
    44     time.sleep(0.1)
    45     func1()

    4.接收串口返回的数据:

     1 import time
     2 import struct
     3 from ctypes import *
     4 import serial
     5 
     6 
     7 def func2():
     8     portx = '/dev/chesis'
     9     bps = 115200
    10     timex = None
    11     ser = serial.Serial(portx, bps, timeout=timex)
    12     # while True:
    13 
    14     while True:
    15         msg = ser.read(12)
    16         if msg:
    17             print('the msg is:', msg)
    18             data = struct.unpack('BBBBBBBBBBBB', msg)
    19             # print(data)
    20             gyroz = data[6] * 256 + data[7] - 32756
    21             v1 = data[2]
    22             v1_dire = data[3]
    23             v2 = data[4]
    24             v2_dire = data[5]
    25             print('the msg is:', data)
    26         elif msg == 'exit':
    27             break
    28     ser.close()
    29 
    30 
    31 func2()
  • 相关阅读:
    Coursera 高级数据结构与算法,北京大学
    heap 算法函数
    笛卡尔树 Cartesian tree
    POJ 1830 开关问题 异或高斯消元
    jmeterJSR223取样器和断言
    Flask JinJa2模板语法测试
    Python Flask Web 试题汇编<待续>
    jsDoc自动生成文档
    SQL 优化
    IO多路复用之select、poll、epoll的区别
  • 原文地址:https://www.cnblogs.com/yang220/p/12425064.html
Copyright © 2020-2023  润新知