ESP8266 pro začátečníka – Šablona projektu

thinkespProtože dost často dostávám dotazy (a nebo přímo prosby) na vytvoření aplikační kostry pro projekty, na kterých byste rádi pracovali, rozhodl jsem se vytvořit šablonu, která co nejvíce zjednoduší vytvoření základu, do kterého pak můžete vepsat vlastní aplikaci. Jedním z vás je i Patrik, který je v Arduinu začátečník a navíc má, na naše poměry poněkud exotickou konfiguraci HW (pracuje na Macu), se kterým jsem se domluvil na tom, že mi bude dělat testera a oponenta. Výsledkem by tedy měla být šablona, která půjde využít v Arduinu napříč platformami Windows, Linux a Macintosh. V závěrečné fázi se ještě přidal Štěpán, který šablonu také ověřil, opravil některé nejasnosti v popisu, kterých jsem se dopustil a přispěl připomínkami ke srozumitelnosti textu.

Nejdříve jsme si stanovili základní požadavky na šablonu, která musí obsahovat (vypisuji z naší mailové korespondence):

  • Dovolí to nakonfigurovat připojení k WiFi síti, aniž by se musel upravovat zdrojový kód aplikace
  • Připojí se to k WiFi (konfigurace se provádí jen jednou, pak už si to modul pamatuje)
  • Spustí se Arduino OTA (aktualizace firmware přes WiFi, aby to nemuselo být stále připojené k PC/USB)
  • Bude to viditelné na ping pro Mac/Linux (jméno.local) a pro Windows (jméno)
  • Spustí to web server
  • Bude tam základní html stránka s příkladem (kostrou)
  • Webový server umožní servírování statických stránek a souborů z SPIFFS

Takže můžeme začít…

Popis

Šablona ET (ESP Template) má sloužit pro rychlé vytvoření kostry projektu, založeného na ESP8266 a Arduino IDE. Instalaci provedeme rozbalením archívu do adresáře, který má stejné jméno, jako projekt, který vytváříme (dále se budu odkazovat na jméno projektu jako <jméno projektu>). Rozbalený soubor et.ino přejmenujeme rovněž na <jméno projektu>.ino . Tímto je veškerá instalace hotová a je možné začít programovat. Spustíme Arduino IDE a pomocí “Soubor”->”Otevřít” otevřeme soubor <jméno projektu>.ino, v menu “Nástroje”->”Vývojová deska” vybereme typ ESP8266, který odpovídá modulu, který používáme. Pokud budete využívat souborový systém vytvořený v normálně nevyužívané části flash paměti ESP8266, tak nezapomeňte zkontrolovat, že máte nainstalovaný doplněk pro tvorbu souborového systému (menu “Nástroje”->”ESP8266 Sketch Data Upload”). Pokud ho nainstalovaný nemáte, tak ho doinstalujte dle pokynů zde.
Uživatelská konfigurace je shromážděna do souboru configuration.h – je zde možné nastavit, zda se má překládat trasovací kód (vhodný pro ladění – položka DEBUG_BUILD), zda se má překládat podpora pro souborový systém do webového serveru (položka USE_SPIFFS) a pin, na který je připojené tlačítko, které vynutí vstup do konfiguračního režimu WiFi (viz. moje články na xpablo.cz WiFiConfig)
V souboru embeddedHTML.h je prostor pro umístění webových stránek, obsažených přímo v kódu, další soubory, které nechceme vložit přímo do kódu ukládáme do adresáře data – nástroj ESP8266 Sketch Data Upload z nich vytvoří obraz vnitřního souborového systému a webový server je dokáže servírovat (viz. příklad index.htm)

V celé šabloně jsem se snažil, aby místa, kam se budou dopisovat uživatelské části byly označeny ****

Obsažené moduly (knihovny)

Aby byla šablona konzistentní, nejsou potřebné knihovny instalovány do IDE, ale jsou obsaženy přímo v adresáři src šablony. V následujících odstavcích je krátce popíši.

WiFiConfig

Knihovna, která se stará o připojení zařízení do sítě WiFi, byla již několikrát popisována na těchto stránkách. V šabloně je uložena zatím poslední verze 4.7, která přináší některé novinky oproti verzím minulým (viz. popis v záhlaví WiFiConfig.cpp). Většina novinek se týká přípravy na použití WiFiConfig v bateriově napájených přístrojích, se kterou ovšem zatím nejsem zcela spokojený, takže je jisté, že úpravy budou pokračovat.

espnbns

Opět knihovna, která zde byla popsána – jedná se o NetBIOS obsluhu jména zařízení, takže je možné najít zařízení v síti Windows pomocí symbolického jména. Tato knihovna brzy bude zastaralá, protože v současné době probíhá její integrace přímo do jádra ESP8266 pro Arduino (už by měla být dostupná v github vývojové verzi pro testování). Ve stabilním sestavení ale zatím (v době psaní tohoto článku) není, takže jsem ji do šablony musel přidat.

interval

Také knihovna, která na stránkách www.xpablo.cz již byla popsána. Slouží pro odměřování časových intervalů a eliminaci použití funkce delay().

led

Jde o primitivní sekvencer, který jsem napsal kvůli ovládání LED diod a optické signalizace. Umožňuje vytvořit prototypy průběhu svitu/zhasnutí signalizační diody a tento průběh pak pod přerušením generuje. V šabloně jsou definovány tři různé průběhy signalizace:

  • LS_CONNECTING signalizuje pokus WiFiConfig o připojení k AP (nebo začátek vytváření AP) a představuje 1x bliknutí LED
  • LS_CONFIGAP signalizuje běžící konfigurační AP a představuje 2x bliknutí LED
  • LS_CONNECTED signalizuje běžící aplikaci a představuje 3x bliknutí LED
trace (stopař)

