Sisällysluettelo:

IoT helpotti: ESP-MicroPython-MQTT-Thing Puhe: 12 vaihetta
IoT helpotti: ESP-MicroPython-MQTT-Thing Puhe: 12 vaihetta

Video: IoT helpotti: ESP-MicroPython-MQTT-Thing Puhe: 12 vaihetta

Video: IoT helpotti: ESP-MicroPython-MQTT-Thing Puhe: 12 vaihetta
Video: Tenochtitlan: the Lost Realm of Cain? | ANUNNAKI SECRETS 42 | The Lost Realms by Zecharia Sitchin 2024, Heinäkuu
Anonim
IoT helpotti: ESP-MicroPython-MQTT-ThingSpeak
IoT helpotti: ESP-MicroPython-MQTT-ThingSpeak

Edellisessä opetusohjelmassani, MicroPython ESP: ssä Jupyterin avulla, opimme asentamaan ja suorittamaan MicroPythonin ESP -laitteeseen. Käyttämällä Jupyter-muistikirjaa kehitysympäristönä opimme myös lukemaan antureista (lämpötila, kosteus ja kirkkaus). Käytämme useita kommunikaatioprotokollia ja -menetelmiä, analogista, digitaalista, 1-johtimista ja I2C, tämä viimeinen näyttää kaapatut tiedot OLED -näytöllä.

Nyt tästä opetusohjelmasta, jossa käytetään MQTT -protokollaa, saamme kaikki kaapatut tiedot lähettämällä ne IoT -palveluun, ThingSpeak.com ja mobiilisovellukseen (Thingsview), jossa voimme kirjautua ja pelata datalla.

Tässä projektimme lohkokaavio:

Kuva
Kuva

Vaihe 1: BoM - Bill of Material

  1. NodeMCU - 8,39 dollaria
  2. DHT22 lämpötila- ja suhteellisen kosteuden anturi - 9,95 USD
  3. Vedenpitävä lämpötila -anturi DS18B20 - 5,95 USD
  4. OLED-näyttö SSD1366- USD 8,99 (valinnainen)
  5. LDR (1x)
  6. LEDit (1x) (valinnainen)
  7. Painike (1x)
  8. Vastus 4K7 ohmia (2x)
  9. Vastus 10K ohmia (1x)
  10. Vastus 220 ohmia (1x)

Vaihe 2: Hw

Hw
Hw

Tässä käyttämämme Hw on pohjimmiltaan sama kuin opetusohjelmassa: Micropython ESP: ssä Jupyterin avulla. Katso siitä kaikki HW -liitännät.

Poikkeuksena on Servo, jota ei käytetä tässä projektissa.

Yllä näet koko HW: n. Liitä laitteet siellä kuvatulla tavalla.

Vaihe 3: Micropython, REPL, Jupyter

Micropython, REPL, Jupyter
Micropython, REPL, Jupyter
Micropython, REPL, Jupyter
Micropython, REPL, Jupyter

ESP -laitteeseen on ladattava Micropython -tulkki. Kun olet ladannut, sinun on ohjelmoitava ESP käyttämällä mitä tahansa käytettävissä olevia tapoja/IDE: itä, kuten:

  • REPL
  • Jupyter -muistikirja
  • Mu
  • ESPCut (vain Windows)
  • … jne

Opetusohjelmassani, Micropython ESP: ssä Jupyterin avulla, kerroin kuinka ladata ja asentaa MicroPython -tulkki, ESPTool ESP -laitteiden hallintaan ja kuinka käyttää Jupyter -muistikirjaa kehitysympäristönä. Voit vapaasti käyttää sitä, mikä on sinulle mukavampaa.

Teen yleensä kaiken kehityksen Jupyter -muistikirjalla, ja kun saan lopullisen koodin, kopioin ne Geanylle ja lataan sen ESP: hen Ampyn avulla.

Vaihe 4: Anturit

Anturit
Anturit

Asennetaan kirjastot, määritellään GPIO, luodaan objekteja, toimintoja kaikille antureille erikseen:

