WiFi modul ESP8266 -01

11.11.2015

 

Před časem se objevil na trhu velice zajímavý modul, označený ESP8266.

Prodává se několik verzí tohoto modulu. Liší se rozměry PCB, typem antény a počtem vyvedených GPIO.

Já bych se chtěl v tomto článku trochu věnovat nejjednodušší variantě, typu 01.

Tento modul se dá pořídit za 2$, což je v současné době necelých 50Kč

Parametry tohoto modulu se zabývat nebudu, toho je na internetu spousta, zaměřím se spíše na praktické použití.

Modul obsahuje procesor s 1MB FLASH paměti, a WiFi připojením. Vyvedeny jsou sériové signály Rx a Tx, a dva input/output GPIO piny, na která se dají připojovat různá čidla. Dále jsou vyvedeny signály CH_PD. Tímto pinem se povoluje/zakazuje činnost modulu. Doporučuji pin CH_PD připojit natrvalo k VCC napájecímu napětí 3.3V Stejně tak pin RST k VCC přes odpojitelnou propojku (na rozdíl od pinu CH_PD jej občas budeme potřebovat rozpojit). V případě, že necháte RST "ve vzduchu" bude docházet k tomu, že modul občas přestane vysílat, a vy nezjistíte proč :-)

Upozornění:
Modul VŽDY připojujeme k sériovému portu tak, že signál RX propojíme s TX signálem zařízení, a TX s RX (nejedná se osběrnici, kde se připojují např. SDA na SDA a SCL na SCL).


Nahrání firmware do modulu

V první řadě se musíme rozhodnout, jestli chceme používat AT příkazy, nebo mód NodeMCU

Pokud budete ESP8266 připojovat např. k Arduinu, které jej bude využívat pro WiFi komunikaci, doporučuji nahrát AT firmware. Pro použití samostatného ESP8266 musíte použít NodeMCU.

 

Použití ESP8266 a Arduina pro načítání teploty, vlhkosti a tlaku, a odesílání údajů na server ThingSpeak

Verze1:

Arduino UNO
   - LCD5110      - zobrazení hodnot
   - DHT22          - teplota a vlhkost
   - DS18B20      - venkovní teplota

   - BMP182       - tlak vzduchu

Údaje z tohoto zařízení najdete ZDE

 

Verze2:

Arduino NANO Pro
   - LCD5110      - zobrazení hodnot
   - HTU21D       - teplota a vlhkost

  

Flashování firmware:

Pro to, aby jste mohli nahrát do ESP8266 firmware potřebujete USB To RS232 převodník. Já používám převodník osazený čipem PL-2303HX. Mám vyzkoušené že bez problému funguje jak na Win XP, tak na Win7 a Linuxu.

Převodník s kabelem:
Vypínač propojuje signál GPIO0 na GND - tím se dostaneme do módu pro nahrání firmware. Při rozpojení vypínače potom převodník pracuje v normálním módu. Takže ho můžeme testovat a programovat pomocí např. BR@Y terminálu

Zapojení pro vypadá takto:

Ještě jednou:

Pro flashování použijeme jeden z těchto programů:

esp8266_flasher.exe
- jednoduchý flasher, který zvládne každý. Průběh flashování sice skončí chybovou hláškou, ale nemusíte mít strach, firmware je nahraný správné

nodemcu-flasher
- trochy složitější
, ale průběžně aktualizovaný flasher

Firmware:

ESP_8266_BIN0.92.bin
- firmware verze 0.9.2.2 Podle mě nejstabilnější verze. Bohužel u ní nejde měnit komunikační rychlost na sériovém portu. V případě připojení k Arduinu MEGA 2560 (TX1, RX1) to nevadí. U ostatních Arduin, kde je nutné připojit ESP8266 k SoftwareSerial emulovanému rozhraní by to vadit mohlo. Sice všude na internetu píšou, že softwarově emulovaný sériový port komunikuje maximální rychlostí 19 200 Bd, na mém Arduino NANO Pro běží bez problému na rychlosti 115 200 Bd.

