Původně jsem si myslel, že se mě potřeba konstrukce „internetového teploměru“ vyhne, ale jeden čtenář těchto stránek mě, po svých neúspěšných pokusech zvládnout komunikaci s Thingspeak požádal, abych pro něj teploměr naprogramoval. Poštou mi poslal modul, ve kterém celá aplikace měla běžet. Modul je – bohužel – jen obyčejný ESP-01, který zrovna neoplývá vyvedenými I/O signály a taktéž chybí propojení pro opuštění stavu nízké spotřeby, takže jsem byl při psaní celkem omezený možnostmi. Přesto se mi podařilo projekt vybavit několika unikátními vlastnostmi, které jsem u obdobných konstrukcí na internetu zatím neviděl.
Jde zejména o:
- Využití knihovny pro konfiguraci WiFi části, kterou používám prakticky ve všech svých projektech s ESP8266 (vývod RXD je v tomto případě použit pro případnou aktivaci konfiguračního režimu)
- Webové stránky pro konfiguraci parametrů, definujících připojení k Thingspeak a jejich uložení do EEPROM
- Jednoduchá webová stránka s měřenou teplotou, periodicky se občerstvující
- Signalizace běhu programu pomocí modré LED, která je osazená přímo na modulu ESP na vývodu TXD
- Způsob uložení konfigurace v EEPROM pomocí struktury, který je pro programátora velmi přehledný a snadno upravovatelný
Veškeré časování uvnitř aplikace je realizováno mou knihovnou pro obsluhu intervalů, takže nezastavuje ESP.
Jinak se jedná o běžné připojení čidla DS18B20 přes ovladač OneWire a knihovnu DallasTemperature.
Po konfiguraci WiFi, popsané v článku o knihovně pro konfiguraci WiFi a úspěšném připojení k AP můžeme v prohlížeči otevřít webovou stránku s informací o teplotě.
Vnitřně je teplota vyčítána každých 5 sekund a webová stránka je občerstvována každých 10 sekund.
Pro nastavení komunikačních parametrů k serveru Thingspeak slouží stránka /setup, kde je možné nastavit adresu serveru (api.thingspeak.com), přidělený API klíč, název feedu a interval,
ve kterém se odesílají informace.
Kliknutím na tlačítko se konfigurace uloží do EEPROM a současně se všechny parametry mimo jména pro mDNS službu okamžitě použijí, takže pro změnu parametrů v Thingspeak není nutné teploměr restartovat.
Blikající modrá LED na modulku signalizuje běh aplikace.
Tlačítko na titulní fotografii slouží pro uvedení ESP modulu do programovacího režimu, ne pro konfiguraci Wifi – mám to z toho důvodu, že na konektor tak mám přivedeno pouze GND, 3V3, TXD a RXD a stiskem tlačítka při zapnutí modul programuji z Arduino IDE.
Nedostatky:
- čidlo, zapojené přesně podle fotografie je bohužel ohříváno samotným ESP modulem, takže ukazuje teplotu kolem 32-33 stupňů Celsia – je třeba senzor připájet na delší vodiče dostatečně daleko od ESP
- přenos na Thingspeak je pomalý – navázání spojení trvá až 12 sekund a během navazování spojení modul vypadá jako mrtvý, ale není – přiznám se, že tohle považuji za největší nedostatek, ale zatím nevím, co s ním.
- i přes inicializaci mDNS modulu se mi nikdy nepodařilo získat ip adresu pro příkaz ping (zatím na žádném z mých projektů)
Odkaz pro koupi použitého modulu
ESP8266 ESP-01
Zdravím,
studuji vaše články o ESP 8266, ale postupy mi nejsou úplně jasné. Mam verzi 7 a rozchodil sejm připojení k PC – AT příkazy reagují.
Potřeboval bych vědět, jak dostat tento program (měření teploty) do ESP.
Nainstaloval jsem si do vývojového prostředí podporu tak, jak píšete v článku „ESP8266 += Arduino?“.
Musím instalovat nový (jiný) firmware?
Jde program odeslat do ESP přes zapojení se dvěma tranzistory (je to v popisu k Arduino) ?
Děkuji.
DD,
pro nahrání YAFET musíte mít nainstalované Arduino prostředí – v současnosti používám Arduino IDE 1.6.5 r5 v Portable instalaci (tzn. v adresáři nainstalovaného IDE je vytvořený adresář „portable“, do kterého se ukládají knihovny a překladače třetích stran). Dále je třeba nainstalovat podporu pro ESP8266 – používám staging, ale vše by mělo pracovat i ve stable variantě odsud https://github.com/esp8266/Arduino – instalaci provedete přes Board manager. Potom doplníte knihovny, které jsou třeba (WifiConfig, …). Po překladu skriptu ho do modulu nahrávám pomocí USB<->Serial převodníku s 3.3V úrovněmi.
Děkuji. Pokročil jsem. Program se nahrál do zařízení verze 7.
Na telefonu se připojím na stránku. Vidím síť a když se zadám údaje, tak to napíše saved to eeprom,reseting in 10 seconds. Pak se ale nic neděje. Zařízení se nepřipojí k AP. Když dám IP scan, tak ho nevidím. Stále se můžu připojit na zařízení na adrese 192.168.4.1.Vypadá to, že se údaje nezapíší. Kde může být chybka?
Zatím nemám připojen teploměr a tlačítko. Teploměr připojím na GPIO2. Nechci ale přijít o Rx a Tx. Předpokládám, že můžu použít jiné piny. Stisknutím tlačítka se připojí GPIO na GND, že ano? Děkuji.
Takže chyby tam můžou být dvě:
1. zadal jste špatně přihlašovací údaje k WiFi síti, takže se modul nemůže připojit a opět vytvoří nastavovací AP (což nepředpokládám, ale možné to je)
2. modul také vytvoří nastavovací AP pokud je k tomu donucený – ve skriptu YAFET to je patrné na řádku wifi.begin(…., digitalRead(FORCE_CONFIG_BUTTON_PIN)), který je v záhlaví nadefinován na GPIO2, takže chybu bych hledal nejspíš tady
Zkuste změřit napětí na GPIO3, popř. dopište ladící výpis hodnot před voláním wifi.begin().
Tak nevím. GPIO3 má 3.3 V (předtím jsem tam měl připojen převodní USB, teď odpojen, takže na pinu nic není). Pořád je to v setup mode. Jestli se dobře dívám, tak připojením na GND, by se vyvolal setup.
Ano, tím by se vyvolal setup. Ještě zkuste místo digitalRead(…) do skriptu k wifi.begin(….) napsat přímo 1. Pokud se i tak spustí konfigurační AP, tak je problém v zadaných připojovacích údajích, protože AP z nějakého důvodu odmítne připojení modulu. Pokud modul konfigurujete z mobilu, tak pozor na to, že Android implicitně píše první písmeno velké, což může být problém…
Tak bohužel to nepomohlo (ta 1) . Heslo je správně, kontroluji to v adresním řádku. Když jsem dělal pokusy na začátku pomocí AT, tak zařízení získalo IP adresu.
Nejde jen o heslo – i SSID musí být stejně… Ještě jedna věc, jakou úroveň signálu to psalo u vašeho AP při výpisu okolních sítí? (je to to záporné číslo vedle SSID)
Ty údaje by měly být dobře. Číslo je záporné -49. Teď jsem připojil i diodu, ale ani ta nebliká.
-49dBm je poměrně silný signál, takže v tom problém nebude. Dioda nebliká proto, protože má blikat až po připojení k AP. Všechno nasvědčuje tomu, že se z nějakého důvodu modul nespojí s AP. Zkuste ještě udělat jednu věc – otevřete si příklad z ESP8266WiFi se jménem NTPClient. V řádcích char ssid[] a char pass[] napište údaje, které zadáváte pro připojení k Vašemu AP, skript přeložte a nahrejte do modulu. pak se sériovým monitorem podívejte, zda se připojil a zda správně komunikuje.
Tak tento příklad funguje.
Ok, v tom případě ještě vyzkoušejte tohle:
1. prověříte, že používáte knihovnu WifiConfig verzi 2.0, nebo 2.1
2. do YAFET.ino napište za delay(10) v metodě setup() toto:
Serial.begin(9600);
Serial.println(getEEPROMString(offsetof(wificonfigarea_t, ssid), elementSize(wificonfigarea_t, ssid)));
Serial.println(getEEPROMString(offsetof(wificonfigarea_t, pass), elementSize(wificonfigarea_t, pass)));
Skript přeložte, nahrejte a zkontrolujte výpis na sériovém monitoru, zda je nastavení správně.
Tak vypíše to ssid i heslo. Je to správně.
Hmm, tak už mě napadá jen jedna věc – zkuste upravit výpis tak, abyste poznal, že je v SSID, nebo heslu navíc mezera (znak space), která tam nepatří a vznikla nějakým způsobem ve webovém formuláři. Jinak se bojím, že takhle na dálku už asi nepomůžu… Tahle knihovna (WifiConfig) už běhá asi na dvaceti zařízeních a to jsou jen ta, o kterých vím, nebo je sám mám a zatím jsem se s podobným chováním nesetkal.
Tak jsem to upravil na Serial.print a přidal string před a za a mezery navíc tam nejsou.
Já mám verzi 7 zapojeno GPIO 15 na GND, GPIO 02,00,CH_PD na 3.3V. Je tam i převodník na USB a tedy spojeny GND, TxD,RxD (ten jsem měl i odpojený). Ve wifi.begin mám tu 1.
Verzi vaši knihovny mám snad správnou. Znovu jsem stáhnul tu poslední verzi a nainstaloval. Pořád se hlásí to ESPPBSetup.
No ještě snad existuje jedna možnost, ale ta vyžaduje hlubší zásah do knihovny WifiConfig – souvisí s využitím user_interface.h. Pokud si na to troufnete, tak zkuste do metody testWifi(wificonfig_cb cb) před return 0 (připojení se nezdařilo) dopsat ladící výpis wifi_station_get_connect_status() – pokud se vypíše 2, tak to znamená špatné heslo, pokud 3, tak to znamená, že nenašel AP – viz. enum STATION_xxxxx v user_interface.h
Tak jsem to tam doplnil do WifiConfig.cpp.
Ono se to k tomu výpisu ani nedostane.
static uint8_t testWifi(void)
{
int c = WIFI_STA_CONNECT_TIMEOUT;
while (c)
{
if (WiFi.status() == WL_CONNECTED)
return 1; // jsme pripojeni
delay(200);
–c;
}
Serial.print(„Vypisuji status“);
Serial.print(wifi_station_get_connect_status());
return 0; // pripojeni se nezdarilo
}
No ale v tom případě se to musí k něčemu připojit – zkuste doplnit nějaké další ladící výpisy po návratu z testWifi… Jo a ještě jedna věc – určitě nemáte poslední verzi knihovny. Schválně jsem nad stažení napsal POZOR, POZOR… Takže zkuste taky tu novou verzi (i když zrovna tohle by vadit nemělo).
Doplním výpisy. Ten odkaz na knihovnu je špatně https://www.xpablo.cz/?p=678 – vede nazpět. Až teď jsem si toho všimnul a stáhnul správnou.
Do háje 🙁 … Díky za upozornění, opravil jsem odkaz. Omlouvám se…
Tak to bylo všechno tou starou knihovnou (nevšimnul jsem si toho cyklického odkazu). Teď to funguje. Zítra připojím čidlo.
Velice děkuji za vaši pomoc.
Tak to mám radost. Není vůbec zač a ať slouží…
Zdravím. Dorazil mi nový ESP 8266-12 vývojová deska(http://www.ebay.com/itm/201345364308?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT) a chová se podivně. Připojil jsem ho stejně jako 2866-7 a nefungoval. Zkoušel a zkoušel a zjistil jsem, že když „brnknu“ napájením, tak se modul rozjel a fungoval. Dokonce jsem nahrál YAFET (nepřepíše AT příkazy?) Fungoval pak dokonce i bez zapojení pinu 15,2,0. Dneska jsem zapnul napájení a opět nic. ESplorer vypisuje tečky a když brnknu napájením, tak někdy vypíše paznaky a jindy vypíše hlášku, že není LUA firmware (ten ani nechci, zkouším pouze komunikaci). Setkal jste se s takovým podivným chováním? Myslíte, že mám zkusit přehrát oficiální firmware?
Děkuji
Dobrý večer,
shodou okolností tuhle desku mám taky, ale ještě jsem do ní nic nenahrával. Nicméně k problému – v jakém stavu máte ten žlutý jumper? Piny totiž vedou na GPIO0, takže jumper se musí zasunout pouze při nahrávání firmware (každý nově nahraný FW přepíše ten předchozí). Pokud jumper vytáhnete a modul restartujete, tak se spustí Vaše nahraná aplikace. POZOR!!! po internetu kolují různé verze dokumentace a jedna z nich má osazený JP6 konektor pro sériový port (ale doufám, že to je jediný rozdíl). Správný postup nahrání FW je tedy zasunout jumper, zapnout napájení, nahrát FW, odstranit jumper. Zkuste to takto a dejte vědět…
Díky. Udělal jsem to podle tohoto návodu http://www.instructables.com/id/Get-Your-ESP8266-12-Ready-for-AT-Commands/?ALLSTEPS. Je to „živější“, ale divné.
Na AT+GMR to v Arduinu vypíše pouze:
0018000902
a v ESploreru to na AT příkazy nereaguje.
Ono těch návodů na nahrání je jaksi moc. Některé to chtějí na adresu 0x00000 a některé na adresu 0x40000080.
myslíte, že jsem to udělal správně?
No mělo by to vrátit 8 znaků verze. V každém případě to reaguje na AT povely… Jestli jste to udělal správně se odhadnout nedá, protože nevím, jaký FW jste tam nahrával. Já to dělám tak, že když se některý modul zasekne, nebo se potřebuji ubezpečit, že bude „čistý“, tak pomocí staršího programu ESP8266_flasher nahraji binární FW ESP_8266_BIN0.92. Ten se nahrává od 0x000000, obsahuje AT command set a vždy jím ověřím, že pracuje WiFi část. Pak ho přehraji FW, který potřebuji přímo z Arduino IDE. Zkuste do modulu nahrát některý z příkladů pro ESP8266 v Arduinu a uvidíte. Podle mě to skutečně bylo tím GPIO0 – ještě by se na tom mohl podíleg GPIO15, který musí být v L úrovni, ale podle schématu tam je odpor (ledaže by byl prasklý na Vašem kusu).
Díky moc. Zdá se, že opět jste dobře poradil 🙂
Není zač 🙂
Zdravím,
zkouším ESP 8266 http://www.dx.com/p/esp-12e-wi-fi-module-adapter-board-esp8266-wireless-transceiver-module-w-pcb-antenna-for-arduino-386920#.Vppoh4CFNOQ
Ale je trochu divný. Když nahrávám firmware, tak obdržím :
Writing at 0x0006d800… (86 %)
Invalid head of packet
(někdy až na konci, jednou se to nahrálo i celé)
Ale v Arduinoi Ide jde program nahrát, ale modul se nepřipojí k wifi, ale přejde do AP modu. Heslo a SSID si vypisuji, takže jsou OK. Setup je přístupný a údaje se uloží, ale následné připojení už ne. Může to mít souvislost s tím špatným nahráváním firmware?
Děkuji
Dobrý večer,
souviset to určitě může, i když nejpravděpodobnější by pak byly pády aplikace na výjimku, nebo watchdog. Zkuste ověřit, jestli je na modulu osazená 4MB paměť a jestli máte v Arduinu nastavenou správnou velikost flash – u 4MB modulů používám variantu s 3MB SPIFFS. Předpokládám, že napájení máte prověřené a je ok a potřebné piny jsou připojené přes odpovídající pull-up/pull-down rezistory…
Zdravím,
propojení mám :
15: GND
2 : +3.3V přes 10K odpor
CH_PD: +3.3V přes 10K odpor
0: – +3.3V přes 10K odpor, přes tlačítko na GND pro programování
RST +3.3V přes 10K odpor
Ono by se měly i ty piny připojovat na zem přes odpor?
Tu paměť jsem měl nastavenou jenom na výchozí hodnotu 64K SPIFFS. Ale po přenastavení se to nějak nezměnilo. Teď mi to začalo vypisovat, že je to připojena na IP adresu, ale na daná adresa je nedostupná (ten Wemos D1/D1 mini jede bez problémů).
Asi bude modul nějaký pofiderný.
Piny, které mají mít L se sice nemusí přes odpor připojovat, ale pokud se pak spletete a v programu pin nastavíte jako výstupní a nastavíte na něj H, tak může dojít k poškození. Já připojuji datové piny na GND přes 330 ohmů.
Podle toho, co píšete, jste měl nastavený původní modul s 512k flash, což není dobře – už mi to také zlobilo. Přesto si ale myslím, že modul vadný nebude – máte zablokované napájení kondenzátory?
Kondenzátory nemám. Teď jsem vyměnil zdroj (používám činský sted down měnič, který na jiných fungoval) a chodí to pořád do AP modu. Dám 100n keramický.
Dejte raději dva – elektrolyt a paralelně tu malou keramiku…
Dal jsem tam 1000mikro. To je asi moc? Už je to lepší. Když odpojím napájení a opětovně zapojím, tak se to většinou chytne. Nechtělo by to ještě nějak upravit s RESET? Já to mám na +3,3V. Třeba při startu na nějaký kondenzátor?
Ano, můžete to zkusit. 1G už je asi zbytečně moc, takže to bude dělat velký proudový náraz při zapínání a pomalý pokles při odpojení. Zkuste raději 100uF, nebo 220uF – já většinou mám těsně u modulu 47uF a nevím o problémech. Reset jsem nemusel nijak ošetřovat.
Tak asi to fakt byla absence těch kondíků na výstupu. Teď se zdá, že to jede dobře. Díky moc za pomoc.
Dobrý den,
potřeboval bych pomoct s komunikací, potřebuju aby přes modul jsem dodával data do Atmega8, (na webové stránce zmáčknout tlačítko a to by změnilo informaci v AVR) Děkuji za soukromou zprávu
Dobrý den,
a co všechno už máte hotové?
Ahoj, diky za skvelý „prográmek“.vsetko funguje ako ma a ako pre svoje ucely potrebujem. Mam len otazku ci by si vedel pomoct s widgetom pre android ktory by na domovskej obrazovke zobrazoval teplotu. Program metawidget nerozpozna hranice a nefunguje. nasiel som jeden program ktry to ako tak zvladne, ale nie je mozne ho nejak prisposobovat a mam tam velmi velky widget a zabera pol screenu. potreboval by som to len ako okienko s teplotou, mozno tak 2×1 cm kde sa zobrazi teplota, nic ine. ESP bude nastavene ako AP. je mozne poradit? dakujem.
Ahoj,
bohužel s Androidem neporadím – to je Java a tou zatím nevládnu…
Ahoj. diky za info s pluginom…
mam otazku este, pri kazdom spusteni sa nacita a odosle na thingspeak hodnota 85 stupnou. V programe je // osetreni mereni teploty, ale zda sa mi ze to nefunguje nakolko pri spusteni odosle tuto hodnotu.
bolo by mozne napriklad vlozenim pred odoslanim hodit kontrolu:
if (client.connect(server.c_str(), 80))
{
do {
DS18B20.requestTemperatures();
temp = DS18B20.getTempCByIndex(0);
} while (temp == 85.0 || temp == (-127.0));
snazim sa to eliminovat aby bolo mozne pouzit modul s deepsleep funkciou a napajat cez bateriu. podla nejakych rychlych vypoctou by to malo s ds18b20 vydrzat na 3xbeterku 2500mA okolo 2-3 mesiace ak by sa modul zapinal raz za 10 minut na cca 20 sec. Aj toto by sa dalo ovplivnit. Bolo by mozne do /stup vlozit konfiguraciu DHCP alebo manual a zadat ip adresu.? Toto by urychlilo pripojenie a cas potrebny na odoslanie by sa skratil co by nemusel cakat na pridelenie adresy z DHCP serveru. Este jedna otazka- vsetko funguje ako ma kym nezapnem dalsi modul v sieti. ak zapnem druhy tak mam vystup -127 stupnov, pripojenie je skoro nemozne, neoosiela…nejake rusenie moze byt. hned ako odpojim druhy modul tak vsetko ide dalej ako ma.
Ahoj, na možnosti statické konfigurace ve WiFiConfig pracuji, ale hotová ještě není. Co se týče DeepSleep a problému s Dallas čidlem, tak na ESP8266.com se dost diskutuje ohledně opouštění spánku a čtení hodnot. Sám jsem s tím ale zatím neexperimentoval, takže neporadím… Ten druhý modul je napájený ze stejného zdroje?
Nie je. Je napajany Samostatne z baterie a je na nom dht11 tiez s odosielanim na thingspeak. Bezi tam iny program. Nechapem preco ked sa pripoja do siete tak ten s tvojim programom prestane fungovat. Ak sa podari, co nie vzdy sa podari, tak cez veb vidim hidnotu -127. Bolo by mozne rovnaky program aky mas napisat aj pre dht s tym ze bude odosielat Field1 a aj 2 pre dht? Ono by to nemuselo byt ani celkom pre esp01 mam aj nodemcu board. Takze pamat nie je az taky problem. No takze so spustanim dalasom asi len skusat musim. Skusim nejake podmienky a mozno odpor vymenit za nejaky 1k3 ako pisu na esp288.com.diky aj tak. Ak sa zadari dam vediet.
Hmm, tak to netuším – leda zkusit Wiresharkem monitorovat, co se děje na síti. YAFET se dá snadno upravit pro odesílání dvou parametrů za DHT – jen si uprav, které hodnoty se odesílají ve kterém poli.
Ahoj. diky za skvely navod a program. ja by som ta chcel poprosit, nakolko neviem ako na to, spravit toto pre 6 ds18b20 cidiel. s rovnakym postupom ale s moznostou odosielat 6 udajov na thingspeak. popripade v konfiguracii vybrat pocet teplomerov. dakujem za pomoc.
Ahoj,
nejlepší bude začít studiem knihovny pro obsluhu Dallas čidel teploty zde https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/DallasTemperature.h . Myslím, že pak bude jasnější, jak na to…
Zkouším DS18B20 na ESP8266-12E na pinu 13 a 14 a nefunguje mi to jak znám z arduina 5V – pokud mám pull up odpor 4k7 tak vypisuje pořád teplotu 127 °C, až když ho snížím cca na 1k2 tak to začne fungovat, ale stejně občas pošle 127°C. Mám zapojeno napájení jen přes datový vodič, ostatní dva na zem, jak se píše v datasheetu. Netušíte někdo, kde je problém? Nebo je potřeba na 3,3V to provozovat třídrátově?
Takovéhle zapojení DS18B20 je obecně zažitá chyba, která vznikla tím, že lidé nečtou datasheety a prostě to za určitých podmínek funguje… Dovolte mi citovat z datasheetu DS18B20:
In parasite power mode, the 1-Wire bus and CPP can provide sufficient current to the DS18B20 for most operations as long as the specified timing and voltage requirements are met...
A asi dvě vety za tím přidje ta zajímavá část:
However, when the DS18B20 is performing temperature conversions or copying data from the scratchpad memory to EEPROM, the operating current can be as high as 1.5mA. This current can cause an unacceptable voltage drop across the weak 1-Wire pullup resistor and is more current than can be supplied by CPP.
To assure that the DS18B20 has sufficient supply current, it is necessary to provide a strong pullup on the 1-Wire bus whenever temperature conversions are taking place or data is being copied from the scratchpad to EEPROM.
Takže závada je v tom, že při měření teploty ten Dallas vezme až 1.5mA, což už nemusí weak pull-up dát (taky nedá – 4k7 z 3V3…, s odřenýma ušima to nějak/většinou dá ten 1k2), proto by měl buď být napájený přes třetí vodič, nebo je tam třeba připojit Strong pull-up s tranzistorem, který bude řízený z procesoru.
Takže je náhoda, že na 5V arduino mi to chodí bez problémů v několika aplikacích už několik let.. Ach jo. Ale v tomhle případě naštěstí 3 dráty nejsou problém. A to jsem si říkal, že jsem ten datasheet četl podrobně, kdysi dávno mi to chodilo- nechodilo, až jsem z datasheetu, že při phantom napájení je potřeba mít 1 a 3 na gnd…
Ono to většinou z 5V chodí, protože ten pull-up to zvládne dát – potíž je třeba ve chvíli, kdy necháte měřit víc Dallasů teplotu současně. Pak se to napětí propadne a výsledky jsou naprosto nahodilé…
Je možné tento program spustit i na E-12E? Předpokládám že ano ale raději se zeptám a proč název YAFET?
Ano, není důvod,aby to neběželo na ESP-12. Název YAFET vznikl od Yet Another Fu….g Esp Thermometer, protože jsem získal dojem že těchto konstrukcí je plný internet 😉 …
Použil jsem wificonfig v3 a mám problém – nemám tam jaksi možnost konfigurace vzd. serveru a proměnných, pochopil jsem, že je to tím, že už se ve wificonfig nevyužívá externí webserver, předpokládám že bude třeba použít tohle:
WiFiConfigUsrParameter testOnly(„server“, „adresa serveru“, „Default server“, 32, saveServer); ale přesně nechápu jak zadat parametry, aby to pasovalo na yafet.ino…
Uff, přiznám se, že vývoj WiFiConfig jaksi utekl starším projektům – pokusím se co nejdříve o nápravu a aktualizuji YAFET…
dík moc, zkouším s tím něco provést, ale jaksi se mi nedaří.
Ještě k DS18B20 – zkouším dvě čidla, každé na jiném pinu, mám dvě instance OneWire, a čidlo, které je na pinu s pullup rezistorem 4k7 občas vypíše chybu (-127 st.)
to co má pullup 1k2 je bez zaváhání….
Jen pro zajímavost zkuste ty čidla prohodit mezi sebou (odpory nechte na místě). Zajímalo by mě, jestli se nějak projeví výrobní tolerance těch Dallasů…
Tak se na to dívám a problém nevidím – po připojení do WiFi se normálně spustí webový server. Nastavení se provádí na stránce /setup …
Asi bude chyba jinde, i když jsem dal k druhému čidlu odpor 1k2 tak občas pošle -127°C, ale chvilkama i čidlo 1.
mám to nějak takhle:
#define ONE_WIRE_PIN 13 // DS18B20 pin
#define ONE_WIRE_PIN2 14 // DS18B20 pin
OneWire oneWire(ONE_WIRE_PIN);
OneWire oneWire2(ONE_WIRE_PIN2);
DallasTemperature DS18B20(&oneWire);
DallasTemperature DS18B202(&oneWire2);
a při vyčítání hodnot:
DS18B20.requestTemperatures();
DS18B202.requestTemperatures();
Temp = DS18B20.getTempCByIndex(0);
Temp2 = DS18B202.getTempCByIndex(0);
nevím co si o tom mám myslet. Mám čidla napájena 3,3V, ne přes datový pin a pullup rezistor.
Karel
Teoreticky může být zádrhel v realtime záležitostech uvnitř SDK ESP – odhaduji to na to, že se onewire časování občas „potká“ s NMI přerušením od časovače ( http://bbs.espressif.com/viewtopic.php?t=781 )
Dík, tohle mě nenapadlo. Zkusím doplnit podmínky pro hodnoty -127 a 85, aby se měřilo znovu. Mám ty dvě čidla jako rozdílový termostat pro spínání čerpadla u bazénu, a zatím relé cvaká jaksi náhodně, když se načte z teplotního čidla -127… Ještě trochu bojuju s thingspeak, nezměnili náhodou strukturu dat ?
Ohledně Thingspeak neporadím – obecně tyhle služby nemám rád, protože už jsem se několikrát spálil (a nejen já). YAFET ještě upravený nemám, ale přidejte si EEPROM.commit() za ukládání parametrů do EEPROM. Poslední WiFiConfig to vyžadují (mám to napsané i ve změnách k verzi)…
Tak ještě strpení – vydáním Arduino IDE 1.6.10 se (opět) změnilo chování překladače, což mnozí považují za chybu ( https://github.com/arduino/Arduino/issues/5186 ), takže musím projekt opět upravit 🙁
Doplnil jsem podmínky viz příspěvek od MISO – měření bez problému, ale pokud odpojím čidlo, je konec, už se to z cyklu nedostane. Ale nic není dokonalý možná změnit na cyklus for a pokud nebude třba 10 pokusů úspěšných, vypsat chybu.
Zkoušel jsem na thingspeak poslat nějaký data „ručně“ jako http GET a i když mám položky nazvaný teplota1 a teplota2 tak musím poslat z prohlížeče tohle „http://api.thingspeak.com/update?api_key=XXXXXXXXXXXXX&field1=27&field2=21“
aby se data načetly do thingspeak.
Neexistuje něco jako thingspeak pro použití v domácí síti? -třeba na raspberry nebo pod hw?
Pošlete mi kdyžtak kód, nebo ten cyklus umístěte sem – podíváme se na to…
Já jsem nakonec skončil u phant ( http:http://phant.io/ ) v tandemu s node-red a mosca (vše open source, běží na mém stroji) a vizualizace v freeboard (také hostuji u sebe). Jediné, co zatím postrádám je nějaká open source alternativa IFTT (v node-red to není tak pohodlné…) Ta moje cesta k tomuhle řešení byla celkem strastiplná, trvala několik let a vydala by na menší seriál 🙁
Ahoj,
nejvetsi nedostatek – ze vypada jako mrtvy pri navazovani spojeni lze vyresit treba takto. Ja pouzivam pro signalizaci Ticker. Je to systemovy timer, ktery se vola mimo loop() periodicky po zadanem case a v callbacku lze implementovat obsluhu signalizace LED a pak nevypada jako mrtvy. Pokud budes mit ruzne druhy signalizace pro ruzne stavy, tak poznas, co se se zarizenim vzdy deje.
// LED signalisation „flasher“
#include
Ticker SignalFlasher;
const int SIGNAL_LED_PIN = 13;
bool led_status = false;
setup()
{
// …
pinMode(SIGNAL_LED_PIN, OUTPUT);
// signalisation timer setup run periodically 8Hz
SignalFlasher.attach_ms(125, sig_flash_handler);
}
// Signalisation / flasher timer handler
void sig_flash_handler()
{
led_status = !led_status;
digitalWrite(SIGNAL_LED_PIN, led_status);
}
loop
{
delay(5000);
}
Viz take Arduino IDE / Examples / Ticker/Ticker Basic
(v casti examples pro ESP8266)
V #include vypadl vkladany soubor zrejme vlivem pouziti spicatych zavorek – tak zamenuji za uvozovky:
#include „Ticker.h“
… nebo použít LED sekvencer, který jsem také někde tady publikoval. Akorát pozor na to, že ne všechno se dá z ticker callbacku volat – viz. jeho dokumentace https://github.com/esp8266/Arduino/blob/master/doc/libraries.md#ticker .
Ano, ano, s Tickerem je potřeba pracovat s vědomím, že se callback volá vlastně z přerušení a proto tam lze provést jen nezbytně krátkou práci a hlavně žádné blokování. Pro nastavení LED stavu to vyhovuje.
Podíval jsem se do LED sekvenceru (zde https://www.xpablo.cz/?p=1048) a ten pracuje taky v přerušení, takže to je vlastně vyřešené a kdyby to bylo potřeba, tak stačí jen přidat do teploměru 🙂