Прием сигналов XBee на Arduino

Сторона А:

  • Arduino Uno R3 с экраном Wireless Proto с питанием от USB
  • С XBee Pro S1, DH 0 DL FFFF MY 0 API 0
  • Wireless Proto Shield имеет переключатель серийного номера в положении «микро».

сторона Б:

  • XBee Explorer USB, подключенный к ПК с программным обеспечением XCTU
  • С XBee Pro S1, DH 0 DL FFFF MY 0 API 0

(Когда я помещаю оба модуля XBee в платы проводника USB, подключенные к двум ПК, я могу отправить данные туда и обратно без проблем, поэтому я считаю, что настройки XBee хороши.)

Проблема

Теперь я хочу, чтобы Arduino перехватывал ввод со стороны B (отправлял с помощью терминала XCTU), но когда я что-то набираю в терминале, светодиод RSSI на стороне A просто включается на 5 секунд, но Arduino, похоже, не захватить любые данные, поскольку он не отправляет данные обратно, как должен (Serial.print("I received: ");

скетч:

int incomingByte = 0;

void setup() {
    Serial.begin(19200);  //Both XBee chips are configured at 19200 Baud
    Serial.print("start echo machine");  //This is received just fine on the B side
}


void loop() {
    if (Serial.available() > 0) {
        // Read the incoming byte:
        incomingByte = Serial.read();

        // Say what you got:
        Serial.print("I received: ");  //This never shows on the B-side
        Serial.println(incomingByte, DEC);
    }
}

Как решить эту проблему?


person Sebastian    schedule 07.02.2013    source источник
comment
В каком положении находится переключатель Serial Select?   -  person mbaytas    schedule 06.03.2013
comment
Выбор серийного номера находится в положении «Микро».   -  person Sebastian    schedule 07.03.2013


Ответы (2)


Вы должны использовать SoftwareSerial (RX, TX) для XBee и Serial для печати вывода на ПК. RX и TX SoftwareSerial должны быть подключены к контактам DOUT и DIN модуля в плате Wireless Proto:

#include <SoftwareSerial.h>

// Connect pin 10 of Arduino to DOUT of Wireless Proto shield
uint8_t ssRX = 10;

// Connect pin 11 of Arduino to DIN of Wireless Proto shield
uint8_t ssTX = 11;

SoftwareSerial nss(ssRX, ssTX);

void setup() {
  Serial.begin(19200);
  nss.begin(19200);
  Serial.println("Serial works");
}

void loop() {

  if (nss.available()){
    Serial.println("received packet:");
    for(int i=0;i<25;i++){
      Serial.print(nss.read(),HEX);
      Serial.print(",");
    }
    Serial.println();
   }
person Nicola    schedule 28.04.2013
comment
Какое совпадение, я как раз сам набирал ответ на эту проблему! Каковы преимущества режима API при использовании zigbee для некоторых базовых коммуникаций? В этом конкретном случае мне не нужны расширенные сетевые режимы. - person Sebastian; 29.04.2013
comment
Преимуществ у режима API много; по моему мнению, одним из лучших является то, что вы можете узнать исходный адрес пакета, это очень полезно в сенсорной сети... Однако вы можете посмотреть другие различия между режимами API и AT здесь: code.google.com/p/xbee-api/wiki/WhyApiMode - person Nicola; 29.04.2013

Многие платы требуют включения подтягивающего резистора на DIN. Согласно некоторым источникам, это подтягивание включено по умолчанию в модуле Digi Xbee.

Чтобы убедиться, что он включен или включить его:

Поместите свой модуль Xbee в проводник USB и используйте X-CTU для проверки конфигурации PR. DIN находится в бите 7 для Xbee Pro S1, поэтому в этом случае вам нужно, чтобы последний бит был равен 1.

Я написал так: 00000001

Затем вы конвертируете его в шестнадцатеричный формат (01 в моем случае) и записываете это значение в модуль Xbee с помощью X-CTU.

Так что это проблема электроники, а не проблема программирования.

person Sebastian    schedule 29.04.2013