Malá domácí automatizace s ESP8266, část I. – EasyTherm Connect+, HW

Počátek tohoto projektu se datuje těsně před Vánocemi roku 2016. V mailech, které dostávám se objevil jeden, který se dost vymykal normálu – čtenář Dalibor v něm vykreslil zařízení, které by potřeboval navrhnout. Naprosto jasně definoval požadované vstupy a výstupy, na rovinu napsal, k čemu to potřebuje a jaké jsou jeho záměry. Vyměnili jsme si několik mailů, ze kterých vyplynulo, že si udělal i předběžné rešerše co se týče mechanické konstrukce a použitých komponent, takže komunikace s ním byla opravdu velmi konstruktivní a rychle vedla k dohodě – Dalibor vytvořil zadání, na základě kterého jsem začátkem ledna navrhl hardware prvního dílu stavebnice…

Koncepčně je zapojení modulu EasyTherm běžným zapojením modulu ESP12E s využitím všech dostupných GPIO vývodů.

Zdrojová část je napájena pomocí konektoru mikroUSB s nezbytnou filtrací a ochranou proti přepětí, protože napětí VBUS je rovněž využito pro napájení “chytré” LED.

Jako hlavní rozhraní senzorů bylo zvoleno I2C a microLan s možností použít Strong Pull-Up napájení pro pasívně napájené senzory. Na desce je možnost osadit až tři konektory Jack 3.5mm se čtyřmi póly. Na každý z konektorů je vyvedeno napájecí napětí 3.3V, jištěné vyhrazenou vratnou pojistkou 0.2A a signály SDA a SCL. Signál SCL je možné využít jako MicroLan se Strong Pull-Up tranzistorem (jištěno stejnou pojistkou, jako pro napájení).

Vzhledem k omezenému počtu vývodů modulu ESP12 jsou konektory 1 a 2 paralelně, což poněkud omezuje kombinace senzorů a vyžaduje určitou obezřetnost při zapojování (v nejhorším ale senzory pouze nekomunikují – nemělo by dojít k poškození).

Pro rozšíření možností použití je dále možnost osadit bezdrátový modul RFM69W, který pak nahrazuje zásuvku číslo 3 (bohužel – GPIO vývodů je skutečně poskrovnu).

Celé zapojení je realizováno na desce plošného spoje o rozměrech cca 5.7×5.7cm tak, aby se vešlo do krabičky, určené Daliborem.

Desky opět vyrobilo SeeedStudio (stává se mým “dvorním” dodavatelem PCB pro konstrukce), zatímco Dalibor navrhoval potisk krabičky s logem – jeden z ranných návrhů vypadal takto:

Hotové plošné spoje přišly 13. února a já ještě musel pár dní čekat na zbývající součástky. Osazení a oživení první série pak proběhlo naprosto bez potíží.

(ty zbývající tři čekaly na RFM69W, kterých jsem měl málo).

No a od té doby postupně píši obslužný firmware. Nejdříve jsem začal s ESPEasy, který se mi zpočátku velmi líbil svojí filozofií, ale čím více jsem pronikal do jeho vnitřností, tím více jsem byl rozhodnutý použít právě pouze filozofii a jinak vše přepracovat. Pomalu jsem začal přepisovat jednotlivé komponenty, upravovat a testovat kostry ovladačů senzorů a rozšiřovat koncepci.

Po čase jsem dokázal propojit i více EasyThermů do sítě s předáváním měření (i tato filozofie byla převzata z původního ESPEasy).

Převzal jsem i princip pravidel, který považuji za naprosto unikátní nápad a skvělé řešení. Co se mi však nelíbilo, byl princip zadávání těchto pravidel. V původním ESPEasy se vše píše textově do textového pole ve webovém formuláři, což je sice dostačující (a mě by vyhovovalo), ovšem v době, kdy jedno z největších hesel UX specialistů je “hlavně nenuť uživatele přemýšlet” se tento postup ukazuje být hrubě nedostatečný.

Z předchozích rešerší jsem si pamatoval systém programování pomocí grafických bloků, nazývaný Scratch, který byl určený právě pro jednoduché programování. To je sice super nápad, ale vyžaduje aplikaci běžící na PC, což jsem nechtěl – mým záměrem je, aby vše běželo jen z ESP8266 a jako ovládací a konfigurační aplikace bude použit pouze webový prohlížeč. Naštěstí pro mě existuje Blockly – javascriptová aplikace, běžící snad ve všech moderních prohlížečích s možností vytvoření vlastních programovacích bloků a exportního modulu v potřebné syntaxi Rules z ESPEasy.

Sedl jsem tedy k projektu a (asi po šesté) jsem ho přepracoval – vyměnil jsem souborový systém SPIFFS za nejnovější verzi 2.6 kvůli rychlosti. Původní ESPHttpServer jsem nahradil asynchronním, který umožňuje paralelní obsluhu více dotazů, do Arduino IDE jsem doplnil překlad pro 2MB filesystem a 2MB paměti pro sketch. Dále jsem do Blockly dopsal (a stále dopisuji) bloky, které odpovídají filozofii pravidel a výstupní kompilátor do syntaxe, která odpovídá původním pravidlům z ESPEasy (později je asi přepracuji do formy binárních kódů kvůli rychlosti interpretace). Výsledek pak v současnosti vypadá nějak takto:

