Hlavní navigace

Nahratie firmvéru Tasmota do spínača Sonoff Basic

 Autor: Ľubomír Patek
V dnešnom dieli budeme pokračovať prakticky – pripravíme si spínač na prepojenie, prepojíme ho s PC, prepojenie otestujeme, oboznámime sa s bootovacími módmi SoC, zálohujeme pôvodný firmvér a nakoniec do spínača nahráme nový.
Ľubomír Patek 14. 7. 2020
Doba čtení: 13 minut

Sdílet

Hotový binárny súbor tasmota.bin budeme nahrávať z príkazového riadka pomocou nástroja Esptool. Súbor je pripravený autorom firmvéru tak, že obsahuje najpoužívanejšie funkcie a preto bude vhodný nielen na zoznámenie, ale mnohí čitatelia si s ním vystačia aj neskôr.

Existuje ešte možnosť použiť nástroj Tasmotizer, ktorý umožňuje prostredníctvom grafického rozhrania jednoducho vybrať binárny súbor a spoločne s firmvérom nahrať aj niektoré nastavenia. Oproti nástroju Esptool však neposkytuje spätnú väzbu v termináli.

Okrem toho je tu ešte možnosť skompilovať si vlastný binárny súbor, napr. v prostredí Arduino. Ak chcete využiť podporu snímačov, ktoré nie sú podporované v pripravených súboroch, alebo si chcete vytvoriť vlastnú kombináciu funkcií a ovládačov, je kompilácia potrebná. Tento spôsob navyše umožňuje zmeniť ktorékoľvek z nastavení predvolených v konfiguračných súboroch a nahrať už úplne nakonfigurovaný firmvér.

Opis prvého nahrávania sa čitateľovi možno bude zdať zdĺhavý, pretože sa budem snažiť opísať aj niektoré z problémov, ktoré sa pri nahrávaní môžu vyskytnúť, ich diagnostiku a riešenie. Pri ďalšom nahrávaní z neho môžete veľkú časť vynechať, prípadne použiť iný nástroj, napr. už spomenutý Tasmotizer, alebo niektorý z nástrojov na hromadnú správu zariadení ovládaných FW Tasmota. Aj tie sú však založené na nástroji Esptool, a teda ak chcete mať prehľad o tom, čo presne robíte, je dobré oboznámiť sa s ním podrobnejšie. Samotné nahratie firmvéru aj s prípravou a prípadným riešením problémov vám potom zaberie niekoľko minút.

Čo budete dnes potrebovať?

Okrem hardvéru podľa zoznamu z predchádzajúceho článku budete potrebovať už len binárny súbor s firmvérom a nástroj Esptool. Najprv si ale pripravíme spínač na operáciu nahrávania.

Príprava spínača Sonoff Basic

Upozornenie: pred prácou so spínačom nezabudnite vždy skontrolovať, či je odpojený od sieťového napätia. Pred pripojením na sieťové napätie najprv spínač zložte a zaistite kryty vodičov skrutkami! Ak by ste si neboli istí tým čo robíte, radšej zverte prácu kvalifikovanému elektrikárovi.

Kvôli prepojeniu s prevodníkom je potrebné spínač rozobrať. Spodnú časť oddelíte od vrchnej buď nechtom za okraj, alebo jednoducho vytlačte spodnú časť, ktorá drží v západkách relatívne slabo.

Všetky verzie spínača majú vyvedené signály potrebné na nahratie nového firmvéru na štyri prekovené otvory na doske plošného spoja (DPS), ktoré sú označené znakmi Tx, Rx, 3V3 a GND. Na nasledujúcom obrázku je DPS verzie R2 a plôšky sú umiestnené zvislo, naľavo od stredu a je v nich už zacínovaný konektor.


Umiestnenie plôšok na spodnej strane DPS spínača Sonoff Basic R2

Poznámka: Na spodnej strane DPS je ešte piata plôška s popisom IO2, cez ktorú však neprechádza dierka na pripojenie konektora. Zatiaľ sa ňou nebudeme zaoberať, ale neskôr ju môžete (s určitými obmedzeniami) využiť ako vstup alebo výstup – je na ňu vyvedený vývod GPIO2 SoC.

Informácia: Obrázky niektorých ďalších podporovaných zariadení znázorňujúce miesta na DPS so signálmi potrebnými na pripojenie nájdete aj v repozitári šablón.

