Le LUA est un langage qui prend peu de place mémoire et permet d'être installé sur ces petites bêtes
Différents modèles d'ESP8266
Modèle | ESP-01 | ESP-12E NodeMCU | Wemos D1 Mini |
Image | ![]() | ![]() | ![]() |
GPIOs | 4 (including TX and RX) | 11 | 11 |
ADC Pins | 1 | 1 | 1 |
Flash Memory | 1MB (upgraded version) | 4MB | 4MB |
USB to Serial Converter | X | ✓ | ✓ |
Taille | 24.75mm x 14.5mm | 48.55mm x 25.6mm | 34.2mm x 25.6mm |
ESP-01

- TXD/GPIO1 et RXD GPIO3 sont utilisés à des fins d'interfaçage,
- les broches Reset (RST) et Enable (CH_PD) ne peuvent pas être utilisées à d'autres fins,
- GPIO0 et GPIO2 sont utilisés lors du flashage du logiciel d'exploitation,
Programmer l'ESP-01
La série d'actions que vous devez faire pour programmer la puce est la suivante :- Assurez-vous que votre programmateur ne réinitialise pas automatiquement l'ESP-01 après avoir téléchargé un programme. Nous ne voulons pas que notre programme prenne le relais pendant que nous sommes dans le programmeur.
- Insérez l'ESP-01 dans la prise du programmateur, sans avoir le programmateur sous tension.
- Appuyez et maintenez enfoncés les boutons RESET et FLASH du programmateur.
- Allumez le programmateur (ou insérez-le dans le port USB de votre ordinateur) tout en maintenant les deux boutons
- Relâchez le bouton RESET
- Relâchez le bouton FLASH
- Téléchargez le programme. (si vous utilisez Arduino IDE, si le téléchargeur ne parvient pas à se connecter, appuyez et maintenez RESET, appuyez et maintenez FLASH, relâchez RESET puis relâchez FLASH. Le téléchargement devrait commencer après cela). N'APPUYEZ PAS SUR RESET POUR AUCUNE RAISON APRÈS LE TÉLÉCHARGEMENT DU CODE .
- Éteignez le programmateur (ou extrayez de la clé USB)
- Retirez l'ESP-01 de la prise du programmateur
- Insérez l'ESP-01 dans la prise de votre carte de projet
- Mettre le tableau de projet sous tension
Cas d'utilisation : Utilisation des broches TXD et RXD comme broches I2C
Bien que les broches TXD et RXD soient principalement utilisées comme interface série, ce sont également des broches d'E/S à usage général qui peuvent être programmées pour fonctionner comme telles.TXD est également appelé GPIO1 et RXD GPIO3. Nous devons bien sûr accepter le fait que sans interface série, il nous manquera un moyen de communiquer avec notre logiciel et le principal outil de débogage de notre code.
Par conséquent, nous devons être extrêmement prudents et concevoir d'autres façons d'opérer à l'aveugle. Mais c'est un sujet énorme et hors de la portée de cet article.
En termes de logiciel, afin de forcer les broches TXD/GPIO1 et RXD/GPIO3 à fonctionner comme des broches I2C fonctionnant respectivement comme SDA et SCL, nous devons définir dans notre code :
Wire.begin(1, 3); //Wire.begin(sda_pin, scl_pin).
Programmation

![]() | ![]() |
Alimentation | Mode éveillé | Mode veille |
---|---|---|
Broche VCC en 3.3V | 76 mA en fonctionnement standard (avec des pics allant jusqu'a 150mA lors de la connexion au wifi d'une durée allant de 2 secondes à 8 secondes). | 18µA |
Avec la LED rouge, la consommation est de 340µA en mode veille.
Mise en sommeil et réveil logiciel
Sur l'ESP01 ou l'ESP01s, la broche GPIO16 du microcontrôleur ESP8266 n'a pas été câblée de manière à ce qu'elle soit accessible à l'utilisateur.
De ce fait, il est impossible d'utiliser le réveil logiciel car ce dernier ne fonctionne que si nous pouvons connecter entre eux GPIO16 et RST.
Différents modes de veille et consommation
Item | Modem-sleep | Light-sleep | Deep-sleep |
---|---|---|---|
Wi-Fi | OFF | OFF | OFF |
System clock | ON | OFF | OFF |
RTC | ON | ON | ON |
CPU | ON | Pending | OFF |
Substrate current | 15 mA | 0.4 mA | ~20 µA |
Average current DTIM = 1 | 16,2 mA | 1,8 mA | - |
Average current DTIM = 3 | 15,4 mA | 0,9 mA | - |
Average current DTIM = 10 | 15,2 mA | 0,55 mA | - |
Modem-Sleep
Le mode Modem-Sleep est utilisé dans les applications qui nécessitent le fonctionnement du processeur, comme dans les applications PWM ou I2S.
Il est conforme à la norme 802.11 (U-APSD). Le modem Wi-Fi est arrêté tout en maintenant une connexion Wi-Fi sans transmission de données pour optimiser la consommation d’énergie.
Trois modes sont disponibles, DTIM1 à 3. DTIM (Delivery Traffic Indication Message). Par exemple dans le mode DTIM3, le modem est mis en sommeil durant 300 ms puis activé durant 3 ms. Avec ce mode, la consommation est de 15 mA.
Light-Sleep (sommeil léger)
En plus de la suspension du modem WiFI, le CPU est mis en attente et réactivé si nécessaire.
Deep-Sleep (sommeil profond)
C’est le seul mode le plus simple à mettre en oeuvre et le plus économe en énergie pour des projets qui fonctionnent sur batterie.
Seul le RTC (Real-Time Clock) qui est une horloge interne capable de réveiller le microcontrôleur après un temps donné.
On active le mode Deep-sleep en reliant la broche RST à la broche D0, celle-ci n’est donc plus disponible pour un autre usage, il n’est plus possible de téléverser un programme, il faudra déconnecter la broche RST avant de pouvoir téléverser un programme.
Sur certains modules, la broche D0 peut être identifiée par GPIO16.
En reliant les broches D0 et RST, il n’est plus possible de téléverser un programme. Quelque soit votre environnement de développement (IDE Arduino, PlatformIO, ESP Tools), il faudra déconnecter la broche RST avant de pouvoir téléverser un programme.
Flasher votre ESP dans un premier temps
Lien vers le site avec les programmes et les fichiers binaires contenant de quoi flasher.
Je vous conseil d'acheter un module type : PL2303 USB To RS232 TTL Module de conversion automatique 5V 3.3V sortie
En effet le module ne supporte pas une tension de 5V, il est nécessaire d'avoir une tension d'alimentation et de signal série en 3.3V
Vérifier votre brochage, tous les ESP8266-ESP201 ne sont pas exactement identiques.
Lien Avec un Tuto pour flasher votre ESP.
Piloter un relai

