Le recomiendo que comience configurando los XBees en el modo AT "Serial Wire". Esto convierte a los XBees en una conexión serial simple entre los Arduinos. A partir de ese momento, usas Serial.print () / Serial.write () y Serial.read () como si los Arduinos estuvieran conectados directamente entre sí por cables.
Nombremos XBees XBee_uno y XBee_mega para los siguientes pasos. Probablemente ya hayas completado los tres primeros, pero los estoy escribiendo por completo para ayudar a otros que puedan tener esta pregunta.
-
Use X-CTU para configurar ambos XBees en modo AT (esto puede requerir un nuevo firmware o conjunto de funciones, aunque la Serie 1 XBees creo que solo necesita la configuración de un parámetro)
-
Establezca que ambos XBees utilicen la misma ID de PAN; configure uno para que sea el coordinador y el otro para que sea un enrutador / dispositivo final. De nuevo, es posible que necesite una actualización de firmware / conjunto de funciones para esto. No importa cuál es el coordinador, siempre que uno sea el coordinador y el otro sea un enrutador / dispositivo final.
-
Establezca la velocidad en serie de ambos XBees en un valor conocido, p. ej. 9600 bps, sin paridad, 8 bits de parada de datos 1
Ahora configúralos para que se envíen unos a otros. Esto completa la configuración de "Serial Wire".
-
En X-CTU, lea el SH y el SL de cada uno (es decir, el número de serie alto / el número de serie bajo)
-
Para XBee_uno, configure DH y DL al valor de SH y SL respectivamente desde XBee_mega
-
Para XBee_mega, establezca DH y DL al valor de SH y SL respectivamente desde XBee_uno
-
Guarda la configuración en XBees.
En este punto, los XBees están configurados para funcionar como un par de cables virtuales entre los puertos serie de los Arduinos.
Código de muestra:
//on the sender side
void setup() {
Serial.begin(9600);//this has to match the serial speed you configured for the respective XBee
}
void loop() {
Serial.write(20); //or the value you want to send
}
//on the receiver side
int received;
void setup() {
Serial.begin(9600);//this has to match the serial speed you configured for the respective XBee
}
void loop() {
if (Serial.available()) {
received=Serial.read();
}
}
Como alternativa para XBees más antiguos, puedes leer la dirección MY de cada XBee y luego configurarla de la siguiente manera:
- Para XBee_uno: establezca DH = 0, DL = el MY de XBee_mega
- Para XBee_mega: establezca DH = 0, DL = el MY de XBee_uno
Esto funciona tanto con XBees Serie 1 como con Serie 2, pero tiene la desventaja de que las direcciones MY pueden cambiar al apagar y encender los XBees. El método anterior utiliza los números de serie únicos de XBees (SH / SL), por lo que no se ve afectado.
Shameless plug: Si desea utilizar otras funciones avanzadas de XBees, como transmitir o usar más de dos XBees, deberá usar el modo API en lugar de AT. Tuve que luchar un poco con él, así que reuní las herramientas, los artículos y los consejos que me resultaron útiles: enlace