juin 8

Envoyer une donnée entre Teensy et Xbee

Le pitch étant d’envoyer une phrase, ou une variable, entre 2 Teensy 3.1, relié chacun à un Xbee serie 1.

La connexion

  • 1 = 3.3 Volt –> vers pin 3.3 Volts du Teensy
  • 2 = Digital OUT —> vers pin 0 (RX1) du Teensy
  • 3 = Digital IN —> vers pin 1 (TX1) du Teensy
  • 10 = GND –> vers pin GND du Teensy

xbee-pins teensy31_front_pinout

 

Pour ma part, je n’ai pas eu besoin de programmer quoi que ce soit sur les Xbee.
J’ai un couple Teensy/Xbee sur mon PC fixe et un autre couple sur mon portable.

La programmation

J’ai vu beaucoup d’exemples divers de sketch Arduino ou Teensy, vers comme souvent, les gens n’indique pas la version de leur matos. Donc, j’ai fais ma petite sauce, qui fonctionne sur Teensy 3.1.

Envoie

/* Testé sur Teensy 3.1 */ 
#define HWSERIAL Serial1 // pin 0 et 1
void setup() {
HWSERIAL.begin(9600);
}
void loop() {
HWSERIAL.println("Hello"); //ln pour avoir un retour à la ligne après "hello"
delay(500);
}

Réception

/* Testé sur Teensy 3.1 et Xbee serie 1 */
#define HWSERIAL Serial1

void setup() {
HWSERIAL.begin(9600);
}
 
void loop() {
if (HWSERIAL.available())// si des données sont présentes
{
Serial.print(char(HWSERIAL.read())); // char ) caractère, rien ou int = code ASCII
} 
}//loop

 

Dans la console moniteur serie du récepteur, on récupère le mot ou la phrase envoyé.

OK mais le top c’est que ça serve à quelque chose. On va donc tacher d’envoyer une variable précise qui va déclencher l’allumage de la LED interne du Teensy.

/* Testé sur Teensy 3.1 et Xbee serie 1.
Xbee sur pin 0 et 1 du Teensy */
#define HWSERIAL Serial1
byte InSerie;

void setup() {
HWSERIAL.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
 
void loop() {

if (HWSERIAL.available())
{
byte InSerie = HWSERIAL.read();
Serial.println(InSerie);
if (InSerie == 'A')
{
Serial.print("recu");// pour vérification
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);  
}
}
}//loop

Amélioration

La fonction Print est plus dédié à l’affichage dans une console ou un afficheur LCD, lisible pour un humain.

Dans mon cas, je souhaite envoyer des valeurs, parfois sur plusieurs chiffres. dans ce cas, la fonction write et byte est préférable.

Envoie

#define HWSERIAL Serial1

void setup() {
HWSERIAL.begin(9600); 
}

void loop() {
HWSERIAL.write(1);
delay(1000);
HWSERIAL.write(0);
delay(1000);
}//loop

Réception

#define HWSERIAL Serial1
byte InSerie;

void setup() {
HWSERIAL.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
 
void loop() {

if (HWSERIAL.available()>0)
{
InSerie = HWSERIAL.read();
Serial.println(byte(InSerie) );
if (InSerie == 1)
{
digitalWrite(13, HIGH);
}
if (InSerie == 0)
{
digitalWrite(13, LOW); 
}
}
}//loop

La pour le coup, on peut commencer à vraiment commander des trucs entre les 2 teensy.

Notes sur la liaison série

Le protocole série n’envoie par des lettres et/ou des symboles mais des nombres, du code  binaire, hexadécimal… qui sont en correspondance.

Selon ce tableau, faire un Serial.write(‘a’); et Serial.write(97);  (97 en décimal = ‘a’) enverra le même code. On ne peux pas dire au Teensy de faire : si tu reçois ‘a’, fait ça et si tu reçois 97 fait ça; L’action sera la même.


Étiquettes : , ,
Copyright 2017. All rights reserved.

Ecrit 8 juin 2015 par Pit dans la catégorie "Teensy/Arduino

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

17 + quatre =