A la découverte du NodeUCM / ESP8266

J'ai un problème à la maison. Mon four a un minuteur, mais celui ci sonne une fois que la temps de cuisson est terminé, sans arrêter la cuisson pour autant.

Comme je n'ai pas trop envie de détruire l'aspect extérieur de mon four (vous avez deviné, je suis marié !), j'envisage de mettre un relai entre le réseau électrique et mon four, si possible piloté par un arduino quelconque pour me décompter le temps et ouvrir le circuit le temps que nous l'aurons décidé.

C'est en cherchant des composants les moins chers possible que je suis tombé sur une carte d'IoT (Internet of Things / Les Objects connectés) qu'il pourrait être marrant d'essayer d'utiliser pour le cas présent.

En effet, la carte que j'ai identifiée possède un port USB et un port Wifi et ne coute(rait) que 2,79 € (port inclus).

D'après plusieurs forums, on peut toucher au firmware afin de travailler en commandes AT classiques, en Lua, voire même en port série émulé.

Le système pourrait aussi servir de mini serveur Web. (Mais, là, je m'avance peut-être un peu).

En tous les cas. J'ai décidé de casser ma tirelire ce matin.

Et je devrais recevoir l'objet d'ici quelques semaines…

nodemcu.com_images_thumbnail_c1s.jpg_450x300.jpg

Plus d'info : - http://nodemcu.com/index_en.html - https://battomicro.wordpress.com/2015/09/30/realisation-une-ouverture-de-portail-connectee-a-internet-avec-un-esp8266-wifi/

Ce projet vous intéresse ?

Si ce projet ou la prise en main de cette petite carte “Wifi” programmable vous intéresse, n'hésitez pas à vous faire connaître en envoyant un Email permanence.sunlab@gmail.com.

Première instal ?

Je vais essayer la procédure de prise en main décrite dans la video : https://www.youtube.com/watch?v=K1DE00LKfiY

En particulier, la librairie qu'il faut ajouter dans les préférences de IDE Arduino est :

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Configuration "Mini-Serveur Wifi"

La prise en main étant aisée, je m'attaque ensuite à du plus lourd: en particulier l'installation d'un mini serveur Wifi.

Le code trouvé sur internet est :

<CODE> ICI JE METS DU CODE </CODE>

#include <ESP8266WiFi.h>

const char* ssid = "NEUF_23A0";
const char* password = "********"; //put it here in clear

int ledPin = 13; // GPIO13
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");

}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

// Set ledPin according to the request
//digitalWrite(ledPin, value);

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Led pin is now: ");

  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
  client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");
  client.println("</html>");

  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}

J'obtiens alors sur la fenêtre “Serial Monitor” :

Sur Internet explorer depuis un PC ou mon téléphone portable, j'obtiens, si je me connecte à 192.168.1.59 :

Et enfin, si je clique sur Turn-On ou Turn-Off, j'obtiens les messages suivants sur Serial Monitor :

Et la PIN D7 (équivalent au PIN-13 “classique”), change bien de niveau 3V <⇒ 0V.

D'ailleurs à toute fin utile, voici reporté le pinout de la carte ESP612E :

pinout ESP8266-12E

Pour le projet de robotique du 1er Octobre 2016 à la Médiathèque, il sera intéressant d'utiliser la Pin 2 pour faire cligner la LED, plutôt que la Pin 13. Car c'est là où est branchée la LED bleu de la carte ESP8266-12E.

Sébastien LAMBERT, 2016/04/20 12:58

La carte à 2€77 demande un peu de bidouille pour la programmer; Il existe une carte de développement avec firmware à 5€76

Guillaume L'HERMITE, 2016/05/08 18:19

La carte est arrivée Vendredi 6 Mai

La Carte Lolin Wifi - NodeMCU

Je propose d'y jeter un oeil Mercredi soir prochain (11 Mai - permanence de 20H-23H), au Sunlab, 185 Avenue Leclerc, 78220 Viroflay. Avis aux amateurs.

Guillaume L'HERMITE, 2016/07/27 22:55

Test du 27/07/2016

#include <ESP8266WiFi.h>

const char* ssid = "freebox_Sunlab";
const char* password = "*********"; //put it here in clear

int ledPin1 = 2; // Ledbleue
int ledPin2 = 13; // GPIO7
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin1, OUTPUT);
  digitalWrite(ledPin1, LOW);
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, LOW);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");

}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

  int value = LOW;
  if (request.indexOf("/MOTOR=ON") != -1)  {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);
    value = HIGH;
  }
  if (request.indexOf("/MOTOR=OFF") != -1)  {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    value = LOW;
  }
  if (request.indexOf("/MOTOR=REV") != -1)  {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    value = LOW;
  }

// Set ledPin according to the request
//digitalWrite(ledPin, value);

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Ici je marque mon texte trop jolie ");

  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("<a href=\"/MOTOR=ON\"\"><button>Turn motor On </button></a>");
  client.println("<a href=\"/MOTOR=OFF\"\"><button>Turn motor Off </button></a><br />");
  client.println("<a href=\"/MOTOR=REV\"\"><button>Turn motor Reverse </button></a><br />");
  client.println("</html>");

  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}
Guillaume L'HERMITE, 2016/07/27 23:00

Si quelqu un pourra me mettre le code au clair… Je me suis emélé les pinceaux.

Guillaume L'HERMITE, 2016/11/01 22:10

Fabrice nous envoie le code suivant qui permet de modifier le nom du réseau de la carte (par défaut, il s'agit de ESPxxxx-blabla).

/*
 * Copyright (c) 2015, Majenko Technologies
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * * Redistributions of source code must retain the above copyright notice, this
 *   list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright notice, this
 *   list of conditions and the following disclaimer in the documentation and/or
 *   other materials provided with the distribution.
 *
 * * Neither the name of Majenko Technologies nor the names of its
 *   contributors may be used to endorse or promote products derived from
 *   this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/* Create a WiFi access point and provide a web server on it. */

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

/* Set these to your desired credentials. */
const char *ssid = "FABRICE_test";
const char *password = "IciChangerLeMotDePasse";

ESP8266WebServer server(80);

/* Just a little test message.  Go to http://192.168.4.1 in a web browser
 * connected to this access point to see it.
 */
void handleRoot() {
    server.send(200, "text/html", "<h1>You are connected</h1>");
}

void setup() {
    delay(1000);
    Serial.begin(115200);
    Serial.println();
    Serial.print("Configuring access point...");
    /* You can remove the password parameter if you want the AP to be open. */
    WiFi.softAP(ssid, password);

    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);
    server.on("/", handleRoot);
    server.begin();
    Serial.println("HTTP server started");
}

void loop() {
    server.handleClient();
}
Vous pourriez laisser un commentaire si vous étiez connecté.