[RPi] GUI pro zobrazení hodnot ze souboru na LCD

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« kdy: 10. 12. 2015, 16:47:33 »
Zdravím ve spolek,

chystám se udělat si něco jako "chytrý termostat" za pomoci dvou RPi (připojených do domácí wifi sítě) a Arduina. Výsledek by měl být takový, že v obýváku na dotykovém LCD  (480x320, SPI) budu mít výpis různých hodnot (převážně teplot) a budu moct ručně ovládat například spuštění kotle, ohřev vody apod., které budou připojené na druhé RPi v kotelně.

Mám ale velký trabl, hledám vhodný způsob, jak to zobrazovat/ovládat. Ideálně bych chtěl fullscreen aplikaci/GUI, která se spustí při startu RPi. S mými zušenostmi jsem schopný udělat jen webovou stránku (PHP), což je na tuhle věc hnus *blijící smajlík*

Kdysi jsem si na PDA hrál s ForwardPass, což je něco jako Flash, ale s javascriptem (náhled zde, je to gif "animace", koukněte na celou). Lze si tam graficky rozvrhnout vzhled (přidat políčka, tlačítka, posuvníky, ...) a pak s nimi na pozadí pracovat v JS. Něco takového bych rád přesně pro tuhle věc. Nevíte o něčem podobném v Linuxu? Jazyky neumím, ale jsem schopný se naučit syntaxi a napsat si to v čemkoliv normálním (Python, Perl, C, Javascript, ...)

Druhá věc - kde ta aplikace/GUI vezme hodnoty? Uvažuju nad tím, že všechny hodnoty nasypu na RPi v kotelně skriptem do souboru a v obýváku si to z něj rozparsuju a zobrazím. Stejně tak pro ruční ovládání relé (nasypu do souboru 0 nebo 1 a rozparsuju). Není to blbost?

Souhrn: Hledám aplikaci, kde si rozvrhnu jednoduše GUI a na pozadí si budu moct ovládat jednotlivá pole a tlačítka (WYSIWYG editor se skrtiptováním/kódem na pozadí) a zároveň mi jde o případnou debatu na téma jak tam dostat ty hodnoty.

Předem díky za nápady


gui_guru

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #1 kdy: 10. 12. 2015, 17:56:18 »
Jako GUI bych zkusil https://github.com/vurtun/zahnrad , ale chtelo by to alespon nejake minimalni zaklady C a hlavne vedet jaky vykreslovaci backend byste rad pro to dotykove LCD pouzil (to bude zalezet na tom, jak/pres_co dane LCD na RPi pripojite a co dany ovladac v Linuxu zvladne). Zahnrad je agnosticky vuci vykreslovacimu backendu, takze zde omezeni neni. Zbytek je "nepodstatny" (vycitani z cidel je brnkacka a posilani po siti ci kopirovani jakbysmet - to bych klidne resil v shellu a nikoliv v C, abyste si usetril kupu prace, potazmo casu).

Janci

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #2 kdy: 10. 12. 2015, 18:50:44 »
praveze ten web nie je vobec zle riesenie
okrem ineho to ma vyhodu, ze sa to da spustit aj na mobile alebo pc

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #3 kdy: 10. 12. 2015, 21:57:54 »
Janci: Mělo by to určitě i výhody, nicméně je to pro mě "ošklivá" cesta a radši bych vyrobil něco ušitýho na míru přímo na displej. Tu webovou část si klidně udělám výhledově jen tak jako doplněk.

gui_guru: Tak víceméně něco takovýho jsem měl na mysli. Pomocí kódu si vše "nakreslit" a pak to i obsluhovat. čeká mě asi hodně studování a experimentů. Nemáš s tím přímo zkušenosti? C pro mě nebude problém, něco málo jsem kdysi psal (trošku víc než Hello world, ale zase nic extra...), ale nemám absolutně páru, jak to postavit celkově... Potřeboval bych povodit za ruku, dokud mi z toho nevypadne první výstup, od tý doby už to zmáknu. Možná je to ale předčasný, ještě jsem to ani nezkusil... Každopádně díky za tip, zkusím to!

Santa77

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #4 kdy: 11. 12. 2015, 10:05:48 »
Kivy (kivy.org)
Mam na raspi 5" dotykac a cez kiwy urobene gui.