v0.9.5.2 AT Firmware.bin
- firmware verze 0.9.5.2 Zde je mo
žné měnit rychlost příkazem AT+UART=9600,8,1,0,0 (klasika 9600,N,8,1,P)

Použití jednodušího flasheru je jasné, u druhého, složitějšího stačí vybrat COM port, ke kterému je připojený převodník. V sekci Config vyhledat příslušný firmware na disku. Potom se vrátit zpátky, a kliknout na Flash. Pokud flashování neproběhne, nebo nedoběhne do konce, spustit flashování znovu.

 

Doplněno 23.3.2017

Obě předchozí verze firmware jsou již trochu zastaralé, proto jsem se rozhodl doplnit tento návod o novější verzi AT firmware, včetně nového postupu nahrání do ESP8266.

Tento fw je rozdělený na několik částí, a proto bude třeba použít nodemcu-flasher.

(Firmware stáhnete zde: esp_iot_sdk_v1.5.0_15_11_27.zip)

Doplněno 5.10.2017

Nová verze firmware: ESP8266_NONOS_SDK-2.1.0.zip

Firmware rozbalíte do adresáře, a spustíte NodeMCU Flasher
Do Flasheru načtete jednotlivé soubory, nastavíte adresy, od kterých se mají jednotlivé soubory do ESP nahrát. Nezapoměňte zaškrtnout políčka ve sloupečku vlevo. Jinak by se vám nahrál jenom první soubor :-)

Potom spustíte nahrání FW do ESP8266-01:

Pokud se flashování nechytne napoprvé, zkuste to spustit několikrát znovu. Samozřejmě musíte mít při flashování propojené GPIO0 na GND. Adresy a další věci okolo tohoto FW jsou uvedené v souboru \bin\at\readme.txt který je součástí uvedeného .zip archívu.

I v tomto fw je možné měnit rychlost příkazem AT+UART=9600,8,1,0,0 (klasika 9600,N,8,1,P)

 

Po nahrání firmware odpojíme propojku mezi GND a GPIO0. Propojku mezi CH_PD a VCC ponecháme. Jinak by nám modul nekomunikoval. Spustíme BR@Y terminál Nastavíme správný port a rychlost 115 200 Bd. Do řádku dole potom budeme psát příkazy, v okně nahoře nám bude ESP8266 odpovídat.

Zadáme

AT
modul odpoví OK
AT+RST
modul vyp
íše několik řádků
AT+GMR
modul vypíše verzi FW

Nastavíme modul módu Clienta, necháme vypsat viditelná AP v okolí, a připojíme se k našemu AP
Zadávejte postupně do příkazového řádku tyto příkazy:

AT+CWMODE=1
AT+CIPMUX=1
AT+RST
AT+CWLAP
-zde by měl vypsat viditeln
á AP v okolí
AT+CWJAP="SSID","PASSWORD"
-nyní by m
ěl být modul připojený k AP
AT+CIFSR
- vypíše adresu, kterou mu přidělil DHCP server

Tím jsme hotovi. Modul můžeme klidně vypnout, nastavení připojení k AP zůstane v paměti. Takže když připojíme modul k Arduinu a zapneme napájení, automaticky se připojí k AP.

 


Nakupujete moduly pro Arduino na eBay, nebo Aliexpress

Existuje zde portál, který vám za tyto nákupy vrátí až 5% zpět přes tzv. CashBack

Jak to funguje: hlavně VÁS to nic nestojí. Stačí se zaregistrovat na plnapenezenka.cz Když potom chcete něco nakoupit na eBay, Aliexpress atd, tak se přihlásíte na Plnoupeněženku, a odtud teprve přejdete na obchod, ve kterém chcete nakupovat. Tam nakoupíte za NORMÁLNÍ cenu. Server Plnápeněženka tanto nákup zaregistruje, a na váš účet vám pošle provizi až 5% z částky, za kterou jste nakoupil. To je vše. Zkusil jsem to, protože jsem si říkal, že nemám co ztratit, a ono to opravdu funguje :-) Nakupovat přes plnoupeněženku můžete jak v zahraničních, tak v našich obchodech (MALL, Kasa, Baťa, atd.)

 


