Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


materiel:esp8266:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
materiel:esp8266:accueil [2017/02/23 22:33]
resonance [Serveur Web #2]
materiel:esp8266:accueil [2019/04/04 09:21] (Version actuelle)
resonance [Avec le logiciel Arduino]
Ligne 1: Ligne 1:
 ====== ESP8266 ====== ====== ESP8266 ======
  
-{{:materiel:esp8266:esp-wemos-d1-mini.jpg?400|}}+{{:materiel:esp8266:esp-wemos-d1-mini.jpg?400&nolink|}}
  
-L’**ESP8266** est un micro-contrôleur pas cher (entre 4 et 10€) avec connexion WiFi intégrée, produit par les fabricants Espressif et AI-Thinker. Depuis 2014, une communauté s'est créé autour de cet appareil pour le documenter et le rendre accessible, notamment en rendant possible la programmation du micro-contrôleur via le logiciel //open source// [[logiciels:arduino|Arduino]]. +L’**ESP8266** est un micro-contrôleur pas cher (entre 4 et 10€) avec connexion WiFi intégrée, produit par les fabricants Espressif et AI-Thinker. Depuis 2014, une communauté s'est créée pour le documenter et le rendre accessible, notamment en rendant possible la programmation du micro-contrôleur via le logiciel //open source// [[logiciels:arduino|Arduino]]. 
  
 On peut se servir du module pour :  On peut se servir du module pour : 
   * **Créer un serveur Web**, pour visualiser les données d'un capteur sur un téléphone mobile ou un ordinateur via le navigateur Web ou bien pour lui envoyer des commandes comme fermer la porte du garage ou arroser les plantes (pour une utilisation un peu classique)   * **Créer un serveur Web**, pour visualiser les données d'un capteur sur un téléphone mobile ou un ordinateur via le navigateur Web ou bien pour lui envoyer des commandes comme fermer la porte du garage ou arroser les plantes (pour une utilisation un peu classique)
 +  * **Communiquer avec un serveur Web**, pour envoyer ou recevoir des données sur le Web, à partir d'un site. Exemple avec [[http://www.arduinesp.com/thingspeak|thingspeak]].
   * **Créer un réseau maillé**, où chaque module envoie et reçoit des informations des autres. Voir notre projet [[projets:clod:accueil|City Lights Orchestra Device (CLOD)]].   * **Créer un réseau maillé**, où chaque module envoie et reçoit des informations des autres. Voir notre projet [[projets:clod:accueil|City Lights Orchestra Device (CLOD)]].
   * **Créer des connexions sans fils**, et donc envoyer et recevoir des informations par le WiFi en passant par d'autres méthodes que le navigateur Web, par communications UDP/TCP/OSC par exemple, qui sont interfaçables avec beaucoup de langages de programmations et logiciels.   * **Créer des connexions sans fils**, et donc envoyer et recevoir des informations par le WiFi en passant par d'autres méthodes que le navigateur Web, par communications UDP/TCP/OSC par exemple, qui sont interfaçables avec beaucoup de langages de programmations et logiciels.
 +
 +<WRAP group>
 +<WRAP half column>{{youtube>IQVKGAU8jcA?medium}}</WRAP>
 +<WRAP half column>{{youtube>dd-Wumz1Igo?medium}}</WRAP>
 +</WRAP>
  
  
-{{youtube>IQVKGAU8jcA?medium}} 
 ===== Caractéristiques ===== ===== Caractéristiques =====
   * Documentation technique : {{:materiel:esp8266:esp8266-datasheet.pdf|ESP8266 Datasheet}}   * Documentation technique : {{:materiel:esp8266:esp8266-datasheet.pdf|ESP8266 Datasheet}}
Ligne 22: Ligne 27:
 L'ESP8266 est disponible en plusieurs versions, il faut donc veiller à prendre celle qui convient le mieux. L'ESP8266 est disponible en plusieurs versions, il faut donc veiller à prendre celle qui convient le mieux.
 <WRAP group> <WRAP group>
-<WRAP half column> +<WRAP half column>{{:materiel:esp8266:esp-family-modules1.png?600|}}</WRAP> 
-{{:materiel:esp8266:esp-family-modules1.png?600|}}</WRAP> +<WRAP half column>{{:materiel:esp8266:esp-family-modules2.jpg?600|}}</WRAP>
- +
-<WRAP half column> +
-{{:materiel:esp8266:esp-family-modules2.jpg?600|}}+
 </WRAP> </WRAP>
 +
 +Pour débuter, nous vous conseiller deux cartes prêtes à être programmée, c'est-à-dire avec un composant de communication série qui communiquera avec l'ordinateur et le logiciel Arduino :
 +
 +<WRAP group>
 +<WRAP half column>//Development Board// intégrant l'ESP-12E, comme la Wemos D1, NodeMCU, HUZZAH d'Adafruit \\
 +{{:materiel:esp8266:esp-wemos-d1.jpg?600|}}</WRAP>
 +<WRAP half column>//Wemos mini// \\ {{:materiel:esp8266:d1-mini-esp8266-board-sh_fixled.jpg?600|}}</WRAP>
 </WRAP> </WRAP>
  
-Nous vous conseillons pour débuter de choisir une carte prête à être programmée (//Development Board//) intégrant l'ESP-12E, comme la Wemos D1 ou des équivalents au NodeMCU ou l'HUZZAH d'Adafruit : + 
-{{:materiel:esp8266:esp-wemos-d1.jpg?600|}}+ 
 + 
  
 ==== Alimentation ==== ==== Alimentation ====
Ligne 42: Ligne 53:
  
 {{:materiel:esp8266:esp-pinout-esp12e.png?600|}} {{:materiel:esp8266:esp-pinout-esp12e.png?600|}}
 +
 +
 +**Wemos D1**
 +{{:materiel:esp8266:wemos-r2-vs-r1-pinouts.png?800|}}
 ===== Configuration ===== ===== Configuration =====
 On peut programmer l'ESP8266 avec plusieurs langages : commandes AT, ESP8266 SDK, Lua (NodeMCU), C/C++ (Arduino), microPython, Javascript. Nous retiendrons ici la méthode la plus familière en utilisant Arduino. Pour les autres méthodes, suivez ces liens : [[http://www.kloppenborg.net/blog/microcontrollers/2016/08/02/getting-started-with-the-esp8266|getting-started-with-the-esp8266]], [[https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/overview|adafruit-esp8266-breakout]]. On peut programmer l'ESP8266 avec plusieurs langages : commandes AT, ESP8266 SDK, Lua (NodeMCU), C/C++ (Arduino), microPython, Javascript. Nous retiendrons ici la méthode la plus familière en utilisant Arduino. Pour les autres méthodes, suivez ces liens : [[http://www.kloppenborg.net/blog/microcontrollers/2016/08/02/getting-started-with-the-esp8266|getting-started-with-the-esp8266]], [[https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/overview|adafruit-esp8266-breakout]].
Ligne 53: Ligne 68:
  
 ==== Avec le logiciel Arduino ==== ==== Avec le logiciel Arduino ====
 +Voir si besoin cette page d'[[https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/downloads?view=all#using-arduino-ide|Adafruit]].
 +
   * Installer le logiciel Arduino   * Installer le logiciel Arduino
   * Ouvrir le logiciel et les "Préférences" (Menu Fichier > Préférences)   * Ouvrir le logiciel et les "Préférences" (Menu Fichier > Préférences)
Ligne 63: Ligne 80:
   * Par mesure de sécurité, vous pouvez aussi diminuer la vitesse d'importation du programme, cela pose parfois des problèmes   * Par mesure de sécurité, vous pouvez aussi diminuer la vitesse d'importation du programme, cela pose parfois des problèmes
       * exemple de vitesse "Upload Speed 57600"       * exemple de vitesse "Upload Speed 57600"
 +  * Installer des bibliothèques avec des exemples (Menu Croquis > Inclure une bibliothèque > Gérer les bibliothèques > Taper esp8266)
 +
 +{{ :materiel:esp8266:esp-install-libs.png?600 |}}
 +
  
 <WRAP center round info 80%> <WRAP center round info 80%>
Ligne 68: Ligne 89:
 </WRAP> </WRAP>
  
 +Le microgiciel de l'ESSP8266 peut également être mis à jour par le wifi, directement depuis l'interface d'arduino. Cette fonctionnalité est décrite étape par étape[[https://projetsdiy.fr/arduinoota-ota-mise-jour-sans-fil-ide-arduino-programmes-esp8266/| dans ce tutoriel]].
  
 +
 +<WRAP center round info 80%>
 +Si la vitesse de transfert est souvent plus rapide que par USB, il peut arriver dans le cas d'une boucle principale ne contenant pas de //delay()// ou //yield()// que l'IDE d'arduino échoue à contacter l'ESP8266. L'ajout d'un //delay(20)// suffit souvent à rétablir cette fonctionnalité.
 +</WRAP>
 ==== Avec une carte Arduino ==== ==== Avec une carte Arduino ====
 Vous pouvez aussi utiliser ces modules pour ajouter une connexion Wi-Fi à un projet utilisant déjà une Arduino. Vous pouvez aussi utiliser ces modules pour ajouter une connexion Wi-Fi à un projet utilisant déjà une Arduino.
Ligne 77: Ligne 103:
  
  
-===== Exemples =====+<WRAP center round important 80%> 
 +Sur d'autres cartes, pour téléverser le code, il faut appuyer sur deux boutons suivant un ordre. Par exemple sur la carte d'Adafruit HUZZAH : appuyer sur le bouton GPIO, puis RESET, relâcher ensuite RESET, puis GPIO. 
 +</WRAP>
  
-==== Faire clignoter la LED ==== 
-Rien d'original si ce n'est que la LED intégrée au module est sur la sortie n°2. À savoir, la variable "BUILTIN_LED" permet de s'affranchir du numéro physique de la sortie.  
- 
-<code cpp> 
-int led = 2; 
- 
-void setup() {                 
-  pinMode(led, OUTPUT);      
-} 
- 
-void loop() { 
-  digitalWrite(led, HIGH); 
-  delay(1000); 
-  digitalWrite(led, LOW); 
-  delay(1000); 
-} 
-</code> 
- 
- 
-==== Plusieurs LED ==== 
-  * {{:materiel:esp8266:esp-wemosd1-shematics.pdf|}} 
- 
-Sur la carte Wemos D1, les numéros de sortie sont un peu différents, par exemple ici pour les sorties 13, 12 et 11 Arduino classiques, ici il s'agit de 14, 12 et 13 (ou on peut aussi écrire D13, D12, D11). 
- 
-{{:materiel:esp8266:esp-pwm-pins.png|}} 
- 
-<code cpp> 
-const int led1 = 14; //D11 
-const int led2 = 12; 
-const int led3 = 13; 
- 
-//PWM : 10 bits 
- 
-int brightness = 0;        // how bright the LED is (0 = full, 512 = dim, 1023 = off) 
-int fadeAmount = 5;        // how many points to fade the LED by 
-const int delayMillis = 10;// how long to pause between each loop 
- 
-void setup() { 
-  pinMode(led1, OUTPUT);  
-  pinMode(led2, OUTPUT);  
-  pinMode(led3, OUTPUT);  
-} 
- 
-void loop() { 
-  // set the LED brightness 
-  analogWrite(led1, brightness); 
-  analogWrite(led2, brightness); 
-  analogWrite(led3, brightness); 
- 
-  // increment/decrement the brightness for the next loop 
-  brightness = brightness + fadeAmount; 
- 
-  // limit to 10-bit (0-1023) 
-  if (brightness < 0) brightness = 0; 
-  if (brightness > 1023) brightness = 1023; 
- 
-  // reverse the direction of the fading at each end 
-  if (brightness == 0 || brightness == 1023) { 
-    fadeAmount = -fadeAmount; 
-  } 
- 
-  // pause so you can see each brightness level 
-  delay(delayMillis); 
-} 
-</code> 
-==== Serveur Web ==== 
-Éteindre ou allumer une LED avec le navigateur Web. L'ESP8266 crée un réseau Wi-Fi, sur lequel va se connecter un ordinateur ou un téléphone mobile. Il suffit ensuite d'ouvrir le navigateur Web et d'entrer dans la barre d'adresse, l'adresse suivante : http://192.168.4.1/OFF pour éteindre la LED ou bien http://192.168.4.1/ON pour l'allumer. 
- 
-{{:materiel:esp8266:esp-webserver.png?1000|}} 
- 
-<code cpp> 
-/* 
-  ESP8266 - Web Server 
- *   
-  Connect your computer to the Wi-Fi Network "Bonjour_IOT" with "12345678" password 
-  Open your favorite Web browser and enter "192.168.4.1/OFF" to switch off the Builtin LED or 
-  192.168.4.1/ON" to switch it on 
- *   
- */ 
-  
-#include <ESP8266WiFi.h> 
- 
-WiFiServer server(80); // Initialize the server on Port 80 
- 
-int LED_PIN = 2; 
- 
-void setup() { 
-  pinMode(LED_PIN, OUTPUT); 
-  WiFi.mode(WIFI_AP); // Our ESP8266-12E is an AccessPoint 
-  WiFi.softAP("Hello_IOT", "12345678"); // Provide the SSID and password 
-  server.begin(); // Start the HTTP Server 
-  Serial.begin(115200); // Start communication between the ESP8266-12E and the monitor window 
-  IPAddress HTTPS_ServerIP= WiFi.softAPIP(); // Obtain the IP of the Server 
-  Serial.println(); 
-  Serial.print("Server IP is: "); // Print the IP to the monitor window 
-  Serial.println(HTTPS_ServerIP); 
-} 
- 
-void loop() { 
-  WiFiClient client = server.available(); 
-   
-  if (!client) { 
-    return; 
-  } 
-   
-  Serial.println("Somebody has connected :)"); 
-   
-  //Read what the browser has sent into a String class and print the request to the monitor 
-  //String request = client.readString(); 
-  String request = client.readStringUntil('\r'); 
-   
-  //Looking under the hood 
-  Serial.println(request); 
-   
-  // Handle the Request 
-  if (request.indexOf("/OFF") != -1) digitalWrite(LED_PIN, HIGH); 
-  else if (request.indexOf("/ON") != -1) digitalWrite(LED_PIN, LOW); 
-   
-  client.flush(); //clear previous info in the stream 
-  client.print("ok"); // Send the response to the client 
-  delay(10); 
-  Serial.println("Client disconnected"); // Looking under the hood           
-} 
-</code> 
- 
- 
-==== Serveur Web #2 ==== 
-Même chose avec un peu plus de contrôle. 
- 
-{{:materiel:esp8266:esp-webserver-url.png?1000|}} 
- 
-<code cpp> 
-/* 
- * Access Point (AP) Web Server 
-  
- * This example demonstrates how to turn the ESP8266 into an access point (AP), and serve up web pages to any connected client. 
-  
- * From https://learn.sparkfun.com/tutorials/esp8266-thing-development-board-hookup-guide/example-sketch-web-server 
-*/ 
- 
-#include <ESP8266WiFi.h> 
- 
-// Pin Definitions 
-const int LED_PIN = 2; // LED 
-const int ANALOG_PIN = A0; // The only analog pin on the Thing 
-const int DIGITAL_PIN = 12; // Digital pin to be read 
- 
-WiFiServer server(80); 
- 
-void setup()  
-{ 
-  // Pins 
-  Serial.begin(115200); 
-  pinMode(DIGITAL_PIN, INPUT_PULLUP); 
-  pinMode(LED_PIN, OUTPUT); 
-  digitalWrite(LED_PIN, LOW); 
-   
-  // WiFi 
-  WiFi.mode(WIFI_AP); 
-  WiFi.softAP("Hello_IoT", "12345678"); // Provide the (SSID, password); . 
-  server.begin(); 
-} 
- 
-void loop()  
-{ 
-  // Check if a client has connected 
-  WiFiClient client = server.available(); 
-  if (!client) { 
-    return; 
-  } 
- 
-  // Read the first line of the request 
-  String req = client.readStringUntil('\r'); 
-  Serial.println(req); 
-  client.flush(); 
- 
-  // Match the request 
-  int val = -1; // We'll use 'val' to keep track of both the 
-                // request type (read/set) and value if set. 
-  if (req.indexOf("/led/0") != -1) 
-    val = 1; // Will write LED low 
-  else if (req.indexOf("/led/1") != -1) 
-    val = 0; // Will write LED high 
-  else if (req.indexOf("/read") != -1) 
-    val = -2; // Will print pin reads 
-  // Otherwise request will be invalid. We'll say as much in HTML 
- 
-  // Set GPIO5 according to the request 
-  if (val >= 0) 
-    digitalWrite(LED_PIN, val); 
- 
-  client.flush(); 
- 
-  // Prepare the response. Start with the common header: 
-  String s = "HTTP/1.1 200 OK\r\n"; 
-  s += "Content-Type: text/html\r\n\r\n"; 
-  s += "<!DOCTYPE HTML>\r\n<html>\r\n"; 
-  // If we're setting the LED, print out a message saying we did 
-  if (val >= 0) 
-  { 
-    s += "LED is now "; 
-    s += (val)?"on":"off"; 
-  } 
-  else if (val == -2) 
-  { // If we're reading pins, print out those values: 
-    s += "Analog Pin = "; 
-    s += String(analogRead(ANALOG_PIN)); 
-    s += "<br>"; // Go to the next line. 
-    s += "Digital Pin 12 = "; 
-    s += String(digitalRead(DIGITAL_PIN)); 
-  } 
-  else 
-  { 
-    s += "Invalid Request.<br> Try /led/1, /led/0, or /read."; 
-  } 
-  s += "</html>\n"; 
- 
-  // Send the response to the client 
-  client.print(s); 
-  delay(1); 
-  Serial.println("Client disconnected"); 
- 
-  // The client will actually be disconnected  
-  // when the function returns and 'client' object is detroyed 
-} 
-</code> 
- 
- 
-==== Send OSC to Pure Data ==== 
- 
-<code cpp> 
-/*  
-  Send OSC messages to PD 
- *   
-  Examples : OSC/ESP8266SendMessages 
- */ 
- 
-#include <ESP8266WiFi.h> 
-#include <WiFiUdp.h> 
-#include <OSCMessage.h> 
-//#include <Streaming.h> 
- 
-int status = WL_IDLE_STATUS; 
-char ssid[] = "linksys"; 
-char pass[] = ""; 
-WiFiUDP udp; 
- 
-const IPAddress outIp(192,168,1,110); // MASTER IP  
-const unsigned int outPort = 9999;    // MASTER PORT 
- 
-void setup() { 
-  Serial.begin(115200); 
-  Serial.println(); Serial.println(); 
-  Serial.print("Connecting to "); 
-  Serial.println(ssid); 
-   
-  WiFi.begin(ssid, pass); 
- 
-  while (WiFi.status() != WL_CONNECTED) { 
-    delay(500); 
-    Serial.print("."); 
-  } 
-  Serial.println(""); 
-  printWifiStatus(); 
-} 
- 
-void loop() { 
-  // SEND OSC 
-  OSCMessage msg("/test"); 
-  msg.add("Hello from ESP8266"); 
-  udp.beginPacket(outIp, outPort); 
-  msg.send(udp); 
-  udp.endPacket(); 
-  msg.empty(); 
-  delay(500); 
-} 
- 
-void printWifiStatus() { 
-  // print the SSID of the network you're attached to: 
-  Serial.print("SSID: "); 
-  Serial.println(WiFi.SSID()); 
- 
-  // print your WiFi shield's IP address: 
-  Serial.println("WiFi connected"); 
-  Serial.println("IP address: "); 
-  Serial.println(WiFi.localIP()); 
- 
-  // print the received signal strength: 
-  long rssi = WiFi.RSSI(); 
-  Serial.print("signal strength (RSSI):"); 
-  Serial.print(rssi); 
-  Serial.println(" dBm"); 
- 
-  Serial.println("Starting UDP"); 
-  udp.begin(localPort); 
-  Serial.print("Local port: "); 
-  Serial.println(udp.localPort()); 
-} 
-</code> 
- 
-==== Receive OSC from Pure Data ====  
  
 +===== Exemples =====
 +Tous les codes des exemples ici : {{:materiel:esp8266:esp8266_codes.zip|}}
  
-<code cpp> +  * [[.:out:|Sorties]]  
-// Pd > bundle and typed message > packOSC > udpsend > routeur Wi-Fi +  * [[.:webserver:|Serveur Web]
-// ESP8266 > OscBundle  +  [[.:communications:|Communications]en UDP/OSC avec Pure Data 
-  +  * [[.:blynk:|Blynk]] : communication avec un téléphone portable et l'application "Blynk"
-#include <ESP8266WiFi.h> +
-#include <WiFiUdp.h> +
-#include <OSCMessage.h> +
-#include <OSCBundle.h> +
-#include <OSCData.h> +
-  +
-int status = WL_IDLE_STATUS; +
-char ssid[= "linksys";          // your network SSID (name) +
-char pass[] = "";                 // your network password +
-  +
-// A UDP instance to let us send and receive packets over UDP +
-WiFiUDP Udp; +
-  +
-const unsigned int localPort = 8888;        // local port to listen for UDP packets (here's where we send the packets) +
-  +
-OSCErrorCode error; +
-unsigned int ledState = LOW;              // LOW means led is *on* +
-  +
-void setup() { +
-  pinMode(BUILTIN_LED, OUTPUT); +
-  digitalWrite(BUILTIN_LED, ledState);    // turn *on* led +
-  WiFi.begin(ssid, pass); // Connect to WiFi network +
-  while (WiFi.status() != WL_CONNECTED) { +
-    delay(500); +
-  } +
-  Udp.begin(localPort); +
-+
-  +
-void ledOut(OSCMessage &msg) { +
-  ledState = msg.getInt(0); +
-  digitalWrite(BUILTIN_LED, ledState); +
-+
-  +
-void loop() { +
-  OSCBundle bundle; +
-  int _size = Udp.parsePacket(); +
-  if (_size > 0) { +
-    while (_size--) { +
-      bundle.fill(Udp.read()); +
-    } +
-    if (!bundle.hasError()) { +
-       bundle.dispatch("/led", ledOut); +
-    } else { +
-      error = bundle.getError(); +
-    } +
-  } +
-+
-</code>+
/home/resonancg/www/wiki/data/attic/materiel/esp8266/accueil.1487885617.txt.gz · Dernière modification: 2017/02/23 22:33 de resonance