Kazalo:
- 1. korak: BoM - materialni material
- 2. korak: Hw
- 3. korak: Micropython, REPL, Jupyter
- 4. korak: Senzorji
- 5. korak: Zajemite in lokalno prikažite vse podatke senzorja
- 6. korak: Zaženite kodo lokalne postaje pri zagonu ESP
- 7. korak: ESP povežite z lokalno WiFi
- 8. korak: ThingSpeak
- 9. korak: Protokol MQTT in povezava ThingSpeak
- 10. korak: Zapisovalnik podatkov senzorja
- 11. korak: Aplikacija ThingView
- 12. korak: Zaključek
Video: IoT Made Ease: ESP-MicroPython-MQTT-Thing Govorite: 12 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
V moji prejšnji vadnici, MicroPython na ESP z uporabo Jupyterja, smo se naučili, kako namestiti in zagnati MicroPython na napravi ESP. Z uporabo prenosnega računalnika Jupyter kot našega razvojnega okolja smo se naučili tudi brati s senzorjev (temperatura, vlažnost in svetilnost). Uporabljamo več komunikacijskih protokolov in metod, analognih, digitalnih, 1-žičnih in I2C, zadnjih za prikaz naših zajetih posnetkov. podatke na zaslonu OLED.
Zdaj bomo v tej vadnici s protokolom MQTT dobili vse zajete podatke in jih poslali na storitev IoT, ThingSpeak.com in v mobilno aplikacijo (Thingsview), kjer se lahko prijavite in igrate s podatki.
Tu je blok diagram našega projekta:
1. korak: BoM - materialni material
- NodeMCU - 8,39 USD
- Senzor temperature in relativne vlažnosti DHT22 - 9,95 USD
- DS18B20 Vodotesni temperaturni senzor - 5,95 USD
- Zaslon OLED SSD1366- 8,99 USD (neobvezno)
- LDR (1x)
- LED (1x) (neobvezno)
- Potisni gumb (1x)
- Upor 4K7 ohm (2x)
- Upor 10K ohm (1x)
- Upor 220 ohm (1x)
2. korak: Hw
Hw, ki ga bomo tukaj uporabljali, je v osnovi enak kot v vadnici: Micropython na ESP z uporabo Jupyterja. Za vse povezave HW glejte to.
Izjema je Servo, ki ga v tem projektu ne bomo uporabljali.
Zgoraj si lahko ogledate celoten HW. Priključite naprave, kot je prikazano tam.
3. korak: Micropython, REPL, Jupyter
Na napravi ESP morate imeti naložen tolmač Micropython. Ko je naložen, morate programirati svoj ESP na kateri koli od razpoložljivih načinov/IDE, ki so na voljo, na primer:
- REPL
- Beležnica Jupyter
- Mu
- ESPCut (samo Windows)
- … Itd
V svoji vadnici Micropython o ESP z uporabo Jupyterja sem podrobno opisal, kako naložim in namestim tolmač MicroPython, ESPTool za upravljanje naprav ESP in kako uporabljati Jupyter Notebook kot razvojno okolje. Uporabite tisto, kar vam je bolj udobno.
Ponavadi ves razvoj naredim na prenosnem računalniku Jupyter, in ko dobim končno kodo, jih kopiram v Geany in jo z Ampyjem naložim na svoj ESP.
4. korak: Senzorji
Namestimo knjižnice, opredelimo GPIO, ustvarimo predmete, funkcije za vse senzorje posebej:
A. DHT (temperatura in vlažnost)
Namestimo knjižnico DHT in ustvarimo predmet:
od dht uvoz DHT22
iz uvoza stroja Pin dht22 = DHT22 (Pin (12))
Zdaj ustvarite funkcijo za branje senzorja DHT:
def readDht ():
dht22.measure () vrne dht22.temperature (), dht22.humidity () Preizkusite funkcijo DHT
tiskanje (readDht ())
Rezultat bi moral biti na primer:
(17.7, 43.4)
B. DS18B20 (zunanja temperatura)
Namestimo knjižnice in ustvarimo predmet:
uvoz onewire, ds18x20
čas uvoza # Določite, kateri pin 1-žilne naprave bo priključen ==> pin 2 (D4) dat = Pin (2) # ustvarite objekt z eno žico ds = ds18x20. DS18X20 (onewire. OneWire (dat)) Poiščite naprave na bu
senzorji = ds.scan ()
print ('najdene naprave:', senzorji)
Natisnjeni rezultat v resnici ni pomemben, kar potrebujemo, je prvi zaznani senzor: senzorji [0]. In zdaj lahko zgradimo funkcijo za branje senzorskih podatkov:
def readDs ():
ds.convert_temp () time.sleep_ms (750) vrne ds.read_temp (senzorji [0])
Vedno je pomembno, da senzor preizkusite z ustvarjeno funkcijo
tiskanje (readDs ()) Če dobite vrednost temperature, je vaša koda pravilna
17.5
C. LDR (svetilnost)
LDR bo uporabljal analogni pin našega ESP (le en je v primeru ESP8266 in več ESP32).
Za podrobnosti si oglejte mojo vadnico ESP32.
Enako kot prej:
# knjižnica za uvoz
iz strojnega uvoza ADC # Določite objekt adc = ADC (0) Preprosta funkcija: adc.read () lahko uporabite za branje vrednosti ADC. Ne pozabite pa, da bo notranji ADC pretvoril napetosti med 0 in 3,3 V v ustrezne digitalne vrednosti, ki se razlikujejo od 0 do 1023. Ko nas zanima "Svetilnost", bomo največjo zajeto vrednost senzorja upoštevali pri največji svetlobi (v mojem primer 900) in najmanjša svetloba, ki je v mojem primeru 40. S temi vrednostmi lahko "preslikamo" vrednost od 40 do 900 v 0 do 100% svetilnosti. Za to bomo ustvarili novo funkcijo
def readLdr ():
lumPerct = (adc.read ()-40)*(10/86) # pretvorba v odstotkih ("zemljevid") povratni krog (lumPerct)
Funkcijo morate preizkusiti s funkcijo print (readLDR ()). Rezultat mora biti celo število med o in 100.
D. Tipka (digitalni vhod)
Tukaj uporabljamo potisni gumb kot digitalni senzor, vendar je lahko "odmev" aktuatorja (na primer vklopljeno/izklopljeno črpalko).
# določite pin 13 kot vhod in aktivirajte notranji vlečni upor:
button = Pin (13, Pin. IN, Pin. PULL_UP) # Funkcija za branje stanja gumba: def readBut (): gumb za vrnitev.value ()
Lahko preizkusite gumb, ki bere funkcijo print (readBut ()). Brez pritiska na rezultat mora biti "1". S pritiskom na gumb bi moral biti rezultat "0"
5. korak: Zajemite in lokalno prikažite vse podatke senzorja
Zdaj, ko smo ustvarili eno funkcijo za vsak senzor, ustvarimo zadnjo, ki bo prebrala vse hkrati:
def colectData ():
temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () vrnitev temp, hum, extTemp, lum, butSts Zdaj, če uporabljate
tiskanje (colectData ())
Rezultat bo nabor, ki vključuje vse zajete podatke s senzorjev:
(17.4, 45.2, 17.3125, 103, 1)
Te podatke lahko po želji prikažemo tudi na lokalnem zaslonu:
# uvoz knjižnice in ustvarite objekt i2c
iz stroja uvoz I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # knjižnica za uvoz in ustvari objekt oled uvoz ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # ustvari funkcijo: def displayData (temp, hum, extTemp, lum, butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC", 0, 4) oled.text ("Hum:" + str (hum) + "%", 0, 16) oled.text ("ExtTemp:" + str (extTemp) + "oC", 0, 29) oled.text ("Lumin:" + str (lum) + "%", 0, 43) oled.text ("Button:" + str (butSts), 0, 57) oled.show () # prikaz podatkov s funkcijo displayData (temp, hum, extTemp, lum, butSts)
Kot možnost bom vključil tudi LED, ki bo vklopljena, ko začnemo brati senzorje, potem ko se ti podatki prikažejo, ugasne. S tem boste potrdili, da program deluje, ko imamo ESP odklopljen od računalnika in se samodejno zažene.
Torej bi bila glavna funkcija:
# Glavna funkcija za branje vseh senzorjev
def main (): # prikaz podatkov s funkcijo led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off ()
Tako bomo z izvajanjem main () dobili podatke senzorja, prikazane na OLED, kot je prikazano na sliki.
6. korak: Zaženite kodo lokalne postaje pri zagonu ESP
Vse, kar smo doslej razvili, lahko imamo v eni sami datoteki, ki jo bo izvedel naš ESP.
Odprimo kateri koli urejevalnik besedil in v njem postavimo vso kodo:
# uvoz splošnih knjižnic
iz uvoza stroja Čas uvoza pin # določite pin 0 kot izhod LED = Pin (0, Pin. OUT) # DHT from dht import DHT22 dht22 = DHT22 (Pin (12)) # Funkcija za branje DHT def readDht (): dht22.measure () return dht22.temperature (), dht22.humidity () # DS18B20 import onewire, ds18x20 # Določite, kateri pin 1-žilne naprave bo priključen ==> pin 2 (D4) dat = Pin (2) # Ustvarite enožično objekt ds = ds18x20. DS18X20 (onewire. OneWire (dat)) # skeniranje naprav na senzorjih vodila = ds.scan () # funkcija za branje DS18B20 def readDs (): ds.convert_temp () time.sleep_ms (750) return round (ds.read_temp (sensors [0]), 1) # LDR iz uvoznega stroja ADC # Določite objekt adc = ADC (0) # funkcija za branje svetilnosti def readLdr (): lumPerct = (adc.read ()-40) *(10/86) # pretvorba v odstotkih ("zemljevid") povratni krog (lumPerct) # določite pin 13 kot vhod in aktivirajte notranji vlečni upor: gumb = Pin (13, Pin. IN, Pin. PULL_UP) # Funkcija za branje stanja gumba: def readBut (): gumb za vrnitev.value () # Funkcija za branje vseh podatkov: def cole ctData (): temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () vrnitev temp, hum, extTemp, lum, butSts # knjižnica za uvoz in ustvarite objekt i2c iz stroja za uvoz I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # knjižnica za uvoz in ustvari objekt oled import ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # ustvarite funkcijo: def displayData (temp, hum, extTemp, lum, butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC", 0, 4) oled.text ("Hum:" + str (hum) + "%", 0, 16) oled.text ("ExtTemp:" + str (extTemp) + "oC", 0, 29) oled. text ("Lumin:" + str (lum) + "%", 0, 43) oled.text ("Button:" + str (butSts), 0, 57) oled.show () # Glavna funkcija za branje vseh senzorjev def main (): # prikaz podatkov s funkcijo led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () '' ''- ----- zaženi glavno funkcijo -------- '' 'main ()
Shranite ga, na primer kot localData.py.
Za zagon te kode neposredno na vašem terminalu potrebujete Ampy.
Najprej na terminalu obvestite Ampy o naših serijskih vratih:
izvozi AMPY_PORT =/dev/tty. SLAB_USBtoUART
Zdaj lahko vidimo datoteke, ki so v našem korenskem imeniku ESP:
ampy ls
Kot odgovor bomo dobili boot.py, to je prva datoteka, ki se bo izvajala v sistemu.
Zdaj pa uporabimo Ampy za nalaganje našega python Script LocalData.py kot /main.py, zato se bo skript zagnal takoj po zagonu:
ampy dal localData.py /main /py
Če zdaj uporabimo ukaz amp ls, boste v ESP -ju videli 2 datoteki: boot.py in main.py
Če ponastavite ESP, se bo program localData.py samodejno zagnal in prikazal podatke senzorja na zaslonu.
Zgornji zaslon za tiskanje terminala prikazuje, kaj smo storili.
Z zgornjo kodo se bo zaslon prikazal le enkrat, lahko pa določimo zanko na glavni () funkciji, ki bo prikazovala podatke za vsak definiran časovni interval (PUB_TIME_SEC) in na primer, dokler ne pritisnemo gumba:
# zanka za pridobivanje podatkov, dokler ne pritisnete gumba
while button.value (): led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC)
Spremenljivko PUB_TIME_SEC morate prijaviti do časa, ko želite vzorce.
Za večjo izboljšavo naše kode bi bilo dobro obvestiti, da bomo izstopili iz zanke, zato bomo opredelili 2 novi splošni funkciji, eno za brisanje zaslona in drugo za utripanje LED -ja določeno število krat.
# Čist zaslon:
def displayClear (): oled.fill (0) oled.show () # ustvarite funkcijo utripanja def blinkLed (num): za i v razponu (0, num): led.on () sleep (0.5) led.off () spanje (0,5)
Tako lahko zdaj prepišemo našo funkcijo main ():
while button.value ():
led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC) blinkLed (3) displayClear ()
Končno kodo lahko prenesete z mojega GitHub -a: localData.py in tudi prenosnega računalnika Jupyter, ki se uporablja za razvoj celotne kode: Jupyter Local Data Development.
7. korak: ESP povežite z lokalno WiFi
Omrežni modul se uporablja za konfiguriranje povezave WiFi. Obstajata dva vmesnika WiFi, eden za postajo (ko se ESP8266 poveže z usmerjevalnikom) in drugi za dostopno točko (za priključitev drugih naprav na ESP8266). Tu bo naš ESP povezan z lokalnim omrežjem. Pokličimo knjižnico in določimo svoje omrežne poverilnice:
uvozno omrežje
WiFi_SSID = "VAŠ SSID" WiFi_PASS = "VAŠA GESLA"
Spodnjo funkcijo lahko uporabite za povezavo ESP v lokalno omrežje:
def do_connect ():
wlan = network. WLAN (network. STA_IF) wlan.active (True), če ni wlan.isconnected (): print ("povezovanje v omrežje …") wlan.connect (WiFi_SSID, WiFi_SSID), medtem ko ni wlan.isconnected (): pass print ('omrežna konfiguracija:', wlan.ifconfig ())
Če zaženete funkcijo, lahko kot rezultat dobite naslov IP:
do_connect ()
Rezultat bo:
omrežna konfiguracija: ('10.0.1.2 ',' 255.255.255.0 ', '10.0.1.1', '10.0.1.1 ')
Je bil v mojem primeru 10.0.1.2 naslov IP ESP.
8. korak: ThingSpeak
Na tej točki smo se naučili, kako zajeti podatke iz vseh senzorjev in jih prikazati na OLED -u. Zdaj je čas, da vidimo, kako te podatke poslati na platformo IoT, ThingSpeak.
Začnimo!
Najprej morate imeti račun na ThinkSpeak.com. Nato sledite navodilom za ustvarjanje kanala in upoštevajte svoj ID kanala in ključ API -ja za pisanje.
Zgoraj si lahko ogledate 5 polj, ki bodo uporabljena na našem kanalu.
9. korak: Protokol MQTT in povezava ThingSpeak
MQTT je arhitektura za objavo/naročnino, ki je razvita predvsem za povezovanje pasovne širine in naprav z omejeno močjo prek brezžičnih omrežij. To je preprost in lahek protokol, ki deluje prek vtičnic TCP/IP ali WebSockets. MQTT prek WebSockets je mogoče zavarovati s protokolom SSL. Arhitektura objave/naročnine omogoča pošiljanje sporočil na odjemalce, ne da bi naprava morala neprestano iskati strežnik.
Posrednik MQTT je osrednja točka komunikacije in je odgovoren za pošiljanje vseh sporočil med pošiljatelji in zakonitimi prejemniki. Odjemalec je vsaka naprava, ki se poveže s posrednikom in lahko za dostop do informacij objavi ali se naroči na teme. Tema vsebuje informacije o usmerjanju posrednika. Vsak odjemalec, ki želi poslati sporočila, jih objavi pri določeni temi, vsak odjemalec, ki želi prejemati sporočila, pa se naroči na določeno temo. Posrednik posreduje vsa sporočila z ustrezno temo ustreznim strankam.
ThingSpeak ™ ima posrednika MQTT na naslovu mqtt.thingspeak.com in vratih 1883. Posrednik ThingSpeak podpira objavo MQTT in naročnino na MQTT.
V našem primeru bomo uporabili: MQTT Publish
Slika prikazuje strukturo teme. Za objavo je potreben ključ API za pisanje. Posrednik s CONNACK -om potrdi pravilno zahtevo CONNECT.
Protokol MQTT je podprt v vgrajeni knjižnici v binarnih datotekah Micropython-ta protokol se lahko uporablja za pošiljanje podatkov iz vašega ESP8266 prek WIFI v brezplačno bazo podatkov v oblaku.
Uporabimo knjižnico umqtt.simple:
iz umqtt.simple import MQTTClient
Če poznamo naš ID strežnika, je mogoče ustvariti naš odjemalski objekt MQTT:
SERVER = "mqtt.thingspeak.com"
odjemalec = MQTTClient ("umqtt_client", SERVER)
Zdaj, ko imate pri roki poverilnice za ThingSpeak:
CHANNEL_ID = "VAŠ KANALNI ID"
WRITE_API_KEY = "VAŠ KLJUČ"
Ustvarimo našo "temo" MQTT:
topic = "kanali/" + CHANNEL_ID + "/objava/" + WRITE_API_KEY
Poskrbimo, da se naši podatki pošljejo v storitev ThingSpeak IoT Service z ustvarjeno funkcijo in njen odgovor povežemo s posebnimi spremenljivkami podatkov:
temp, hum, extTemp, lum, butSts = colectData ()
S posodobljenimi spremenljivkami lahko ustvarimo naš "MQTT Payload":
payload = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+str (lum)+"& field5 ="+str (butSts)
In to je to! Pripravljeni smo poslati podatke v ThinsSpeak, preprosto z uporabo treh spodnjih vrstic kode:
client.connect ()
client.publish (tema, koristna obremenitev) client.disconnect ()
Če odprete stran svojega kanala (kot je moja zgoraj), boste videli, da bo vsako od petih polj vsebovalo podatke, povezane z vašimi senzorji.
10. korak: Zapisovalnik podatkov senzorja
Zdaj, ko vemo, da je z le nekaj vrsticami kode mogoče naložiti podatke v storitev IoT, ustvarimo funkcijo zanke, ki bo to izvajala samodejno v rednem časovnem intervalu (podobno kot smo naredili z "Lokalni podatki" ").
Z uporabo iste spremenljivke (PUB_TIME_SEC), ki je bila prej deklarirana, bi bila preprosta glavna funkcija za neprekinjeno zajemanje podatkov, beleženje na našem kanalu:
medtem ko je res:
temp, hum, extTemp, lum, butSts = colectData () payload = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+ str (lum)+"& field5 ="+str (butSts) client.connect () client.publish (tema, koristna obremenitev) client.disconnect () time.sleep (PUB_TIME_SEC)
Upoštevajte, da je treba posodobiti samo "koristno obremenitev", ko je "tema" povezana z poverilnicami našega kanala in se ne bo spremenila.
Če iščete stran kanala ThingSpeak, boste opazili, da se bodo podatki neprestano nalagali na vsako polje. Lahko pokrijete LDR, položite roko na senzorje temp/hum, pritisnete gumb itd. In si ogledate, kako bo kanal samodejno "zapisal" te podatke za prihodnjo analizo.
Običajno bi morali za beleženje podatkov poskušati uporabiti čim manj energije, zato LED ali zaslona ne bi uporabljali lokalno. Prav tako je običajno pri napravah ESP, jih postavite v "globok spanec", kjer bo mikroprocesor v stanju minimalne energije, dokler ne bo čas za zajem podatkov in njihovo pošiljanje na platformo IoT.
Ko pa se ideja tukaj uči, vključimo tudi zaslon in LED, kot smo to počeli prej. Pri tem bo funkcija »zapisovalnika«:
while button.value ():
led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () temp, hum, extTemp, lum, butSts = colectData () payload = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+str (lum)+"& field5 ="+str (butSts) odjemalec.connect () client.publish (tema, koristna obremenitev) client.disconnect () time.sleep (PUB_TIME_SEC) blinkLed (3) displayClear ()
Celoten skript microPython najdete tukaj: dataLoggerTS_EXT.py in zvezek Jupyter, ki je bil uporabljen za razvoj, najdete tudi tukaj: IoT ThingSpeak Data Logger EXT.ipynb.
Če želite naložiti skript na ESP, na svojem terminalu uporabite ukaz:
ampy dal dataLoggerTS.py /main.py
In pritisnite gumb za ponastavitev ESP. ESP bo zajemal podatke in jih zapisoval na ThingSpeak.com, dokler ne pritisnete na dno (počakajte, da LED utripa 3 -krat in OLED ugasne).
11. korak: Aplikacija ThingView
Zabeležene podatke si lahko ogledate neposredno na spletnem mestu ThingSpeak.com ali prek aplikacije, na primer ThingsView!
ThingView je aplikacija, ki jo je razvil CINETICA in vam omogoča preprosto vizualizacijo vaših kanalov ThingSpeak, samo vnesite ID kanala in pripravljeni ste.
Za javne kanale bo aplikacija spoštovala nastavitve vašega okna: barvo, časovni okvir, vrsto grafikona in število rezultatov. Trenutna različica podpira vrstice in stolpce, spline grafikoni so prikazani kot vrstice.
Za zasebne kanale bodo podatki prikazani s privzetimi nastavitvami, saj ni mogoče prebrati nastavitev zasebnih oken samo s ključem API.
APP ThingView lahko prenesete za ANDROID in IPHONE.
12. korak: Zaključek
Kot vedno upam, da lahko ta projekt pomaga drugim najti pot v razburljiv svet elektronike!
Za podrobnosti in končno kodo obiščite moj depozitar GitHub: IoT_TS_MQTT
Za več projektov obiščite moj blog: MJRoBot.org
Saludos z juga sveta!
Se vidimo v mojem naslednjem navodilu!
Hvala vam, Marcelo
Priporočena:
LED Whack-a-made: 5 korakov
LED Whack-a-mol: Ta igra " Whack-a-mol " uporablja sedem LED in krmilno palčko. Obstajajo 4 " moli " na moji plošči, ki ga z leve strani predstavljajo 3., 4., 5. in 6. LED. Ena od teh štirih LED bo naključno zasvetila in bo ponudila fiksno
Začnite z Esp 8266 Esp-01 z Arduino IDE - Namestitev plošč Esp v Arduino Ide in programiranje Esp: 4 koraki
Začnite z Esp 8266 Esp-01 z Arduino IDE | Namestitev plošč Esp v Arduino Ide in programiranje Esp: V tem navodilu se bomo naučili, kako namestiti plošče esp8266 v Arduino IDE in kako programirati esp-01 in naložiti kodo vanj. Ker so plošče esp tako priljubljene, sem razmišljal, da bi popravil navodila za to in večina ljudi se sooča s težavo
IoT Made Simple: Nadzor več senzorjev: 7 korakov
IoT Made Simple: Spremljanje več senzorjev: Pred nekaj tedni sem tukaj objavil vadnico o spremljanju temperature z uporabo digitalnega senzorja DS18B20, ki komunicira prek 1-žičnega vodila in pošilja podatke po internetu z NodeMCU in Blynk: IoT Made Simple : Spremljanje temperature kjer koliBu
IoT Made Easy: Zajem oddaljenih vremenskih podatkov: UV in zrak Temperatura in vlažnost: 7 korakov
IoT Made Easy: Zajem oddaljenih vremenskih podatkov: UV in temperatura zraka ter vlažnost: V tej vadnici bomo zajemali oddaljene podatke kot UV (ultravijolično sevanje), temperaturo zraka in vlažnost. Ti podatki bodo zelo pomembni in bodo uporabljeni v prihodnji celotni vremenski postaji. Blok diagram prikazuje, kaj bomo dobili na koncu
Igrače, ki se prilagajajo stikalom: Play @ Home Mixer Made Accessible!: 7 korakov (s slikami)
Switch-Adapt Toys: Play @ Home Mixer Made Accessible !: Prilagajanje igrač odpira nove poti in prilagojene rešitve, ki otrokom z omejenimi motoričnimi sposobnostmi ali motnjami v razvoju omogočajo samostojno interakcijo z igračami. V mnogih primerih otroci, ki potrebujejo prilagojene igrače, ne morejo