Projets:Perso:2015:LedTube:ESP12Q

Module ESP-12-Q
Ce module porte, dans un boitier métallique faisant office de blindage, un chip WIFI ESP8266 de "Espressif Systems" (chinois)

Ce module est exceptionnel pour ce qu'il permet de faire à son prix. Il a une bonne portée.

Il peut par exemple créer un hotspot wifi (soft access point), et permettre à jusqu'à 4 devices de s'y connecter simultanément (marche au moins avec android, win).

Il y a du firmware dans le ESP8266. Il peut-être mis à jour.

Ce chip ESP8266 peut être utilisé de plusieurs façons.


 * Soit on dialogue avec le module par la liaison série (typiquement à 115200 bauds) en envoyant des commandes AT. Mais cela suppose d'avoir flashé dans le module le firmware AT de Espressif, ou un de ses dérivés
 * Soit on développe sois même du firmware, on le compile, on le flashe dans le module. Ca permet de faire une solution WIFI sans processeur externe.

Les modules dans le distributeur sont flashés avec un firmware type "internet of things" qui permet de se connecter directement avec un browser internet au module. J'ai pas perdu de temps avec ça. Pour les geeks.

En ce qui concerne le projet LedTube, je l'ai utilisé en mode AT.

J'ai donc reflashé le module, avec le firmware AT officiel de Espressif.

Ce qu'on appelle des commandes AT : c'est juste un protocole où on envoie vers le module des commandes par la liaison série en ASCII et on obtient des réponses. On peut ainsi par exemple depuis un PC, avec un simple logiciel terminal (terraterm par exemple) dialoguer "à la main" avec le module, envoyer des trames TCP, UDP, recevoir des trames. C'est pratique pour le debuggage. Ensuite dans le circuit final, votre processeur fait la même chose.

Selon le niveau électrique sur des broches en sortie de RESET, le module va booter normalement, ou bien passer en mode re-flashage. Voir plus bas

Voici les images utiles pour réaliser un schéma électronique

Le schéma interne du module
Important :
 * On voit qu'il y a une pull up sur le RESET. Pour bloquer en RESET, mettre cette broche à 0V.
 * La broche ENABLE est active à 3.3V.
 * On voit que le GPIO2 est connecté au + par LED + résistance. Si bien qu'il n'est pas requis de le contrôler en sortie de RESET car il aura le bon niveau (Haut).

[[Media:ESP12Q_schematic_esp-12e.png|Schéma interne au module]]

Comment je l'ai intégré dans mon schéma


Selon le niveau électrique sur des broches en sortie de RESET, le module va passer en mode normal (flash boot mode), ou bien re-flashage (Uart download mode). Dans le schéma,
 * UART Download Mode est le mode re-flashage
 * Flash Boot mode est le mode de fonctionnement normal, le processeur exécute son application

Librairie Eagle pour l'intégrer à votre schéma : ESP12Q.lbr

Documents Essentiels

 * Le protocole AT, : 4A-ESP8266__AT Instruction Set__EN_v1.4.pdf
 * Le 0B-ESP8266__Hardware_User_Guide__EN_v1.1.pdf peut aider si on se pose des questions. Devenu deux documents. Datasheet et System Description.

Logiciels Essentiels

 * Le FLASH_DOWNLOAD_TOOLS_v1.2_150512 est l'outil pour reflasher le ESP8266 par sa liaison série
 * http://bbs.espressif.com/viewtopic.php?f=57&t=433
 * http://bbs.espressif.com/download/file.php?id=385


 * Les binaires pour le protocole AT (doivent être flashés car pas dedans par défaut)
 * esp_iot_sdk_v1.4.0_15_09_18.zip (les binaires sont dans le rep bin/at et bin/)
 * http://bbs.espressif.com/viewtopic.php?f=46&t=1702

Le flashage se fait par les broches TX, RX, sans contrôle de flux.

Terminal pour vérifier que le flashage a bien marché.
 * Tera Term (pas un outil de expressif)
 * http://ttssh2.osdn.jp/index.html.en

Pour les essais avec tera term, il faut changer setup>terminal>New-Line>Transmit>CR+LF

Et setup>terminal> cocher local echo est pratique.

Config de l'appli pour le flashage
Voici la config qui a marché pour moi, ce n'est surement pas la config optimale, mais elle fait le job



Exemple de dialogue exact
Pour une réception UDP transparente sur port 5125. Après ça, le module ressort sur sa liaison série tout ce qu'il reçoit en UDP de ceux qui se sont connectés sur le port 5125.

Cf 4A-ESP8266__AT Instruction Set__EN_v1.4.pdf

Cet exemple est précieux car il montre des choses non documentées par espressif : en particulier combien de \r\n il se met à répondre...

String envoyées (on doit rajouter"\r\n" à la fin de chaque chaîne)

char *wifiS[NB_WF_CMD_STARTUP] = { "ATE0", // do not echo, just reply ! "AT+CWMODE_CUR=2", // soft ap "AT+CIPMUX=0", // "AT+CWSAP_CUR=\"LEDTUBE\",\"\",5,0", "AT+CWDHCP_CUR=0,1", // softAP DHCP enable "AT+CIPAP_CUR=\"192.168.1.0\",\"192.168.1.0\",\"255.255.255.0\"", "AT+CIPSTART=\"UDP\",\"192.168.1.1\",5125,5125,0", //response : CONNECT\r\nOK\r\n "AT+CIPMODE=1" };

Ce qui est répondu exactement

char *expectedWifiReplieS[] = { "ATE0\r\r\n\r\nOK\r\n", "\r\nOK\r\n", "\r\nOK\r\n", "\r\nOK\r\n", "\r\nOK\r\n", "\r\nOK\r\n", "CONNECT\r\n\r\nOK\r\n", "\r\nOK\r\n" };