Když budete chtít používat ESP8266 samostatně, bude to vypadat takto:

Do modulu musíme použít jiný firmware.

Jedná se o LUA NodeMCU firmware.

Aktuální verze NodeMCU firmware najdete ZDE Program i postup flashování je stejný, jako v předchozím případě.

Já používám následující firmware:

nodemcu_integer_0.9.6-dev_20150704.bin -firmware, který počítá jenom s celými čísly (integer)
nodemcu_float_0.9.6-dev_20150704.bin -stejná verze, ale umí i desetinná čísla (float)

Bohužel, když jsem připojil k ESP8266 čidlo DHT22 pro měření teploty a vlhkosti vzduchu, nepodařilo se mi z tohoto čidla načíst jakékoliv údaje, i když z čidla DS18B20 data načítal bez problému. Po několika hodinách marného snažení jsem se někde dočetl, že poslední verze, která umí načítat data z DHT22 je verze nodemcu_float_dev20150311.bin Je to verze float, takže počítá s desetinnými čísly.

 

Po nahrání NodeMCU firmware si můžete opět spustit BR@Y terminál, a zkusit zadat příkazy z předchozího návodu. Zjistíte, že to nějak nefunguje :-) Ano, ale je to správně. NodeMCU firmware používá jinou příkazovou sadu.

Budete muset stáhnout a nainstalovat LuaLoader z TÉTO adresy

Pomocí tohoto programu potom nahráváte do modulu ESP8266 programy podobně jako do Arduina. Programy pro načítání hodnot z čidel DS18B20 a DHT22 si můžete stáhnout zde. Jsou to vyzkoušené (mírně upravené) funkční příklady.

esp8266_ds18b20
esp8266_dth22

Jediné, co musíte udělat je zaregistrovat se na ThingSpeak Potom v souborech doplnit SSID a PASSWORD vašeho AP, a APIKEY, který najdete v nastavení ThingSpeaku. Čidla jsou připojena na GPIO2 (PIN = 4). Soubor init.lua doporučuji nahrávat jako poslední :-)


Ještě pár slov k hardware.

Modul je napájen napětím 3.3V. Všude je uvedeno, že 5V nevydrží. Ale vydrží, a bez problému. Když jsem jej připojil k Arduino UNO, tak jsem ho omylem připojil na 5V. Všiml jsem si toho až po měsíci, když jsem chtěl přidat na desku další čidlo. Fungovalo to naprosto bez problému, ani ten čip nijak extra nehřál.

Větší problém je odběr samotného modulu. V klidu odebírá ze zdroje 20 - 40mA, ale jakmile začne vysílat, stoupne spotřeba na cca 170 - 220mA v závislosti na vzdálenosti od AP. A to už je trochu problém. Pokud bude modul připojený k Arduinům UNO nebo MEGA 2560 a podobným, tak to ještě stabilizátor osazený na těchto Arduinech vydrží. Ale stejně bych doporučoval připojit k napájecím pinům (+3.3V a GND) ESP8266 modulu elektrolytický kondenzátor minimálně 470µF/6.3V

V případě, že budete modul připojovat k Arduinu NANO Pro, tak si budete muset vyrobit vlastních 3.3V. Z NANO je sice vyvedených 3.3V, ale je to vyvedeno přímo z CH341 čipu. A tento výstup je dimenzovaný maximálně na 40mA, a to bych si už spíš z toho tahat nedovolil. Takže vám nezbyde nic jiného, než za 5V stabilizátor, který je na NANO osazená připojit ještě toto:

Jedná se o 3.3V lineární stabilizátor AMS1117-3.3 který bude z 5V vyrábět 3.3V pro napájení ESP8266. Kondenzátor 470µF/6.3V je v tomto případě samozřejmostí. Zkoušel jsem použít také lineární stabilizátor LM78L33 v pouzdře TO92, ale ten je dimenzovaný pouze do 100mA. Chvíli to vydržel, ale po čase se ohřál na takovou teplotu, že začala vypínat jeho tepelná ochrana. AMS1117 je dimenzovaný až do 1A (samozřejmě s příslušným chlazením).

 

