首页 文章

Python Arduino串口通讯

提问于
浏览
1

所以我在Python和Arduino Uno之间的串行通信存在问题 . 我让Python通过串行通信将数字38(连同其他数字)发送到Arduino,然后返回到Python .

我发送的数组是:

[230, 0, 0, 0, 38]

它打印出来的数组(使用print()时)是:

bytearray(b'\xe6\x00\x00\x00&

&符号是因为在bytearray的打印中存在一个奇怪的细微差别,当数字介于某个范围之间时(抱歉我记不起该范围),它以ASCII而不是十六进制打印出来,所以数组我是发送到Arduino应该仍然拥有所需的所有信息 .

我通过以下方式收到Arduino中的信息:

char values[5];    
Serial.readbytes(values, 5);

一旦arduino发现了这些信息,我就会使用Serial.write将它发送回Python,在那里我打印出来以确保我收到了正确的信息 . Python中收到的输出是:

b'\xe6\x00\x00\x00\xf6'

其中0xe6是230(正确)而0xf6是246是不正确的,它应该是38的十六进制值,即0x26 .

有没有人有任何关于如何解决这个问题的建议?任何建议或帮助将不胜感激!

编辑:发现我的问题,我不小心错误地减去'0',因为有一点我认为我必须将信息从ASCII转换为十六进制,但事实证明我没有 . 谢谢您的帮助!

1 回答

  • 0

    test.ino

    char buffer[10] = {0,0,0,0,0,0,0,0,0,0};
    void setup(){
        Serial.begin(9600);
    }
    void loop(){
        Serial.println(Serial.readBytes(buffer,5));
    }
    

    test.py

    import serial
    s=serial.Serial("COM5",timeout=5)
    time.sleep(5) # wait a couple seconds
    s.write(b"\xe6\x00\x00\x00&")
    # or alternatively
    # s.write(bytes(bytearray([0xe6,0x00,0x00,0x00,0x26])))
    print(repr(s.read(1000)));
    

    这是最小代码示例的样子......它也应该工作......

相关问题