Najpohodlnejšie sa vám bude pracovať, ak si do spínača naspájkujete kontakty (kolíky, alebo zdierky – podľa toho, aké máte kábliky). Ak kontakty nemáte, môžete vývody dočasne naspájkovať priamo na plôšky DPS.


Kontakty, kolíky a kábliky s rôznymi kombináciami ukončenia

V minulom dieli som spomenul aj alternatívnu metódu bez spájkovania – kolíky stačí zasunúť do dierok plošného spoja a trocha ich vzpriečiť tak, aby boli kolíky v kontakte s prekovenými otvormi v DPS. Takto ich treba držať bez pohnutia počas celého procesu nahrávania, počítajte zhruba s minútkou (nahrávanie nového firmvéru do 1 MB pamäte pri rýchlosti 115200 mi trvalo okolo 30 sekúnd).

Vyberte si spôsob ktorý vám vyhovuje najviac. Nahrávanie firmvéru Tasmota s fyzickým pripojením zariadenia je potrebné len prvý krát – neskôr by už malo fungovať aktualizovanie cez WiFi (OTA). Nahrávanie pomocou prevodníka neskôr využijete už len v prípade riešenia nejakého problému, alebo ak by ste nechceli či nemohli využiť bezdrôtovú aktualizáciu.

Pri prvom oboznamovaní sa však odporúčam použiť pevné prepojenie, ktoré umožní využívať sériový port na diagnostiku a neskôr aj na ovládanie. Pripojenie cez konektor vám umožní reštartovanie spínača bez toho, aby operačný systém menil pri každom zasunutí prevodníka číslo portu.

Pripojenie prevodníka k PC a test registrácie USB

Nie je na škodu, ak si prepojenie spínača s PC hneď na začiatku otestujete, ale testovanie môžete aj preskočiť a vrátiť sa sem až v prípade potreby.

Najprv vyskúšajte, či operačný systém zaregistruje prevodník – zasuňte ho do zásuvky USB portu a v termináli si pozrite výpis príkazu dmseg. Niekde na konci výpisu by sa mal objaviť riadok s reťazcami idVendor a idProduct:

New USB device found, idVendor=1a86, idProduct=7523

a za ním informácia o priradenom čísle portu:

ch341-uart converter now attached to ttyUSB1

Hodnoty idVendor, idProduct a názov prevodníka v predchádzajúcich výpisoch platia pre prevodník s čipom CH340G.

Príkaz lsusb pridá podrobnejšie slovné označenie prevodníka (a ďalšie informácie o umiestnení na zbernici USB):

Bus 00x Device 00x: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Otestovanie okruhu Tx – Rx prevodníka

Potom, ako operačný systém vzal pripojený prevodník na vedomie, môžete ho ešte otestovať s uzatvoreným obvodom Rx – Tx (loopback) – jednoducho spojte na prevodníku vývody Rx a Tx:


Prepojenie Rx a Tx na prevodníkoch

Na testovanie je najjednoduchšie využiť monitor sériového portu prostredia Arduino. Skontrolujte si, či máte v prostredí vybratý správny port (zistili ste pomocou príkazu dmesg ), spustite monitor sériového portu (oboje nájdete v menu medzi nástrojmi) a nastavte rýchlosť na hodnotu 115200. Ak teraz niečo napíšte do vrchného riadka a potvrdíte, text bude odoslaný cez vodič Tx. V prípade, ak všetko funguje, monitor sériového portu zobrazí v okne pod riadkom text, ktorý prijal cez vodič Rx. Ak sa texty nezhodujú, niekde je problém.

To isté sa dá otestovať aj pomocou terminálu. V tomto prípade využijeme dve okná terminálu – text, ktorý napíšete v jednom z nich, sa po odoslaní zobrazí v tom druhom. Ak by shell protestoval (permission denied), použite sudo, alebo si nastavte oprávnenie na používanie sériových portov natrvalo (napr. pridaním používateľa do skupiny dialout).

Otvorte si najprv jeden terminál a nastavte parametre testovaného sériového portu. Pre /dev/ttyUSB1 bude nastavenie vyzerať takto:

stty -F /dev/ttyUSB1 -echo -onlcr

Potom v rovnakom termináli spustite:

cat /dev/ttyUSB1

a z druhého terminálu odošlite na testovaný port nejaký text, napr.:

