zhangpan 2020-03-06
1. 查看可用串口命令
ls /dev/chesis/ -l
也可以使用 ls /dev/*USB* -l 查看,但是串口可能会发生改变,故使用chesis查看更为安全
2.需要安装及导入的包:
串口包:serial
结构体包:struct
c++数据类型包:ctypes
3.发送命令的代码:
import serial import struct import time from ctypes import * def func1(): portx = "/dev/chesis" bps=115200 timex=None ser=serial.Serial(portx,bps,timeout=timex) class MyStruct(Structure): _fields_ = [ ("head1", c_byte), ("head2", c_byte), ("v1", c_byte), ("v2", c_byte), ("v1_dire", c_byte), ("v2_dire", c_byte), ("res1", c_byte), ("res2", c_byte), ("res3", c_byte), ("res4", c_byte) ] mys = MyStruct() mys.head1 = c_byte(255) mys.head2 = c_byte(254) mys.v1 = c_byte(30) mys.v2 = c_byte(20) mys.v1_dire = c_byte(0) mys.v2_dire = c_byte(0) mys.res1 = c_byte(0) mys.res2 = c_byte(0) mys.res3 = c_byte(0) mys.res4 = c_byte(0) 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) ser.write(msg) # read data from serial #threading.Thread(target=ReadData,args=(ser,)).start() #ReadData(ser) ser.close() for i in range(200): time.sleep(0.1) func1()
4.接收串口返回的数据:
import time import struct from ctypes import * import serial def func2(): portx = ‘/dev/chesis‘ bps = 115200 timex = None ser = serial.Serial(portx, bps, timeout=timex) # while True: while True: msg = ser.read(12) if msg: print(‘the msg is:‘, msg) data = struct.unpack(‘BBBBBBBBBBBB‘, msg) # print(data) gyroz = data[6] * 256 + data[7] - 32756 v1 = data[2] v1_dire = data[3] v2 = data[4] v2_dire = data[5] print(‘the msg is:‘, data) elif msg == ‘exit‘: break ser.close() func2()