ArduinoPython鲁棒串行通信p

2024-06-28 19:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在设置一个健壮的协议,用Python通过串行端口从Arduino板读取数据(从加速度计)。 我现在使用的是python3.4,但我可以回到以前的版本。在

现在,代码还在工作,直到我把加速度计摇得厉害。此时我收到此错误:

b'\xf08\xf8\x15\xf8\xf3|\xf0\x15N\xe8\xf7'
(14576, 5624, -3080, -3972, 19989, -2072)
b'<8\xb0\x08\xdc\x1cY\xed$Sb\xf1'
(14396, 2224, 7388, -4775, 21284, -3742)
b'\xac&\xbe\xedRA\xdc\xf2'
Traceback (most recent call last):
  File "C:\Python34\test_4_serial.py", line 57, in <module>
    pacchetti=unpack('hhhhhh', last_received)
struct.error: unpack requires a bytes object of length 12
>>> 

我使用了this solution,并将其改编为Python3.4(在字符前面添加了b):

^{pr2}$

数据由电路板以简单格式发送(Arduino代码):

        Serial.write((uint8_t)(ax & 0xFF));Serial.write((uint8_t)(ax >> 8)); 
        Serial.write((uint8_t)(ay & 0xFF));Serial.write((uint8_t)(ay >> 8)); 
        Serial.write((uint8_t)(az & 0xFF));Serial.write((uint8_t)(az >> 8)); 
        Serial.write((uint8_t)(gx & 0xFF));Serial.write((uint8_t)(gx >> 8)); 
        Serial.write((uint8_t)(gy & 0xFF));Serial.write((uint8_t)(gy >> 8)); 
        Serial.write((uint8_t)(gz & 0xFF));Serial.write((uint8_t)(gz >> 8)); 

        //Serial.write("\r");
        Serial.write("\n");

我假设我的协议不健壮,或者我在解析过程中犯了一些错误,但是我无法理解。 非常感谢你的帮助, 米歇尔


Tags: 代码协议错误serialaxarduinowriteaz
1条回答
网友
1楼 · 发布于 2024-06-28 19:34:58

看看:

https://kentindell.wordpress.com/2015/02/18/micrcontroller-interconnect-network-min-version-1-0/

这是一个健壮的协议,它使用字节填充来标记帧开始,因此如果接收器不同步,它会自动在正确的点重置。那里也有一个Python实现,还有一个“hello world”程序,它在Arduino和PC上运行

相关问题 更多 >