3 개의 지그비, 2 개의 라우터 (지그비 S2C) 및 1 개의 코디네이터 (지그비 S2)로 구성된 설정을 만들었습니다. 라우터는 각각 2 개의 FSR 및 IMU (프레임 유형 : 지그비 전송 요청 및 패킷 크기 46 바이트)에서 데이터를 수집하는 arduino nano에 연결되어 arduino UNO에 연결된 코디네이터에게 보냅니다. 모든 Xbees는 API 모드 2이고 보드 속도는 115200입니다. "Simple Zigbee Library"라는 라이브러리를 사용하여 수집 된 모든 데이터를 코디네이터에게 보냅니다. 데이터 수집 및 전송은 패킷 손실이 발생한다는 것을 제외하고는 정상적으로 작동합니다. 나노의 샘플 데이터는 약 25Hz의 주파수에서 독립적으로 나타납니다. 코디네이터는 모든 루프에서 지그비에서 보낸 데이터를 읽으려고하지만 (물론 라이브러리를 사용하여), 불행하게도 약 40-45 개의 샘플 만받는 것으로 보입니다. (2 * xbees). 아무도 이것이 왜 일어나고 있는지 제안 할 수 있습니까? 가능한 한 데이터 손실이 적어서 동기를 달성 할 필요가 있습니다. 모든 종류의 도움을 주시면 감사하겠습니다.지그비 arduino 설정에서 데이터 패킷이 누락되는 이유는 무엇입니까?
P.S : 코디네이터가 각 루프의 한 xbee에서만 데이터를 읽는 것이 중요 할 수 있습니다.
감사합니다.void setup()
{
// Start the serial ports ...
Serial.begin(115200);
while(!Serial){;} // Wait for serial port (for Leonardo only).
xbeeSerial.begin(115200);
// ... and set the serial port for the XBee radio.
xbee.setSerial(xbeeSerial);
// Set a non-zero frame id to receive Status packets.
xbee.setAcknowledgement(true);
}
void loop()
{
// While data is waiting in the XBee serial port ...
while(xbee.available())
{
// ... read the data.
xbee.read();
// If a complete message is available, display the contents
if(xbee.isComplete()){
Serial.print("\nIncoming Message: ");
printPacket(xbee.getIncomingPacketObject());
}
}
delay(10); // Small delay for stability
// That's it! The coordinator is ready to go.
}
// Function for printing the complete contents of a packet //
void printPacket(SimpleZigBeePacket & p)
{
//Serial.print(START, HEX);
//Serial.print(' ');
//Serial.print(p.getLengthMSB(), HEX);
//Serial.print(' ');
//Serial.print(p.getLengthLSB(), HEX);
//Serial.print(' ');
// Frame Type and Frame ID are stored in Frame Data
uint8_t checksum = 0;
for(int i=10; i<p.getFrameLength(); i++){
Serial.print(p.getFrameData(i), HEX);
Serial.print(' ');
checksum += p.getFrameData(i);
}
// Calculate checksum based on summation of frame bytes
checksum = 0xff - checksum;
Serial.print(checksum, HEX);
Serial.println();
}
* 패킷 충돌 * 및 * 데이터 손상 *을 고려하셨습니까? 통신 프로토콜이 이러한 상황을 처리 할만큼 충분히 발전 했습니까? –
이 링크의 의미는 다음과 같습니다. 이러한 모듈 (MAC 및 PHY 계층)에서 사용되는 무선 장치는 충돌 회피 또는 CSMA/CA로 축약 된 반송파 감지 다중 액세스 사용을 지정하는 IEEE 802.15.4 표준에 의해 정의됩니다. /electronics.stackexchange.com/questions/36932/xbee-how-does-it-deal-with-collisions – Aniket
위대한,하지만 나는 그보다 더 높은 수준의 것을 염두에 두었습니다.* CSMA/CA *는 올바른 상황에서 충돌을 막을 수는 없지만 절대적으로 예방할 수 있습니다. * 더 높은 수준의 프로토콜 *은 각 패킷이 확인 응답을 받아야하며 * ACK *가 주어진 * timeout * 내에 수신되지 않으면 패킷이 다시 전송되도록합니다. 마지막으로 * ZigBee *와 함께 작업했지만 * Arduino *를 사용하지 않는다고 인정하지만 직접 구현해야했습니다. –