A. DHT (lämpötila ja kosteus)

Asennetaan DHT -kirjasto ja luodaan objekti:

dht -tuonnista DHT22

koneen tuonnista Nasta dht22 = DHT22 (nasta (12))

Luo nyt toiminto DHT -anturin lukemiseksi:

def readDht ():

dht22.measure () palauttaa dht22.temperature (), dht22.humidity () Testaa DHT -toiminto

tulosta (readDht ())

Tuloksen pitäisi olla esimerkiksi:

(17.7, 43.4)

DS18B20 (ulkoinen lämpötila)

Asennetaan kirjastot ja luodaan objekti:

tuo onewire, ds18x20

tuontiaika # Määritä, mikä nasta 1-johtiminen laite liitetään ==> nasta 2 (D4) dat = Nasta (2) # luo onewire-objekti ds = ds18x20. DS18X20 (onewire. OneWire (dat)) Etsi laitteita bu

anturit = ds.scan ()

tulosta ("löydetyt laitteet:", anturit)

Tulostetulla tuloksella ei ole oikeastaan merkitystä, tarvitsemme ensimmäisen havaitun anturin: anturit [0]. Ja nyt voimme rakentaa toiminnon anturitietojen lukemiseksi:

def readDs ():

ds.convert_temp () time.sleep_ms (750) return ds.read_temp (anturit [0])

On aina tärkeää testata anturi luodulla toiminnolla

tulosta (lukuDs ()) Jos saat lämpötila -arvon, koodi on oikea

17.5

LDR (kirkkaus)

LDR käyttää ESP: n analogista tappia (se on vain yksi ESP8266: n tapauksessa ja useita ESP32: een).

Katso lisätietoja ESP32 -opetusohjelmastani.

Sama kuin ennen:

# tuonti kirjasto

koneen tuonnista ADC # Määrittele objekti adc = ADC (0) Yksinkertainen toiminto: adc.read () voidaan lukea ADC -arvo. Muista kuitenkin, että sisäinen ADC muuntaa jännitteet välillä 0 ja 3,3 V vastaavissa digitaalisissa arvoissa, jotka vaihtelevat 0: sta 1023. Kun olemme kiinnostuneita "Luminosity": stä, pidämme Max -valoa enimmäisarvoina anturista (minun tapaus 900) ja vähimmäisvalo, joka minun tapauksessani on 40. Näillä arvoilla voimme "kartoittaa" arvon 40 - 900 0-100%: n kirkkaudesta. Tätä varten luomme uuden toiminnon

def readLdr ():

lumPerct = (adc.read ()-40)*(10/86) # muuntaa prosentteina ("kartta") paluukierros (lumPerct)

Sinun on testattava toiminto käyttämällä tulostusta (readLDR ()). Tuloksen pitäisi olla kokonaisluku välillä o ja 100.

D. Painike (digitaalitulo)

Tässä käytämme painonappia digitaalisena anturina, mutta se voi olla toimilaitteen "kaiku" (Pumppu, joka on esimerkiksi kytketty päälle/pois).

# määritä nasta 13 tuloksi ja aktivoi sisäinen vetovastus:

painike = Nasta (13, Pin. IN, Pin. PULL_UP) # Painikkeen tilan lukutoiminto: def readBut (): return button.value ()

Voit testata painikkeen, joka lukee tulostustoiminnon (readBut ()). Ilman painamista tuloksen pitäisi olla "1". Painiketta painettaessa tuloksen pitäisi olla "0"

Vaihe 5: Kaikkien anturitietojen tallentaminen ja näyttäminen paikallisesti

Kaikkien anturitietojen tallentaminen ja näyttäminen paikallisesti
Kaikkien anturitietojen tallentaminen ja näyttäminen paikallisesti

Nyt kun olemme luoneet yhden toiminnon kullekin anturille, luomme viimeisen, joka lukee ne kaikki samanaikaisesti:

def colectData ():

temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () paluulämpötila, hum, extTemp, lum, butSts Jos nyt käytät

