samedi 4 juillet 2015

Allumer une led via le web

Il s'agit de lire un fichier du web pour allumer une led bien réelle. La petite carte Yun Arduino est mise à contribution. Elle est programmée en language C++, programme très simple livré dessous.

Cette carte met à profit des structures de communication avec le web via wifi. Son intégration dans un réseau local n'est pas traitée ici.
#include <Bridge.h>
#include <HttpClient.h>
char c = 0;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
}

void loop() {
  HttpClient client;
  client.get("http://sin.nexgate.ch/btn/btn.txt");
  while (client.available()) {
    c = client.read();
  }

  if (c == '1') {
    digitalWrite(13, HIGH);
  }
  else {
    digitalWrite(13, LOW);
  }
  delay(5000);
}

Lecture du code

Pour commencer on déclare la bibliothèque Bridge.h en ligne 1 Elle comporte les fonctions de communication entre les deux processeurs de la carte. Il y a celui qui exécute le programme décrit au-dessus et l'autre qui s'occupe de la communication avec le web.

Le seconde ligne déclare la bibliothèque HttpClient.h qui assure la mise en oeuvre des protocoles de communication via le web.

Ligne 3, variable c, globale et initialisée à 0.

Le segment setup() ne s'exécute qu'une seule fois
  • broche 13 de la carte est déclarée comme une sortie, capable donc de produire un  courant électrique. C'est sur cette broche qu'est connectée une led soudée sur la carte.
  • En ligne 7, cette led est forcée à LOW c'est à dire qu'on l'éteint.
  • Ligne 8, La communication entre processeurs est lancée.
Le segment loop() s'exécute indéfiniment
  • Ligne 12, déclaration d'un objet nommé client selon la classe HttpClient. La déclaration aurait sans doute due être globale comme la variable c. Pas d'importance.
  • Ligne 13, envoi d'une requête au fichier enregistré à l'URL http://sin.nexgate.ch/btn/btn.txt. Ce fichier texte contient "1" ou "0", c'est tout, indiquant l'état, allumé ou éteint, que l'on souhaite donner à la led.
  • Lignes 14, 15 et 16 : on attend qu'un caractère soit reçu par la liaison série entre processeurs. Le caractère transmis est "1" ou "0" selon ce qui est lu dans le fichier texte distant et est affecté à la variable c. La fonction client.available() est le nombre de caractères reçus, 1, et est décrémenté, 0, par la lecture client.read(). La répétitive while s'interrompt quand il n'y a plus de caractères à lire c'est à dire quand client.available() égale 0.
  • Vient ensuite l'alternative, lignes 18 à 23. Selon le caractère c, on allume - HIGH - ou on éteint - LOW - la led.
  • delay(5000) est une pause de 5s. Sans cette instruction une nouvelle requête suivrait et dans ce cas le serveur hébergeant le fichier finirait par refuser de répondre : Error 403.

Aucun commentaire:

Enregistrer un commentaire