Protož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:
1 2 3 |
const uint8_t LS_CONNECTING[] = {LEDS_ONFOR + 0, LEDS_OFFFOR + 8, LEDS_RESTART}; const uint8_t LS_CONFIGAP[] = {LEDS_ONFOR + 0, LEDS_OFFFOR + 0, LEDS_ONFOR + 0, LEDS_OFFFOR + 6, LEDS_RESTART}; const uint8_t LS_CONNECTED[] = {LEDS_ONFOR + 0, LEDS_OFFFOR + 0, LEDS_ONFOR + 0, LEDS_OFFFOR + 0, LEDS_ONFOR + 0, LEDS_OFFFOR + 6, LEDS_RESTART}; |
- 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.
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í:
Aktualizace šablony pro IDE 1.8.10 a Core 2.5.2 – POZOR!!! šablona nebude nadále aktualizovaná pro další verze IDE
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
Holt, my sordisti jsme odjakživa šikovný!
🙂 jasně. A taky nestárneme…
Pokud potrebujete ve Windows podporu mDNS, staci nainstalovat Apple ovladac na tiskarnu “Bonjour Print Services for Windows v2.0.2”, ma necelych necelych 6MB.
Pak neni potreba ani iTunes.
Funguje vyborne.
https://support.apple.com/kb/DL999?locale=cs_CZ
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.
Dobrý den,
myslím, že to bude problém s verzí jádra (Core) pro ESP8266. Je třeba použít poslední Stable verzi (2.3.0) – viz. https://github.com/Links2004/arduinoWebSockets/issues/24
P.B.
Diky za skvely navod a example!
Bude fungovat bez upravy i na NodeMcu V3, nebo je potreba neco nastavovat?
http://www.aliexpress.com/item/1PCS-Wireless-module-CH340-NodeMcu-V3-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266/32720917003.html
Bude fungovat, jen je třeba vybrat správnou desku. Testoval jsem na Wemos D1 mini, NodeMCU V3 a mých vlastních deskách…
Ja v Arduino IDE vidim velke mnozstvi voleb: https://www.dropbox.com/sh/sls7dcj8f2ykqor/AAAQZlQfh3OPuUGjiIoxY79wa?dl=0
Nemuzu desku nevhodonou volbou znicit?
Jak treba poznam, jak ma velkou flash a jakou mam pouzit frekvenci flash/cpu a metodu resetu?
Cinska verze NodeMCU v nabidce vubec neni. Nastavil byste Arduino na original “NodMCU v 1.0”, nebo na “Generic ESP8266”?
Moc dekuji za Vase rady!
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)
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?
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.
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
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
Python 2.7.12 mám nainstalovaný ale pořád mi to nejede.?
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 ( https://www.xpablo.cz/?p=987 ).
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
Neodpovídá zařízení. Funguje na něj ping? Co říká Stopař?
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
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í)…
Už to jede!!!! 🙂 dik moc. Na vině byl firewall.
dikdik Patrik
Není zač 🙂
Pavel
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.
Nutný je jen v případě, že používáte servírování souborů z SPIFFS. Máte Arduino IDE nainstalované v portable verzi, jak jsem tady opakovaně doporučoval?
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?
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 !!!
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.
Pak je ale zjevné, že nemáte portable instalaci Arduina. Tím pádem je to bohužel Váš boj. Musíte najít adresář, kam IDE ukládá sketche a do něj vše nahrát. Další problém je v tom, že jste nedodržel návod, který je zde http://esp8266.github.io/Arduino/versions/2.3.0/doc/filesystem.html ale stáhl namísto release verze pouze zdrojové kódy 🙁 , které Vám jsou k ničemu. Doporučuji ten postup dodržet…
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ě.
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é…
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.
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”…
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.
Jo s tímto odkazem a staženým balíčkem už mi to pracuje ok.
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.
Ten návod je stejný již od verze tuším 1.6.5. Google “arduino ide portable” a jsou to třeba hned první dva odkazy na instructables.com . Nebo třeba přímo na Arduinu http://forum.arduino.cc/index.php?topic=330844.0 …
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?
Předpokládám, že bude nutné nové rozbalení, ale nejsem autor toho IDE, takže nevím…
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ěď. 🙂
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ů.
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? 🙂
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…
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. 🙂
Shodou okolností předělávám projekt Lymet ( https://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…).
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.
Dobrý den, mám dotaz. Kde v Číně si necháváte dělat desky na prototypy a jak to vychází finančně?
Dobrý den,
zkouším to zde https://www.seeedstudio.com/fusion_pcb.html . Plošný spoj jsem pro prototyp udělal 5x5cm a měl bych mít 10ks za $9.90.
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ší.
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ů?
Protože srážkoměr a anemometr generují impulzy, které je třeba sčítat a to spící ESP nedokáže a i kdyby dokázalo, tak je to energeticky neefektivní.
Aha 🙂 Už teď už jsem to pochopil. 🙂 Děkuji za vysvětlení.
Není zač 🙂
Jednu (možno hlúpu) otázku mám: dá sa cez OTA nahrávať aj file system, alebo len sketch?
Ano dá. Musí ale být nainstalované rozšíření v Arduino IDE pro tvorbu a upload SPIFFS…
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.
To jsem sice nezkoušel, ale zajímá mě, jaké problémy jsou s integrací do šablony, abych to mohl opravit…
Většinou jsem skončil na chybách při překladu, kterými jsem se se svojí znalostí neprokousal.
Celkem elegantní řešení mi připadá SimpleSDAudio, ale přepsat obsluhu SD karty na práci s SPIFS na to si netroufám.
http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio#init.28.29
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í…
tak ideální námět na další knihovnu, zimní večery jsou dlouhé… 🙂
🙂 …to ale rozhodně ne pro mě… Čas je pro mě hodně chybějící ingredience.
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
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.
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.
Ahoj,
není zač. Jen ten DEBUG_OUT bych zase vrátil zpátky, ať to zbytečně neruší na sériovém portu…
Už se stalo. Ještě jednou dík.
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ěď.
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
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ší?
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).
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ěď.
Ahoj,
co znamená “nefunguje mi…”. Objeví se chybová hláška, nebo se vůbec nepodaří navázat spojení se serverem? Je nahraný SPIFFS pomocí Sketch data upload? …
Diky moc za navedeni. Bylo to v tom, ze jsem nenahral SPIFFS.
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.
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ý).
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í.
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ý…
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.
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…
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í.
Ahoj Pablo,
nevím, kam tdy ten komentář napsat. Narazil jsem na zajímavý počin, ESP Easy zdrojáky na https://sourceforge.net/projects/espeasy . Přišlo mi to podobný tvé šabloně, ale vše klikací. tak jen pro inspiraci.
Ahoj,
díky za upozornění – kdysi jsem se na ten projekt díval a moc se mi líbila struktura ovladačů. Na některé věci to určitě bude dobrá volba…
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.
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…
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.
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.
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.
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().
Díky moc.
Není zač.
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.
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…
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.
Ano – hlásilo to, že jsou plné vyrovnávací buffery pro UDP spojení (nbns používá UDP soket).
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á.
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… 🙂
Tak to je paráda. A já nakupuji krabičky a zdroje a tady je to za 150Kč. Hned to objednávám.
Drobná nevýhoda je že to má jen 1M paměť, ale v konfiguraci 1M/64spiffs funguje i OTA i www stranky ze spiffs.. Jo a navíc k dispozici je i schema.. https://www.itead.cc/wiki/images/4/4c/Sonoff_TH_Schematic.pdf
I OTA? Četl jsem, že to má být od 4M.
Viz šablona, pokud je to víc jak 1M tak OTA povoleno 🙂
Správně – OTA vyžaduje aspoň 1MB flash…
Kdoví, jestli je tato zásuvka rozebíratelná? Kdyby se tam dodalo čidlo a nahrál vlastní program, tak by to byla termostatická zásuvka. Ona jenom samotná krabička stojí 150 Kč.
http://www.ebay.com/itm/Sonoff-S20-WIFI-Smart-APP-Remote-Control-Timer-Socket-EU-Plug-Home-Automation-/192040874270?hash=item2cb687311e:g:tNAAAOSwo4pYPrdu
Je 🙂
http://www.esp8266.com/viewtopic.php?p=51708
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?
Viz schema který jsem přikládal…..
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
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ě.
díky za postrčení,projel sem všechno znova..verze IDE,CORE a jedu..Nic nemeni na tom že nevim proc to neslapalo:-(
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
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.
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
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).
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.
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á.
Ale myslím, že by to mohlo jít – zkuste použít RXD jako OneWire 🙂
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….
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
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).
Ještě jedna poznámka – některé prameny uvádí modrou LED, ale ve schématu https://www.itead.cc/wiki/images/b/b0/S20_EU.SCH.pdf je napsáno červená LED. V každém případě ale platí, že ta LED je společná s ovládáním relé…
Fyzicky tam je Modrá.. Alespoň v kousku kterej mi dorazil
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?
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.
Internetová termostatická zásuvka už funguje.
Díky moc za pomoc se zprovozněním.
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
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());
jde to 🙂 dik dik moc
jen pro info
String getTime() { ………}
TRACE(TRACE_INFO, F(“Time %s”), getTime().c_str());
jeste jednou dik
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.
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) …
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 .]
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.
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
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ží.
Zdravím, Tvoje šablona projektu je super hlavně díky uživatelské možnosti nastavení wifi přístupu skrz AP a pak už to po restartu šlape se zadanými údaji. Chtěl jsem si přidat vlastní parametr pro konfiguraci api_key pro odesílání dat na thingspeak.com, ale netuším jak to do šablony přidat. Neměl bys nějaký příklad, kde by bylo přidání parametru do vynucené konfigurace a jeho následné použití v běžném režimu, např. v loop funkci.
Z výše uvedeného příkladu nejsem vůbec moudrý. Navíc u něj dostanu chybu “‘urldecode2’ was not declared in this scope”
Moc díky
Ahoj,
příklad přímo asi nemám, ale něco “spíchneme”. Ten parametr má být řetězec o jaké maximální délce?
aktuálně má api_key 16 znaků, ale předpokládám, že když pochopím princip, nebude problém to změnit.
Díky V.
To je vlastně pravda – večer, nejpozdějí během zítřka sem něco sesmolím…
Pavel
Takže postup pro použití uživatelského parametru je asi tento:
1. je třeba přidat parametr do struktury EEPROM, která je definována pomocí eepromdata_t za text *** sem pokracuji dalsi polozky, ukladane do EEPROM
char api_key[16+1];
(to +1 je pro ukončovací 0 řetězce)2. je třeba doplnit metodu urldecode2, která ošetřuje escapované znaky v parametru
void urldecode2(char *dst, const char *src)
{
char a, b;
while (*src)
{
if ((*src == '%') &&
((a = src[1]) && (b = src[2])) &&
(isxdigit(a) && isxdigit(b)))
{
if (a >= 'a')
a -= 'a' - 'A';
if (a >= 'A')
a -= ('A' - 10);
else
a -= '0';
if (b >= 'a')
b -= 'a' - 'A';
if (b >= 'A')
b -= ('A' - 10);
else
b -= '0';
*dst++ = 16 * a + b;
src += 3;
}
else
{
a = *src++;
if (a == '+')
a = ' ';
*dst++ = a;
}
}
*dst++ = '\0';
}
3. je třeba dopsat metodu, která uloží obsah parametru do EEPROM
static void saveApiKey(const char *param)
{
char decoded[128];
urldecode2(decoded, param);
setEEPROMString(offsetof(eepromdata_t, api_key), elementSize(eepromdata_t, api_key), decoded);
}
4. je třeba dynamicky vytvořit předlohu parametru a předat ji do WiFiConfig
{
WiFiConfig wifi; // konfigurace ESP modulu (xPablo.cz)
WiFiConfigUsrParameter _apikey("akey", "API Key", getEEPROMString(offsetof(eepromdata_t, api_key), elementSize(eepromdata_t, api_key)).c_str(), elementSize(eepromdata_t, api_key) - 1, saveApiKey);
wifi.addParameter(&_apikey);
wifi.begin(EEPROM_CONFIG_ORIGIN, force, 60, wificfgcb); // startujeme pripojeni
}
5. Až nastavenou hodnotu parametru potřebuji, tak ji vyčtu pomocí
String ak = getEEPROMString(offsetof(eepromdata_t, api_key), elementSize(eepromdata_t, api_key));
Myslím, že tohle je všechno a doufám, že jsem se nikde neuklepl…
Děkuji mnohokrát za skvělý návod, podařilo se mi to nastavit a dělá to přesně co jsem chtěl.
Vláďa
Ahoj, uzasny navod.
Mozna jsem neco prehlednul, ale nemuzu
dohledat jaky je tam firmware.
Dekuji , hlavne za tu trpelivost
Ahoj a diky. Zadny firmware tam neni-je to projekt pro Arduino IDE. Verze Core jsou take v textu uvedeny…
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 .
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.
Díky za rychlou odpověd. Trochu jste mě postrčil.
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.
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.
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?
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.
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.
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…
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
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.
Já jsem myslel, že ZIP se stahuje odtud :
https://github.com/esp8266/Arduino/releases
a tam to není.
Takže to dělám špatně?
Ano, to je špatně – pokud chcete zkoušet Github verzi a nemáte nainstalovaný Git, tak přímo na stránce https://github.com/esp8266/Arduino je zelené tlačítko “Clone or download”, které Vás nechá stáhnout .ZIP verzi repozitáře.
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í.
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á.
Tak už je mi to úplně jasné. Zůstanu u té verze rc2. Děkuji.
Je možné použiť to na doske WEMOS LOLIN32 (ESP32)?
Nejspíš ne.
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.
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é.
Děkuji.
Přeji pěkný den!
Mám prosbu. Mohl byste mne trošku nasměrovat ohledně zprovoznění modulu ESP8266 v rámci TinyLab? Je možné touto cestou programovat přímo modul? Či alespoň poslat čitelnou informaci na webové rozhraní. Já už se pak chytím, ale aktuálně potřebuji nějaký záchytný bod. Moc děkuji,
Radek
Dobrý den,
ESP8266 (modul ESP-01) je k tinylab připojený pomocí konektoru JP8, který je z pohledu programování ESP zapojený tak nešťastně, že programování ESP přímo v tinylab není možné. Pokud chcete použít jiný FW, než AT, musíte ESP-01 naprogramovat mimo tinylab. Doufám, že v dodávce je ESP-01 s alespoň 1MB flash, pak by bylo rozumné do aplikace zařadit OTA a dále už se dá nahrávat aplikace i do modulu, který je zapojený v tinylab. Možná by stálo za to udělat mix šablony v tomto článku s https://www.xpablo.cz/?p=881 , protože tinylab je s ESP propojený sériovým rozhraním.
Dobrý den, krásná věc – co jsem objevil tuto stránku hned mě napadlo k čemu bych ET šablonu využil ! Mám otevřený projekt(nestihl 2017 tak snad na Vánoce 2018) Vánoční hvězdy vytisknuté z čirého PLA podsvícené RGB adresovatelnými diodami WS2812 a původně jsem myslel že by to jelo na arduinu pro mini s bluetooth, ale použiji asi ESP-01 co se mi válí v šuplíku(stačí na obsluhu diod jen jeden GPIO). Jen aby mi stačilo 512kB…
Dobrý den,
zajímavý nápad, ale s těmi 512kB nevím, nevím – s posledním SDK a Core 2.4.0 mi projekty naběhly o pár desítek kB 🙁 …
Zdravím. Ještě se vrácím k wifi zásuvce. Funguje, nejvíce problému dělalo, že se “sekalo” wifi. Teď v loop kontroluji a když tak zařízení celé restartnu, a už se nestalo, že bych po příchodu do kanceláře mrznul 🙂
Zařízení nastavuje přes webový formulář, který uděla HTTP Get přímo na zásuvku. To ale znamená, že musím nastavit v daném místě NAT. Toto chci obejít. Napadá mě, že bych mohl na svém serveru ukládat soubor ve formě textového souboru (XML,JSON) nebo databáze SQL. Zasuvka by se pak pravidelně dotazovala na parametry. Myslíte, že je to takto vhodné? Neexistuje nějaké jiné řešení, které nemůžu vygůglit?
Děkuji.
Dobrý den,
pokud nechcete vyrobit díru ve firewallu a máte k dispozici vlastní server, tak je asi opravdu nejlepší ten JSON, nebo MySQL connector … Další možností pak možná je opřít se o third party věc, jako je třeba IFTTT, ale to moc rád nemám.
Ahoj.
Po delší době jsem se vrátil k této šabloně a nějak jsem se zasekl. Sketch data upload se taky tváří, že je OK. Konfigurace WiFi v pohodě. Nastavil jsem si pevnou IP, ale prohlížeč skončí na timeout. Angry IP scan ji taky nevidí. Až jsem uspěl s mobilní aplikací WiFi map, která tuto adresu vidí, ale to je vše.
Chtěl jsem to zkusit nastavit znovu, ale netuším, jak to nastavení WiFi vyčistit. Jak se dostanu zpátky na stromy?
Používám Wemos D1 mini.
Díky
Tak problém byl nakonec mezi PC a židlí. Pečlivým pročtením předchozích příspěvků jsem vynutil konfiguraci a pak zjistil, že v nastavení pevné IP jsem zadal masku podsítě 255.255.255.255. 🙁 s 255.255.255.0 to funguje mnohem lépe. 🙂
Ahoj,
tak to je super. Včera měla dcera promoce, takže jsem nedokázal reagovat 🙂 …
Ahoj.
Pěkná práce!
Šablonu jsem sice nepoužil, ale čerpal jsem z ní informace pro vlastní řešení nastavení WiFi pro “Wemos D1 mini lite”. Potřeboval jsem udělat Wifi tak aby když zařízení vezmu někam kde je Wifi, ale samozřejmě není možnost psát SSID a pswd do zdroje, tak aby mi Wemos udělal AP a přes SPIFFS jsem zadal parametry pro připojení tak aby se následně jako AP vypnul a připojil se k zadané Wifi jako klient.
Takže. Mám to vyřešené, ale s čím nemohu pohnout je mDNS. Mám to nastavené, ale když následně na mobilu s Androidem zadám do Chromu “hostName”.local tak se mi nevrátí odpověď. I když tam webserver běží, protože když se pak dotážu IP adresou tak je to v pořádku. Samozřejmě s IP je ten problém, že po jejím přidělení od DHCP může být “jakákoli”. Proto jsem chtěl ten hostName.
Je to vůbec funkční, protože jsem někde četl, že to na Androidu neběží (možná stará informace: https://tttapa.github.io/ESP8266/Chap08%20-%20mDNS.html – úplně až dole.
Díky za jakékoli nakopnutí ke zdárnému konci 😉
Ahoj,
díky. Bohužel na Androidu je mDNS opravdu problém. Je spousta žádostí o doplnění podpory alespoň do Chrome, ale realizace je v nedohlednu 🙁 . Řeším to tak, že mám nainstalovaný ZeroConfBrowser ( https://play.google.com/store/apps/details?id=com.melloware.zeroconf&hl=cs ), kterým si zařízení vyhledám.
Ahoj.
Díky za info.
Bohužel ZeroConfBrowser nezafunguje v případě, že je na routeru “něco” vypnutého, protože teď když jsem v práci a testuji to tak ZeroConfBrowser hlásí, v lepším případě NO_SERVICES a nebo neukáže vůbec nic (černá obrazovka). Když to testuji doma, tak je stav takový, že ostatní Wemosy, které mi doma běží, tak se v ZeroConfBrowseru sice hlásí a zobrazuje o nic i více informací, ale to je v případě, že na nich je spuštěn režim OTA a HostName je definován přes OTA knihovnu. Ten, který testuji nyní, tak nemá zatím nastavený OTA režim (ale počítám s ním) a používá nastavení HostName přes knihovnu ESP8266MDNS, tak se stejně ukáže jen jako jeden řádek s informací “neznámé zařízení” (teď přesně nevím. Na druhou stranu ani ty s OTA, když ve W10 na ně zadám ping s HostName tak mi stejně neodpovídají. Ale přitom není problém přes OTA se na ně odkázat (Host Name se ukazuje v síťových portech) a aktualizovat sketche pomocí sw Arduino (momentálně používám 1.8.2).
Aha, takže doporučení jak na to:
1. ve sketchi musí běžet mDNS responder – OTA ho spouští vnitřně (jinak by nevěděla, s kým komunikovat) a pokud neběží OTA, je třeba ho spustit ručně třeba MDNS.begin(“jméno”);
2. je třeba zaregistrovat službu, která v zařízení běží do mDNS respondéru, aby ji mohl nabídnout – například takto: MDNS.addService(“http”, “tcp”, 80); – tohle do MDNS-SD zaregistruje běžící webový server na portu 80
3. Windows používají jiný protokol pro zjištění zařízení – NBNS (NetBios Naming Service), takže je třeba spustit ještě NBNS respondér – knihovna už je taky součástí ESP8266 Core.
Díky moc!
Bod 3 mi chyběl 😉
Nainstaloval jsem jádro 2.4.2, doplnil knihovnu a nastartoval NBNS a už to běží.
Ještě jednou díky!
Dobý den,
můžete mi prosím poradit kde by mohl být problém, nastala chyba při kompilaci:
————————————————————————–
C:\___Arduino_IDE_ESP8266\arduino-1.8.5\portable\sketchbook\libraries\espnbns\espnbns.cpp: In member function ‘void NBNS::poll()’:
C:\___Arduino_IDE_ESP8266\arduino-1.8.5\portable\sketchbook\libraries\espnbns\espnbns.cpp:176:54: error: ‘LWIP_PLATFORM_HTONS’ was not declared in this scope
nbnsa.NBNSA_QUESTIONCOUNT = LWIP_PLATFORM_HTONS(0);
^
C:\___Arduino_IDE_ESP8266\arduino-1.8.5\portable\sketchbook\libraries\espnbns\espnbns.cpp:184:58: error: ‘LWIP_PLATFORM_HTONL’ was not declared in this scope
nbnsa.NBNSA_TIMETOLIVE = LWIP_PLATFORM_HTONL(300000UL);// Time to live (30000 sekund)
^
C:\___Arduino_IDE_ESP8266\arduino-1.8.5\portable\sketchbook\libraries\espnbns\espnbns.cpp:200:56: error: ‘LWIP_PLATFORM_HTONS’ was not declared in this scope
nbnsan.NBNSAN_QUESTIONCOUNT = LWIP_PLATFORM_HTONS(0);
^
C:\___Arduino_IDE_ESP8266\arduino-1.8.5\portable\sketchbook\libraries\espnbns\espnbns.cpp:208:53: error: ‘LWIP_PLATFORM_HTONL’ was not declared in this scope
nbnsan.NBNSAN_TIMETOLIVE = LWIP_PLATFORM_HTONL(0);
^
exit status 1
Nastala chyba při kompilaci u desky LOLIN(WEMOS) D1 R2 & mini.
————————————————————————–
Děkuji.
Dobrý den,
jasně – používáte novější verzi Core, než nad kterou byla šablona vytvořena. Zde konkrétně došlo ke kolizi mé původní knihovny s přepracovaným rozhraním na LWIP (ip stack, použitý uvnitř ESP8266). Řešení je jednoduché – odstraňte návaznosti na starou knihovnu NBNS a použijte novou, která je již vestavěná do knihoven jádra.
Dobrý den,
prosím poradíte jak zrusit navaznosti a upravit to?
Dekuji Pavel
Zkuste odstranit include meho puvodniho NBNS a jeho instanci. Pokud se V8m to nepodaří, dejte vědět – snad koncem týdne najdu chvíli a upravím projekt tak, aby šel přeložit pod aktuálním IDE a CORE…
Dobrý den,
mohu poprosit o opravu šablony na aktuální verze?
Děkuji moc, nějak je to pro začátečníka náročné.
Pavel
Ahoj,
zkouším kompilovat šablonu projektu,a vyskákaly na mě tyhle chyby:
C:\Users\janru\Documents\Arduino\Teploměr bazen\teplomer_bazen\teplomer_bazen.ino:41:3: warning: #warning Pouzivame SPIFFS – nezapomen pripravit obsah flash! [-Wcpp]
C:\Users\janru\Documents\Arduino\Teploměr bazen\teplomer_bazen\teplomer_bazen.ino: In function ‘void wificfgcb(wificonfigstate_t)’:
C:\Users\janru\Documents\Arduino\Teploměr bazen\teplomer_bazen\teplomer_bazen.ino:69:10: warning: enumeration value ‘WCS_CONFIGTIMEOUT’ not handled in switch [-Wswitch]
C:\Users\janru\Documents\Arduino\Teploměr bazen\teplomer_bazen\teplomer_bazen.ino: In function ‘bool handleFileRead(String)’:
C:\Users\janru\Documents\Arduino\Teploměr bazen\teplomer_bazen\teplomer_bazen.ino:136:12: warning: unused variable ‘sent’ [-Wunused-variable]
In file included from sketch\src\arduinoWebSockets\src\libb64\cencode.c:9:0:
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:88:1: error: unknown type name ‘uint32_t’
inline uint32_t esp_get_cycle_count() __attribute__((always_inline));
^
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:89:1: error: unknown type name ‘uint32_t’
inline uint32_t esp_get_cycle_count() {
^
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h: In function ‘esp_get_cycle_count’:
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:90:3: error: unknown type name ‘uint32_t’
uint32_t ccount;
^
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h: At top level:
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:112:24: error: unknown type name ‘uint32_t’
void precache(void *f, uint32_t bytes);
^
In file included from sketch\src\arduinoWebSockets\src\libb64\cdecode.c:9:0:
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:88:1: error: unknown type name ‘uint32_t’
inline uint32_t esp_get_cycle_count() __attribute__((always_inline));
^
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:89:1: error: unknown type name ‘uint32_t’
inline uint32_t esp_get_cycle_count() {
^
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h: In function ‘esp_get_cycle_count’:
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:90:3: error: unknown type name ‘uint32_t’
uint32_t ccount;
^
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h: At top level:
C:\Users\janru\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.0\cores\esp8266/core_esp8266_features.h:112:24: error: unknown type name ‘uint32_t’
void precache(void *f, uint32_t bytes);
Snažil jsem se nainstalovat všechny hnihovny, ale už moc nevím jaký další.
Předem díky za radu.
Honza
Ahoj Honzo,
podle všeho používáš čerstvou verzi jádra 2.6.0, která je vydaná pár dní. Bohužel vydání nové verze ssebou vždycky nese nějaké problémy se zpětnou nekompatibilitou. Doporučuji počkat na 2.6.1, která by měla být vydaná (snad) během týdne a vyzkoušet to v ní, pokud to i nadále nepůjde přeložit, tak se tomu budu muset (opět) věnovat a udělat úpravy…
Pavel
Ahoj,
díky za odpověď, trochu jsem to předpokládal.
Honza
Ahoj,
stáhnul jsem starší jádro. Jak píšeš použij jsem: 2.3.0.
To už kompilovat jde.
Po nahrátí do ESP se ukáže AP, nastavím kam se má připojit. A po restartu mu moje AP přidělí adresu ale zahy to vypadá že se kousne (dioda svítí pořád v kuse – nebliká), neodpovídá na ping ani nic dalšího nedělá.
jen ještě dotaz co znamená:
SPIFFS – nezapomen pripravit obsah flash! – jak ten obsah připravit?
Díky
Honza
Ahoj,
doporučuji použít verzi 2.4.2 – myslím, že v té to bylo psané. Příprava obsahu flash znamená připravení (a nahrání) SPIFFS do ESP. To se provádí pomocí arduino-esp8266fs-pluginu, který je třeba mít nainstalovaný v Arduino IDE. Mimochodem včera večer byla vydaná verze jádra 2.6.1, pro kterou zrovna tento plugin přestal fungovat. Zatím na mě nejnovější core působí dost rozpačitým dojmem a s aktualizací bych ještě určitě počkal…
Pavel
Ahoj Pavle,
při kompilaci s verzí 2.4.2 jsme musel zakomentovat espnbns.
Po té se to zkompilovalo v pohodě.
Ale chová se to pořád stejně.
“Po nahrátí do ESP se ukáže AP, nastavím kam se má připojit. A po restartu mu moje AP přidělí adresu, ale zahy to vypadá že se kousne (dioda svítí pořád v kuse – nebliká), neodpovídá na ping ani nic dalšího nedělá.”
Ještě k tomu: SPIFFS – zkoušel jsem tam nahrát nějaký a zatím soubor bez úspěchu. to se tam náhrává při běhu programu nebo musím dám na pin GPIO 0 logickou nulu?
Honza
Ahoj Honzo,
do příspěvku jsem uložil upravenou verzi šablony, funkční pro Arduino IDE 1.8.10 a Core 2.5.2, oveřeno na NodeMCU kitu. Jsou aktualizované také všechny knihovny, takže už je funkční Capive portál při konfiguraci. Tohle byla poslední aktualizace – vzhledem ke stáří šablony, tomu, že už ji dávno nepoužívám a časové náročností údržby ji nadále nebudu udržovat.
SPIFFS se nahrává stejně, jako firmware, akorát to celkem trvá…
Pavel
Dobrý den
Možná se zeptám blbě ale nešla by tato šablona použít na ESP32 https://navody.arduino-shop.cz/navody-k-produktum/vyvojova-deska-esp32.html
A ještě jsem zapomněl dodat tak jestli ano tak mě to vyhazuje In file included from sketch\configuration.h:16:0,
from C:\Users\uzivatel\Documents\Arduino\et-160914a\et\et.ino:25:
sketch\src/trace/trace.h:26:30: fatal error: ESP8266WebServer.h: No such file or directory
compilation terminated.
exit status 1
Nastala chyba při kompilaci u desky DOIT ESP32 DEVKIT V1.
Ano, použít ta knihovna jde, ale je třeba upravit názvy modulů, protože se (bohužel) jinak jmenují.