EasyTerm jako datalogger s SCD41 během pár minut
- February 08 2023
- Vše ostatní / others
- 1522x Přečteno
O zařízení EasyTerm jsem tu už několikrát psal (tady a tady) - jednoduchý a všestranný pomocník při vývoji. S autorem projektu jsme dali dohromady první praktický článek a jak jinak bychom ho použili než jako datalogger? A třeba s SCD41 - čidlem pro měření koncentrace CO2, teploty a vlhkosti.
Ve zkratce o EasyTerm
Potřebujete displej pro svižné ovládání či monitorování vašich udělátek bez sáhodlouhého programování, integrování knihoven do vašeho kódu a komplikování vašeho zapojení? Nebo snad potřebujete univerzální “multitool” když by se šiklo dostat rychle nějaký PWM signál, komfortně vyčíst nějaký registr I2C čipu či vygenerovat analogový signál? Na to a MNOHEM více Vám poslouží český EasyTerm.
Veškeré kouzlo EasyTermu je vlastně v následující filosofii: Mám-li displej s různorodými widgety, které umožní parsování či doplňování textových řetězců, mohu ovládat/monitorovat mnohá zařízení se sériovým portem (nebo z pozice EasyTermu i být ovládán). Pokud ty řetězce mohou být zároveň i známými příkazy pro EasyTerm, mohu ovládat EasyTerm přes jeho vlastní displej. Pokud má EasyTerm rozhraní (jako například ADC, DAC, PWM, I2C, SPI a UART), mohu pak příkazem mimo obsluhu displeje generovat sinus, číst registr I2C obvodu, hýbat GPIO pinem, posílat něco po SPI atd. No a pokud spojím ty displejové widgety s těmi rozhraními, tak si klidně na displeji sestavím kontrolní panel a transformuji tak EasyTerm třeba na dotykově ovladatelný signálový generátor nebo dotykově ovladatelný I2C master. Nebo obojí. Nebo cokoliv.
EasyTerm (viz 7-tech.net) umí příkazy v “kompaktním” a tzv. “sebedokumentujícím” formátu. Pro přehlednost nejprve budu využívat “sebedokumentujícího” formátu a v podobných příkazech následně využiji onen “kompaktní” formát. Příkazy není třeba cucat z prstu (rozuměj z manuálu) - lze využít aplikaci CmdBuilder.
Použití s terminálem
SCD41 (LaskaKit) jsem propojil s EasyTerm dvěma vodiči na I2C interface a dalších dvou k napěťovému výstupu (VOUT). EasyTerm mám připojen k PC přes USB - sériový port - stejně jako třeba s Arduinem.
Nejprve povolíme napěťový výstup VOUT (3.3V) EasyTermu, inicializujeme I2C interface a nastavíme I2C adresu na adresu SCD41 (0x62)
SYS VoutState=1; I2C Init=1 Address=62;
To slovo sebedokumentující bych jinak řekl: Rozumím tomu, co píšu. To značně zjednodušuje práci.
A můžeme rovnou spustit periodické měření zápisem 0x21b1 do SCD41 (viz katalogový list SCD.)
I2C wr=21b1;
Po uplynutí asi 5 sekund by měly být k vyčtení první hodnoty. Vyčtení hodnot spočívá v zápisu operace (0xEC05) a v následném čtení. Každý kdo trochu zná I2C ví, že vyčtení registru zpravidla probíhá nejprve zápisem adresy registru či zápisem operace, dále provedením tzv. “restart condition” a zahájením vyčítání.
EasyTerm má na to srozumitelnou operaci:
I2C wrrd=ADRESA_REGISTRU,POČET_BAJTU_K_VYČTENÍ
Takže zavoláme tento příkaz:
I2C wrrd=ec05,9;
A odpověď je třeba tato (ty hodnoty se budou lišit na základě koncentrace co2, teploty a vlhkosti v okolí čidla
I2C wrrd=07 70 D7 62 21 BA 8A 87 A1
Abych převedl tyto bajty, musel bych se podívat do datasheetu součástky, najít vzorce a počítat.
EasyTerm má však konfigurovatelný “read format”. V tomto případě poslouží “read format” typu “expression”, což je vlastně rovnice jejíž značky $i se nahradí vyčtenými bajty o indexu i a rovnice se poté vypočítá.
I2C ReadFormat="ef(CO2:($0<<8)+$1,Temp:-45+175*((($3<<8)+$4)/2**16),RH:100*(($6<<8)+$7)/2**16)";
Prostě kontrol cizí, kontrol vlastní.
Provedeme opět příkaz pro vyčtení registru výsledků:
I2C wrrd=ec05,9;
EasyTerm nyní vrátil toto:
I2C wrrd=CO2:1679,Temp:22.179108,RH:53.027344
Halelůja, mám srozumitelný hodnoty - a taky bych si mohl vyvětrat.
A když mám data, můžu je hodit do grafu.
Použití jako HMI
Autor doporučuje pro přehled zobrazit logovací okno:
displayLog y=400 h=80;
Zobrazíme si trojici formulářů (widget jehož obsah se vyplní na základě parsovací masky):
DisplayForm x=10 y=30 Width=100 GraphicsThickness=3 Font=18b Text="CO2" ParseMask="CO2:%d,";
DF x=110 y=30 w=100 gt=3 f=18b t="Temp" pm="Temp:%.2f,";
DF x=220 y=30 w=100 gt=3 f=18b t="RH" pm="RH:%.2f\r\n";
Zobrazíme si navíc graf pro hodnoty CO2. Můžeme se inspirovat parsovací maskou prvního formuláře:
displayPlot x=10 y=210 w=310 h=180 mode=approximated pm="CO2:%d,";
A nyní stačí vykonávat příkazy pro vyčtení, tedy I2C wrrd=ec05,9
To je ale nepraktické. Můžeme však použít tzv. TIMER příkaz, jemuž tento příkaz předáme jako parametr jeho akce:
TIM period=5500 state=1 action="I2C wrrd=ec05,9";
A teď se nám pravidelně aktualizují data a zároveň se kreslí graf.
A jak udělat to, aby nám tento “dashboard-obrazovka” zůstal i po vypnutí EasyTermu? Přece nebudeme příště opět "programovat".
Řešením je ty příkazy zapouzdřit do widgetů tlačítek. Zobrazíme si čtveřici tlačítek - první povolí napěťový výstup a inicializuje I2C. Druhé nám umožní odpojit napájení SCD41, třetí zahájí periodický převod zápisem do SCD41 a nastaví TIMER. Poslední tlačítko periodický převod ukončí.
displayButton x=10 y=100 w=150 h=50 f=18b t="Initialize" a="SYS vs=1+I2C i=1 a=62 rf="ef(CO2:($0<<8)+$1,Temp:-45+175*((($3<<8)+$4)/2**16),RH:100*(($6<<8)+$7)/2**16)"";
DB x=161 y=100 w=150 h=50 f=18b t="Power-down" a="SYS vs=0";
DB x=10 y=151 w=150 h=50 f=18b t="Start periodic" a="I2C wr=21b1+TIM p=5500 s=1 a="I2C wrrd=ec05,9"";
DB x=161 y=151 w=150 h=50 f=18b t="Stop periodic" a="TIM s=0+I2C wr=3f86";
A nyní uložíme layout do paměti flash:
saveLayout bankId=0;
A nakonec nastavíme commandOnInit (tj příkaz který se vykoná po zapnutí EasyTermu) aby se zavolal příkaz pro načtení layoutu!
SYS CommandOnInit="LoadLayout bankId=0";
Závěrem
Ano, vymysleli jsme příklad s SCD41, který lze jednoduše připojit k Arduino a využít knihoven od Sensirion - to ale nebyl cíl. Cílem bylo ukázat, jak snadno a přitom flexibilně lze využít EasyTerm s téměř čímkoliv. V praxi lze EasyTerm totiž použít na monitorování či ovládání od jednoduchých čidel přes složitá zařízení s vlastním mikrokontrolérem a FW - často postačí propojit UARTy a máte ovládací/monitorovací panel, aniž by vás vůbec napadlo, že k vaší drobné destičce s několika málo piny půjde vůbec nějaký displej připojit! A za chvíli máte i vlastní dashboard! A když tohle zrovna nepotřebujete, tak si jej třeba transformujete na dotykově ovladatelný signálový generátor, napěťový logger, I2C master a tak dále. Ale o tom zase třeba příště!
Více informací a e-shop naleznete na stránce 7-tech.net