Dzavy

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #5 kdy: 11. 12. 2015, 10:16:13 »
To webovy reseni Ti ale vyresi i ten problem s prenosem dat...na RPi u kotle pobezi webserver s obsluznou aplikaci a druhy RPi bude jenom zobrazovaci klient. Vsechno pujde po HTTP, asynchrone volany nejakym ajaxem.


Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #7 kdy: 11. 12. 2015, 12:22:34 »
Santa77 a Markota: Díky za tipy, prostuduju si to všechno a pak vyberu podle obtížnosti zprovoznění :-) Víceméně jde o to, co hledám ;-)

Dzavy: Od toho webu jsem upustil. Ne sice definitivně, ale jako hlavní bych chtěl nějakou polovlastní grafickou nadstavbu nad lokálním kódem (tedy v obýváku). Ten web asi udělám v budoucnu jen pomocí PHP a CSS stylů (zelený/červený tlačítko) a to jen jako "nouzovku" nebo doplnění k tomu klasickýmu GUI. Není v hlavním plánu mít to multiplatformní nebo ovladatelný přes net.

pmubcz

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #8 kdy: 11. 12. 2015, 14:10:29 »
python, pygame .....

zni to mozna blbě, ale použij framework pro hry(pygame) + matplotlib na grafy ...
dotyk na displeji neni taky problem ....

gui_guru

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #9 kdy: 11. 12. 2015, 15:21:13 »
Janci: Mělo by to určitě i výhody, nicméně je to pro mě "ošklivá" cesta a radši bych vyrobil něco ušitýho na míru přímo na displej. Tu webovou část si klidně udělám výhledově jen tak jako doplněk.

gui_guru: Tak víceméně něco takovýho jsem měl na mysli. Pomocí kódu si vše "nakreslit" a pak to i obsluhovat. čeká mě asi hodně studování a experimentů. Nemáš s tím přímo zkušenosti? C pro mě nebude problém, něco málo jsem kdysi psal (trošku víc než Hello world, ale zase nic extra...), ale nemám absolutně páru, jak to postavit celkově... Potřeboval bych povodit za ruku, dokud mi z toho nevypadne první výstup, od tý doby už to zmáknu. Možná je to ale předčasný, ještě jsem to ani nezkusil... Každopádně díky za tip, zkusím to!

Myslim, ze tech nekolik obsirnych dem a examplu (napr. i jednoduchy graficky file-manager na 800 radku v C!) https://github.com/vurtun/zahnrad/tree/master/demo a https://github.com/vurtun/zahnrad/tree/master/example pro ruzne vykreslovaci backendy jiz asi ukazkovejsi byt nemuzou do chvile, dokud nam neprozradis jaky vykreslovaci backend pro to LCD pripojene pres SPI muzes pouzit (je to neco jako https://github.com/notro/fbtft/wiki ?).

Jinak drzim palce. Pokud na tom LCD jdou jednoduse zprovoznit X11 ci primo OpenGL, tak muzes sahnout i po tom doporucovanem Pythonu (nebo jinem jazyku) s jakoukoliv grafickou nebo herni knihovnou, ale tam se toho priucis mene nez v C a hlavne bude samotne GUI pracnejsi nez v Zahnrad.

Pavouk106

  • *****
  • 2 395
    • Zobrazit profil
    • Můj blog
    • E-mail
Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #10 kdy: 11. 12. 2015, 20:16:25 »
Na tom displeji normálka jede X server. A je to fbtft driver (či jak to správně nazvat). Pomocí xinit si spustím příkaz jaký chci a ten běží na fullscreen (vyzkoušen xterm). Na týhle úrovni jsem se systémem nikdy nedělal, učím se za chodu (většinou jsem rozbíhal nějakej WM, nikdy jsem nespouštěl přímo něco jen tak na X serveru). Předpokládám, že až zkompiluju demo od zahnrad, spustím ho právě pomocí xinit. Teď čekám na kompilaci SDL2, na RPi všechno chvilku trvá... (demo ho chce, tak mu ho chci dopřát, i když by to šlo nejspíš obejít bez něj)

Ten zahnrad chci zkusit jako první, vypadá to pěkně a něco se přitom naučím. S C-čkem jsem navíc alespoň něco dělal. Jakmile uvidím demo v chodu a zkusím si udělat jednoduchej výpis hodnoty ze souboru, tak uvidím, jestli to je to, co hledám.

Pokud nebude zkusím ten python.

Radovan.

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #11 kdy: 12. 12. 2015, 07:31:09 »
http://mojefedora.cz/programovaci-jazyky-a-knihovny-urcene-pro-vyuku-zakladu-pocitacove-grafiky-knihovna-pygame/

Když to stačilo na mobilní telefon (PiPhone), tak termostat musí být triviální :-D

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #12 kdy: 12. 12. 2015, 08:35:26 »
Musíš míň hrát a víc se učit programovat!!! :)))

