簡體   English   中英

如何將有效載荷發送到XBee

[英]How do I send a payload to an XBee

我已經在嘗試與XBee通信的嵌入式平台上實現了以下代碼。 執行以下代碼的嵌入式平台不是 xbee:

int main()
{
   char payload[12] = {0x61,0x88,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0xEC,0x00,0x00}
   payload[2] = 0x10;
   payload[9] = 0x01;
   char data = 'H'; // Send simple ASCII character to XBee
   payload[11]= data;

   while (1)
      sendByteofData(payload,12);
}

void sendByteOfData(char * payload, int len)
{
   int x;

   for (x=0;x<4;x++)
      // This function sends IEEE 802.15.4 frames, and I know it
      // works because they are detected in the [sniffer][3].
      send_IEEE_802_15_4_frame(payload,len);
   }

   payload[2] = payload[2] % 256 + 1;
   payload[9] = payload[9] % 256 + 1;

   if (payload[9] % 256 == 0 )
      payload[9] = 0x01;
   else
      payload[9] %= 256;
}

令我驚訝的是,以上代碼實際上從嵌入式平台成功地向XBee發送了一個字節。 但是,main()末尾的無限循環應該已經產生了字節流。

我的懷疑是我需要正確設置payload[2]payload[9] ,並且上面顯示的增量模256算法可能存在缺陷。

如何獲得連續的字節流?

一些想法...

  1. 使您的有效負載成為unsigned char數組,或者甚至更好的是uint8_t數組。
  2. 要更新有效負載[2]和有效負載[9],請簡化您的代碼:

     ++payload[2]; ++payload[9]; if (payload[9] == 0) payload[9] = 1; 
  3. 在發送之間添加延遲。 您甚至可能需要等待響應才能發送下一個字符。

由於它是無符號8位值的有效負載,因此它們會自動從255滾動到0。我假設您的有效負載[9]的特殊情況代碼正在嘗試從255滾動到1(而不是0)。

確保您的有效載荷不需要包含某種校驗和。 更新這兩個字節將對校驗和字節產生影響。

暫無
暫無

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

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