echo "Test prevodníka OK" > /dev/ttyUSB1

Ak sa text zobrazil na termináli so spusteným cat, test prebehol v poriadku a máte istotu, že funguje celý prevodník až po dátové vývody. Monitor sériového portu, prípadne okná terminálu si nechajte otvorené, budete ich ešte potrebovať.

Prepojenie so spínačom

V prípade, že testy prebehli v poriadku, môžete pripojiť spínač. Naposledy si skontrolujte, či ste správne zvolili hodnotu napájacieho napätia 3,3 V, prípadne si napätie aj zmerajte a prepojte prevodník so spínačom. Kladný pól napájania (označený 3V3, alebo Vcc) na kladný, záporný (GND) na záporný, ale z Tx na Rx a z Rx na Tx.


Prepojenie spínača Sonoff Basic R2 s prevodníkom


Prepojenie Sonoff Basic s prevodníkom pre ESP01

Teraz, keď máte pripravenú hardvérovú časť, ostáva už len nainštalovať nástroj Esptool, stiahnuť súbor s firmvérom Tasmota a nahrať ho do spínača.

Nástroj Esptool

Nástroj Esptool bol vytvorený na nahrávanie firmvéru do SoC ESP8266 (a tiež ESP32). Je napísaný v jazyku Python a uvoľnený pod licenciou GPL. Nainštalujte si jeho aktuálnu stabilnú verziu pomocou správcu balíkov Python:

pip install esptool

Viac informácií o inštalácií, verziách a použití nájdete na stránke projektu Esptool na GitHube.

Upozornenie: Distribúcie Linuxu môžu obsahovať staršiu verziu nástroja ako tú, ktorú považujú za najnovšiu stabilnú jeho tvorcovia. Napríklad Debian považuje za stabilnú verziu 0.4.6. Dávajte si tiež pozor na to, že nástroj existuje aj v spustiteľnej forme (napr. práve spomenutý balíček Debianu), ktorá sa spúšťa bez koncovky .py. Môže sa vám teda stať, že príkazom esptool spustíte prehistorickú verziu (ak ste nástroj v minulosti inštalovali nástrojom distribúcie) a pomocou esptool.py aktuálnu.

V ďalšom texte budeme predpokladať, že používate aktuálnu verziu nainštalovanú inštalátorom Pythonu pip a nástroj spúšťate z terminálu pomocou príkazu esptool.py z vášho domovského adresára.

Ak spustíte príkaz bez parametrov, vypíše verziu a stručný help. Program vyžaduje zadanie jedného z “príkazov” (presnejšie positional arguments) a jeho správanie je možné nastaviť zadaním niektorej z ďalších volieb (optional arguments).

Príkazmi určujeme, aký úkon má program vykonať (čítať, zapísať, alebo zmazať pamäť) a pomocou volieb je možné upresniť napr. oblasti pamäte, s ktorými chceme pracovať, komunikačný port, či rýchlosť komunikácie.

V aktuálnej verzii nie je potrebné zadávať žiadne voľby, pretože od verzie 2.0 je podporované ukladanie niektorých informácií (napr. spôsob komunikácie s pamäťou flash, frekvencia hodín zbernice SPI) do binárneho súboru s firmvérom a od verzie 2.4.0 si nástroj dokáže sám zistiť port s pripojeným SoC, typ SoC a veľkosť pamäte. Rýchlosť komunikácie je predvolená na hodnotu 115200 bps.

Súbor s firmvérom

Na stránke https://github.com/arendst/Tas­mota/releases nájdete všetky verzie hotových binárnych súborov pripravených autorom. Pre každú verziu je pripravených niekoľko súborov skompilovaných podľa predpokladaného použitia. Stiahnite si odtiaľ súbor tasmota.bin odporúčaný autorom firmvéru, najlepšie verziu 8.3.1, ktorá je aktuálna v čase písania seriálu. Odporúčam začať s touto verziou aj ak budete čítať seriál neskôr – správanie firmvéru sa totiž z času na čas zmení aj dosť výrazne (hlavne pri breaking changes). Pri písaní seriálu budem udržiavať text tak, aby platil práve pre túto verziu.

Súbor tasmota.bin je pripravený tak, aby vyhovoval čo najväčšiemu počtu používateľov. Obsahuje základnú podporu najbežnejších snímačov a infračerveného ovládania a existuje v niekoľkých lokalizovaných verziách. Okrem toho sú pripravené verzie špeciálne s podporou zbernice KNX, zobrazovacích displejov, s rozšírenou podporou snímačov, či infračerveného ovládania.