tulosta (colectData ())

Tuloksena on tuple, joka sisältää kaikki antureista kaapatut tiedot:

(17.4, 45.2, 17.3125, 103, 1)

Voimme myös vaihtoehtoisesti näyttää nämä tiedot paikallisella näytöllä:

# tuo kirjasto ja luo objekti i2c

koneen tuonnista I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # tuonti kirjasto ja luo objekti olet tuonti ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # luo funktio: 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 () # näyttää tiedot toiminnolla displayData (temp, hum, extTemp, lumen, butSts)

Vaihtoehtoisesti sisällytän myös LED -merkkivalon, joka palaa, kun aloitamme antureiden lukemisen, ja sammuu, kun tiedot näytetään. Tämä auttaa varmistamaan, että ohjelma toimii, kun ESP on irrotettu tietokoneesta ja käynnissä automaattisesti.

Päätehtävä olisi siis:

# Päätoiminto kaikkien antureiden lukemiseen

def main (): # näyttää tietoja toiminnolla led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off ()

Joten suorittamalla main (), saamme anturitiedot näkyviin OLED -laitteeseen kuvan osoittamalla tavalla.

Vaihe 6: Paikallisen asemakoodin suorittaminen ESP-käynnistyksen yhteydessä

Paikallisen asemakoodin suorittaminen ESP-käynnistyksen yhteydessä
Paikallisen asemakoodin suorittaminen ESP-käynnistyksen yhteydessä

Voimme saada kaiken tähän mennessä kehitetyn yhdestä tiedostosta, joka suoritetaan ESP: llämme.

Avaa mikä tahansa tekstieditori ja ohita kaikki koodit:

# tuoda yleisiä kirjastoja

koneen tuonnista Nastan tuontiaika # määritä nasta 0 tulostusdiodina = Pin (0, Pin. OUT) # DHT dht -tuonnista DHT22 dht22 = DHT22 (Pin (12)) # DHT: n lukutoiminto def readDht (): dht22.measure () return dht22.temperature (), dht22.humidity () # DS18B20 import onewire, ds18x20 # Määritä, mikä nasta 1-johtiminen laite yhdistetään ==> nasta 2 (D4) dat = Pin (2) # Luo onewire objekti ds = ds18x20. pyöreä (ds.read_temp (anturit [0]), 1) # LDR koneen tuonnista *(10/86) # muunna prosentteina ("kartta") paluukierros (lumPerct) # määritä nasta 13 tuloksi ja aktivoi sisäinen vetovastus: painike = nasta (13, Pin. IN, Pin. PULL_UP) # Toiminto lukupainikkeen tilaan: def readBut (): return button.value () # Toiminto kaikkien tietojen lukemiseen: def cole ctData (): temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () paluu lämpötila, hum, extTemp, lum, butSts # tuonti kirjasto ja luo objekti i2c koneen tuonnista I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # tuonti kirjasto ja luo objekti oled tuonti ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # luo funktio: 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 () # Päätoiminto kaikkien antureiden lukemiseen def main (): # näyttää tietoja toiminnolla led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () ''-- ----- suorita päätoiminto -------- '' 'main ()

Tallenna se esimerkiksi nimellä localData.py.

Jos haluat käyttää tätä koodia suoraan päätelaitteessasi, tarvitset Ampyn.

Ensinnäkin päätelaitteessa ilmoitetaan Ampylle sarjaporttimme:

vie AMPY_PORT =/dev/tty. SLAB_USBtoUART

Nyt voimme nähdä tiedostot, jotka ovat ESP -juurihakemistomme sisällä:

ampy ls

Vastauksena saamme boot.py, joka on ensimmäinen tiedosto, joka suoritetaan järjestelmässä.

Käytämme nyt Ampyä lataamaan python -skriptimme LocalData.py nimellä /main.py, joten komentosarja suoritetaan heti käynnistyksen jälkeen:

ampy laita localData.py /main /py

Jos käytämme komentoa amp ls nyt, näet kaksi tiedostoa ESP: n sisällä: boot.py ja main.py

Jos ESP nollataan, ohjelma localData.py käynnistyy automaattisesti ja näyttää anturitiedot näytöllä.

Yllä oleva terminaalin tulostusnäyttö näyttää, mitä olemme tehneet.

Yllä olevalla koodilla näyttö näytetään vain kerran, mutta voimme määritellä silmukan main () -funktiolle, joka näyttää tietoja jokaisesta määritellystä aikavälistä (PUB_TIME_SEC) ja esimerkiksi kunnes painamme painiketta:

# silmukka hakee tietoja, kunnes painiketta painetaan

while button.value (): led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC)

Muuttuja PUB_TIME_SEC on ilmoitettava siihen mennessä, kun haluat näytteesi.

Parantaaksemme koodiamme enemmän, olisi hyvä ilmoittaa, että poistumme silmukasta, sillä määritämme kaksi uutta yleistä toimintoa, joista toinen on näytön tyhjentäminen ja toinen vilkuttaa LEDiä tietyn määrän kertoja.

# Selkeä näyttö:

def displayClear (): oled.fill (0) oled.show () # luo vilkkutoiminto def blinkLed (num): i alueella (0, num): led.on () unessa (0.5) led.off () nukkua (0,5)

Joten voimme nyt kirjoittaa pääfunktion () uudelleen:

while button.value ():

led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC) vilkkuuLed (3) displayClear ()

Lopullinen koodi voidaan ladata osoitteesta GitHub: localData.py ja myös Jupyter -muistikirja, jota käytetään koko koodin kehittämiseen: Jupyter Local Data Development.

Vaihe 7: ESP: n liittäminen paikalliseen WiFi -verkkoon

ESP: n yhdistäminen paikalliseen WiFi -verkkoon
ESP: n yhdistäminen paikalliseen WiFi -verkkoon

Verkkomoduulia käytetään WiFi -yhteyden määrittämiseen. WiFi -rajapintoja on kaksi, yksi asemalle (kun ESP8266 muodostaa yhteyden reitittimeen) ja toinen tukiasemaan (muille laitteille, jotka muodostavat yhteyden ESP8266: een). Tässä ESP yhdistetään paikalliseen verkkoon. Soitetaan kirjastoon ja määritetään verkkotiedot:

tuontiverkko

WiFi_SSID = "OMA SSID" WiFi_PASS = "SALASANASI"

Seuraavaa toimintoa voidaan käyttää ESP: n liittämiseen lähiverkkoon:

def do_connect ():

wlan = verkko. WLAN (verkko. STA_IF) wlan.aktiivinen (tosi), jos ei wlan.isconnected (): tulosta ('muodostetaan yhteys verkkoon …') wlan.connect (WiFi_SSID, WiFi_SSID), mutta ei wlan.isconnected (): pass print ('verkkoasetukset:', wlan.ifconfig ())

Toiminnon suorittamisen seurauksena saat IP -osoitteen:

do_connect ()

Tuloksena on:

verkkoasetukset: ('10.0.1.2 ',' 255.255.255.0 ', '10.0.1.1', '10.0.1.1 ')

Oliko minun tapauksessani 10.0.1.2, ESP: n IP -osoite.

Vaihe 8: ThingSpeak

ThingSpeak
ThingSpeak

Tässä vaiheessa opimme tallentamaan tietoja kaikista antureista ja näyttämään ne OLED -laitteessamme. Nyt on aika nähdä, miten nämä tiedot voidaan lähettää IoT -alustalle, ThingSpeakille.

Aloitetaanpa!

Ensinnäkin sinulla on oltava tili osoitteessa ThinkSpeak.com. Luo sitten kanava noudattamalla ohjeita ja merkitse muistiin kanavatunnuksesi ja Write API -avaimesi.

Yllä näet 5 kenttää, joita kanavassamme käytetään.

Vaihe 9: MQTT -protokolla ja ThingSpeak -yhteys

MQTT -protokolla ja ThingSpeak -yhteys
MQTT -protokolla ja ThingSpeak -yhteys

MQTT on julkaisu/tilausarkkitehtuuri, joka on kehitetty ensisijaisesti kaistanleveyden ja tehonrajoitteisten laitteiden yhdistämiseksi langattomien verkkojen kautta. Se on yksinkertainen ja kevyt protokolla, joka toimii TCP/IP -pistorasioiden tai WebSockets -kanavien yli. MQTT WebSocketsin kautta voidaan suojata SSL: llä. Julkaise/tilaa tilausarkkitehtuuri mahdollistaa viestien siirtämisen asiakaslaitteisiin ilman, että laitteen tarvitsee jatkuvasti kysyä palvelinta.

MQTT -välittäjä on viestinnän keskeinen kohde, ja se vastaa kaikkien viestien lähettämisestä lähettäjien ja oikeiden vastaanottajien välillä. Asiakas on mikä tahansa laite, joka muodostaa yhteyden välittäjään ja voi julkaista tai tilata aiheita päästäkseen käsiksi tietoihin. Aihe sisältää välittäjän reititystiedot. Jokainen asiakas, joka haluaa lähettää viestejä, julkaisee ne tiettyyn aiheeseen, ja jokainen asiakas, joka haluaa vastaanottaa viestejä, tilaa tietyn aiheen. Välittäjä toimittaa kaikki vastaavan aiheen viestit sopiville asiakkaille.

ThingSpeakilla on MQTT -välittäjä osoitteessa mqtt.thingspeak.com ja portti 1883. ThingSpeak -välittäjä tukee sekä MQTT -julkaisua että MQTT -tilausta.

Tässä tapauksessa käytämme: MQTT Publish

Kuva
Kuva

Kuva kuvaa aiheen rakennetta. Write API -avain on julkaistava. Välittäjä kuittaa oikean CONNECT -pyynnön CONNACKilla.

MQTT-protokollaa tuetaan Micropython-binaaritiedostojen sisäänrakennetussa kirjastossa-tätä protokollaa voidaan käyttää lähettämään tietoja ESP8266-laitteestasi WIFI-yhteyden kautta ilmaiseen pilvitietokantaan.

Käytämme umqtt.simple -kirjastoa:

osoitteesta umqtt.simple MQTTClient

Ja tietäen palvelintunnuksemme, on mahdollista luoda MQTT -asiakasobjekti:

PALVELIN = "mqtt.thingspeak.com"

client = MQTTClient ("umqtt_client", SERVER)

Nyt kun sinulla on ThingSpeak -kirjautumistietosi käsillä:

CHANNEL_ID = "YOUR CHANNEL ID"

WRITE_API_KEY = "AVAIN TÄSTÄ"

Luodaan MQTT -aiheemme:

topic = "kanavat/" + CHANNEL_ID + "/julkaise/" + WRITE_API_KEY

Lähetämme tietomme ThingSpeak IoT Service -palveluun käyttämällä luotua funktiota ja liitämme sen vastauksen tiettyihin datamuuttujiin:

lämpötila, hum, extTemp, lum, butSts = colectData ()

Kun nämä muuttujat on päivitetty, voimme luoda "MQTT -hyötykuorman":

hyötykuorma = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+str (lum)+"& field5 ="+str (butSts)

Ja siinä se! Olemme valmiita lähettämään tietoja ThinsSpeakiin yksinkertaisesti käyttämällä alla olevia 3 koodiriviä:

client.connect ()

client.publish (aihe, hyötykuorma) client.disconnect ()

Jos nyt siirryt kanavasivullesi (kuten minun yllä), näet, että jokaisella viidestä kentästä on antureihin liittyviä tietoja.

Vaihe 10: Anturidataloggeri

Anturitietojen kerääjä
Anturitietojen kerääjä

