====== ESP 8266 ====== == Matériel apporté par 3615 == * un ESP par participant * quelques composants électroniques de base (LEDS, switchs, etc…) * un routeur sur lequel tout le monde pourra se connecter pour télécharger les ressources * un laptop pour projeter la présentation et montrer le manips == Si possible, fourni par le fablab == * un vidéoprojecteur * du net =) (ce serait quand même super pratique, même un clé 4G) == Pour chaque participant == * un ordinateur portable * un cable mini-us * Softs: Arduino == Pour économiser la bande passante locale == * installer l'ide arduino >= 1.6.8 [https://www.arduino.cc/en/Main/Software] * Fichier|preference|parametres| gestionnaire de cartes supp|http://arduino.esp8266.com/stable/package_esp8266com_index.json * ajouter l'esp (Outil/type de carte/Gestionnaire de carte/chercher esp8266/ajouter) * sinon, le guithub et le tuto : [https://github.com/esp8266/Arduino] ===== Intro ===== On va voir la puce, ce qu'elle sait faire.\\ On va voir une façon de le faire (y en a d'autres).\\ On va la triturer une peu.\\ ===== Le hardware ===== Tour d'horizon des caractéristiques de la puce ADC - 1 seule, 1024 valeurs de 0 a 1V. GPIO - 16 théorique attention a n°16 en pull down attention a n°0 et n°2 qui servent a la prog n°1 et n°3 rx-tx 6 reellement utilisables. notées 1..16 ou D1..Dx Wifi 20 ans de fonctionnement dans le milieu hostile de la bande libre. BT existe en 2 goûts, apple et pas apple qui s'aiment pas. Superbe portée avec un bon routeur, ajustable. Mesure de puissance dispo. Suffit d'un tel pour paramétrer. Frequence: 80Mhz, 4ns entre 2 loop. Prix a peu près 2 euros... Electronique - 3.3V, 215mA crête. Différents formfactor, quelles différences pour quelles utilisations ESP01 ESP11 NodeMcu - peu de pattes ESP12 - tres plat - lire les pattes au dos. besoin d'un FTDI (usb -> serie TTL 3.3v) Wemos - avec des pattes et l'USB shield relais - cool shield lipo - cool shield oled... pas encore réussi grand chose ... LoLin - des pattes, USB, plus gros ... plein d'autres formes, quasi le même chip au centre matos qui va bien avec * Leds multicolores [[Matos_Ws2812_LedsMulticolores|WS2812]] * relais statique * Regulateur 3.3V [[matos_ams1117|AMS1117]] * Pilote de moteur pas à pas - [[matos_DRV8834|DRV8834]] source de matos : Aliexpress, gotronic, adafruit, etc ... ===== La Doc ===== Au débuts était la chine :-). Et la chaîne de compilation était ardue à faire fonctionner, une VM a installer. Puis la communauté arduino est passée par là. Ce qu'en dit le Web. * https://en.wikipedia.org/wiki/ESP8266 * le fondeur - http://espressif.com/en/support/download/documents * Les examples dans l'IDE Arduino ===== Exemples d'utilisation ===== Relais pilotés à distance, serveur web, etc... La liste est longue, nous en ferons un tour d'horizon. La boite à lampe malade - relais statique boites moteur - boites loupiotes - osc Ouvre porte garage - relais std. Trouble - 200 esp, fabrique de carte (Topo Guillaume) Adler - pilote steppers - [http://wiki.3615senor.org/doku.php?id=projet_adler] == Spécificités logicielles (diff avec les autres machins) == temps réel moins stable qu'un arduino. Parfois interrompu par les échanges de trames de la stack ip le watchdog déclenche dés qu'on est trop long. Nécessite un dev un peu spécifique automates d'états mesure des temps. construire ses pages html, pêcher les réponses dans les trames, autoreload. interruptions Un raspi aura plus de puissance de calcul mais mais ++ cher mais pas d'ADC plus hackable mais ++ gourmand en elec plus linux mais - d'espoir d'en faire fonctionner sur pile. Un arduino est plus simple plus stable plus solide mais pas de wifi plus gros plus 5V moins de mémoire... ==== Librairies ==== == Compatibilité : pas toutes == * certaines libs utilisent des spécificitées arduino * certaines libs ont l'air portées puis cassées. == Celles qu'on à testées == * Libs ESP8266WiFis liées au wifi * Libs ESP8266 spécificitées internes, timers & co * [[matos_ws2812_ledsmulticolores|Ws2812]] - leds multicolores * SoftwareSerial serie sur toutes les lignes ou presque * Servo * OSC == Sécurité == * au niveau wifi - WPA2-PSK cablé. * au niveau appli - tout dépend de celui qui fait l'appli. * au bas niveau - tout dépends de la confiance en celui qui les fait * potentiellement à la mercie des chinois. ===== Code simple ===== Les mains dans le cambouis: préparer l'IDE d'Arduino chargement du package lié à la puce NodeMCU 1.0 (ESP-12E) 80Mhz 4M 115200 Compiler les exemples fournis dans l'ide Modifier les exemples Compatibilité avec les libs arduino WS2812 - leds tricolores pilotables. Libs communes, libs spécifiques, libs... a voir. Se connecter à un réseau existant automatiquement Se retrouver sur le réseau Wifi SSID/pwd Cli+AP LAN MAC/IP Connect Udp Tcp Internet OSC - HTTP par le texte. pas de routage entre les interfaces. ===== Code complexe ===== L'exemple d'un code complexe créé par Emmanuel Patoux, de 3615 Señor, pour un spectacle de la compagnie Tricyclique Dol appelé "Trouble". L'ESP exploité à 100% de ses possibilités. Environ 200 puces ont été utilsées sur la création. ===== Le firmata CrabESP ===== Du code de Trouble a été tiré une version plus générique qui permet de créer très facilement des réseaux d'objets. Présentation de ce morceau de code qui permet de configurer les choses sans une seule ligne de code, puis mise en pratique. Crab mets dans ce soft tout ce qui lui à été utile... Ceci est une première tentative de documentation. Une fois satisfaisante, cette doc sera publiée, ainsi qu'une première version publique du code. === Le principe: === Une fois compilé (attention aux bibliothèques) et uploadé sur l'ESP, tous les réglages de l'ESP se feront via la page web qu'il publie, ou par une simple connexion série. === Connexion === * Se connecter directement au réseau émis par l'ESP: le mot de passe est pour l'instant "BenAdmin", l'ip à taper dans le navigateur http://192.168.5.1 ou http://192.168.4.1 * Connexion série à 115200 bauds * Connexion automatique au réseau local en remplissant "Mines.h" (SSID et Password) === Notice générale === Chaque paramètre pourra être modifié selon la logique suivante: des caractères ou des chiffres + une lettre sont envoyés à l'ESP selon un schéma précis. Les chiffres et les caractères sont les paramètres, la lettre finale indique à quel endroit affecter cela. La syntaxe à respecter ainsi que le nombre de caractères possibles à rentrer sont indiqués à chaque fois en face du réglage actuel, sous une forme syntétique qui préserve la mémoire de l'ESP. **Exemple:** *2N : xxN Node -> il faut lire la ligne à l'envers. Cette ligne indique le numéro de nœud (**Node**). Pour régler le numéro de nœud, il faut envoyer deux chiffres (**xx**) suivis de la lettre **N** en majuscule. Le réglage actuel et '2'. Si je veux le changer et le passer en 33, je vais passer la commande 33N . === Liste des paramètres === * **xxN Node** : Le numéro de noeud de l'ESP, permet de l'identifier dans le réseau maillé sans se préoccuper de son IP. Prends deux chiffres en paramètre. Ex, 22N pour définir le nœud 22. Le réseau WIFI généré aura alors le SSID **BEN_22** * **xR** : définit le mode de fonctionnement de l'ESP. Un certain nombre de ces modes est très spécifique à des projets de 3615 Senor, et donc très lié à du matériel (DFPlayer, stepper, ou lego NXYT). Le mode qui nous intéressera ici car le plus générique sera le mode 6. Il faut donc envoyer la chaîne: **6R** * **xv** : on définit ici le degré de précision des logs affichés dans la console série, de 1 à 3. Comme conseillé, 2 est une bonne valeur, on enverra donc **2v** si le réglage est différent. * **"x31x"D** : le nom du réseau wifi auquel doit se connecter l'ESP. Doit être entre guillemets et peut contenir 31 caractères. Exemple: **"monReseauWifi"D** * **"x63"d** : le mot de passe de connexion du réseau auquel se connecter ci-dessus. Peut contenir jusqu'à 63 caractères. * **"x14x"J** : la ou les cibles des instructions OSC émises par l'ESP. Doivent être entre guillemets. La commande **"BEN_051"J** définira comme cible l'ESP qui a le nœud 51. Si les deux ESP (l'actuel et la cible) ne sont pas connectés au même réseau local, il faudra connecter l'un des ESP au réseau de l'autre (voir les deux instructions précédentes). La commande **"BEN_*"J** enverra l'instruction à tous les ESP. La commande **"BEN_1*"J** enverra l'instruction à tous les ESP ayant un numéro de noeud compris entre 10 et 19. * **"x14x"yyK** : nous définissons ici l'instruction qui sera envoyée à l'ESP cible définit précédemment. L'instruction sera envoyée lorsque la pin D5 sera reliée au ground (typiquement un switch). L'instruction en elle même prends place entre les guillemets et peut être longue de 14 caractères. Elle sera de l'un des types marqué ci-après comme //Actions// et **sera précédée d'un underscore**. **yy** correspond à l'état du switch: 01 = pushed, 02 = released. Ex: la commande **"_104O"01K** veut dire: envoyer à l'ESP définit par la commande J de passer sa pin 4 à l'état haut lorsque la pin D5 est reliée au ground. Plus clairement, un switch relié à la pin D5 d'un ESP allumera une led branchée sur la D4 d'un autre ESP. * La même formule que précédemment permettra d'envoyer des commandes via OSC à la cible lorsque une valeur analogique est modifiée sur la pin ADC. Il faudra cette fois utiliser la terminaison 03K (au lieu de 02K ou 01K). Grâce à un jeu de majuscules et de minuscules, il est possible de transformer la valeur analogique récupérée en valeurs RVB par exemple. Si la valeur ADC est 1234, XxXxx se transformera en 12123, XxxxX en 12341, XxXx70 en 121270. * **xxxP** : correction de la puissance d'émission. * **xxxm** : sauf erreur, uniquement utile en utilisation de spectacle, car seuil de déclenchement. * **xxxxF** : fonction perso, par exemple 0001F 'clique' le relais pour ouvrir la porte du garage. * **ccnnxxxxf** : pour le développeur //ACTIONS// * **yyxxxxS** : permet de contrôler un servo, branché sur la pin indiquée plus bas sur la page (Servo pins:{ , }). Ce paramètre doit se définir à la compilation. yy est le numéro du moteur, xxxx la valeur à atteindre. Le timing est donné par l'instruction suivante. * **yyxxxxl** : définit le temps pour atteindre la position définie par S, juste au dessus. yy est le numéro du moteur). * * **rrggbbnnL** : permet de contrôler un ruban de led RGB type Neopix. Les valeurs RGB sont proposées de 1 à 99, les nn indiquent l'id de la led (position sur le ruban). Branchement du neopix à ajouter. * **xxxxW** : pause de xxxx millisecondes. * **xnnO** : permet de passer un pin digital à l'état haut (si x vaut 1) ou bas (x vaut 0). nn correspond au numéro de la pin. * **xxxxnno** : idem que précédemment, mais pour une valeur en PWM, comprise entre 0 et 1024. nn correspond au numéro de la pin. Suivent un certain nombre d'informations relatives aux réglages: état du switch, de la connection wifi, adresse ip, cycles de l'eeprom, infos sur les moteurs. [[https://github.com/CrabTerlDc/TroubleEsp]]