Tohle je zcela nová knihovna, která si zaslouží podrobnější popis. Ti, kdo v Arduinu programují již déle to určitě znají – možnosti ladění a trasování se omezují v podstatě na ladící výpisy na sériový port, nebo blikání LED. Co ovšem dělat, pokud je sériový port obsazený (tady lze použít knihovnu SoftwareSerial, ale s určitými omezeními), nebo když je zařízení třeba v meteobudce někde na zahradě. Řešením by mohla být právě knihovna trace. Pracuje tak, že ve webovém prostoru serveru vytvoří stránku /trace (např. http://192.168.4.1/trace ), která zobrazí základní informace o modulu a pak se připojí přes webový soket a prakticky v reálném čase zobrazuje ladící výpisy, ukládané pomocí připraveného makra TRACE.

xptarce

POZOR!!! Občas se stane, že se při aktivním webovém soketu (stopaři) neobjeví OTA zařízení v Síťových portech v Arduino IDE. V takovém případě stačí zavřít okno prohlížeče se stopařem a restartovat Arduino IDE – zařízení se v portech objeví. Předpokládám, že jde o chybu někde uvnitř SDK, nebo Arduino knihoven a bude tato nepříjemnost brzy opravena.

Závěrečné shrnutí a postup bod po bodu

No a na závěr bych sem rád uložil postup bod po bodu, který jsem opět vytáhnul z naší mailové korespondence:

  • Přelož šablonu a nahrej ji do modulu (tak, jak jsi to už udělal)
  • Pak to ESP zresetuj (stisknutím tlačítka Reset na modulu, vypnutím a zapnutím napájení, vytažením a zasunutím do USB – podle toho, jaké máš možnosti)
  • No a za cca 30 sekund proskenuj chytrým telefonem (nebo Macem pokud to jde, ale raději telefonem) okolní WiFi sítě. Měla by se tam objevit síť s názvem ESPPBSetup_XXXXXX, kde ty XX jsou nahrazený MAC adresou modulu.
  • Pokud ano, jedeme dál, pokud ji nenajdeš, tak musíme hledat problém… Takže pokud ano:
  • Připoj se k tomu SSID (nejlíp telefonem…) – připojení je bez hesla
  • Otevři na telefonu prohlížeč a zadej URL http://192.168.4.1
  • Klikni na tlačítko s přesměrováním na konfiguraci
  • Na konfigurační stránce vyber Tvůj AP, na který se normálně připojuješ – automaticky se doplní SSID a zadej heslo – je taky dobrý zadat nějaký název vlastního zařízení, k tomu slouží pole “Jméno zařízení” – třeba jen ESP
  • Nechej uložit konfiguraci a restartovat ESP (udělá automaticky, trvá to cca 10 sekund)
  • Po restartu ESP by se mělo celý ESP automaticky připojit do Tvé sítě a být dostupné na ping (např. ping ESP.local (Mac/Linux), nebo ping ESP (Windows) pokud jsi zadal jméno ESP)
  • Pokud tohle všechno běží a restartuješ Arduino IDE, tak po restartu by se to ESP mělo objevit v seznamu portů jako síťový port (běží OTA), který se dá využít pro programování namísto pomalého sériového portu
  • Pokud se něco z toho nedaří, tak spočítej blikání LED diody na ESP (většinou to je modrá LED) a napiš…
  • Popis LED blikání:
    1x bliknutí – snaží se připojit do sítě WiFi, nebo spustit nakonfigurovaný AP
    2x bliknutí – nepodařilo se připojit, nebo byla ručně vynucená konfigurace – v tomto okamžiku běží konfigurační AP se SSID ESPPBSetup_xxxxxxx
    3x bliknutí – připojeno do sítě, normální běh skriptu (běží loop() )

No a teď co dál:

  • Běží Ti OTA, takže můžeš vybrat v IDE ten síťový port  (všechno další nahrávání bude mnohem rychlejší a proběhne po WiFi a ne přes USB)
  • Kliknutím na “Nástroje”-> “ESP8266 Sketch Data Upload” se vygeneruje a do modulu nahraje souborový systém (tohle chvíli trvá…). Nahrání končí restartem ESP, takže musíš chvilku počkat, než se zase připojí – viz. LED blikání
  • Správnost nahrání souborového systému ověříš internetovým prohlížečem, který namíříš na http://<ip adresa, nebo symbolické jméno modulu>/index.htm – pokud vše funguje správně, tak uvidíš “Pozdrav z ESP8266” (prostě obsah index.htm z adresáře data)
  • Šablona obsahuje tajnou zbraň – moji knihovnu stopaře (trace). Dostaneš se k ní tak, že do internetového prohlížeče zadáš http://<ip adresa, nebo symbolické jméno modulu>/trace – zobrazí se dynamicky občerstvovaná stránka s událostmi. Tohle nahrazuje ladící výpisy přes sériový port, což je skvělá věc zejména v případě, že je modul už někde zabudovaný, nebo nemáš přístup k sériovému portu. Ladící výpisy se ukládají pomocí makra TRACE(…), např. TRACE(TRACE_INFO, F(“Nazdar světe”)); uloží text “Nazdar světe”, který se zobrazí zelenou barvou – chce to trošku si s tím pohrát a zvyknout, ale je to výborný pomocník.
  • Ovladač LED je vlastně primitivní sekvencer, který umožňuje nadefinovat vlastní styly blikání diody LED – viz definice LS_CONNECTING, LS_CONFIGAP, … v hlavním .ino souboru.
  • No a to už je vlastně všechno, co to umí – do sekcí, označených hvězdičkami si můžeš doplnit svůj kód a projekt je hotový…

No a na úplný závěr už klasicky informace o použitém vybavení:

OS: Linux Ubuntu 16.04 LTS, Macintosh OSX (verzi bohužel nevím – třeba Patrik napíše…), Windows 7 x64 Pro

IDE: 1.6.9

ESP8266Core: 2.3.0

 

Et-160914a
Et-160914a
et-160914a.zip
85.5 KiB
1074 Downloads
Details

154 thoughts on “ESP8266 pro začátečníka – Šablona projektu”

  1. Dobrý den. Jak prosím řešit problém: ….\sketch\src\arduinoWebSockets\src\libb64\cdecode.c:9:35: fatal error: core_esp8266_features.h: No such file or direktory. WN7, IDE1.6.9. Děkuji za odpověď. J.L.

        1. Jistě – zničit ji (teoreticky) nemůžete. V nejhorším případě se dá vždy přehrát firmware původním AT, který v případné poškozené oblasti s konfigurací WiFi sjedná nápravu. Pokud nemůžu desku najít ve volbách, nebo jde o moji vlastní desku, tak používám Generic ESP8266, Flash mode DIO (ale QIO jsem také zkoušel a na neupravených modulech mi fungovalo), frekvenci hodin mám na 80MHz (standardní hodnota – 160MHz pouze na speciální projekty), frekvence Flash 40MHz – tohle závisí na typu osazené flash paměti, takže se pro jistotu držím při zdi, Flash size – tady je opravdu trošku problém – pokud máte staré ESP-01/03/07, tak ty většinou byly osazeny 512kB flash, máte-li nové ESP-12, tak tam je s velkou pravděpodobností 4MB flash (zatím – nejnovější moduly prý budou mít víc). Skutečnou velikost pak najdete po nahrání ve Stopařovi. Sám používám variantu 4M (1M SPIFFS). Metodu RESETu mám nastavenou jak pro NodeMCU desky, tak pro Wemos, tak i pro moje vlastní na “nodemcu”. Rychlost nahrávání po sériovém portu nastavuji nad 115200 (Linux 230400, Windows 256000)

  2. Pěkná kuchařka, jistě vyzkouším. Mám akorát problém s OTA – v IDE nemám nikde volbu upload USB nebo sítí, mám pouze USB – to se objeví až je nějaký ESP s OTA dostupný, nebo se musí něco doinstalovat?

    1. Položka Síťový port se objeví v menu Nástroje->Port pod položkou Sériový port teprve poté, co na síti nějaké OTA zařízení najde. Většinou to dělám tak, že nahraji OTA firmware do zařízení (pokud ho tam nahrávám poprvé, nebo si nejsem jistý, zda tam už nějaký OTA firmware byl, tak je třeba zařízení fyzicky vypnout od napájení a zase zapnout), pak ukončím IDE, počkám až se zařízení připojí k mé síti a znovu spustím IDE. Síťový port je pak na místě, které jsem popsal… Není třeba nic doinstalovávat.

  3. Perfektní šablona. Jen mám menší problém. Vše jsem dělal podle postupu a vše šlo ok. Došel jsem do konce a chtel jsem přes ota nahrát doplněný (hvezdičky) program do modulu a napsalo mi to tohle a nevím co stím ( dik za radu)

    Projekt zabírá 224 595 bytů (21%) úložného místa pro program. Maximum je 1 044 464 bytů.
    Globální proměnné zabírají 31 656 bytů (38%) dynamické paměti, 50 264 bytů zůstává pro lokální proměnné. Maximum je 81 920 bytů.
    java.io.IOException: Cannot run program “python.exe”: CreateProcess error=2, Systém nemůže nalézt uvedený soubor
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at processing.app.helpers.ProcessUtils.exec(ProcessUtils.java:26)
    at cc.arduino.packages.Uploader.executeUploadCommand(Uploader.java:129)
    at cc.arduino.packages.uploaders.GenericNetworkUploader.uploadUsingPreferences(GenericNetworkUploader.java:97)
    at cc.arduino.UploaderUtils.upload(UploaderUtils.java:78)
    at processing.app.Sketch.upload(Sketch.java:1187)
    at processing.app.Sketch.exportApplet(Sketch.java:1160)
    at processing.app.Sketch.exportApplet(Sketch.java:1132)
    at processing.app.Editor$DefaultExportHandler.run(Editor.java:2409)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.io.IOException: CreateProcess error=2, Systém nemůže nalézt uvedený soubor
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.(ProcessImpl.java:386)
    at java.lang.ProcessImpl.start(ProcessImpl.java:137)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    … 9 more
    Nastala chyba při nahrávaní projektu.

    patrik

    1. Patriku,
      to hlášení znamená, že není nainstalovaný Python a proto nemůže proběhnout upload. Python je nutná součást a je nejlepší ho nainstalovat včetně přidání cesty do Path… Takže je třeba jít na python.org a nainstalovat (já používám Python 2.7).
      Pavel

        1. Je to nejspíš proto, že není přidaná cesta k Pythonu do PATH proměnné. Ověření je jednoduché – spustit příkazový řádek a v něm napsat python a odeslat. Pokud se Python nespustí, je třeba doplnit cestu do systémové proměnné PATH, nebo upravit tuším v platform.txt cestu k pythonu – už to tady Štěpán psal do komentářů k OTA v režimu AP ( http://www.xpablo.cz/?p=987 ).

      1. Doinstaloval jsem Path a ted mi tohlasi
        Projekt zabírá 316 439 bytů (30%) úložného místa pro program. Maximum je 1 044 464 bytů.
        Globální proměnné zabírají 40 268 bytů (49%) dynamické paměti, 41 652 bytů zůstává pro lokální proměnné. Maximum je 81 920 bytů.
        17:50:51 [ERROR]: No response from device
        17:50:51 [ERROR]: No response from device

          1. Ping funguje a stopař píše
            Informace
            Příčina resetu: External System
            Velikost flash: 4194304 bytů
            Volná RAM: 33328 bytů Stále aktualizovat

            Stopař

            [00:00:00.254] Trace: Starting…
            [00:00:04.169] OTA aktivovano

          2. Takže předpokládám, že se zařízení objevilo v síťových portech. Pokud ano, je třeba ho vybrat a znovu zkusit nahrát firmware. To divné chování mohlo být způsobeno tím, že zařízení nebylo vypnuté po prvním nahrání OTA sketche. Pokud to ani tak nepůjde nahrát, je nejspíš na vině firewall Windows – to už jsem také s někým řešil (při instalaci Arduino IDE je třeba při dotazu firewallu povolit přístup do sítě jak veřejné, tak privátní)…

  4. Prosím mám dotaz ohledně instalace ESP8266 Sketch Data Upload – je nutné to doinstalovat? Pokud ano prosím jak postupovat? Na těch stánkách je uvedeno kam dát soubor v linuxu a macu ale jak u Windows? Stahnul jsem ten adresář a rozbalil ho v adresáři tools arduina ale myslím že ten rozbalený adresář je třeba ještě přejmenovat (zatím jsem zkusil ponechat v pojmenování jen esp8266fs ale s tím se nic neděje ani po restartu ide). Předpokládám že když je to plugin tak by v ide mělo být možno ho doinstalovat nebo ukázat ide na ten adresář, ale nikde jsem nenašel jak. Děkuji za radu jak ten modul rozchodit.

  5. Ano je to portable verze 1.6.9 a esp 2.3.0. Tomu servírování také moc nerozumím znamená to že lze nahrát novou stránku přes webové rozhraní? V podstatě je to výměna flash paměti?

    1. V tom případě je správná cesta instalace \Arduino_1.6.9\Portable\sketchbook\tools\ESP8266FS\tool\esp8266fs.jar
      Není to výměna flash paměti, ale změna obsahu souborového systému. Je to jako kdyby k ESP byl připojený disk a přes IDE jste na něj dokázal nahrát obsah.
      Nezapomeňte rastartovat IDE po uložení .jar !!!

  6. Dobrý večer tak se mi moc nedaří stahnul jsem zip arduino-esp8266fs-plugin-master ale není v něm soubor s příponou jar ale pouze java. Je toobdobné ale koncovka jiná. Zkusil jsem vytvořit adrsářovou strukturu kterou jste popsal ale chybí mi adresáře Portable\sketchbook mám verzi instalovanou do adresáře IDE a struktura kterou jsem vytvořil je takováto
    C:\Users\ender\IDE\arduino-1.6.9\tools\ESP8266FS\tool\ESP8266FS.java no ale to nefunguje. Ten soubor ESP8266FS.java jsem vykopíroval z rozbaleného adresáře arduino-esp8266fs-plugin-master.zip respektive jeho adresáře scr.

  7. Prominte ale nechápu to stáhl jsem si portable verzi a rozbalil ji pomocí raru do adresáře IDE. Nic jsem neinstaloval to vím určitě.

    1. Jenomže portable instalace Arduino IDE spočívá ne v tom, že rozbalíte ZIP, ale poté vytvoříte v rozbaleném adresáři adresář portable a teprve pak spustíte IDE. Odkaz na návod jsem sem dával také…

  8. Váš odkaz na instalaci v začátku článku ale ukazuje pouze na ty zdrojové kody a ne na stránku co jste mi poslal nyni v odkazu to je uplně jiný link.

    1. Ne, můj odkaz ukazuje na github repozitář projektu. Pokud v něm kliknete na Release, tak se dostanete na to stejné místo. Je to tak proto, protože se jednotlivé release mění, zatímco v dokumentaci k jádru ESP je pevný odkaz, který časem nemusí být ten správný… Tento postup je také napsaný přímo na hlavní stránce repozitáře viz. “Download the tool archive from releases page”…

      1. Aha vysvětlil jsem si to tak že mám stáhnout ty aktuální balíčky co se tam nabízí a stáhl jsem ten zip. Promiňte tedy je to intuitivní když uvidím odkaz na soubory které se dají stáhnout, tak to udělám a víc v tom nehledám. Neuvažoval jsem o tom tak jak to popisujete.

  9. Prosím nemáte přesnější identifikaci popisu vámi doporučeného rozbalení portable verze když to zadám do vyhledávání tak mi to návod nevyhledá. Děkuji.

  10. Tak že pokud jsem to dobře shlédl pak to spočívá v tom že se do kořene rozbaleného zipu vloží adresář Portable. To se ale musí asi udělat ještě před tím než se to poprve spustí, zkusil jsem ho tam vložit nyní ale zřejmě se to tam už neprolinkovalo. Musí se to ty znovu nainstalovat?

  11. Mohl bych prosím poprosit, o nějaký příklad jak vypsat přes TRACE(TRACE_DEBUG, F(“”)); vypsat nějaké údaje ze senzorů, něco jak to máte vy na tom obrázku viz. výše.
    Proměnnou využívám float, vypisuji do toho teplotu z čidla DHT 22 (AM2302). Děkuji mnohokrát za radu.

    Přes serial to umím vypsat, ale bojuji s tím TRACE.

    Děkuji za odpověď. 🙂

    1. Dobrý den,
      nehledejte v tom žádnou vědu. TRACE je variadické makro, zapouzdřující funkci sprintf, takže má stejnou syntaxi. Výpis float by měl fungovat s použitím formátovacího řetězce “%.2f” ALE bohužel ve stávající verzi Core pro ESP8266 chybí podpora pro float (v Githubu už je, takže v příští verzi už bude integrovaná). Proto zatím používám tuto konstrukci:
      dtostrf(h, 1, 2, str_humidity);
      dtostrf(t, 1, 2, str_temperature);
      TRACE(TRACE_DEBUG, F("DHT: Hum %s%%, Temp %s°C"), str_humidity, str_temperature);

      kde “t” a “h” jsou proměnné float s teplotou a vlhkostí a str_humidity/str_temperature jsou pomocná pole znaků.

      1. Tý jo děkuji za odpověď, nakonec jsem na to přišel tak na půl ale dostal jsem od vás aspoň hezkou poučku a jak to má vypadat, takže jsem si to hned po vašem komentáři odzkoušel a funguje. A také jsem rád, že v další verzi toto bude zakomponované. 🙂 Mohl bych se tedy zeptat, kdy by tak mohla vyjít nová verze? 🙂

        1. Není zač. Rád bych odpověděl, kdy vyjde nová verze, ale to bohužel opravdu nevím. Nejsem hlavní vývojář. Sledujte github – většinou se tam objeví nejdříve stagging verze a pak je release. Ještě mě napadla jedna věc, jak zatím obejít ten float v sprintf. Zkuste tuhle konstrukci:
          TRACE(TRACE_DEBUG, F("DHT: Hum %s%%, Temp %s°C"), String(h, 2).c_str(), String(t, 2).c_str());
          Mohlo by to zatím nahradit absenci floatu…

          1. Tý jo, to je hodně pěkný 🙂 Děkuj za tip. Jinak budu tedy kontrolovat ten github :). Ohledně TRACE, je opravdu pěkný pomocník. 🙂 Jinak řešil jste někdy uspání esp pomocí příkazu ESP.deepSleep? Nebo jak to řešíte popřípadě vy? Hledám co nejlepší řešení, pro domácí meteostanici, a sběr informací pomocí esp, které budou posílat do db záznamy a pak pomocí webu vykreslovat 🙂 tak zjišťuji možnosti jak nejlépe to vyřešit. 🙂

          2. Shodou okolností předělávám projekt Lymet ( http://www.xpablo.cz/?p=513 ) na ESP8266, takže vyjde nový článek, akorát nevím kdy 🙁 . Pro začátek – deepSleep() je skutečně jediná varianta, jak docílit rozumné spotřeby. Protože ale meteosenzory potřebují trvalé snímání, tak jsem doplnil ESP o malý ATTiny, který sbírá data ze senzorů a v případě události/času vzbudí ESP. Plošné spoje na prototypy jsou ve výrobě v Číně (ale časově to vidím tak na Vánoce…).

  12. Trochu z cesty, ale nemáte někdo ověřenu dlouhodobou a teplotní stabilitu vnitřního ref. napětí 1.1V v Attiny, jmen. Attiny85? Chtěl bych z toho udělat balancer na LiFePo4 nebo Li-ion aku, a nevím, jestli stačí tohle, nebo to chce externí ref, třeba lm385. Že bude potřeba počáteční kalibrační konstanta je jasný, tu bych chtěl ukládat do eeprom. Snažím se o minimum součástek, protože když se to dělá 16-krát…(a pak ještě 13x na e-kolo, a ještě x-krát pro známý…) je znát každá koruna na materiálu, velikosti desky a pracnosti.

  13. já mám odzkoušen oshpark.com ale není to čína, ale USA. stačí mít BRD, dělat export do gerberu se mi nejak nechce. Umí min. 3ks a sice to není nejlevnější, ale nejpohodlnější.

  14. Možná se blbě ptám, ale mohl bych se zeptat na tuhle větu:
    Protože ale meteosenzory potřebují trvalé snímání, tak jsem doplnil ESP o malý ATTiny, který sbírá data ze senzorů a v případě události/času vzbudí ESP.
    ——-
    Tomuhle nějak nerozumím, proč se musí senzory trvale snímat? Má to nějaký dopad na měřené hodnoty, či životnost senzorů?

  15. Zkoušel jste někdo vymámit z EPS8266 nějaký zvuk (třeba přes piezzo-měnič)? Arduino Tone() mě na pinu D0 interferuje s pinem D1 a jiný volný nemám, musel bych předělat celou svou pidi destičku s návrhem.
    Prolezl jsem hromadu knihoven, ale buď nefungují s ESP, nebo je nedokážu naintegrovat do téhle šablony.
    Ideálně bych si představoval malou knihovnu pro přehrávání zvukových souborů z SPIFSS, ale stačilo by i nějaké fukční pípadlo, které by se nepralo s jinými knihovnami a přerušeními.

        1. Hmm, tak tuhle knihovnu bude dost těžký portovat pod ESP8266 obecně – část je napsaná s použitím assemblerovských instrukcí pro AVR, přerušovacích vektorů AVR a PWM hardware, který na ESP jaksi neexistují…

  16. Ahoj, vyzkoušel jsem si Tvojí kostru naládovat do LoLi Nodemcu v3.0. Kompilace včetně naflashování proběhla OK.
    Kit mám napájený ze zdroje 3,3V. Po resetu mi jednou blikne LED, objeví se ESP_xxxxxx. Bez problémů se dá k zařízení přihlásit a jde mi i pingnout adresa 192.168.4.1. Webovou stránku už ale z telefonu neotevřu. Poradíš jak dál, případně kde jsem udělal “botu”?
    Dík

    1. Ahoj,
      zkus se k tomu AP připojit z PC/NTB wifi a pak zkus telnetem, zda je otevřený port 80 (webový server). Další možností je odpoznámkování DEBUG_OUT ve wificonfig.cpp (respektive přepoznámkování prázdné metody za ladící výpis). Pak by na sériovém portu měly být vidět žádosti na webový server.

      1. Ahoj, už jsem odpovídal včera večer ale asi jsem příspěvek neodeslal takže činím teď.
        Už mi to funguje ale je mi záhadou proč :-).
        Kromě doporučeného odpoznámkování DEBUG_OUT jsem neudělal ani v zapojení ani v programu žádné další úpravy. Pouze jsem znovu spustil kompilaci a naládoval procesor. A najednou se všechno rozeběhlo a funguje dle popisu.
        Díky za popostrčení a přeji pěkný den.

  17. Dobrý den,
    ještě než jsem narazil na tuto šablonu, tak jsem zkoušel samostatnou nejnovější verzi vaší knihovny WiFiConfig, poprvé to naběhlo dobře, ale pak po vyplnění údajů k AP se to celé nějak podělalo a místo připojení se pak již ani nespustilo konfigurační AP. Začal jsem pak zkoušet i jiné podobné knihovny tak jsem to neřešil, ale teď po nahrání této šablony je problém zas aktuální.
    Místo AP ESP-XXXX… se objevuje AP s SSID domácí WiFI (čili tech údajů co jsem před tím zadával v WiFiConfig). Muselo se to zapsat někam do “eeprom” a teď to dělá neplechu, jen nevím jak se toho zbavit a proč to vlastně dělá. Zkoušel jsem ESP přehrát binárkem jestli se tato část nenaformátuje, ale to zřejmě nepomáhá.
    Do jaké části paměti vaše knihovna tyto data vlastně ukládá? A nešla by dopsat fce na její resetování co by byla zapoznámkovaná z důvodu testování?

    A ještě dotaz… void ICACHE_FLASH_ATTR setup() nahrazuje klasickou fci setup() na kterou jsme z tohoto IDE zvyklí ?

    Děkuji za odpověď.

    1. Dobrý den,
      no nejspíš jste zatrhnul omylem políčko AP, pak se ESP začne chovat jako AP se zadanými parametry. Jedno z řešení (a zároveň odpověď na Váš dotaz ohledně resetu parametrů) je nahrát do ESP skript, který bude na začátku obsahovat WiFi.disconnect(); delay(1000); Ta první instrukce by měla zajistit, že se vymažou parametry, které si ukládá SDK do Flash. Konfigurační flash, kterou používá WiFiConfig je umístěna až někde na konci – umístění je určeno linker skriptem dle vybraného modulu a velikosti/rozvržení paměti. Dalším řešením pak je vynucení spuštění konfiguračního AP (jeden z parametrů WiFiConfig).
      void ICACHE_FLASH_ATTR setup() je obyčejný setup, tak, jak ho znáte z Arduina. Parametr ICACHE_FLASH_ATTR pouze nařizuje linkeru, aby tuto metodu neumísťoval do kódové RAM, kterou se snažím šetřit (podívejte se podrobněji na architekturu ESP8266/Xtensa procesoru a bude to jasnější).
      Hezký den

      1. Děkuji za rychlou reakci.
        Zkoušel jsem tu první variantu, ta bohužel nezabrala…
        A s tou druhou si nějak nevím rady…
        A nevím jestli jsem dobře pochopil to s tím SDK. Jsem myslel že tyto data jsou ukládána jen někam do ty eeprom vaší knihovnou a pak zas čteny, nebo to je složitější?

        1. Při volání .begin(…) nastavte parametr forceConfigure na 1, měl by se pak hned spustit konfigurační AP. Parametry si sice ukládá WiFiConfig modul sám, ale SDK je má uložené také (viz. moje občasné poznámky o šetření přepisy flash paměti a použití .persistent(false).

  18. Ahoj,

    Díky za super šablonu. Mohl by jste mi někdo poradit. Nahrál jsem šablonu, Ota funguje, trace funguje taky, ping taky.Ale nefunguje mi zobrazeni stránky index.

    Co s tím?

    Díky za odpověď.

  19. Ahoj Pablo,
    chtěl jsem se Tě zeptat, jestli nemáš nějaké zkušenosti s Platformio prostředím. Před týdnem jsem si jej nainstaloval a zkouším v něm rozjet věci co jsem měl v Arduino IDE. Líbí se mi, že ke každému projektu může naházet knihovny, jaké potřebuješ. To mi například vadilo u Arduino IDE, nusel jsem měnit pro arduiino a ESP knihovny. No proč vlastně o tom začínám, zkoušel jsem rozjet Tvou šablonu pro ESP, ale nedaří se mi to zkompilovat. Pořád končím na chybě:
    lib\WiFiConfig\WiFiConfig.cpp:49:23: fatal error: DNSServer.h: No such file or directory
    #include
    compilation terminated.

    Nevím proč to nevidí při kompilaci.

    1. Ahoj Electric(u),
      Platformio používám jen velmi okrajově – je sice super, že podporuje spoustu platform, ale dost nesnáším, když instalace aplikace není přenositelná na USB klíčence a to se mi zatím s Platformio nepodařilo. Zkusil jsem ten projekt naimportovat do PlatformIO. Dokud jsem nezatrhl, aby udržel projekt kompatibilní s Arduino IDE, tak import havaroval na adresáři src s tím, že je resource busy (nechápu proč) a abych src přejmenoval. Až jsem zatrhl kompatibilitu s Arduinem, tak sice projekt naimportoval, ale instaloval přitom (znovu) podporu pro ESP a překlad mi skončí s chybou “I:/MyProjects/PAWH_ESP_Template/etpio/etpio/web.ino:48:14: error: ‘www’ was not declared in this scope” protože zjevně špatně naimportoval další .ino soubory (zde konkrétně web.ino). Soubor jsem nakopíroval ručně do správného adresáře, který si PlatformIO vytvořil a překlad skončí na chybě “.pioenvs\esp12e\libFrameworkArduino.a(core_esp8266_main.o):(.text._ZL12loop_wrapperv+0x4): undefined reference to `setup'” a dál na stejné chybě, akorát pro loop. Doporučuji se obrátit na tvůrce PlatformIO a upozornit je na problém. (PlatformIO IDE 1.6.0, CLI 3.1.0, Clang nemám nainstalovaný).

  20. Ahoj,
    zkouším použít knihovnu trace ve svém programu (dle doporučení) a hned při kompilaci to hází chybu :
    Arduino: 1.6.12 (Windows 10), Vývojová deska: “WeMos D1 R2 & mini, 80 MHz, 921600, 4M (3M SPIFFS)”

    In file included from C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\trace/trace.h:26:0,

    from C:\Users\SIMON_~1\AppData\Local\Temp\arduino_modified_sketch_521692\sketch_dec05a.ino:1:

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:64:30: error: expected ‘)’ before ‘addr’

    ESP8266WebServer(IPAddress addr, int port = 80);

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:88:3: error: ‘WiFiClient’ does not name a type

    WiFiClient client() { return _currentClient; }

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:135:22: error: ‘WiFiClient’ has not been declared

    bool _parseRequest(WiFiClient& client);

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:138:19: error: ‘WiFiClient’ has not been declared

    bool _parseForm(WiFiClient& client, String boundary, uint32_t len);

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:141:27: error: ‘WiFiClient’ has not been declared

    uint8_t _uploadReadByte(WiFiClient& client);

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:151:3: error: ‘WiFiServer’ does not name a type

    WiFiServer _server;

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:153:3: error: ‘WiFiClient’ does not name a type

    WiFiClient _currentClient;

    ^

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h: In member function ‘size_t ESP8266WebServer::streamFile(T&, const String&)’:

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\ESP8266WebServer\src/ESP8266WebServer.h:129:10: error: ‘_currentClient’ was not declared in this scope

    return _currentClient.write(file, HTTP_DOWNLOAD_UNIT_SIZE);

    ^

    exit status 1
    Nastala chyba při kompilaci u desky WeMos D1 R2 & mini.

    Táto zpráva by měla mít víc informacií v
    “Zobrazení podrobného výstupu při kompilaci”
    podle zapnuté volby v Soubor -> Nastavení.

    1. Ahoj,
      zkusil jsem překlad projektu, jak je ke stažení zde pod verzí 1.6.12 s cílovou deskou WeMos D1 mini. Bez problému proběhne, takže závada je buď v tom, jak jste rozstrkal knihovny ( C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.2.0\libraries\trace/trace.h:26:0, ), nebo v tom, že používáte starší verzi jádra (2.2.0) – důrazně doporučuji použít verzi 2.3.0, nebo ještě lépe Github verzi – nárůst rychlosti Github verze oproti 2.3.0 co se týče síťových komunikací je řádový. Posledním, co mě pak napadá je, že jste změnil pořadí #include – C/C++ je na tohle dost citlivý…

  21. Zdravím,
    tak jsem upgradoval na verzi 2.3.0 pomocí manažeru desek. Nepomohlo to. Tak jsem stáhnul ZIP soubor z https://github.com/esp8266/Arduino a obsah toho adresáře přepsal 2.3.0 přepsal. Nepomohlo to.
    Pořadí mám snad stejné jako vy :
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include //Netbios Pablo
    #include
    #include “Wire.h”
    #include
    #include
    #include // na Arduinu jde o knihovnu Time.h

    #define DEBUG_BUILD // **** ladici varianta s Arduino OTA
    #ifdef DEBUG_BUILD

    #define TRACE(severity, …) trace_print(severity, __VA_ARGS__)
    #define TRACE_INIT trace_init()
    #define TRACE_ADDWEB(srv) trace_addweb(srv)
    #define TRACE_POLL trace_poll()
    #else
    #define TRACE(…) {}
    #define TRACE_INIT {}
    #define TRACE_ADDWEB(a) {}
    #define TRACE_POLL {}
    #endif

    Ta Vaše šablona, ale zkompilovat jde. Já ty knihovny mám nahrané v :
    c:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.3.0\libraries\..

    Tady jsou opět chyby :
    Arduino: 1.6.12 (Windows 10), Vývojová deska: “WeMos D1 R2 & mini, 80 MHz, 921600, 4M (3M SPIFFS)”

    libraries\trace\trace.cpp.o:(.text.startup._GLOBAL__sub_I__Z10trace_initv+0xc): undefined reference to WebSocketsServer::WebSocketsServer(unsigned short, String, String)'

    libraries\trace\trace.cpp.o: In function __static_initialization_and_destruction_0′:

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.3.0\libraries\trace/trace.cpp:38: undefined reference to WebSocketsServer::WebSocketsServer(unsigned short, String, String)'

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.3.0\libraries\trace/trace.cpp:38: undefined reference to WebSocketsServer::~WebSocketsServer()’

    libraries\trace\trace.cpp.o: In function _GLOBAL__sub_D__Z10trace_initv':

    C:\arduino-1.6.12\portable\packages\esp8266\hardware\esp8266\2.3.0\libraries\trace/trace.cpp:38: undefined reference to WebSocketsServer::~WebSocketsServer()’

    collect2.exe: error: ld returned 1 exit status

    exit status 1
    Nastala chyba při kompilaci u desky WeMos D1 R2 & mini.

    1. Tohle už jsou ale jiné chyby – zdá se, že preprocesor nemůže najít WebSocketsServer – je to zvláštní komponenta, kterou využívá Trace pro rychlý přenos dat. Protokol nasvědčuje tomu, že kompilátor našel hlavičkové soubory, ale linker nenašel přeložený kód k WebSocket. Zkuste zaarchivovat celý projekt a poslat mi ho – zkusím se podívat, v čem je problém…

  22. Zdravím.
    Tak jsem dlouho přesouval knihovny a zjistil jsem, že knihovna trace a arduinoWebSockets musí zůstat v podadresáři src u projektu. Jakmile se přesunou mezi ostatní standardní knihovny ESP, tak to hlásí ty chyby. Teď už se to zkompiluje. Zkoušel jsem poměnit i cesty trace.cpp na include toho arduinoWebCockets, ale bez úspěchu. Teď jdu vyzkoušet nahrát do zařízení.

  23. Zdravím. Jak funguje knihovna led? Třeba ten čas v nižších 6 bitech se nastavuje jak? V led.h je 0x40, ale to je na 7 místě.
    Zastaví to provádění programu?
    Když jsem to dal jako jediný příkaz v loop, tak to nefunguje. Po přidání třeba delay(3000) pak jo.
    Můžete to prosím víc popsat? Zkoušel jsem projít tu knihovnu, ale je to dost na mě složité.
    Děkuji.

    1. Dobrý večer,
      použijte LEDS_ONFOR + [doba – 1]. Když se podíváte například na
      const uint8_t LS_CONNECTING[] = {LEDS_ONFOR + 0, LEDS_OFFFOR + 8, LEDS_RESTART};
      tak to pracuje tak, že LEDS_ONFOR + 0 rozsvítí LED na 100ms, LEDS_OFFOR + 8 zhasne LED na 900ms a LEDS_RESTART celý cyklus opakuje. Program není zastavovaný – je využívaná knihovna Ticker, na jejíž časovač je celý mechanizmus napojený. Jednoduše to pracuje tak, že pod přerušením je každých 10ms vyvolán odpovídající _handler – nehledejte v tom žádnou vědu 🙂 je to jednoduché, jak past na myši…

  24. Aha. Takže 0=100ms jako základ a jenom přičítám počet 100ms
    A proč to zkolabovalo :
    void loop() {
    led.set(LS_CONNECTED);
    }
    Děkuji.

    1. Ano, jde o 100ms krok (u LEDS_ONFOR je k tomu i vysvětlení, u ostatních “povelů” ale už ne). Zkolabovalo to nejspíš proto, že se v loop smyčce neustále nastavuje první stav led automatu. Zkuste dát led.set(LS_CONNECTED) jako poslední příkaz do setup() a loop() nechejte prázdnou, protože se o všechno stará přerušovací mechanizmus Ticker -> LED._handler.

  25. Díky. Ano, napadlo mě to a vyzkoušel jsem to – funguje. Ale kdybych v loop v různých podmínkách nastavoval různé blikání (třeba něco odesláno případně neodesláno na web, připojení WiFi po ztrátě signálu atd), aby to indikovalo stav posledního pokusu, jestli nenastane nějaký zádrhel. Musí (může) se to volat pouze jednou?
    Děkuji.

    1. Nastavování můžete volat kdy chcete, jen je třeba si uvědomit, že každé zavolání .set() spustí sekvenci znovu od počátku – to je pravý důvod toho, proč Vám to nefungovalo při periodickém volání v loop(), protože se sekvencer nastavil na první krok zavoláním .set() a ještě než vypršel čas na krok, tak se volal znovu .set().

  26. Zdravím. Mám ještě dotaz k wifi připojení.
    Jak rychle se musí obnovovat:
    wwwserver.handleClient();
    ArduinoOTA.handle();

    Mám v loop SoftwareSerial a čtení odpověďi z nr2483 (microchip) pomocí mySerial.readStringUntil(‘\n’) trvá kolem 10s. Nejde zobrazit webovou konfiguraci ani nahrát program přes OTA.
    Asi musím readStringUntil vyhodit a udělat vlastní čtení a mezitím obnovovat wwwserver.handleClient(); ArduinoOTA.handle();
    Je to tak, že? Muže tam být ještě nějaký další zádrhel?
    Děkuji.

    1. Myslím, že jiný zádrhel tam nebude – obecně pro ESP (a asi i celé Arduino) platí, že blokující funkce pro čtení streamu je lepší nepoužívat. Raději napište stavový automat pro obsluhu čtení odpovědi…

  27. Zdravím,
    udělal jsem to podle http://www.gammon.com.au/seriál , ale nakonec se ukázalo, že to nebylo tím. Po nějaké chvíli webová stránka vytuhla, program jel ale dál. Scan sítě nenašel zařízení, WiFi.status() byl stále 3.
    V IDE jsem zapnul Debug level -wifi a po cca 2minutách mi to ukázalo : lmacrxblk:1.
    Na webu jsem přečetl něco o problému DNS. Překontroloval jsem program a zjistil jsem, že jsem tam zapomněl dát do loop nbns.poll(); Teď se zdá, že program jede.

  28. já strávil na ESP celé dopoledne 25.12. teprve večer u TV a noťasu jsem zjistil, že problém není v nefunkčnosti ESP, ač se jeví jako mrtvý, ale v drobnosti při práci s AT příkazy , ty se nesmí ukončovat , ale znaky CR LF tj. CTRL+M a CTRL+J (podržet CTRL a po sobě postupně stlačit M a J), pak už ESP odpovídá.

  29. Ahoj. Mám tip pro ty kdo chtějí ESPčkem něco prakticky spínat. TJ řeší jak ho napájet, zakrytovat, a připojit relé. Šablonu jsem úspěšně nahrál do tohoto: http://www.ebay.com/itm/282134166688
    Obsahuje i tlačítko pro vynucení konfigurace, a dvoubarevnou ledku, která s jednou propojkou i svítí zeleně/červeně (bez propojky jen zeleně). A to všechno za 150korun.. no nekupte to… 🙂

  30. Vypadá to, že jsou vyvedeny piny Rx,Tx,GND,Vcc a nezapojeny piny GPIO4 and 14. Snad tam půjde připájet DS18B20.
    Ten původně zmiňovaný modul (ne zásuvka) má vevedené jaké piny?

  31. Zdravím, nevím co dělám blbě nebo kde si nevšímám chyby..ale uz sem bezradný.
    Vždy se mi povede pouze jedno přehrání přes OTA,ale tím si zabiju možnost dalšího nahrání nebo přístupu po síti.
    Dovede mi nekdo poradit,aby bylo možné aktualizovat program po siti opakovaně? Tisíckráte díky

    1. No a na základě čeho máme radit? Typ modulu, verze IDE a Core, úpravy v šabloně?… Pokud mám podporu pro OTA ve skriptu, tak ho můžu přehrát opakovaně.

      1. díky za postrčení,projel sem všechno znova..verze IDE,CORE a jedu..Nic nemeni na tom že nevim proc to neslapalo:-(

  32. Ahoj. Už se delší dobu trápím s WeMos mini. Používám arduino IDE 1.8, nainstalovaný v Nástrojích podporu “ESP8266 Sketch Data Upload”, WIN10, a chtěl bych používat file systém u ESP. Vyzkoušel jsem vše možné, zkoušel jsem testovací program, který do file systému zapisoval a zpětně četl. To fungovalo.
    Ale pokud použiji např. přímo v IDE: příklady/ESP8266WebServer/FSBbrowser. Program přeložím, nahraji, ale na seriovém monitoru mi vypíše:
    FS File: /f.txt, size: 190B
    scandone
    state: 0 -> 2 (b0)
    state: 2 -> 3 (0)

    Connecting to airlive
    state: 3 -> 5 (10)
    add 0
    aid 1

    connected with airlive, channel 11
    dhcp client start…
    cnt
    …..ip:192.168.2.31,mask:255.255.255.0,gw:192.168.2.1
    .
    Connected! IP address: 192.168.2.31
    Open http://esp8266fs.local/edit to see the file browser
    HTTP server started
    pm open,type:2 0

    Jenže soubory do WeMosu nedokáži nahrát. Data mám uloženy v adresáři “data” v adresáři projektu a nic. Po pokusu o nahrání do file systému ESPčka vypisuje jen:

    Exception in thread “AWT-EventQueue-0” java.lang.NoSuchMethodError: processing.app.BaseNoGui.getBuildFolder()Ljava/io/File;
    at com.esp8266.mkspiffs.ESP8266FS.createAndUpload(ESP8266FS.java:179)
    atd…

    Nahrál jsem i Vaši šablonu, file systém taky neúspěšný. Navíc teď pokud nahraji zase znova projekt FSBbrowser, tak uvedené IP adresa ze ser. monitoru je zcela nedostupná. Před tím adresa existovala a vypsala: žadný soubor . Teď nic.
    Jirka

    1. Ahoj,
      nejdřív zkuste ověřit, že máte správně nastavenou velikost SPIFFS vzhledem ke skutečné velikosti flash paměti na modulu (Wemos má 4MB, ale už jsou i klony). Pak zkuste nainstalovat PORTABLE stejnou verzi IDE, kterou mám v popisu. Do ní doinstalujte správnou verzi jádra a správnou verzi mkspiffs nástroje. Pak to zkuste znovu přeložit a nahrát.

      1. Děkuji. Jen jsem přemístil
        C:\Program Files\Arduino\tools\ESP8266FS\tool\esp8266fs.jar
        do
        C:\Users\x\Documents\Arduino\ESP8266FS\tool\esp8266fs.jar
        a file systém nahrán!
        Měl jsem nejdříve řádně přečíst všehcny předchozí příspěvky z diskuze. Omlouvám se, školácká chyba.
        Jirka

  33. Díky moc za Vaši šablonu a informace o zprovoznění. Koupil jsem NodeMCU hardware (abych pro první pokusy nemusel řešit usb/sériový převodník a napájení 3.3V) a první pokus byl právě s Arduino IDE a Vaší šablonou. Na Windows 7 se vše krásně rozjelo, bylo potřeba akorát přiinstalovat Python a samozřejmě podporu ESP8266 Sketch Data Upload. Nyní přes OTA mi už vše v pořádku jede a můžu začít s reálnými pokusy (konkrétně s BMP280 teplota/vlhost/tlak a senzor plynů MQ-135, kde bude docela legrace po probuzení z deep sleep zapnout tomu senzoru plynů napájení na 20 sekund, aby se zahřál a ustabilizoval a pak teprve přečíst údaje).

    1. Není zač. BME280 funguje bez potíží (pozor – pokud skutečně máte BMP280, tak ten nedokáže měřit vlhkost). S MQ-135 nemám zkušenosti, takže jsem zvědavý, jak pořídíte.

  34. Tak mi došla ta zásuvka S20, jak jsme se bavili výše. Je pěkná. Bohužel nejsou vyvedeny piny a tak nemůžu připojit DSb20. Moje internetová zásuvka se nekoná.

    1. Vyvedeny jsou dvě ledky.. proč jednu neodpojit a připojit tam? Vyvedeno je tlačítko… Tam to taky jde připojit.. dokonce při zachování funkčnosti… člověče vy vůbec nemáte fantazii….

  35. Jo, jo. Obvykle mi to dojde až při usínání. Ty diody mě pak napadly. Ale rád bych je tam nechal na signalizaci stavu termostatu.
    S tím tlačítkem se zachováním funkčnosti: při zmáčknutí by to asi ovlivnilo čtení teploty. Asi by to šlo ošetřit. Vyzkouším.
    To použití RXD je ale parádní. Musí se dle mě ukončit seriový port:
    Serial.end();
    DS18B20.requestTemperatures();
    float Temp = DS18B20.getTempCByIndex(0);
    pocitadlo++;
    Serial.begin(9600);

    Díky

    1. Ne, ne – nenechte se zmást tím, co píše Tony, protože to nejsou dobré rady:
      1. je vyvedené tlačítko z GPIO0, takže po připojení DS18B20 je pravděpodobné, že present pulz při zapnutí napájení způsobí nestabilní náběh (ESP si bude myslet, že je vynucený BOOT režim) – nikdo neví, kdy ESP sampluje GPIO pro určení BOOT režimu, takže tohle nebezpečí tady potencionálně je. Navíc přijdete o možnost zařízení aspoň nějak ručně ovládat
      2. jedna z ledek (modrá) je ovládána GPIO12, který současně ovládá relé, takže se použít nedá
      3. druhá LEDka je ovládána GPIO13 – jediná, která by použít šla, ale přijdete o jedinou signalizaci a navíc musíte bastlit
      V podstatě bez větších zásahů je skutečně IMHO možné použít jen RXD. Sériový port ani nespouštějte (a pak ho nemusíte ukončovat).

      1. JJ máte pravdu. RXD je nejjednodušší.. Navíc je na jedné liště kde je GND i Vcc. Osobně bych tam připájel lištu a vypadá to že se tam vejde i protikus na který se připájí dallas… Mimochodem. TXD by nešlo použít?

        1. TXD by použít šlo, ale po resetu jsou na ten pin odesílány zprávy zavaděče (a při pádu systému tam je odeslán crash dump), což by mohlo na OneWire sběrnici simulovat Reset, takže by čidla začaly odesílat presence pulz a šly by dva výstupy do sebe. Sice jen chvilku, ale i tak se vždycky snažím o co nejčistší řešení – proto jsem doporučil RXD, protože to je z hlediska ROM Bootu ESP vstupní pin, takže ho klidně můžeme připojit na bidirectional onewire.

  36. Dobrý den,

    mám dotaz ohledně TRACE

    – mám nadefinovanou funkci void která mi vrací hodnotu String kterou chci zobrazovat přes TRACE jak na to ?

    př: void test (String text);
    return text;

    TRACE(TRACE_INFO, text); ????

    dik

    1. Hele void nemůže vrátit String 🙂 , ale pokud přece, tak od boku asi nějak takhle:
      TRACE(TRACE_INFO, F(“Textik z retezce %s”), test(“Ugachaka”).c_str());

  37. Zdravím, je nějaké řešení jak změnit jmeno zařízeni?
    mám namysli to ESPXXXXX pod kterym se hlásí třeba v routru? Prohledávám knihovnu i program ale zatím sem na nic nenarazil
    Díky.

    1. WiFi.hostname() , ale je třeba jméno nastavit před asociací a DHCP (prakticky před WiFi.begin()). Bohužel jsem zjistil, že tohle není parametr, který SDK ukládá spolu s ostatními přihlašovacími údaji do flash (platí pro SDK 1.5.3) …

  38. ahoj,
    uz podle popisu supr sablona projektu, presne neco takoveho se snazim dat dokupy, plus pridat dve veci mqtt a ssdp
    a na to druhe bych se chtel zeptat jestli s tim nemas nejake zkusenosti? ssdp (https://cs.wikipedia.org/wiki/Simple_Service_Discovery_Protocol) se mi libi z toho duvodu ze clovek muze krasne vyhledat vsechna svoje zarizeni na siti pomoci multicastu, priklad ktery je soucasti knihovny ESP8266SSDP krasne funguje, ale rikam si jestli toho uz clovek na takove male zarizeni nanaklada moc .]

    1. Ahoj,
      bohužel ne – s SSDP jsem zatím neměl tu čest. Pokud jsem potřeboval najít/komunikovat mezi svými zařízeními, tak jsem to měl napsané “po svém”. ESP je sice malá hračka, ale dokáže neuvěřitelné věci 🙂 takže bych se toho vůbec nebál.

  39. Ahoj,
    supr počin, díky za něj. Mohl by jsi ještě prosím, uvést příklad jak přidat a uložit nějaký parametr ?
    Díky

    1. Ahoj,
      díky za pochvalu. Používám to třeba takto:
      {
      WiFiConfig wifi; // konfigurace ESP modulu (xPablo.cz)
      WiFiConfigUsrParameter _firstURL("furl", "URL dotazu", getEEPROMString(offsetof(eepromdata_t, initurl), elementSize(eepromdata_t, initurl)).c_str(), elementSize(eepromdata_t, initurl) - 1, saveFlashURL);

      wifi.addParameter(&_firstURL);
      wifi.begin(EEPROM_CONFIG_ORIGIN, force, 60, wificfgcb); // startujeme pripojeni
      }

      tahle konstrukce přidá parametr do webové stránky. Pro ukládání je ještě třeba napsat:
      static void saveFlashURL(const char *param)
      {
      char decoded[128];

      urldecode2(decoded, param);
      setEEPROMString(offsetof(eepromdata_t, initurl), elementSize(eepromdata_t, initurl), decoded);
      }

      … tohle pak nově nastavený parametr zase uloží.

  40. Ještě jednou zdravím, vše funguje jen s esp8266fs byl problem.Odkaz vede na verzi 0.3.0 a ta se pravděpodobně nekamaradi s IDE 1.6.9. Po staženi verze 0.2.0 FS nahrán.
    Chci použít ESP jako AP u žárovky – jednoduchý web server na ovladani a signalizaci stavu gpio. Prosím o malé nakopnutí kam kod dopsat. Mé pokusy o zkřížení šablony a tohoto projektu https://42bots.com/tutorials/esp8266-example-wi-fi-access-point-web-server-static-ip-remote-control/ skončily vždy chybou .

    1. Dobrý den,
      kam a co jste dopsal? Jakou chybu hlásil překladač? Ten odkazovaný server generuje statickou stránku, takže bych doporučil do embeddedHTML.h uložit předlohu a do et.ino za “- sem je mozno pridavat odkazy na dalsi stranky” je třeba doplnit odkaz na handler pro ovládání té LED. Vlastní handler pak dopište do web.ino.

      1. Zdravím.
        nějak jsem to nepochopil s :”Vlastní handler pak dopište do web.ino.” To se tam “nějak” defaultně hledá?

        Taky jsem zkusil stáhnout poslední verzi ESP pomocí git clone https://github.com/esp8266/Arduino.git esp8266

        Přepsal jsem soubory v ESP 2.3.0 (jinak jsem nemohl dosáhnout, aby se mi to objevilo v manažeru desek)

        Aktualizoval tools, pomocí pomocí get.py

        Takže by to snad mělo být v pořádku.

        Protože už je zahrnutý netbios takže, se šablona upraví :
        #include

        Nahradí se NBNS.begin(WiFiDeviceName);

        A odstraní se volání pool.

        Nemůžu ale odstranit chybu při kompilaci:

        sketch\src\espnbns\espnbns.cpp: In member function ‘void NBNS::poll()’:
        sketch\src\espnbns\espnbns.cpp:176:54: error: ‘LWIP_PLATFORM_HTONS’ was not declared in this scope nbnsa.NBNSA_QUESTIONCOUNT=LWIP_PLATFORM_HTONS(0);

        Přitom ve zdrojovém kodu knihovny vidím, že to tam je definované

        Děkuji.

        1. Dobrý den,
          takže to vezmu popořadě:
          1. ne, nehledá, ale snažím se udržovat v projektech řád, takže obsluhu všech webových handlerů mám koncentrovanou v jednom souboru. Tedy do web.ino napíši např. void mujHandler(), který je volaný při obsluze nějakého requestu. Možná by stálo za to i inicializaci webového serveru celou napsat do web.ino – pak by se modifikoval jen jeden soubor při dopisování, což bude pro začátečníky snadnější a také přehlednější, ale to mi při tvorbě šablony nedošlo.
          2. Vaši instalaci Git core bych tak, jak to popisujete rozhodně nedělal. Dovolím si popsat, jak to praktikuji já (platí pro Windows, pro Linux je postup obdobný):
          a) Stáhnu si zvolenou verzi Arduino IDE ve formátu ZIP, označenou ZIP file for non admin install
          b) Archív rozbalím do vhodného adresáře (např. A1.8.5_ESP8266_Github) tak, abych přímo v tom adresáři měl celý strom (tedy NE další podadresář arduino-1.8.5)
          c) Vytvořím v tomto adresáři složku portable (https://www.arduino.cc/en/Guide/PortableIDE)
          d) Spustím IDE, aby si vytvořilo adresářovou strukturu v portable, při té příležitosti nastavím číslování řádků, code folding – dle zvyklostí toho, kdo to bude používat
          e) IDE ukončím
          f) v adresáři portable\sketchbook vytvořím složku hardware a tools
          g) ve složce hardware vytvořím složku esp8266com a v ní další složku esp8266 – do této složky pak rozbalím stažený ZIP z Gitu tak, že se ve složce esp8266 objeví boards.txt, platform.txt a další soubory + podadresáře.
          h) v podadresáři tools spustím get.py a počkám na instalaci překladače
          i) po instalaci “vyskáču” do adresáře portable\sketchbook\tools, kde vytvořím adresář ESP8266FS a do něj rozbalím uploader pro SPIFFS (objeví se v dalším adresáři tool)
          j) pokud nyní spustíte arduino.exe, tak jsou v manažeru desek všechny ESP8266 desky a v menu je nástroj pro nahrávání SPIFFS
          3. Pokud jste nahradil starý nbns tím, co je integrovaný v Arduino, můžete klidně smazat celý adresář espnbns. Předpokládám, že problém je v tom, že v novém Core je nový LWIP, takže se definice HTONS změnila. V každém případě je lepší používat už integrovaný nbns a ne moji starou knihovnu.

  41. Díky. Tento postup jsem neznal. Funguje.
    Já jsem měl totiž napřed instalované ESP v IDE pomocí Správce Desek Url, co je v nastavení. To pak instalovalo ESP do adresáře package. Chyby byla, že jsem nepoužil package_esp8266com_index.json , který se taky stáhnul.

    To vaše řešení je ale čistší a je to všechno pohromadě.

    Ještě ohledně toho web.ino – ten jenom vložím pomocí include?

    1. Není zač. Nic vkládat pomocí include nemusíte – Arduino builder (ten nástroj, který z Arduina dělá cpp zdroják pro přeložení) pracuje tak, že nejdřív poskládá všechny .ino soubory, které najde v adresáři projektu do jednoho velkého, se kterým pak pracuje.

  42. Zdravím. Dostal jsem se do dalšího problému a už několik hodin ho nemůžu vyřešit. V ESP 2.3.0 mi můj program funguje. Když ho kompiluji v ESP 2.4.0 (?), tak se nedostanu přes ArduinoOTA.begin();
    Pomocí Serial.print jsem se postupně dostal až do knihovny ESP8266mDNS.h, kde se kod provede po:
    dshow(“tady1”); //tady to ještě vytiskne
    if (igmp_joingroup(IP_ADDR_ANY, &multicast_addr)!= ERR_OK) {
    dshow(“konec 2”); // tady už ne.
    return false;
    }
    Tady to čeka cca 2-3s a pak:
    ets Jan 8 2013,rst cause:4, boot mode:(3,6)

    wdt reset
    load 0x4010f000, len 1384, room 16
    tail 8
    chksum 0x2d
    csum 0x2d
    v00000000
    ~ld
    Nemáte prosím nějakou radu, co s tím?
    Přitom Vaše šablona mi (na jiném WeMos) funguje.
    Děkuji.

    1. Dobrý den,
      tak to opravdu netuším – v Git verzi jsem ještě netestoval OTA, ale pokud funguje šablona tak zkusím odhadnout – prověřte, že OTA.begin() voláte ve chvíli, kdy už ESP má přidělenou ip adresu. Připadá mi to, jako kdyby igmp_joingroup nedokázal určit, co má dělat a čeká v nějaké vnitřní smyčce. Ale to všechno jsou jen moje dohady…

  43. Díky. Chci vyzkoušet verzi, kterou stáhnu v ZIP, jestli není chyba tam.
    Když to stáhnu pomocí git, tak tam existuje i adresář package, ve které jsou soubory:
    bild_boards_manager_package.sh
    esp8266-arduino-doc.bash
    merge_packages.py
    package_esp8266com_index.template.json

    Když stáhnu verzi ZIP, tak tam ten adresář není.
    Když se spusti get.py, tak to hlásí, že soubor neexistuje.

    Stáhnul jsem tedy ještě:
    package_esp8266com_index.json

    Vytvořil adresář package, zkopíroval jsem tam ten soubor a přejmenoval ho na :
    package_esp8266com_index.template.json
    a pak spustil get.py. To už fungovalo, ale překlad skončí:
    exec: “/bin/xtensa-lx106-elf-g++”: file does not exist
    Nastala chyba při kompilaci u desky WeMos D1 R2 & mini.

    Asi v tom postupu chybí nějaký krok?

    Děkuji

    1. Tak to je divné – když z Githubu stáhnu pomocí Clone or Download -> Download ZIP, tak tam je i adresář package a obsahuje všechny soubory, které má… Právě jsem to znovu ověřoval.

  44. Když nainstaluji verzi 2.4.0-rc2 pomocí manažeru desek, tak
    můj program funguje bez problémů. Asi je v té poslední verzi, která se stahuje přímo z té hlavní stránky, nějaká chyba.
    (tam fakt ten adresář pachage je).
    Jenom by mě zajímalo, jak instalovat ty uvolněné verze dle vašeho postupu, když tam ted adresář package není.

    1. U každého zveřejněného RC, který se objeví v Releases je vždycky sekce “Obtaining xxxxx pre-release”, kde je odkaz na .json soubor, který můžete instalovat pomocí správce desek i do portable instalace IDE. Můj postup s ručním vytvářením adresářů je určený pro Git verzi – ta se jinak instalovat nedá.

  45. Zdravím, proč prosím následující testovací příklad:
    File f = SPIFFS.open(“/f.txt”, “w”);
    if (!f) {
    Serial.println(“file open failed”);
    }
    Serial.println(“====== Writing to SPIFFS file =========”);
    // write 10 strings to file
    for (int i=1; i<=10; i++){
    f.print("Millis() : ");
    f.println(millis());
    Serial.println(millis());
    }

    f.close();

    // open file for reading
    f = SPIFFS.open("/f.txt", "r");
    if (!f) {
    Serial.println("file open failed");
    } Serial.println("====== Reading from SPIFFS file =======");
    // write 10 strings to file
    for (int i=1; i<=10; i++){
    String s=f.readStringUntil('\n');
    Serial.print(i);
    Serial.print(":");
    Serial.println(s);
    }

    uloží a zobrazí :
    ====== Writing to SPIFFS file =========
    5031
    5031
    5031
    5031
    5031
    5031
    5031
    5031
    5031
    5031
    ====== Reading from SPIFFS file =======
    1:Millis() : 5031

    2:Millis() : 5031

    3:Millis() : 5031

    4:Millis() : 5031

    5:Millis() : 5031

    6:Millis() : 5031

    7:Millis() : 5031

    8:Millis() : 5031

    9:Millis() : 5031

    10:Millis() : 5031

    Ty stejné hodnoty mě překvapují. Je to z nějaké cache?

    Děkuji.

    1. Dobrý den,
      ano, ve chvíli, kdy SPIFFS montuje svazek, tak také alokuje cache buffer (jeho velikost se dá zjistit voláním SPIFFS_buffer_bytes_for_cache(….)). Pokud chcete zjistit skutečnou rychlost, tak buď zapisujte větší balík dat, nebo zkuste po každém zápisu zavolat .flush, ale tady pozor – doporučuji tohle zkoušet jen při testování, protože každé volání flush znamená přepis sektoru flash!!! Rychlost čtení zjistíte jen čtením velkého bloku dat. Někde jsem zaznamenal informace, že rychlosti nejsou konstantní a, zejména u 16MB flash, výrazně klesají s přibývající velikostí souboru. Ale tohle nemám ověřené.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *