SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement SAMSUNG_032023 Advertisement

IoT prakticky – posielanie údajov z mikropočítača BBC Micro:bit s WiFi modulom do cloudu

Mikrokontroléry
1

článku sme predstavili modul IoT: bit pre Micro:bit, ktorý umožňuje pripojenie k WiFi, takže z Micro:bitu sa stane plnohodnotná platforma pre internet vecí (IoT). Budete môcť na diaľku ovládať rôzne zariadenia alebo merať požadované veličiny a posielať ich do cloudu na ďalšie spracovanie. 

V tomto pokračovaní ukážeme dva príklady, ktoré budú merať rôzne veličiny. V obidvoch využijeme interné senzory na doske Micro:bit. Tie umožňujú merať teplotu pomocou senzoru priamo na čipe, zrýchlenie pomocou akcelerometra a dokonca aj intenzitu osvetlenia s využitím diód maticového displeja. Podľa skúseností je nameraná teplota čipu spravidla o 4 °C vyššia než teplota okolia. V prvom príklade budeme merať teplotu a intenzitu osvetlenia a v druhom zrýchlenie v osiach X, Y a Z. Môžete samozrejme využiť aj externé senzory na presné meranie teploty, intenzity osvetlenia, prípadne ďalších parametrov. Môžete využiť napríklad senzory zo súpravy Smart Science IoT Kit, prípadne aj zo súpravy Smart home Kit, ktoré sa pomocou trojvodičového kábla pripájajú na porty GVS (Ground, Voltage, Signal) dosky IoT:bit. Na zobrazovanie použijeme OLED displej z niektorej zo spomínaných súprav, pripojený k doske IoT:bit cez rozhranie I2C. Pripojenie displeja nie je pre fungovanie príkladov potrebné.

Takmer všetky merania sú viazané na čas, preto má doska IoT:bit aj obvod reálneho času zálohovaný batériou.  Aby ste mohli využiť funkcie modulu IoT: bit pre Micro:bit, je potrebné do online vývojového prostredia MakeCode doplniť rozširujúcu knižnicu Enviroment-and-Science-IoT. Tá obsahuje aj podporu OLED displeja pripojeného cez I2C. Pri vyhľadávaní rozšírení stačí zadať IoT.

Meranie a prípadné zobrazovanie na OLED displeji

Začneme meraním a rozšírením možnosti zobrazovania pri ladení. Maticový jednoznakový displej s možnosťou rolovania textu je efektný, no na ladenie nie príliš praktický. Preto ako prvý krok (ktorý je možné vynechať) pripojíme k doske IoT:bit displej cez rozhranie I2C. Použijeme displej zo súpravy Smart home Kit, zasunutý do štvorpinového konektora dosky IoT bit. Na generovanie signálu SCL sa využíva port P19 a na generovanie signálu SDA port P20. 

Priradenie protov na GVS vstupy dosky IoT:bit

Nasledujúci kód zobrazí na pripojenom OLED displeji údaje o teplote a intenzite osvetlenia získané zo senzorov na doske Micro:bit.

OLED.init(128, 64)
basic.forever(function () {
    OLED.clear()
    OLED.writeString("Teplota ")
    OLED.writeNum(input.temperature())
    OLED.writeString(" stupnov.")
    OLED.newLine()
    OLED.newLine()
    OLED.writeString("Svetlo (0 - 255) ")
    OLED.writeNum(input.lightLevel())
    basic.pause(2000)
})

Primárnym zámerom príkladov je meranie údajov a ich posielanie do cloudu. Zobrazovanie hodnôt na displeji je len sekundárnou funkcionalitou, ktorú ak nemáte k dispozícii OLED displej pripojiteľný cez zbernicu I2C nemusíte riešiť.  Vytvoríme  na tento účel funkciu, ktorej odovzdáme údaje o teplote a intenzite osvetlenia. Ak nemáte displej tak definíciu funkcie zobrazHodnoty a jej volanie v hlavnej sľučke

basic.forever(function () {
    ...
    zobrazHodnoty(nTeplota, nSvetlo)
    ...
})

môžete vynechať

Dialóg na vytvorenie funkcie

Modifikácia predchádzajúceho príkladu s využitím funkcie na zobrazovanie nameraných údajov

function zobrazHodnoty (teplota: number, svetlo: number) {
    OLED.clear()
    OLED.writeString("Teplota ")
    OLED.writeNum(teplota)
    OLED.writeString(" stupnov.")
    OLED.newLine()
    OLED.newLine()
    OLED.writeString("Svetlo (0 - 255) ")
    OLED.writeNum(0)
}
 
let nSvetlo = 0
let nTeplota = 0
OLED.init(128, 64)
basic.forever(function () {
    nTeplota = input.temperature()
    nSvetlo = input.lightLevel()
    zobrazHodnoty(nTeplota, nSvetlo)
    basic.pause(2000)
})

Na displeji by sa mala zobraziť teplota v stupňoch Celzia približne o 4 stupne väčšia, než teplota v miestnosti a úroveň osvetlenia v intervale číselných hodnôt 0 – 255.

Posielanie údajov do cloudu

Údaje budeme posielať do cloudovej platformy ThinkSpeak. https://thingspeak.com.  Na bežné účely vám stačí bezplatné konto. Postup vytvorenia účtu bol predchádzajúcom článku. Na stránke pre prihlásenie a vytvorenie konta nájdete aj výstižnú schému 

 

Po úspešnej registrácii si vytvoríte nový kanál a vhodne ho pomenujete, napríklad Microbit meranie interne. V rovnakom formulári ešte vyplníte názvy jednotlivých polí, v našom prípade Teplota °C a Svetlo (0 - 255) 

Po potvrdení sa prepnite do záložky API Keys. Tu nájdete identifikátor Write API key, ktorý použijete v programe pre Micro:bit ako parameter v príkaze setdata()  

Teraz vytvoríme základnú šablónu kódu na posielanie údajov do cloudovej platformy ThinkSpeak. Ako prvý krok je potrebné iniciovať pripojenie Micro:bitu k WiFi sieti. Je potrebné zadať porty priradené signálom RX a TX. Priradenie nájdete v pravom hornom rohu dosky IoT:bit. Signál RX je pripojený na port P8 a TX na port P12.

 Ako parametre funkcie connectWifi sa sadáva identifikátor siete a prístupové heslo. Nasleduje pripojenie do cloudovej platformy ThingSpeak, vytvorenie správy a jej odoslanie. Správa obsahuje api_key a osem údajov. Samozrejme nemusíte využiť všetkých osem, môžete posielať len napríklad dve ako v tomto príklade

function zobrazHodnoty (teplota: number, svetlo: number) {

    OLED.clear()
    OLED.writeString("Teplota ")
    OLED.writeNum(teplota)
    OLED.writeString(" stupnov.")
    OLED.newLine()
    OLED.newLine()
    OLED.writeString("Svetlo (0 - 255) ")
    OLED.writeNum(svetlo)
}
let nSvetlo = 0
let nTeplota = 0
OLED.init(128, 64)
ESP8266_IoT.initWIFI(SerialPin.P8, SerialPin.P12, BaudRate.BaudRate115200)
ESP8266_IoT.connectWifi("TP-LINK_A471", "xxx")
basic.forever(function () {
    nTeplota = input.temperature()
    nSvetlo = input.lightLevel()
    zobrazHodnoty(nTeplota, nSvetlo)
    ESP8266_IoT.connectThingSpeak()
    ESP8266_IoT.setdata(
    "ZHUTMJ2523RNxxx",
    nTeplota,
    nSvetlo,
    0,
    0,
    0,
    0,
    0,
    0
    )
    ESP8266_IoT.uploadData()
    basic.pause(10000)
})

Zobrazovanie údajov v službe ThingSpeak

Na webovom portáli služby ThingSpeak sa prepnite do záložky Private View, kde môžete sledovať graf hodnôt posielaných z dosky Micro:bit do cloudovej služby

Okrem grafov môžete aktuálne namerané údaje zobrazovať aj formou analógových, či digitálnych ukazovateľov, prípadne formou kontrolky typu zelená – červená. V záložke Private View aktivujte tlačidlo Add Widget.

Následne môžete pridať vhodný typ ukazovateľa. V našom prípade analógový ukazovateľ pre teplotu a digitálny pre úroveň osvetlenia. Pre každý ukazovateľ nastavte interval hodnôt, napríklad pre izbovú teplotu rozsah 0 – 50 °C

Meranie, posielanie do cloudu a zobrazovanie údajov z akcelerometra

V druhom  príklade využijeme akcelerometer na doske Micro:bit a budeme merať zrýchlenie v osiach X, Y, a Z. Najskôr v cloudovej platforme vytvorte nový kanál na posielanie údajov, v tomto prípade zrýchlenia v osiach X, Y a Z a skopírujte si do schránky jeho Write API Key, ktorý potom vložíte do kódu v Micro:bite.

Upravíme aj funkciu na zobrazovanie hodnôt na OLED displeji a príkaz na vytvorenie bloku údajov, nakoľko sa budú zobrazovať a posielať tri hodnoty

function zobrazHodnoty (aX: number, aY: number, aZ: number) {

    OLED.clear()
    OLED.writeString("X: ")
    OLED.writeNum(aX)
    OLED.newLine()
    OLED.newLine()
    OLED.writeString("Y: ")
    OLED.writeNum(aY)
    OLED.newLine()
    OLED.newLine()
    OLED.writeString("Z: ")
    OLED.writeNum(aZ)
}
 
let zrychlenieZ = 0
let zrychlenieY = 0
let zrychlenieX = 0
OLED.init(128, 64)
ESP8266_IoT.initWIFI(SerialPin.P8, SerialPin.P12, BaudRate.BaudRate115200)
ESP8266_IoT.connectWifi("TP-LINK_A471", "10215449")
basic.forever(function () {
    zrychlenieX = input.acceleration(Dimension.X)
    zrychlenieY = input.acceleration(Dimension.X)
    zrychlenieZ = input.acceleration(Dimension.Z)
    zobrazHodnoty(zrychlenieX, zrychlenieY, zrychlenieZ)
    ESP8266_IoT.connectThingSpeak()
    ESP8266_IoT.setdata(
    "3APKROE8NG9MNIWX",
    zrychlenieX,
    zrychlenieY,
    zrychlenieZ,
    0,
    0,
    0,
    0,
    0
    )
    ESP8266_IoT.uploadData()
    basic.pause(1000)
})

Interval posielania údajov sme skrátili na 1 sekundu. Teraz môžete pohybovať doskou microbit v rôznych smeroch a ak máte pripojený OLED displej tak na ňom sledovať hodnoty zrýchlenia. Časový priebeh zrýchlenia v jednotlivých osiach môžete sledovať na grafoch

Ako napovedá názov záložky Private View, údaje v tejto záložke môžete vidieť len vy. Ak ich chcete zdieľať, je potrebné parametre zdieľania nastaviť v záložke Sharing.

Ak chcete niektorý graf vložiť do svojej webovej stránky aktivujte v príslušnom grafe v záhlaví ikonu s bublinou a získate kód ktorý vložíte do stránky v tvare:

Údaje z príslušného kanála cloudovej platformy ThingSpeak môžete vyexportovať vo formátoch JSON, XML a CSV. 

CSV je textový súbor, v ktorom sú hodnoty oddelené čiarkou. Názvy atribútov sú v prvom riadku. Je tam doplnený aj čas a ako zatiaľ prázdne atribúty sú zemepisné súradnice a stav.

created_at,entry_id,field1,field2,field3,latitude,longitude,elevation,status
2019-09-12 17:41:01 UTC,1,-112,464,-880,,,,
2019-09-12 17:41:17 UTC,2,176,352,-704,,,,
2019-09-12 17:41:32 UTC,3,32,-16,-1008,,,,
2019-09-12 17:41:47 UTC,4,48,-32,-1008,,,,
2019-09-12 17:42:03 UTC,5,32,-32,-1008,,,,
2019-09-12 17:42:18 UTC,6,-160,80,160,,,,
2019-09-12 17:42:33 UTC,7,48,-16,-1008,,,,
2019-09-12 17:42:48 UTC,8,48,-32,-1008,,,,
2019-09-12 17:43:04 UTC,9,-832,-304,-544,,,,

Tento formát dokáže načítať aj aplikácia Excel. Niekedy budete musieť atribúty oddelené čiarkou rozdeliť do stĺpcov manuálne. 

 

V budúcom pokračovaní sa budeme venovať jednoduchej automatizácii s využitím IFTTT

Zobrazit Galériu

Luboslav Lacko

Všetky autorove články
BBC micro:bit MicroBit ThingSpeak IFTTT IoT internet veci

1 komentár

Pochvala reakcia na: IoT prakticky – posielanie údajov z mikropočítača BBC Micro:bit s WiFi modulom do cloudu

14.9.2019 08:09
Ano, ano, ano. Takto má vypadat článek, návod, prezentace, která nám ostatním pomůže. Jste na 1*
Reagovať

Pridať komentár