En effet pour piloter un relai, un transistor est nécessaire. La partie serveur HTML pour le pilotage du relai.
Un serveur HTML
-- perso_html V2 -- pour android wifi.setmode(wifi.STATION); wifi.sta.config("Livebox###","########################"); tmr.delay(1000000); -- 1 appuis 1s sur le boutton print(wifi.sta.getip()); print("Serveur prêt") -- liste des ports et GPIO -- 4 GPIO2/102 -- 2 GPIO4/104 -- 1 GPIO5/105 -- 6 GPIO12/1012 -- 7 GPIO13/1013 -- 5 GPIO14/1014 -- commande ?pin=N4 appuis sur 4 leds={4,"Lampes Entrée/102",2,"Lampes Jardin/104",1,"Eteindre tout/105",6,"GPIO12/1012",7,"GPIO13/1013",5,"GPIO14/1014"} for i=1,table.getn(leds),2 do gpio.mode(leds[i], gpio.OUTPUT) end srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v; -- print(v); end end local _on,_off = "","" x=_GET.pin; if x then if(string.sub(x,1,1)=="N")then gpio.write(tonumber(string.sub(x,2)), gpio.HIGH); tmr.delay(1000000); -- 1 appuis 1s sur le boutton gpio.write(tonumber(string.sub(x,2)), gpio.LOW); elseif(x == "OFF")then -- procedure a realiser gpio.write(1, gpio.HIGH); tmr.delay(1000000); -- 1 appuis 1s sur le boutton gpio.write(1, gpio.LOW); -- 105 -- srv:close(); end end client:send(buf); client:close(); collectgarbage(); end) end)
Récupération température avec DS18B20
-- ds18b20 one wire example for NODEMCU (Integer firmware only) -- NODEMCU TEAM -- LICENCE: http://opensource.org/licenses/MIT -- Vowstarpin = 3 -- GPIO0 broche 100. ow.setup(pin) count = 0 repeat count = count + 1 addr = ow.reset_search(pin) addr = ow.search(pin) tmr.wdclr() until((addr ~= nil) or (count > 100)) if (addr == nil) then print("No more addresses.") else print(addr:byte(1,8)) crc = ow.crc8(string.sub(addr,1,7)) if (crc == addr:byte(8)) then if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then print("Device is a DS18S20 family device.") repeat ow.reset(pin) ow.select(pin, addr) ow.write(pin, 0x44, 1) tmr.delay(1000000) present = ow.reset(pin) ow.select(pin, addr) ow.write(pin,0xBE,1) print("P="..present) data = nil data = string.char(ow.read(pin)) for i = 1, 8 do data = data .. string.char(ow.read(pin)) end print(data:byte(1,9)) crc = ow.crc8(string.sub(data,1,8)) print("CRC="..crc) if (crc == data:byte(9)) then t = (data:byte(1) + data:byte(2) * 256) -- handle negative temperatures if (t > 0x7fff) then t = t - 0x10000 end if (addr:byte(1) == 0x28) then t = t * 625 -- DS18B20, 4 fractional bits else t = t * 5000 -- DS18S20, 1 fractional bit end local sign = "" if (t < 0) then sign = "-" t = -1 * t end -- Separate integral and decimal portions, for integer firmware only local t1 = string.format("%d", t / 10000) local t2 = string.format("%04u", t % 10000) local temp = sign .. t1 .. "." .. t2 print("Temperature= " .. temp .. " Celsius") end tmr.wdclr() until false else print("Device family is not recognized.") end else print("CRC is not valid!") end end
Le branchement ne tiens pas compte de la programmation ou il faut être en mode FLASH