Nič vám nebráni nahrať si lokalizovanú verziu, ale v seriáli som si jej nahratie nechal na neskôr – na demonštráciu bezdrôtovej aktualizácie. V celom seriáli sa budem držať anglickej verzie, aby čitateľa nemýlil rozdielny preklad niektorých pojmov do slovenčiny a češtiny.

Pripojenie spínača a režim programovania

Pred prácou s Esptool je potrebné uviesť ESP8266 do režimu nahrávania pamäte flash (tiež režim programovania, alebo režim komunikácie s ROM bootloaderom). Dosiahnete to tak, že pri rozpojenom spojení prevodník – spínač stlačíte tlačidlo na spínači a so stlačeným tlačidlom opäť pripojíte spínač k prevodníku (tlačidlo potom môžete uvoľniť). Teraz je zariadenie pripojené v režime programovania. Počas tohoto režimu ostane LED spínača zhasnutá.

Namiesto rozpájania spojenia prevodník – spínač môžete vytiahnuť prevodník z počítača (so spínačom stále pripojeným k prevodníku) a po stlačení tlačítka na spínači prevodník opäť zasunúť do USB portu. V tomto prípade je možné, že Linux pri opätovnom zasunutí priradí prevodníku USB port s iným poradovým číslom. V prípade, že používate aktuálnu verziu Esptool a port nezadáte napevno, autodetekcia si s tým poradí (ale ak neskôr použijete monitor sériového portu Arduino, pri každej zmene budete musieť zmeniť nastavenie portu).

Informácia: Na to, aby SoC naštartoval v režime nahrávania programu do pamäte flash, je potrebné splniť niekoľko podmienok. Jedna z nich je, že počas bootovania musí byť vývod GPIO0 na nízkej logickej úrovni (L). Ak je na GPIO0 vysoká úroveň (H), spustí sa program nahratý v pamäti flash (tomuto režimu môžeme hovoriť pracovný, alebo režim behu programu). V spínači Sonoff Basic (a mnohých iných zariadeniach) je na vývod GPIO0 zapojené tlačidlo tak, že vývod je cez upínací rezistor (pull up) trvalo pripojený na úroveň H (a teda pri uvoľnenom tlačidle počas štartu sa spustí program v pamäti flash). Pri stlačení tlačidla sa pripojí GPIO0 na úroveň L, čo v prípade, ak bolo stlačené pred štartom, spôsobí vstup SoC do režimu programovania.

Ak by ste chceli programovať nejaké zariadenie, ktoré tlačidlo neobsahuje (napr. WiFi žiarovku, modul ESP01 apod.), budete musieť zariadiť túto podmienku sami. Nie je prekážkou, ak ostane úroveň L na vývode GPIO0 až do ďalšieho reštartu, nemusíte teda pripájať tlačidlo, stačí vývod GPIO0 dočasne spojiť vodičom so záporným pólom napájania (prispájkovať). Niektoré vývojové dosky (Wemos, NodeMCU) vedia zariadiť prepínanie medzi programovacím a pracovným režimom automaticky.

Prečítanie informácii o pamäti flash

Uveďte spínač do programovacieho režimu (rozpojiť – stlačiť tlačidlo – pripojiť) a spustite esptool.py flash_id.

LED ostane zhasnutá a Esptool by mal vypísať podobný výpis ako tento:

~ $ esptool.py v2.8-dev
Found 3 serial ports
Serial port /dev/ttyUSB2
Connecting....
Detecting chip type... ESP8266
Chip is ESP8285
Features: WiFi, Embedded Flash
Crystal is 26MHz
MAC: dc:4f:22:a1:a2:a3
Uploading stub...
Running stub...
Stub running...
Manufacturer: 51
Device: 4014
Detected flash size: 1MB
Hard resetting via RTS pin...

Z výpisu vidno, že Esptool najprv sám zistil, že spínač je pripojený na port /dev/ttyUSB2, potom zistil typ SoC ESP8266, neskôr upresnil že ide o verziu s označením ESP8285 s integrovanou pamäťou flash s veľkosťou 1 MB a vypísal ďalšie vlastnosti obvodu – frekvenciu kryštálu, adresu MAC, veľkosť a ďalšie informácie o pamäti flash.