Jde o verzi Blockly, která je kompletně servírovaná z ESP8266 včetně veškeré grafiky, audiosouborů, bloků a překladu. Nahrání celého prostředí trvá ve většině případů pod 2.5 sekundy a to včetně nahrání naposledy uložených bloků. Musím nicméně přiznat, že na software mám ještě spoustu práce, takže bude trvat, než vyjde druhý díl článku…

No a na závěr, jako obvykle, ke stažení celý projekt HW pro Kicad.

EasyThermRevA (679.2 KiB, 211 downloads)

19 thoughts on “Malá domácí automatizace s ESP8266, část I. – EasyTherm Connect+, HW”

  1. Ahoj Pavle,
    moc pěkný projekt, budu dále sledovat. Jenom neznám pojem microLAN, i když z pohledu HW chápu o co jde. Je to někde podrobněji definované?

      1. Ahoj Pavle, samozrejme 1-Wire znam, ale pod nazvem microLan jsem to doposud nevidel… holt, clovek se stale dozvida neco noveho. Tesim se na dokonceni, predpokladam, ze to bude projekt velmi “zivotaschopny”.

  2. Ahoj Pavle,
    1-Wire je fajn, ale nevím jestli znáš celkem mladý komunikační protokol PJON. již nějakou dobu ho používám u sebe doma mezi jednotlivými částmi inteligentní domácnosti. je na GITu https://github.com/gioblu/PJON a je to opravdu velice mocný nástroj pro komunikace po jednom vodiči/serial/wireless/TCP mezi různými platformami (arduino, ESP, raspberry…)

    1. Ahoj Vašku,
      díky za informaci – ten protokol jsem neznal, ale myslím, že jde trošku o něco jiného. EasyTherm má být postavený tak, že se připojují (pokud možno) čidla bez doplňkové elektroniky. Komunikace mezi platformami je realizována standardně – UDP/TCP protokoly.

  3. Super práce, klobouk dolů. Ten nápad s těmi jacky pro I2C/1Wire je výborný!

    Zariskuju, že budu se svým dotazem za úplného trotla, ale to by se jinak člověk nikdy nic nedozvěděl: Proč jsou na I2C linkách ty 10R odpory?

    1. Díky za pochvalu, ale ten nápad není můj – na internetu se dají najít konstrukce, které to takto využívají a tam jsem se inspiroval (bohužel jsou v drtivé většině vzájemně nekompatibilní).
      Sériové odpory jednak mají chránit oproti vysokonapěťovým špičkám ( https://electronics.stackexchange.com/questions/191866/series-protection-resistors-on-i2c-lines ) a druhak chrání případné výstupy z ESP oproti momentovému zkratu když náhodou uživatel vytáhne, nebo zastrčí konektor zrovna v době komunikace po sběrnici.

  4. Ještě jeden dotaz – dá se tedy bez problémů kombinovat 1Wire a I2C na jedné sběrnici (SPUx piny vyvedené na SCL)?
    Samozřejmě je potřeba ošetřit, aby nekomunikovaly oba protokoly najednou, ale není tam nějaký praktický problém s tím, že senzory slyší oba protokoly?

    1. No bez problémů to úplně není (ty sběrnice nebyly určeny na tento provoz), ale platí že:
      1. I2C čidla čekají na START podmínku, takže “cvičení” za SCL při SDA v H nevidí
      2. 1Wire čidla zase (pokud se na I2C komunikuje dostatečně rychle) nedetekují reset sběrnice, takže do provozu “nekafrají” svým Presence pulzem – problém může nastat, pokud I2C slave používá Clock stretching
      Výsledek je ten, že mi sice SI7021 běžel paralelně s DS18B20, ale nakonec jsem tuto možnost v software zakázal (rád bych si ušetřil honění duchů v budoucnosti)…

  5. Ahoj Pavle,
    odvádíš výbornou práci. Poděkování zaslouží i Dalibor.
    V jakém stavu je projekt? Myslím programování prostředí.
    Hodně zdaru při práci.
    Ondra

      1. Prosím všechny, co se ptají po stavu firmware, aby byli trpěliví – chtěl jsem natočit video s příkladem nastavení nějaké jednoduché aplikace a je to složitější, než jsem si myslel…

    1. Díky za odkazy – ta shoda je skutečně hodně divná (a web zjevně není dokončený), takže předpokládám, že se někdo nechal inspirovat… (neboli sensorio vypadá jako EasyTherm 🙂 )

      1. On to dělá kámoš ze sítě czela.net, dělá na tom asi rok. Takže podobnost nejspíš čistě náhodná. Asi bude shodná inspirace z ESPEasy a Blockly (ale to mi připadá, že jste pojali každý jinak).

        Zkusím ho sem nasměrovat, třeba si můžete vypomoci.

        1. Jasně – říkal jsem si, že když někdo napíše ze sítě czela, do které patří i doména sensorio, tak tam nějaká vazba bude 🙂 … Kontakt na mě na stránkách mám…

Napsat komentář

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