Hrajeme si WeMos D1 – Nahrání programu přes Wifi (OTA)

V tomto článku přeskočíme ThingSpeak a jeho druhou část a to proto, že jsem Vám chtěl ukázat jak nahrát program do Wemos a ESP6822 bez toho aniž by jsme museli samotné zařízení připojovat k PC. Využijeme to v případě, když už máme zařízení někde nainstalované (i třeba ve studni nebo na půdě)a potřebujeme do něho nahrát nový program nebo ho aktualizovat.
Budeme vycházet již z toho, že máme nainstalovanou podporu pro vývojové desky Wemos. Aby jsem nahrávaní programu přes Wifi zpropvoznili potřebuje mi stáhnout Python 2.7 (Pozor verze Python 3.5 není podporována!!!!). Zdroj k instalaci najdeme na adrese www.python.org. Zde máte přímo link k instalaci pro Windows 64-bit. Instalace není složitá jen pozor při tomto kroku:

picture-2016-11-10-21_40_02Vidíte, že defaultně není zaškrtá volba „Add python.exe to Path“. Toto volbu tedy po kliknutí na křížek změňte na:

picture-2016-11-10-21_40_40

Bez změny této volby by Vám OTA nefungovala. Dál pouze pokračujte v instalaci. Po dokončení instalace, můžeme připojit naše zařízení k PC. Nastavíme vše jako kdyby jsme normálně Wemos nebo jiné zařízení programovali pomocí COM z PC.

V ArduiunoIDE si vybereme Soubor -> Příklady -> ArduinoOTA -> BasicOTA a načteme si přiklad:

Jen bych upozornil, že je tento postup testován v ArduinoIDE v1.6.8 a ESP8266 v2.2.0, Windows 7 64-bit. V ArduinoIDE v1.6.4 byl test nefunkční. 

screen-shot-05-25-16-at-12-26-pm

 

Pokud jsme si změnili v programu nastavení naší Wifi a heslo, tak si také máme možnost zvolit i název zařízení, které se bude zobrazovat ve volbě výběru portu.

Já jsem si zvolil Wemos D1, ael je to zcela na Vás. Program si tedy nahrajeme do našeho zařízení. A čekáme co se stane. Já doporučuji restartovat Wemos a asi tak za 20 vteřin by měla být aktivní volba u menu nastavení desky Serial a objeví se nám také položka „Sítový port“.

screen-shot-11-11-16-at-05-20-pm

Když si toto volbu zaškrtneme, můžeme s klidným svědomím odpojit USB kabel od Wemos (nebo jiného ESP8266). Použijeme pro příklad pouze napájecí kabel ze síťového zdroje a nahrajeme si nějaký program přes OTA. Wemos v tomto případě stačí mít v dosahu naší bezdrátové sítě.

Samozřejmě, že program sám o sobě nic nedělá. Pouze čeká na to až do něho někdo nahraje program. Po tom co jme si zaškrtli zařízení v síti si můžeme otestovat zda nahrávání přes Wifi (OTA) funguje. Program nemusíme měnit je ho znovu pošleme do zařízení ale již bez kabelu. V programu si také můžeme nastavit ochranu pomoci hesla a to odkomentováním řádku:

V tomto případě se po kompilaci Vašeho programu ArduinoIDE zeptá na toto heslo před přehráním programu. Výsledek kompilace a samotné odeslání vidíte v ArduinoIDE dole:

picture-2016-11-11-22_12_36

Když si vezmeme příklad z minulého návodu, když jsme odesílali data o teplotě na ThingSpeak tak ho samozřejmě můžeme nahrát přes Wifi. Ale upozorňuji, že se poté již do Wemos přes Wifi nedostanete. Při tvorbě programu s podporou aktulizace nebo jejich přehrání přes OTA musíte zachovat v programu, vždy tento základ. Není to nic složitého, v setup již máte hotovo nastavení wifi, pár řádků nastavení OTA a je zde na začátku pár přidaných knihoven. Myslím, že když si to vhodně oddělíte nějakým komentářem tak se v tom poté pohodlně vyznáte.

Zvláštní pozornost budeme věnovat příkazu v loop(). Jedná se o řádek:

Tento se stará o Váš požadavek k aktualizaci nebo přehrání programu. V tom může vzniknout problém. Uvedu příklad. V předchozím návodu s loop() máme samotné odeslání hodnoty o teplotě na ThingSpeak. Jako interval jsme zvolili 20 vteřin. Abychom dosáhli této prodlevy, byl do programu zařazen příkaz delay(20000);. Jednoduše vyřešeno, ale co když budeme chtít aktualizovat program v čase plnění řádku s příkazem delay(20000); (čekej 20 sekund)? ArduinoIDE nám napíše, že  zařízení neodpovídá. Proto bude vhodné odesílání v intervalu zajistit pomocí nějakého časovače.

Pro přehlednost jsem přidané řádky v před setup() označil komentem NEW. V samotném setup() se nic nezměnilo a v loop() je přidaná fce myLoop(), ve které je pár řádků, které zajistí odesílání dat v určitém intervalu pomocí fce SendDataToThingSpeak(), kterou jsem deklaroval níže.

Pokud Vám vše funguje tak gratuluji, pokud ne zkuste napsat do komentářů a třeba problém vyřešíme.

 

1 Komentář

  1. ondra186

    Tak to je parádička 😉
    Dík moc za luxusní články, super práce .

Napsat komentář

Translate »