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
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
-
relais statique
-
Pilote de moteur pas à pas -
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.
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
Celles qu'on à testées
Libs ESP8266WiFis liées au wifi
Libs ESP8266 spécificitées internes, timers & co
-
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
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