Hele, termostat se dá udělat i úplně na koleni amatérsky, ale pokud do toho jdeš úplně bez znalostí, připrav se, že narazíš na spoustu slepých uliček a celkově ti to bude docela dlouho trvat, než to celý rozchodíš tak, abys byl spokojenej. Dost bych doporučil sledovat přednášky, články a blog Petra Stehlíka, protože to je člověk, kterej je v elektrotechnice amatér, hraje si s tím pro radost a píše postřehy, které se perfektně hodí pro amatéry. Spoustu slepých uliček ti ušetří.

Než s tím začneš, doporučoval bych nepodcenit návrh. Celkově ti s tím neporadím, ale měl bych pár tipů ke zvážení:

1. RPi je dobrý na to, že tam můžeš použít plnotučné technologie, které znáš (jako třeba ten X-server, klasický www server, balíčkovač, python atd.) - tj. můžeš tam rychle rozjet poměrně složité věci. Ale máš tam podstatně složitější software stack a hardware samotný je dělaný primárně pro nízkou cenu. Takže se stabilitou to nemusí být kdovíjaký a jenom těžko na RPi můžeš dosahovat nízké latence (kdybys třeba něco chtěl řídit rychlostí jánevím nad sto kilohertz, už budeš mít asi docela problém). Čili RPi bych rozhodně nepoužil na řízení něčeho, co může způsbit škodu - pokud např. ten kotel nemá nějakou vnitřní logiku, která by ho chránila v situaci, kdy se RPi nějakým způsobem zblázní. Třeba můj kotel má spínání, ale i když bys kontakt trvale sepnul, nebude topit pořád - občas se vypne sám nezávisle na tom, co mu radí ovladač. To si určitě předem ověř.

2. Druhá nevýhoda RPi je (na embedded zařízení) poměrně vysoká spotřeba. Prostě budeš k tomu potřebovat síťový napaječ a tímpádem zásuvku, což může být otravný. Mít doma jedno, dvě RPi je v pohodě, ale deset jich doma mít nechceš.

3. Proto se vyplatí si předem promyslet, jestli ti aspoň na některé části systému nebude stačit menší deska. Nezatracuj Arduino, je to perfektní věc a spoustu věcí zvládne naprosto dostatečně! S trochou snahy ho můžeš provozovat i několik měsíců (až dva roky) na baterku a je parádně levný (nejmenší desky z Číny už někde od šedesáti korun). Jediná nevýhoda ATmega328 (čip majoritního typu Arduina) je, že moc nezvládne šifrování.

4. Hodně zajímavá možnost je taky ESP8266. Brutálně levná a s wifi "zadarmo". Taky ale pozor na stabilitu!

5. Komunikační protokol: silně bych doporučil nevymýšlet nic svýho a použít MQTT. Je to fantastická věc, výborně navržená, jednoduchá, ideální pro mebedded zařízení, ale zároveň nekonečně rozšiřitelná. Pokud by i MQTT bylo z nějakého důvodu moc, použít MQTT-SN, které je speciálně navržené pro sensorové sítě.

6. Linková vrstva: wifi je dobrý, pokud to chceš rozjet rychle a moc se s tím nepárat. Vede ale k větší spotřebě, vyšší ceně (pokud nepoužiješ ESP8266) a můžeš mít problémy s šifrováním. Lepší varianta pro jednodušší nekritický věci (měření teploty apod.) jsou nelicencovaný pásma 433 a 868MHz. Na ně se dá použít buď jednoduchý levný vysílač: http://www.aliexpress.com/item/1Lot-1-pair-2pcs-Best-prices-433Mhz-RF-transmitter-and-receiver-link-kit-for-Arduino/32318951712.html který neumí fakt nic jinýho než vysílat nebo přijímat (a to ještě s velkou chybovostí) nebo inteligentnější nRF24L01 nebo nRF905 které mají zabudovanou docela pokročilou logiku - např. umí (aspoň to nRF24L01, u druhýho si nejsem jistej) samy o sobě rozběhnout MESH síť - t.j. automaticky posílat pakety "jeden přes druhýho, na kterýho vidí" správným směrem. Je to hodně dobrá volba v případě, že chceš mít sensorů víc (např. měřit teplotu v každém pokoji). Hlavně proto, že dosah je trochu horší než u té první, stupidní varianty. Zvlášť u desek bez externí antény, s těma mám zkušenost, že mají dosah spíš jenom přes jednu stěnu, víc jsem uspokojivě nedosáhl. Ten jednoduchý vysílač zase v pohodě propálí celej barák.

7. Řešení UI webem bych vůbec nezatracoval! Web rozhodně nemusí být škaredší než nějaký jednodochý UI toolkit. Spíš bych řekl, že naopak. A máš tam zadarmo dálkový přístup. Pokud použiješ nějaký lokální prográmek s UI toolkitem, stejně časem zjistíš, že bys to chtěl ovládat vzdáleně třeba z práce, a stejně skončíš u webu :) Takže myslím, že než hledat vhodný UI toolkit, možná by se vyplatilo trochu zainvestovat do studia moderních webových technologií (různé ty jQuery, D3 apod.) Jako "terminál" bys pak mohl použít nějaký levný tablet z Ebaye, na kterém by jel jenom prohlížeč.

8. Pokud tohle fakt určitě nechceš, na jednodušší terminál by se mohlo hodit STM32F429, které má zabudovaný dotykový displej. Ale počítej s o hodně větší pracností - budeš si tam muset rozjet nějaký RTOS a grafickou knihovnu. Práce s toolchainem a knihovnami není tak pohodlná jako u Arduina, je to občas trochu porod. Mně osobně, když jsem si s tím trochu hrál, se docela líbila kombinace ChibiOS+uGFX.

...uff, to je román tyvole, už budu radši končit :)

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #13 kdy: 12. 12. 2015, 08:43:30 »
6. Linková vrstva
Pro hnidopichy: tady mělo být spíš "linková a fyzická vrstva" :)

Saky

Re:[RPi] GUI pro zobrazení hodnot ze souboru na LCD
« Odpověď #14 kdy: 12. 12. 2015, 11:29:32 »
Ahoj,

já mám doma již 30+ IoT věciček a topení je právě na řadě. Čekám na dodávku nějakých dílů, ale řešil jsem prakticky to samé. Jelikož jsem věděl o začátku, že to budu chtít rozšiřovat, byl pro mne primární podmínkou nějaké unifikovaný interface jednotlivých periferií.

Koncové body (zásuvky, světla, teploměry, akvárium, LCD displeje..) jsem postavil na ESP8266. Proč? Malá spotřeba, malá velikost, embed WiFi a cena 2-5USD, dle modulu (ESP 01, ESP 12E, ESP 08, NodeMCU...). V ESP jsem zvolil LUA firmware, přišlo mi to pohodlnější. Všechna koncová zařízení mají spuštěný webserver a poskytují jednak JSON API pro příjem nastavení/vrácení údajů a primárně pak MQTT client, kterým v běžném režimu komunikují. Ten má oproti API výhodu v trvalém spojení, vyhnul jsem se tak nějakým akce s časovým limitem, prostě když teploměr naměří jinou hodnotu než předchozí, rovnou ji posílá serveru. Navíc díky trvalému spojení  na serveru vidím, zda je periferie online a dokáži na rozpadnutí spojení reagovat ihned na obou stranách.

Jako server mi běží vlastní python app na routeru Turris. Pro ovládání jsem zvolil webový interface. Primárním místem je tablet namontovaný na chodbě na zdi, má několik základních rozhranní mezi kterými listuji swipnutím prstem. Má to řadu výhod jak tu už zaznělo. Jednak mám stejné rozhranní i na jiných tabletech, mobilech a nemusím při upgradu upravovat více interface. Jelikož je to umístěné doma, mám ve fullscreen režimu na tabletu google chrome, takže vizualně to poznat nejde, navíc pokud bych chtěl takové ovládání využít někde jinde, existuje spousta kiosk aplikací, které zamknou browser ve FS na dané stránce. Další výhodou je pak přímé spojení pomocí WebSocket, vyhnul jsem se tak časovaným AJAX requestům z minulého desetiletí :)

Momentálně kromě topení pracuji na OTA aktualizacích, nyní, pokud potřebuji změnit kód v periferii, musím k ní dojít s NTB a nahrát novou verzi USBčkem, což je otravné :-)

Každopádně web interface o kerý tu primárně jde využíváme celá rodina již několik měsíců a naprostá spolehlivost. Zatím se nestalo, že by rozhranní na obyč tabletu za cca 2k Kč spadlo, nebo se rozpojilo WebSocket spojení, vše je tedy úplně live a funguje bezvadně. Mezi periferiemi mám i Arduino a Rpi 2, ale to pouze tam, kde ESP nevyhovovalo (analog vstup), nemá to žádný přínos, navíc v případě Rpi je zde i menší spolehlivost, jelikož potenciálních chyb je více a systém mi občas zamrznul :/.