Při použití samostatného ESP8266 je problém s napájením ještě daleko větší. V případě, že použijeme pro napájení 5V, tak bude pravděpodobně opět stačit AMS1117-3.3 a kondenzátor. Pokud ale budete chtít napájet modul vyšším napětím, případně ze dvou 18650 Li-Ion článků, tak nám už lineární stabilizátor stačit nebude. V případě použití 2 článků by byl na stabilizátoru úbytek 8.2-3.3=4.9V * 0.2A = 0.98W  - To je 1W ztrátového výkonu, takže stabilizátor by jednak hodně topil, a to tak, že by to nevydržel, a za druhé by z baterie odebral a propálil víc energie, než samotný ESP8266 modul.

Takže bude nutné použít spínaný stabilizátor:

Spínaný stabilizátor má tu výhodu, že do něj můžete pustit až 17V, a vždy z něho poleze nastavených 3.3V a bez obav, že bude topit. Ztráty na tomto stabilizátoru budou minimální. Kondenzátor v tomto případě nebude potřeba, protože zdroj je dostatečně tvrdý. Jeho cena je necelý 1$.

 

Jak dlouhý kabel mohu použít pro připojení čidla DS18B20 k procesoru při použití phantomového napájení (2 vodiče)?

Toto je dost častý dotaz, se kterým se setkávám. Běžně je možné DS18B20 připojit na několik metrů. Na obyčejném síťovém UTP kabelu bude čidlo bez problému odesílat data na cca 5-10m. Pro větší vzdálenost, cca 15m jsem použil stíněný audiokabel. Stínění jsem připojil na GND, a střední vodič na DATA.

Pokud ale chcete použít ještě delší kabel, je to možné, ale je třeba dodržet jedinou podmínku: na čidlo se nesmí dostat záporné napětí. Sice neodejde, ale nekomunikuje. Takže k čidlu je vhodné dát paralelně Shottky diodu v obráceném směru a do série s výstupem do procesoru dát rezistor okolo 50 ohmů, aby pulzy neměly tak strmé hrany (s kapacitou kabelu tvoří RC člen) a nevznikaly takové odrazy na kabelu. Zkoušel jsem takto připojit DS18B20 na konec smotaného UTP kabelu o délce cca 200m, a i na tuto vzdálenost komunikoval celkem bez problému.

Zde je schéma pomocného obvodu:

 


Proč mi nejsem schopen naprogramovat ESP8266-01 převodníkem, který jsem koupil na eBay, a který je určený přímo pro tuto desku?
(5.1.2018)

Opět jeden z dotazů, který mi často chodí. Tazatel koupil tento převodník, a není schopen s ním naprogramovat ESP8266-01

Tento převodník je sice určený pro ESP8266-01, ale pouze pro KOMUNIKACI. Je na něm propojený pouze signál CH_PD na VCC.

Aby bylo možné pomocí tohoto převodníku ESP i naprogramovat (buď nahrát firmware, nebo jej programovat v Arduino IDE), je nutné na něj doplnit propojku mezi GPIO0 a GND (viz schéma nahoře). Já jsem použil malý vypínač, ale je možné použít 2 piny a propojku ze staré základní desky. Propojkou si potom nastavujete, jestli chcete s ESP komunikovat pomocí terminálu (např. AT přikazy), nebo jej PROGRAMOVAT. Před programováním vždy vytáhnete převodník z USB počítače, propojíte propojku, a vrátíte ho zpět do USB. Spustíte nahrání programu např. v Arduino IDE. Potom převodník opět vytáhnete z USB, zrušíte propojení vrátíte ho zpět, a potom s ním můžete komunikovat.

 

 


 

 

 


Pokud budete chtít s něčím poradit, napište mi na email dole.





Na hlavní stránku