簡體   English   中英

重新組裝從Arduino發送到Python的串行數據

[英]Reassembling Serial data sent from Arduino to Python

我試圖一次通過arduino上的Serial.write()發送六個整數,然后將它們發送給python。 到目前為止,我已經設法將Integers轉換為字節指針(我認為這就是名稱),並通過串行發送它們。 但是,當我嘗試在python端重新組裝它們時,我得到了一些我不希望看到的奇怪數字。

Arduino代碼:

int myInts[6]= {1455, 1446, 6766, 974, 365, 455};

void setup()
{
  Serial.begin(9600);
}
void loop()
{  

  byte *p = (byte)myInts;
  for(byte i = 0; i < sizeof(myInts); i++){
    Serial.write(p[i]);
  }
}

Python代碼

import argparse
import numpy
import time
import serial 
import struct

ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
    b = ser.read(4)

    i = struct.unpack('i' ,b)
    print(i)

輸出:

(-1090650113,)(285341695,)(10683141,)(-1090650177,)(285341695,)(10683141,)

謝謝!

維克

我將提供幾種選擇。 最簡單的是最后列出的。

您應該意識到的第一件事是int在兩個平台上的大小不同。 Arduino int是帶符號的16位int,-32768->32767。您的python int是32位int。 當然,返回的數字遠遠超出任何16位數字的范圍。

我會建議改變你的int在Arduino的,以unsigned int ,然后你的Python解壓格式字符串變成H (無符號短)。 或者,將Arduino保留為int並將python解壓縮格式字符串更改為'h'(短),看看是否對您有所幫助。 哦,當然,您應該更改為b = ser.read(2)因為這些現在都是2字節整數。

接下來,Arduino的Serial.write()方法支持一個字節,一個字符串或一個具有長度的緩沖區。 不是字節指針。 因此,盡管在我面前沒有Arduino可以測試,但我認為您應該使用命令的Serial.write(buf,len)形式並擺脫“字節指針”,我已經在任何Arduino文檔中都沒有提到過:

Serial.write(myInts, 12);

最后,最簡單的方法就是使用Serial.write(str)並發送一個字符串。 然后在python端,只需將字符串轉換為您選擇的整數類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM