pondělí 12. září 2016

WiFi Teploměr a termostat v nové verzi

Před čtyřmi měsíci jsem tu představil první verzi WiFi Teploměru (přičemž nultou verzi, prototyp, jsem právě před rokem předal +Kamil Zmeškal ).

Od té doby jsem několikrát mírně vylepšil plošný spoj, značně jsem zapracoval na firmware, pohnul jsem trochu s cloudovou službou, ujistil se, že 11 čidel připojených naráz není problém, ale s jednou věcí jsem přece jen trochu narazil: když někdo potřeboval spínat programovatelným termostatem ve WiFi Teploměru spotřebič na síťové napětí (tj. 230 V střídavých), musel použít externí relé. K němu pak potřeboval krabičku, musel to propojit kablíkem s WiFi Teploměrem a v tu chvíli to přestalo být elegantní řešení.


Proto přicházím se zbrusu novou verzí WiFi Teploměru/termostatu, která je zaměřena právě na spínání síťového napětí, tedy spotřebičů s příkonem až 2 kW (přesněji 2300 W). Relé je v této verzi napevno vestavěno. Na obrázku níže má WiFi Teploměr pod krytkou vlevo svorkovnici pro vstup síťového napětí a pod pravou krytkou pak spínaný výstup téhož napětí. Zároveň se ze síťového napětí i sám WiFi Teploměr napájí.


Tato nová verze (říkejme jí verze AC) WiFi Teploměru bude existovat souběžně s původní verzí (verze DC), protože má sice výhodu jednoduššího napájení a spínání síťového napětí, ale zase třeba chybí možnost externí antény, což pro někoho může být zásadní nedostatek. A taky neumí běžet na nízké stejnosměrné napětí, takže například v mobilních či od sítě vzdálených aplikacích zůstává verze DC favoritem.


Rozdíly mezi oběma verzemi přehledně shrnuje následující tabulka:
VerzeDCAC
Napájení3 - 23 V stejnosměrných90 - 250 V střídavých
Termostatický výstupvolitelný (+ 300 Kč), 3 AAno, 10 A
Vnitřní WiFi anténaAnoAno
Možnost vnější antényAnoNe
Cena1670 Kč1420 Kč
Vhodné příslušenstvízdroj či USB kabel, anténapřívodní kabel, odvodní kabel

Ostatní vlastnosti, tedy způsob připojení čidel (stereo jack 3,5 mm), firmware a způsob úvodního nastavení, LEDková indikace a ovládání jedním tlačítkem, a také péče a láska, s jakou to vymýšlím, dávám dohromady a testuji, zůstávají stejné.

V případě zájmu pište na petr@pstehlik.cz

úterý 2. srpna 2016

WiFi Teploměr - drobná zlepšení a plány

Už dobře dva měsíce u nás zuří rekonstrukce koupelny, která mi zabírá 120 % volného času a odčerpává většinu fyzických i psychických sil, takže v oblasti kutilství, elektroniky a programování mám fatální skluz.
moje drátové peklo v koupelně - tam jednoho krásného dne budou krabice s Arduiny!

Přesto jsem dokázal mírně pokročit v rozvoji WiFi Teploměru. Především jsem si obstaral "rozdvojky", které lidem umožňují jednoduše rozšiřovat síť teplotních čidel připojených k teploměru.
stereo jack 3,5mm - rozdvojka 

Kromě rozdvojení pro dvě čidla jsem koupil i "rozpětku" - umožní připojit až pět čidel naráz. Nyní tedy mohu lidem, kteří chtějí rovnou začít s více čidly naráz, poslat vše potřebné.
stereo jack 3,5mm - rozpětka

Zkoušel jsem postavit co největší síť s použitím všeho, co jsem doma měl, a dostal jsem se na devět čidel připojených a čtených naráz. Nejspíš to ale není hranice, jen jsem už neměl další rozdvojky :-)
devět čidel zapojených naráz - kdo dá víc?

Dále si lidé přáli napájení z USB nabíječek. To jsem v první fázi vyřešil jednoduše následujícím kabelem, který mohu zaslat na požádání místo 12V zdroje.
napájecí kabel z USB A na barrel jack 5,5/2,1 mm
Pak se ale ukázalo, že i když můj WiFi Teploměr funguje už od 4,75 V, tak některým zdrojům k mobilům (lidově "nabíječkám") kolísá/padá napětí tak nízko, že to teploměru nedělá dobře. Proto právě v těchto chvílích testuji další revizi plošného spoje (celkově šestou v pořadí), která bude kromě step-down měniče mít i lineární stabilizátor právě pro napájení napětím už od 3 V!
pátá (aktuální) revize WiFi Teploměru
Dále jsem postavil zásuvku s vestavěným elektronickým relé. Upravil jsem běžně dostupnou zásuvku ovládanou mechanickými hodinami a připojil ji k termostatickému výstupu WiFi Teploměru.
zásuvka ovládaná WiFi Teploměrem

detail zásuvky - otočné hodiny jsou už jen dekorace
Jak to funguje je vidět na videu níže, kde v zásuvce je zapojena běžná žárovka, WiFi Teploměr má nastavenou hranici sepnutí výstupu nad 27 ℃ a já zahřívám čidlo prstem, aby bylo vidět, že to sepne po dosažení hranice a vypne, když teplota opět poklesne:



Dále plánuji úpravy na serverové/cloudové části WiFi Teploměru, přidám export teplotních dat a nějak lépe vymyslím práci s časovými úseky z minulosti. Jo a chci přidat REST API do WiFi Teploměru, aby šlo jednoduše ovládat všechny GPIO piny.

Taky bych rád napsal jednoduchou aplikaci pro Android, která by si sama našla všechny WiFi Teploměry v síti a zobrazila naráz jejich hodnoty. Samozřejmě jde použít běžný webový prohlížeč a stránku si uložit jako záložku na plochu pro rychlý přístup (doporučuji, kdo to nezná), ale ta Androidí aplikace by mohla dělat s daty i něco málo navíc. Samozřejmě chci také udělat normální web na www.teploty.info, ale na to jaksi pořád není čas.

To mi připomíná, že mě nesmírně těší, že většina lidí, kteří si můj WiFi Teploměr koupili, si obratem koupili (nebo v nejbližší době plánují koupit) i druhý kus. Z toho se mi zdá, že ten můj vynález má jistou hodnotu a na trhu ve své třídě nemá konkurenci :-) Líbí se mi také, co všechno s ním lidé měří nebo řídí - kromě "obligátní" teploty v garáži či včelíně například také teplotu povrchu tenisového kurtu, nebo třeba teplotu skla v průmyslové peci.

Těším se na vaše další příklady úspěšného použití WiFi Teploměru a už plánuji nové, opět velmi praktické zařízení s ESP8266 :-)

čtvrtek 2. června 2016

Odesílání dat z WiFi Teploměru na jiné servery

Ve svém představení webového digitálního WiFi Teploměru jsem zdůrazňoval, jak je super úžasné a bezpečné, že teplotní měření zůstávají jen v lokální síti a jsou tam kdykoliv přístupná přes všechny webové prohlížeče připojené do stejné sítě. Už tehdy jsem ale upozornil, že nakonec stejně asi trošku vyměknu a přidám možnost odesílání dat někam ven, pro lidi, kteří nemají chuť programovat si vlastní řešení.



Od 29. května umí WiFi Teploměr volitelně odesílat data na můj server Teploty.info, který je tam ukládá a kreslí z nich grafy a hlídá mezní hodnoty atd. Samozřejmě se to dá ve webové konfiguraci Teploměru jednoduše vypnout/zapnout. Je přednastaven pevný interval 60 sekund, tedy každou minutu.


To je všechno v pohodě, ale včera v noci mi to nedalo a jal jsem se tvořit konfiguraci pro tu odesílací část. Výsledek vidíte na přiložené fotce obrazovky:


Takto nastavený Teploměr odesílá naměřená data ke konkurenci :-) Samozřejmě je teď možné nastavit odesílání kamkoliv - třeba na ThingSpeak či milion dalších podobných služeb, pokud jim věříte. Svoboda volby je tu!

pondělí 30. května 2016

Arduino: bezdrátový RGB LED a Univerzální síťový modul

Dnes bych chtěl zdokumentovat dvě zařízení, nebo spíš Arduino moduly, které jsem navrhl a vyrobil již před mnoha měsíci, v podstatě hned na začátku mé Arduino kariéry. Používám je ve více hotových  zařízeních, které chci už dlouho popsat (například elektroměr, vodoměr, dětské noční světlo či osvětlení kuchyňské linky). Dnes tedy popíšu ty moduly a příště, při popisu konkrétního zařízení, se sem na hardware jen odkážu.

Smyslem níže popsaných modulů je udělat klíčový krok od prototypu nějakého vynálezu postaveného třeba na Arduinu Uno k finálnímu výrobku vhodnému k trvalé instalaci někde v bytě, domě či dokonce venku. U hotového výrobku obvykle preferujeme co nejmenší rozměry, napájení ze sítě či baterie, kompaktní tvar a pevnou krabičku, nějakou rozumnou svorkovnici - a naopak oželíme třeba USB konektor, který by jen zabíral místo, protože do něj není nic připojeno a už nikdy nebude.

Bezdrátový RGB LED driver

Před delším časem jsem se dověděl o RGB LED páscích - tedy takové "nudli" s plochými diodami, které dokáží svítit libovolnou barvou vzniklou kombinací tří základních barev - červené, zelené a modré. Hned mi učarovaly a chtěl jsem je okamžitě připojit k Arduinu a míchat barvy podle nálady, hudby, okolního osvětlení, teploty, úrovně hluku atd. atp. Ovšem tyto pásky pracují s 12V napájením a odebírají poměrně hodně proudu (podle své délky a výkonu), takže nejdou připojit přímo k Arduino pinům. Tudíž jsem začal pracovat na RGB LED driveru - zařízení, které bude umět řídit tři kanály o velkém výkonu.

video

Zároveň jsem byl v té době fascinován možnostmi bezdrátové komunikace na 433 MHz, kdy přijímač v ceně pod dvacet korun je schopen přijímat signály vysílané běžně dostupnými komerčními zařízeními typu dálkově spínané zásuvky či třeba domovního zvonku. Rozhodl jsem se ho tedy rovnou zapracovat do RGB LED driveru, abych mohl barvy světel ovládat na dálku jakýmkoliv 433MHz vysílačem.

Finální verze má následující vlastnosti:
  • Arduino Pro Mini v objímce (aby šlo lehce vyměnit, kdyby umřelo)
  • napájení přes standardní jack 5,5/2,1 mm (5 - 15 V)
  • tři výstupní kanály schopné spínat PWM výkon do až 15 V a 60+ W
  • bezdrátový přijímač připojený k pinu D2 (kvůli přerušení)
  • tři analogové piny vyvedené na svorkovnici
  • příprava na osazení LDR (fotorezistoru)
  • miniaturní rozměry 48 x 42 x 22 mm
  • kvalitní a pevná standardní krabička "KM 02" z ABS
Ty tři analogové piny vyvedené na vnější svorkovnici byly míněny pro další rozšiřitelnost, aby mohla být LED světla ovládaná i na základě informací z přídavných čidel (např. připojený mikrofon a tlesknutí dlaní). Analogové piny jsou "nejlepší", protože umí fungovat jako vstupně-výstupní, digitální anebo analogové, a jde na nich i vyvolávat externí přerušení procesoru, takže prostě dokáží obsloužit všechny situace.

Schéma zapojení je následující:

Plošný spoj je dělaný přesně na míru krabičky firmou +plosnaky.cz (toto je nějaká nejstarší revize, která ani neladí s nejnovějším schématem, ale pro ilustraci postačí):



Po osazení to vypadá takto:




Naprosto nejtěžší je pro mě vyrobit otvory v krabičce tak, aby přesně seděly na svorkovnici a napájecí zdířku:



Na konci stačí plošný spoj do krabičky jen posadit a zaklapnout víčkem, které kupodivu drží jen třením, není tu žádný šroubek (který by mi uvnitř zavazel):


Tento modul používám aktuálně na třech různých místech v domě (přičemž v jednom případě spíná ventilátor místo LEDek a ve dvou případech nemá bezdrátový přijímač vůbec osazen) a dovoluji si tvrdit, že se mi za ty roky osvědčil. Kdyby někdo měl zájem, mám ještě pár plošných spojů a krabiček, takže bych ho dokázal sestavit (a případně i naprogramovat pro určitou činnost).

Univerzální síťový modul

Toto honosné označení jsem přidělil následující krabičce, na které jsem pracoval déle než rok. V první fázi jsem se snažil integrovat Arduino s ethernetovým rozhraním. Cílem bylo mít zařízení, které bude mít v sobě volně programovatelné Arduino a zvenčí RJ45 síťový konektor, plus svorkovnici s hromadou vstupů a výstupů pro čidla a další rozšíření.


Samozřejmě jsem myslel i na možnost napájení přes PoE, tedy přímo po CAT5 kabelu:


Uvnitř používám komerčně dostupný maličký převodník z Ethernetu na SPI s čipem Wiznet W5100 (tedy stejným, jaký má standardní Arduino Ethernet shield). Celá konstrukce tomu byla podřízena - deska s Arduinem má na sobě konektor 2x5 pinů, do které se "síťová karta" zasunuje:



Když bylo toto Arduino+Ethernet zařízení prakticky hotové a pracovalo mi na několika místech, objevil se WiFi sériový převodník ESP8266 a vzal svět naprostým útokem. Mnozí arduinisté zahodili všechno, co do té doby vytvořili, a vrhli se do světa ESP, kde ale platí trošku jiná pravidla (8x méně analogových vstupů, jen 3,3V úrovně, méně GPIO atd.).

Ne tak já. Místo toho jsem si doslova umanul, že využiju tuto konstrukci a do stávajícího konektoru 2x5 pinů vytvořím modul s ESP8266. Tím se tato krabička stane nejvíc univerzální síťovou platformou, protože umožní plug&play výměnu modulu Ethernetu za modul WiFi a přitom vstupy a výstupy na svorkovnici zůstanou stejné a dobře známé. O mnoho měsíců později jsem měl tohle:


Není na něj vidět, ale na té destičce je z druhé strany ESP8266-07 a na místě RJ45 ethernetového konektoru trčí z krabičky konektor na (nepovinnou) externí anténu. Ostatní vlastnosti zůstávají zachovány, jak je vidno na připojených čidlech světla a teploty, které vyčítá Arduino a přes WiFi pak komunikuje s okolním světem stejně jako přes ethernet.



Pro zajímavost jedna starší verze plošného spoje (taktéž přesně na míru krabičce od +plosnaky.cz )

Nejvyšší čas zmínit parametry tohoto Univerzálního síťového modulu:
  • srdcem je Arduino Pro Mini v objímce (rychlá výměna při smrti)
  • napájení přes standardní jack 5,5/2,1 mm (5 - 15 V)
  • SSR na spínání síťového AC napětí 230 V (až 500 W)
  • PWM výkonový výstup pro LEDové pásky či DC motory
  • 5x GPIO (z toho 3x analog)
  • tlačítko (pro nastavení WiFi atp.)
  • kompaktní rozměry 84 x 60 x 22 mm
  • kvalitní a pevná standardní krabička "KM 22" z ABS
  • příprava na přímé připojení DS18B20
  • SW pro komunikaci přes Ethernet i WiFi

Jak vidíte, tento modul umí spínat přímo síťové spotřebiče, jako jsou světla v bytech, motory v čerpadlech a další. Umí také řídit (v rozsahu 0 - 100 %) stejnosměrně napájenou zátěž (LED osvětlení, DC motory) a navíc má pět pinů pro připojení čidel či dalších výstupů řídicích cokoliv. Díky síťovým rozhraním je ovladatelný na dálku. Ladil jsem na něm celé měsíce svou knihovnu pro ESP8266. Taktéž jsem se na něm naučil používat MQTT.

Mimochodem, ani krabička KM 22 nemá žádný šroubek, který by ji držel pohromadě, ale má čtyři kolíčky, které tak pevně drží v protilehlém kusu, že na žádné fotce není krabička plně domáčklá - ono je pak kumšt ji znovu rozdělat :-) I tady mi trvá velmi dlouho, než v krabičce vytvořím všechny ty prostupy na konektory, zdířky a svorky. Vždycky při tom lituju, že jsem raději neinvestoval do opravy či koupě plně funkční 3D tiskárny.

Aktuálně tento modul pracuje na dvou místech už téměř dva roky (jeden u klienta měří teplotu krbu a odesílá ji na www.teploty.info, druhý mi doma měří spotřebu elektřiny a vody). Nebojím se prohlásit, že i tento modul se mi osvědčil. Kdyby někdo měl zájem, mám (podobně jako výše) ještě pár plošných spojů a krabiček, takže bych ho dokázal sestavit a naprogramovat pro určitou činnost. Zájemci mi mohou napsat na mail petr@pstehlik.cz - další kontakty na mě jsou na webu www.pstehlik.cz.

pondělí 16. května 2016

WiFi webový digitální teploměr a chytrý termostat

Na začátku tohoto projektu byl +Kamil Zmeškal a jeho nápad na teploměr, který by umístil tuším někam do dílny, tento by byl přes WiFi připojený do domácí sítě a na požádání by hlásil naměřenou teplotu (čili by se choval jako web server). Kamil tu hodnotu chtěl dokonce v XML formátu, protože si ji zpracovává v nějakém svém programu a zobrazuje na tabletu, který má umístěný na zdi v obývacím pokoji. Takový WiFi teploměr jsem pro něj v šibeničním termínu koncem srpna 2015 postavil z jistého modulu určeného původně k jinému účelu (popíšu příště), předal a Kamil s ním spokojeně měří teplotu dodnes.

Ten nápad na bezdrátový teploměr v lokální síti se mi ale tak zalíbil, že jsem na něm od té doby pracoval dalších devět měsíců a dotáhl ho do podoby, ve které se nestydím ho prezentovat veřejně a zároveň ho tímto nenápadně nabízím i případným dalším zájemcům. Z původního poměrně jednoúčelového zařízení jsem ho významně rozšířil o regulaci (proto je v názvu i slovo termostat), doplnil grafické rozhraní, konfiguraci, více datových formátů a další věci, které popíši dále.


Hlavní rysy mého WiFi digitálního teploměru/termostatu jsou následující:

  • úmyslně acloudové řešení - zaručuje soukromí, bezpečnost a nezávislost
  • možnost měření několika teplot na různých místech (kam dosáhnou čidla)
  • jednoduché zapojení, zprovoznění a přidávání dalších čidel teploty
  • přímočaré webové rozhraní s naměřenými teplotami
  • naměřené hodnoty teplot dostupné též v XML, JSON a plain textu
  • termostat s chytře definovatelnými pravidly
  • výkon termostatu řízen v rozsahu 0 - 100 % díky PWM (pulsně šířkové modulaci)
  • široký rozsah napájecího napětí 5 - 20 V a minimální spotřeba (0 W)
  • miniaturní rozměry (68 x 48 x 26 mm)
  • externí WiFi anténa pro prakticky neomezený dosah
  • rozšiřitelný o další moduly, volně programovatelný
  • přístupný i z Internetu, pokud je o to zájem
Nyní krátce vysvětlím jednotlivé body:

ACloud

"ACloudové" (to slovo jsem pro vás právě teď vymyslel) znamená jednoduchou věc: na rozdíl od všech ostatních podobných WiFi teploměrů, které se vždy připojují někam do cloudu k určitému providerovi a vy potom musíte chodit k tomuto providerovi se dívat, jakou teplotu máte doma, jsem zcela úmyslně vytvořil řešení, které se NIKAM DO CLOUDU NEPŘIPOJUJE. Je to váš teploměr, ve vaší síti, měří vaše teploty, a pracuje naprosto nezávisle. Bude fungovat, i když vám doma náhodou vypadne připojení do Internetu. Bude fungovat, i když občas vypadne server providerovi cloudového řešení. A hlavně - bude fungovat i poté, co provider cloudového řešení jednoho dne zavře krám, anebo se jen rozhodne, že už nebude podporovat stará zařízení a jednoduše je zařízne. Tato nezávislost na Internetu a cizí firmě je tak významná vlastnost, že jsem ji chtěl vyzdvihnout jako první.
Cloudové teploměry či IoT řešení jsou totiž jako e-knihy a multimédia s DRM: jednoho dne někdo vypne DRM server a všechny vaše knihy, písničky a filmy, které jste si koupili, zmizí (to už se dnes děje!). Protože tuhle závislost na někom cizím nesnáším, schválně jsem vytvořil WiFi teploměr tak, aby fungoval samostatně.



Mnoho teplot

Měření teplot na více místech: používám digitální čidla DS18B20, kterých může být zapojeno i několik na jedné jednoduché sběrnici (kablíku).  Takže i když je v mém WiFi teploměru jen jedna vstupní zdířka (stereo jack 3,5 mm), tak jde například s pomocí obyčejných sluchátkových rozdvojek postupně zapojit více teplotních čidel a natáhnout si tak kolem domu, sklepa, chaty či bazénu celou síť měřených bodů, kterou ovládá jen jeden WiFi teploměr.



Vše je jednoduché

Jednoduché zapojení: krabička WiFi teploměru má jen dvě zdířky a jedno nenápadné tlačítko. Do jedné zdířky zapojíte napájecí konektor (5,5 / 2,1 mm s plusem uprostřed), do druhé zdířky zapojíte teplotní čidlo, stiskem tlačítka zahájíte proces připojování do vaší domácí WiFi sítě a za minutu už vidíte naměřené teploty, nejčastěji na adrese http://teplomer/ Tuto adresu můžete samozřejmě otevřít webovým prohlížečem ze svého počítače, taktéž ze všech tabletů, z mobilních telefonů, ze Smart TV (televizí s internetem), pokročilých herních konzolí atd. a to bez ohledu na jejich operační systém.



A když vás omrzí moje minimalistické grafické rozhraní, můžete si vytvořit vlastní webovou stránku nebo třeba mobilní aplikaci, do které naměřené teploty vložíte (tu mířím na webaře a programátory mezi čtenáři - je to skutečně velmi jednoduché).

Několik formátů

Naměřené hodnoty jsou po vzoru Kamila dostupné pro strojové zpracování v XML formátu, ale přidal jsem i jednodušeji zpracovatelný formát JSON a dokonce pro potřeby například Arduina nebo obecně zpracování bez nutnosti parsovat formát dat je výstup teplot dostupný i v čistém textu, zcela bez formátování. Díky tomu si můžete nad tímto WiFi teploměrem postavit podobné řešení jako má Kamil s tabletem, ale také můžete teploty zachytávat a ukládat na domácím serveru do databáze, zobrazovat z nich grafy a podobně. Na toto mám ostatně hotové řešení, které popíši za malou chvíli.

Programovatelný termostat

Na rozdíl od původního prototypu teploměru jsem před nedávnem přidal do projektu i výkonový výstup, který je schopen spínat proud až 3 ampéry a řídit ho plynule v rozsahu 0 - 100 % podle naměřených teplot. Díky tomu je možno například zatopit rybičkám v akváriu, vyvětrat rostlinkám ve skleníku, ochladit víno ve sklepě nebo třeba jen zesílit ventilátor, který ovívá vás, jak sedíte zpocení u počítače. Pokud potřebujete řídit větší výkony, anebo spínat síťové či jiné vysoké napětí, je možné k výstupu termostatu připojit relé, které potom teprve spíná to zabijácké napětí či výkon.



Můžete definovat více různých pravidel, která řídí výstup podle naměřených teplot, jak vidno na výše přiložené snímku obrazovky prohlížeče. Například spínač na 50 % znamená, že je sepnutý poloviční výkon, takže pokud tam máte připojený třeba ventilátor, tak se točí poloviční rychlostí. Pokud topení, tak topí polovičním výkonem, a pokud světlo, tak svítí poloviční intenzitou. Jistě vás už napadá, jak to v praxi využít.

Napájení

Modul WiFi teploměru je napájený běžně dostupným zdrojem stejnosměrného napětí, přičemž pracuje velmi efektivně v širokém rozmezí od 5 V do 20 V. Při nejběžněji dostupném napájecím napětí 12 V a dobrém WiFi signálu má naprosto minimální odběr proudu kolísající mezi 15 a 22 mA. Horší podmínky pro příjem WiFi mírně zvyšují spotřebu energie (protože vysílač musí zvýšit výstupní výkon). Mimochodem, komerční wattmetr do zásuvky naměří spotřebu WiFi teploměru přesně 0 W (vím, že teploměr má nenulovou spotřebu, ale je skutečně tak nízká, že je neměřitelná).

Dá se jednoduše spočítat, že například na běžnou 44Ah autobaterii by můj WiFi teploměr vydržel fungovat nejméně tři měsíce, kdyby bylo potřeba ho zprovoznit v místě, kde není přivedeno stálé elektrické napětí. Stejně tak by ochotně fungoval na solární pohon (solární panel dobíjející nějakou baterii). Ale spíš jsem počítal s tím, že prostě bude někde poblíž elektrická zásuvka.


Externí anténa

Jedním z důležitých rysů mého WiFi teploměru je taktéž konektor na externí WiFi anténu. Normálně používám malý prut s 2dB ziskem, ale dala by se připojit i větší anténa pro mnohem větší dosah. V Česku je ostatně běžné používat WiFi i na kilometrové vzdálenosti, takže meze se tu nekladou. Jiné WiFi teploměry na externí anténu zapomínají, a to si myslím, že je velká chyba, kterou jsem proto ve svém teploměru neudělal.



Rozšiřitelnost

Poslední bod je důležitý pro bastlíře, programátory a vůbec zvědavé lidi: dal jsem si záležet na tom, abych vám všem maximálně zjednodušil a umožnil další rozšiřování tohoto modulu jak po HW, tak i po SW stránce. Na základní desce jsem vyvedl veškeré piny procesoru ESP8266 na pohodlnou sběrnici a pečlivě ji popsal. Tím pádem k teploměru můžete připojit celou škálu dalších čidel či rozšíření (např. atmosférická vlhkost s DHT11/22 či tlak s BMP180). Dokonce jsem připojil i TFT displej!


Stejně dobře můžete rozšiřovat teploměr po SW stránce. Celý projekt je naprogramován v Lue, což je prověřený skriptovací jazyk. Na desku jsem vyvedl i programovací konektor kompatibilní s FTDI. Připojit WiFi teploměr k počítači a přeprogramovat ho je tak velmi rychlé.

Přístup z Internetu

Tak, tolik k měření teplot a regulaci v domácí síti. A co když zrovna nebudete doma a přesto vás bude zajímat, jaké jsou aktuální naměřené teploty? Pokud máte pevnou veřejnou IP adresu, můžete si na domácím routeru otevřít port 80 (či jiný) a nasměrovat ho (přes překlad adres) na WiFi teploměr. Pak se můžete zvenčí připojit domů a mrknout se na měřené teploty. Pro vyšší bezpečnost můžete místo NATu použít VPN. Ale co když takové možnosti nemáte? Samozřejmě vím, že sledovat měřené teploty je návykové, a proto plánuji v brzké době přidat jsem přidal do WiFi teploměru doplňkovou možnost přenosu naměřených hodnot na server www.teploty.info, kde by tak byly přístupné i z Internetu (po přihlášení jménem a heslem) a to včetně historie zobrazené v pěkných grafech a s možností varování e-mailem po překročení nastavené teplotní hranice u kteréhokoliv čidla.


Prosím o pochopení rozdílu mezi ostatními podobnými zařízeními, které k provozu cloud vyžadují, a tímto mým serverem teploty.info, které sice možnosti WiFi teploměru dále rozšiřuje, ale vůbec není nutný k běžnému provozu teploměru. ACloudový charakter tak zůstává zachován. Pokud by někomu nevoněl můj server a chtěl by si teplotní data nechat posílat na jiný populární server, je to možné po jednoduché změně ve zdrojových kódech.

EDIT 29.5.2016: WiFi Teploměr již volitelně odesílá data na www.Teploty.info

Chcete ho?

Pokud máte pocit, že tohle vytuněné zařízení musíme mít doma, napište mi mail na petr@pstehlik.cz. Hodnota tohoto zázraku se odvíjí od stupně výbavy (s termostatem/bez, počet teplotních čidel, zdroj plus případné další příslušenství) - v základní verzi začíná od 1490 Kč.

neděle 27. března 2016

Displej s dotykovou vrstvou na různých mikrokontrolérech

Podražily OLED displeje, ale zlevnily TFT LCD, tak jsem si koupil další - krásně velký 2,8" s ILI9341 a dotykovou vrstvou, kterou čte XPT2046 (AliExpress):


Tento displej se připojuje k počítači sériově přes SPI, ovšem nenabízí jen jedno SPI rozhraní, ale rovnou tři!

První SPI je pro obrazová data, je na pinech na levé hraně, v dolní části. Druhé SPI rozhraní je pro dotykovou vrstvu a je taktéž na pinech vlevo, ale na horních pěti (označených TOUCH). A poslední SPI rozhraní je pro čtečku SD karet a je vyvedeno na obrázku vpravo (který jsem trošku moc ořízl, takže ty vývody nejsou vidět).

SPI sběrnice umožňuje připojit několik slave zařízení naráz, takže jsem logicky propojil SDI (MOSI) s T_DIN, SDO (MISO) s T_DO a SCK s T_CLK. A pak jsem to zkoušel rozjet na třech různých mikrokontrolérech: Arduinu, STM32F103 a ESP8266.

Ještě než napíšu jak jsem dopadl, musím zdůraznit, že displej je prodejcem inzerován jako "5V/3.3V", což může kvalitně zmást. Pravda je, že napájení (VCC) může být 3,3 nebo 5 V, protože zespodu displeje je lineární regulátor napětí nastavený na 3,0 V. Dokonce bych řekl, že je lepší, když je displej napájený 5 V, protože se mi choval stabilněji, ale možná se mi to jen zdálo (v nepájivém kontaktním poli často zlobí jednotlivé drátky a výsledky pokusů nejsou zrovna směroplatné). Pokud ho napájíme jen 3,3 V, ze kterých si ten regulátor uzobne 0,3 V pro sebe, tak pak displej může dostat i méně než 3 V a nepracuje se mu možná tak dobře. Na to jsou tam ostatně ty dvě pájecí plošky hned pod regulátorem, které můžeme páječkou jednoduše propojit, čímž regulátor vyřadíme z cesty a displej pak má plných 3,3 V.

Zároveň ten prodejcův příslib "5V/3.3V" neznamená, že kterákoliv ze tří SPI sběrnic je 5V tolerantní! Proto pokud připojujeme displej k 5V mikrokontroléru, jakým je například Arduino, musíme zařadit do SPI cesty "level shifter", měnič napěťových úrovní, jinak bychom mohli něco v displeji usmažit. Jako převodník poslouží například obvod CD4050E nebo některý z hotových prodávaných modulů osazených MOSFET tranzistory.

Mimochodem, podsvícení displeje (pin označený jako "LED") funguje stejně dobře na 3,3 V i na 5 V a nevidím tam ani rozdíl v úrovni podsvícení.

Ještě pár slov k použitým knihovnám. Přestože je komunikace s XPT2046 poměrně jednoduchá, neztrácel jsem čas psaním vlastní knihovny, a místo toho jsem si našel již hotová řešení (a pak ztrácel čas s nimi). První knihovnu pro své Teensy napsal Paul Stoffregen a je dostupná pod názvem XPT2046_Touchscreen na https://github.com/PaulStoffregen/XPT2046_Touchscreen. Druhá je od Spirose Papadimitrioua https://github.com/spapadim/XPT2046 a na rozdíl od první vyžaduje zapojení i pinu T_IRQ. Třetí je od Bodmera https://github.com/Bodmer/TFT_Touch/ a nepoužívá hardwarovou SPI sběrnici mikrokontroléru, takže může být připojena na kterékoliv piny a obslouží si je ručně. To jsem zprvu považoval za nevýhodu a knihovnu tak vyřadil z dalších testů, ovšem dnes už to vidím trošku jinak...

Jako grafickou knihovnu pro ILI9341 jsem použil velmi známou Adafruit_GFX se svým Adafruit_ILI9341 ovladačem. Adafruit podporuje už nejen Arduino, ale i ESP8266, takže se mi zdálo super, že použiju jednu knihovnu pro všechny tři mikrokontroléry.

Nyní už tedy jak jsem dopadl: první testy probíhaly na ESP8266. Tam XPT2046_Touchscreen nefungoval při testech vůbec. Ladicí hlášky ukazovaly, že vrací nesmyslně vysoké hodnoty tlaku (od 4 do 8 tisíc) a hodnoty polohy pochodovaly v cyklu v celém ADC rozsahu. Zkusil jsem tedy knihovnu XPT2046 a ta nefungovala taktéž, přestože podle pěkného článku na http://nailbuster.com/?page_id=341 fungovat měla. Asi se ty knihovny nějak nepohodly o právo komunikace na sběrnici, nebo jedna nastavila rychlost, které druhá nestačila nebo něco podobného. Nakonec pomohlo vyměnit grafickou knihovnu od Adafruitu za upravenou verzi zvanou "Adafruit_ILI9341esp" (která je ke stažení na výše uvedeném článku) a pak se vše perfektně rozběhlo. Bohužel jsem nebyl sto na první pohled poznat, co je v té "ILI9341esp" verzi změněno tak, že XPT2046 už s ní nekoliduje (neboť tam bylo příliš mnoho rozdílů), ale neměl jsem dost času, tak jsem to přestal řešit a smířil se s tím, že stačí použít "esp" verzi grafické knihovny a dotyková vrstva funguje (resp. ta daná knihovna pak správně komunikuje).

Další testy proběhly na ARMu STM32F103 - resp. na Maple Mini. Použil jsem "plugin" z www.stm32duino.com, který se "zasune" do Arduino IDE 1.6.x. Díky tomu mi přijela i opět jaksi upravená knihovna Arduino_ILI9341_STM, kterou jsem zkusil a fungovala výborně (asi 20x rychleji než na Arduinu nebo ESP8266). K ní jsem zkusil přidat obě výše zmíněné XPT2046 knihovny, ale dle očekávání žádná nefungovala. Pro sdílení SPI mezi dvěma různými zařízeními jsou totiž potřeba SPI transakce, které ale moje (starší?) verze STM32 "pluginu" pro Arduino IDE nepodporovala. Takže konec, žádné dotyky. Ovšem teď zpětně si říkám, že jsem měl použít tu knihovnu od Bodmera a jednoduše připojit TOUCH piny k některým z 30 volných pinů STM32F103...

Poslední na řadu přišlo Arduino Pro Mini: knihovna XPT2046_Touchscreen fungovala ihned, ale vracela hodnoty otočené o 90 stupňů, nebo prostě prohozené osy X a Y. Chvíli mě to bavilo, ale pak jsem raději přešel na knihovnu XPT2046, která se mi osvědčila na ESP8266. Tady ovšem nefungovala a ještě navíc rozbila kreslení obrazu. Asi se ty dva čipy porvaly o SPI sběrnici jako na ESP8266.

O správném připojení a ovládání více zařízení na jedné SPI sběrnici napsal pěkný článek výše už zmíněný Paul - http://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps. Zkusil jsem upravit knihovnu XPT2046 podle jeho rad: nejdřív jsem do ní přidal podporu transakcí, a když to nestačilo, tak jsem ještě korektně předinicializoval obě CS linky, jak Paul doporučuje.

Přesto příklad kreslicí aplikace XPTPaint (v "examples" u XPT2046) pořád nefungoval, než jsem s úžasem zjistil, že v jedné ose vrací knihovna hodnoty od 0 do 20 a pak naráz skáče až na 56738 a až ke druhé straně obrazovky drží tento nesmyslný ofset (který nevím, kde se bere). Z nedostatku času jsem to vyřešil následujícím hackem (přidáním jednoho řádku do aplikace XPTPaint):

   touch.getPosition(x, y);
   if (x > 56730) x -= 56710; // WTF!?

Od té chvíle fungovalo na Arduinu s Adafruit_ILI9341 a XPT2046 vše v pořádku a mohl jsem nehtem malovat jak na malířském plátně.

Měl bych teď, po správné implementaci transakcí do XPT2046, ji znovu zkusit na ESP8266 s jinými ILI9341 knihovnami, ale nevím, kdy se k tomu dostanu. Taktéž bych měl zjistit, kde se na Arduinu bere ten nesmyslný ofset (možná přeteče nějaká proměnná?). A také bych měl zkusit pohledat na stm32duino.com, jestli už nemají SPI s transakcemi. Hmmm, napíšu, jestli se k něčemu z toho někdy dostanu.

sobota 19. března 2016

Tablet KB901 - smrt a rozborka

Kamarád Marek mi daroval tablet - krásný 9,2" neznačkový (nikde žádný nápis), že prý už je moc pomalý a ať si ho rozdělám a vezmu si z něj třeba displej. To mi přesně káplo do noty, protože se pídím po pořádném displeji pro Arduino/STM32/ESP8266, takže jsem tablet vzal a přinesl domů.

Tablet kupodivu normálně fungoval, i když opravdu pomalu. Běžel v něm Android 4.2.2 a byla předinstalována řada běžných aplikací. Nainstaloval jsem na něj Elixir2, abych zjistil, že zde nejsou žádné zajímavé senzory. Pak jsem nainstaloval Google Chrome a pustil můj oblíbený Peacekeeper web benchmark, ve kterém tablet dosáhl neuvěřitelně nízkého skóre 161 bodů (při splnění pouhých 2 HTML5 testů ze sedmi). To je asi 3x pomalejší než Raspberry Pi, nepletu-li se. Tak pomalý by gigahertzový procesor být neměl - něco tu musí být špatně.

Každého by napadlo, že v pozadí běží zpomalující aplikace, ale ne, žádné tam nebyly. Tak jsem se rozhodl pro rootnutí, že třeba nad tabletem získám lepší kontrolu a na něco přijdu. Po připojení k počítači jsem zjistil, že tablet si říká KB901 a že se ještě nedávno prodával za více než 100 amerických dolarů, tedy u nás tipuji na 3000+ Kč. Je v něm procesor AllWinner A13 běžící na 1 GHz, 512 MB RAM, a více než 9" displej má rozlišení pouhých 800x480 bodů. Ale jak se říká, darovanému koni na zuby nehleď. Navíc, 800x480 by pro Arduino/STM/ESP bylo úplně dostačující rozlišení.

Zde trocha dalších informací přímo z adb shellu:

root@android:/ # cat /proc/cpuinfo                                             
Processor : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 1001.88
Features : swp half thumb fastmult vfp edsp neon vfpv3 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc08
CPU revision : 2

Hardware : sun5i
Revision : a13b
Serial : 060365103731303050564b371625420e

root@android:/ # cat /proc/partitions                                          
major minor  #blocks  name

  93        0      16384 nanda
  93        8      16384 nandb
  93       16      32768 nandc
  93       24     786432 nandd
  93       32    1048576 nande
  93       40      16384 nandf
  93       48      32768 nandg
  93       56     327680 nandh
  93       64     262144 nandi
  93       72    5177344 nandj

Před rootováním mě napadlo nainstalovat CWM. Stáhl jsem si verzi 6.0.28 z XDA a našel dokonce i řadu nějak upravených ROM na ruské adrese. Instalace CWM nebyla úplně přímočará, protože tablet má několik zajímavých vlastností - například nejde zapnout, pokud je vložena SD karta. Také nejde zapnout při držení Volume+, což by mi mělo umožnit nainstalovat ZIP z SD karty. Nakonec jsem tam ručně rozbalený CWM dostal přes adb shell a taktéž ručně nainstaloval. Pak jsem musel ručně rebootovat do CWM a když jsem v něm konečně byl, ze samé euforie jsem dal "wipe cache" a "wipe data". A navrch nainstaloval SuperSU ze ZIPu.

A to jsem asi neměl dělat. Od té doby jsem už normální start neviděl. CWM začal hlásit, že nejde přimountovat žádný oddíl. Když jsem se z toho konečně vzpamatoval a zkontroloval cat /proc/partitions, zjistil jsem, že kernel z původních 10 oddílů nevidí ani jeden. V /dev/block bylo taky docela pusto. Napadlo mě podívat se na výstup dmesg, kterému vévodily stovky řádků následujícího znění:


[    2.728136] PHY_PageReadSpare : too much ecc err,bank 0 block 7,page 0 
[    9.875478] [FORMAT_ERR] There is not enough valid block for using!
[    9.881758] [FORMAT_ERR] There is not enough free blocks for distribute!
[    9.888469] [FORMAT_ERR] Format nand disk failed!
[    9.893184] [NAND]init_blklayer fail 

Pochopil jsem, že tady mi už pšenka nepokvete. Nevím tedy, jestli jsem zavinil smrt nějakým chybným krokem já, nebo jestli tento CWM nebyl to pravé ořechové, nebo jestli jsem se přesně trefil do momentu, kdy se vnitřní eMMC paměť definitivně odporoučela do křemíkového nebe, ale výsledek byl každopádně takový, že Android už nešel nastartovat. Neumím ho ani obnovit, když v /dev/block/ nejsou žádné diskové oddíly, na které by případně šlo nahrát některý z těch ruských firmwarů.

Rozloučil jsem se s ním a vzal do ruky šroubovák. Po chvíli jsem se dostal dovnitř:


Zajímavé, jak je všechno maličké - vlastně zhruba stejně velké, jako Orange Pi Plus. Procesor má na sobě nálepku o výstupní kontrole v prosinci 2013, takže tablet byl nejspíš ještě v české dvouleté záruce. To je docela tristní, že tabletu ještě v záruce odejde paměť - ten čip s ručně napsanou čínskou osmičkou. Zajímavé je, že nad ním je místo na další čip, takže tablet mohl mít i 16 GB vnitřní paměti. Teď kdybych byl frajer, koupím si někde stejnou paměť a normálně ji přepájím.

Místo toho jsem pokračoval v rozborce. Protože tablet nešel vypnout, musel jsem jako první odpájet čerstvě plně nabitou baterii:


Byla přilepena k zádům displeje nějakým hnusně smrdícím asfaltem, takže jsem ji musel vyhodit z domu. Ráno ji zkusím odbalit, asfalt zahodit a použít ji v nějakém Arduino projektu - 6500 čínských mAh se může hodit!

Na desce je ještě zajímavý WiFi modul vpravo dole - je samostatný, připájený shora na plošný spoj tabletu jen čtyřmi body (nepočítaje 2 body dole pro externí anténu). Zřejmě je připojen na vnitřní USB. Vtipná je anténa - drát vedle doprostřed displeje, kde je nalisovaná anténečka na takovém tom pružném "plošném spoji", který je přilepený na plechová záda displeje! To se už nedivím, že recenzenti psali, že už jedna zeď od WiFi routeru způsobuje problémy s příjmem.

Vlevo od něj je zřejmě řadič displeje - GSL 3680. Tento by chtělo nějak osamostatnit a připojit i s displejem k nějakému mému projektu. Ještě dál vlevo je napájecí (a nabíjecí) část se známým AXP209, nad ní slot na mikroSD kartu, nad ní vlevo od procesoru jsou RAM čipy a pak už jen vlevo nahoře dvě kamerky s trapným VGA rozlišením.

Úplně vpravo nahoře na tom výběžku plošného spoje je zřejmě část starající se o podsvícení displeje a na samém chvostu pak zvukový modul, jehož výstup je drátky spojen s maličkým reproduktorem, který se chytře drží zad displeje svým magnetem.

A to je konec. Displej samostatně zapojit neumím, eMMC paměť měnit nebudu - jediná možnost jak tablet oživit by byla naučit ho žít jen s SD kartou a na vnitřní paměť zapomenout. Ale nemá to smysl, když už mám krásný nový tablet. Takže sbohem a snad půjde použít aspoň ta baterie...

EDIT: našel jsem blog, kde se někdo povrtal v jiném tabletu, jehož vnitřnosti jsou velmi podobné. Dobře popsal jednotlivé broučky, tak to sem nalinkuji.