V poslednom riadku Esptool oznamuje, že poslal prevodníku signál RTS, ktorý by mal vyvolať reset procesora. My však signál RTS nemáme zapojený – zo spínača sú vyvedené len signály Rx a Tx. Preto treba po každej operácii (čítanie, zapisovanie) vykonať reštart procesora ručne rozpojením a opätovným zapojením podľa opisu vyššie. Pomocou signálov RTS a DTR je možné automaticky prepínať medzi programovacím a pracovným režimom, ako to robia už spomenuté vývojové dosky.

Vytvorenie zálohy pôvodného obsahu pamäte flash

Príkaz esptool.py read_flash 0x00000 0x100000 image1M.bin  prečíta obsah pamäte od adresy 0x00000 s veľkosťou 0x100000 (1MB) a uloží ho do súboru image1M.bin. Tieto parametre platia pre spínač Sonoff Basic s pamäťou flash veľkou 1MB. Ak máte zariadenie s inou veľkosťou pamäte (zistili ste príkazom flash_id), je potrebné zmeniť veľkosť pamäte (pre 4MB je to 0×400000).

Pred prvou inštaláciou nového firmvéru je ešte dôležité vymazať neznámy obsah pamäte:

~ $ esptool.py erase_flash

esptool.py v2.8-dev
Found 3 serial ports
Serial port /dev/ttyUSB2
Connecting....
Detecting chip type... ESP8266
Chip is ESP8285
Features: WiFi, Embedded Flash
Crystal is 26MHz
MAC: dc:4f:22:a1:a2:a3
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 6.1s
Hard resetting via RTS pin...

Vymazanie pamäte je vhodné tiež neskôr pri významnejších zmenách verzie, prípadne pri riešení ďalších problémov. Samotné nahratie firmvéru totiž neprepisuje oblasť pamäte, kde sú uložené konfiguračné údaje; navyše rôzne verzie firmvéru používajú na uloženie konfigurácie rozdielne oblasti pamäte. Ak by sa v konfiguračnej oblasti pamäte nachádzali neočakávané údaje, mohlo by to spôsobiť ťažko predvídateľné problémy.

Nahratie nového firmvéru

Konečne sme sa dopracovali k samotnému nahrávaniu. V nasledujúcom príklade predpokladám, že sa nachádzate vo svojom domovskom adresári a binárny súbor tasmota.bin máte umiestnený vo svojom adresári Downloads.

Najprv uveďte zariadenie do režimu nahrávania pamäte flash (rozpojiť – stlačiť tlačidlo – spojiť) a potom zadajte príkaz na nahratie nového firmvéru (voľba 0×0 určuje počiatočnú adresu zapisovania):

esptool.py write_flash 0x0 ./Downloads/tasmota.bin

V prípade, že nahrávanie prebehlo v poriadku, výpis by mal vyzerať podobne ako tento:

MIF tip3

esptool.py v2.8-dev
Found 3 serial ports
Serial port /dev/ttyUSB2
Connecting....
Detecting chip type... ESP8266
Chip is ESP8285
Features: WiFi, Embedded Flash
Crystal is 26MHz
MAC: dc:4f:22:a1:a2:a3
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Compressed 591504 bytes to 410198...
Wrote 591504 bytes (410198 compressed) at 0x00000000 in 36.3 seconds (effective 130.4 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Pri prvom štarte spínača v pracovnom režime sa spustí tzv. Web Manager ktorý nastaví jeho WiFi rozhranie do režimu prístupového bodu a spustí webový server s adresou 192.168.4.1 umožňujúci nastavenie prístupových údajov potrebných na neskoršie pripojenie do WiFi siete. Po nastavení parametrov WiFi pripojenia a ďalšom reštarte sa spínač pripojí k nastavenej sieti a spustí webový server s grafickým rozhraním.

Ale to už predbieham, viac si o tom povieme nabudúce. Povieme si aj niečo o ďalších nastaveniach spínača, zoznámime sa s jeho novým webovým rozhraním, niekoľkými príkazmi, ovládaním z konzoly aj pomocou HTTP požiadaviek a nakoniec si vyskúšame bezdrôtovú aktualizáciu firmvéru. Spínač si ešte nechajte otvorený, sériové pripojenie ešte využijete aj nabudúce.