Nyt kun tiedämme, että vain muutamalla koodirivillä on mahdollista ladata dataa IoT -palveluun, luodaan silmukkafunktio, joka tekee sen automaattisesti säännöllisin väliajoin (samanlainen kuin mitä olemme tehneet "Paikallisilla tiedoilla" ").

Käyttämällä samaa muuttujaa (PUB_TIME_SEC), joka on ilmoitettu aiemmin, yksinkertainen päätoiminto tietojen keräämiseksi jatkuvasti, kirjaamalla ne kanavallemme olisi:

vaikka totta:

lämpötila, hum, extTemp, lum, butSts = colectData () hyötykuorma = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+ str (lum)+"& field5 ="+str (butSts) client.connect () client.publish (topic, payload) client.disconnect () time.sleep (PUB_TIME_SEC)

Huomaa, että vain "hyötykuorma" on päivitettävä, kun "aihe" liittyy kanavamme tunnistetietoihin eikä muutu.

Kun etsit ThingSpeak -kanavasivua, huomaat, että tiedot latautuvat jatkuvasti jokaiseen kenttään. Voit peittää LDR: n, laittaa kätesi lämpötila-/hum -anturien päälle, painaa painiketta jne. Ja katso, miten kanava "kirjaa" automaattisesti nämä tiedot tulevaa analyysiä varten.

Yleensä tietojen keräämisessä meidän pitäisi yrittää käyttää mahdollisimman vähän virtaa, joten emme käytä LEDiä tai näyttöä paikallisesti. Lisäksi se on tavallista ESP -laitteiden kanssa, laita ne "syvään lepotilaan", jossa mikroprosessori on vähimmäisenergiassa, kunnes on aika kerätä tietoja ja lähettää ne IoT -alustalle.

Mutta kun idea on oppinut, sisällytetään myös näyttö ja LED kuten aiemmin. Tällöin "logger" -toimintomme on:

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 () hyötykuorma = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+str (lum)+"& field5 ="+str (butSts) -asiakas.connect () client.publish (topic, payload) client.disconnect () time.sleep (PUB_TIME_SEC) vilkkuuLed (3) displayClear ()

Koko microPython -skripti löytyy täältä: dataLoggerTS_EXT.py ja kehittämiseen käytetty Jupyter -muistikirja löytyvät myös täältä: IoT ThingSpeak Data Logger EXT.ipynb.

Voit ladata komentosarjan ESP: lle päätteessäsi komennolla:

ampy laita dataLoggerTS.py /main.py

Ja paina ESP - nollauspainiketta. ESP kerää tietoja ja kirjaa ne ThingSpeak.com -sivustolle, kunnes pohja pidetään painettuna (odota, että LED -valo vilkkuu 3 kertaa ja OLED sammuu).

Vaihe 11: ThingView -sovellus

ThingView -sovellus
ThingView -sovellus

Tallennetut tiedot voidaan tarkastella suoraan ThingSpeak.com -sivustolla tai APP: n, esimerkiksi ThingsView!

ThingView on CINETICAn kehittämä APP, jonka avulla voit visualisoida ThingSpeak -kanavasi helposti, syötä vain kanavatunnus ja olet valmis lähtemään.

Julkisilla kanavilla sovellus noudattaa ikkunoiden asetuksia: väri, aikataulu, kaavion tyyppi ja tulosten määrä. Nykyinen versio tukee viiva- ja sarakekaavioita, spline -kaaviot näytetään viivakaavioina.

Yksityisten kanavien tiedot näytetään oletusasetuksilla, koska yksityisten ikkunoiden asetuksia ei voi lukea vain API -avaimella.

ThingView -sovelluksen voi ladata Android- ja IPHONE -laitteille.

Vaihe 12: Johtopäätös

Johtopäätös
Johtopäätös

Kuten aina, toivon, että tämä projekti voi auttaa muita löytämään tiensä elektroniikan jännittävään maailmaan!

Lisätietoja ja lopullisen koodin löydät GitHub -varastostani: IoT_TS_MQTT

Lisää projekteja löydät blogistani: MJRoBot.org

Terveisiä etelästä maailmasta!

Nähdään seuraavassa ohjeessani!

Kiitos, Marcelo

Suositeltava: