ESP 8266 Pourquoi cherchez vous à vous compliquer l'existance en NodeMCU Application Android Incluse !

Portrait de brossden

Sincèrement je ne suis pas convaincu du tout de la simplicité qu'apporte de firmware nodemcu il faut utiliser une autre langage, un autre logiciel de développement pas très simple selon mon goût et en plus il faut flasher le module ESP8266 qui d'après ce que je vois n'est pas très simple et nécessites des bidouillages supplémentaires.
Pour programmer plus simplement ce module ESP8266 je trouve que la libraire qui lui est dédiée et nettement plus simple:

Pour utiliser cette librairie il suffit d'ouvrir Arduino cliquez sur "Fichier" - "Préférences" et dans le champs "Aditionnal Board Manager URLs" rajouter ce lien :
"http://arduino.esp8266.com/stable/package_esp8266com_index.json"

Dans l'onglet "Outils" puis "Type de carte" Puis "Gestionnaire de carte"

Dans Type  selectionnez "TOUT"

enfin chercher ESP8266, en général tout en bas,  selectionnez ce cadre  et cliquez sur "Installer" 

Une fois la mise jour faite Cliquez sur "Fermer"

Ainsi vous pouvez trouver de nouveaux type de carte Esp8266 dont "Generic ESP8266 Module" convient parfaitement au développement sous Arduino classique Vous aurez même de nouveaux exemples d'utilisation de ce module.

Pour vous soumettre le programme équivalent au LUA voici ma solution qui n'est pas forcément la meilleure :

 /*  Le serveur affectera les sorties GPIO0 et GPIO2 selon les requètes du client :
 *    http://server_ip/o0=0 affectera GPIO0 à l'état bas
 *    http://server_ip/o0=1 affectera GPIO0 à l'état haut
 *    http://server_ip/o2=0 affectera GPIO2 à l'état bas
 *    http://server_ip/o2=1 affectera GPIO2 à l'état haut
 *    http://server_ip/?    lecture de l'état des sorties GPIO0 et GPIO2
 *    
 *  L'adresse Ip du module ESP8266 sera envoyée sur la sortie série du module
 *  dès que celui-ci sera connecté
 */

#include <ESP8266WiFi.h>
//Définition des varaibles globales et constantes
 int val0;
 int val2;
 const char* ssid = "Votre SSDI"; // Le nom de votre réseau Wifi
 const char* password = "Votre Clef WEP";

// Creation d'un serveur Web sur le port standard 80

WiFiServer server(80);

void setup() {
  // Création d'un port série à 115200 bauds
  Serial.begin(115200);
  delay(10);
 
  // Affectations des port GPIO0 et GPIO2 en sorties et à l'état bas
  pinMode(0, OUTPUT);
  digitalWrite(0, 0);
 
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  // Connection au réseau WiFi
  Serial.println();
  Serial.println();
  Serial.print("Connection au réseau Wifi :");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connectee");
 
  // Démarrage du Serveur
  server.begin();
  Serial.println("Serveur demarre");

  // Envoie de l'adresse IP sur le port série
  Serial.println("Adresse Ip du serveur :");
  Serial.println(WiFi.localIP());
  }

void loop() {
  // Vérification de la connection d'un client
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Attente des datas du client
 
  while(!client.available()){
    delay(10);
  }
 
  // Lecture de la requête du client
  String req = client.readStringUntil('\r');
   
  // Interprétation de la requète
 
  if (req.indexOf("/o0=0") != -1)
    {val0 = 0;}
  if (req.indexOf("/o0=1") != -1)
    {val0 = 1;}
  if (req.indexOf("/o2=0") != -1)
    {val2 = 0;}
  if (req.indexOf("/o2=1") != -1)
    {val2 = 1;}

    // Affectation des variables aux sorties correspondantes
   digitalWrite(2, val2);
   digitalWrite(0, val0);

   //Lecture de l'état des sorties
  if (req.indexOf("/?") != -1)
  {
     val0 == digitalRead(0);
     val2 == digitalRead(2);  
  }

  // Création de la page HTML en réponse à la requête
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n La led0 est ";//nGPIO is now ";
  s += (val0)?"Allumee   ":"Eteinte   ";
  s += " La led2 est ";
  s += (val2)?"Allumee   ":"Eteinte   ";

  // Envoie de la réponse au client
  client.print(s);
  client.flush();
  Serial.println(s);
  delay(1);

  //Déconnection du client
  client.flush();
}
Pour utiliser ce programme j'ai écris un APK que je vous donnerai en téléchargement mais il suffit d'un navigateur pour le commander.

Admettons que l'adresse IP du module ESP8266 soit 192.168.0.22

http://192.168.0.22/?           : pour connaitre l'état des sorties
http://192.168.0.22/o0=0    : pour éteindre la Led sur GPIO0
http://192.168.0.22/o0=1    : pour allumer  la Led sur GPIO0
http://192.168.0.22/o2=0    : pour éteindre la Led sur GPIO2
http://192.168.0.22/o2=1    : pour allumer  la Led sur GPIO2

Il est assez facile de transformer la page de retour avec des boutons sur la page Web de retour pour piloter directement ces sorties

Voilà ma solution mais je ne veux en aucun cas dire que cette solution est meilleure mais juste dans la continuité de la logique Aduino.

Merci encore à ce site et à Alex surtout qui fait un bouleau de fou et super interessant !         

L'application Android est ici : #LedOnOFF