INHOUDSOPGAWE:

IoT Weerstasie Met RPi en ESP8266: 10 stappe
IoT Weerstasie Met RPi en ESP8266: 10 stappe

Video: IoT Weerstasie Met RPi en ESP8266: 10 stappe

Video: IoT Weerstasie Met RPi en ESP8266: 10 stappe
Video: Arduino voor de radioamateur deel 2 2024, Desember
Anonim
IoT Weerstasie Met RPi en ESP8266
IoT Weerstasie Met RPi en ESP8266

In vorige tutoriale het ons gespeel met NodeMCU, sensors en geleer hoe om data op te vang en aan te teken op ThingSpeak ('n Internet of Things (IoT) platform waarmee u sensordata in die wolk kan versamel en stoor en IoT -toepassings kan ontwikkel):

IETS MAKLIK GEMAAK: AFSTAND VAN WEERGEGEVENS VAN AFSTAND: UV- EN LUFTEMPERATUUR EN VOGTIGHEID

Met hierdie nuwe tutoriaal leer ons hoe om dieselfde te doen, maar op hierdie tydstip, met behulp van 'n Raspberry Pi om data van verskillende sensors op te vang en ook verskillende maniere van kommunikasie tussen toestelle en die internet te ondersoek:

Sensors en tipe kominikasie:

  • DHT22 (temperatuur en humiditeit) ==> Digitale kommunikasie
  • BMP180 (temperatuur en druk) ==> I2C -protokol
  • DS18B20 (temperatuur) ==> 1-draads protokol

Die blokdiagram toon wat ons aan die einde van hierdie projek sal kry:

Beeld
Beeld

Stap 1: BoM - materiaalbrief

  1. Framboos Pi V3 - US $ 32,00
  2. DHT22 Temperatuur- en relatiewe humiditeitsensor - USD 9,95
  3. Weerstand 4K7 ohm
  4. DS18B20 waterdigte temperatuursensor - USD 5,95
  5. Weerstand 4K7 ohm
  6. BMP180 Barometriese druk-, temperatuur- en hoogtesensor - USD 6,99

Stap 2: Installeer die temperatuur- en humiditeitsensor

Die installering van die temperatuur- en humiditeitsensor
Die installering van die temperatuur- en humiditeitsensor

Die eerste sensor wat geïnstalleer word, is die DHT22 vir die vasstelling van lugtemperatuur- en relatiewe humiditeitsdata. Die ADAFRUIT -webwerf bied uitstekende inligting oor die sensors. Hieronder, 'n paar inligting daarvandaan gekry:

Oorsig

Die goedkoop DHT-temperatuur- en humiditeitsensors is baie basies en stadig, maar is ideaal vir stokperdjies wat basiese data-aanmelding wil doen. Die DHT -sensors bestaan uit twee dele, 'n kapasitiewe humiditeitsensor en 'n termistor. Daar is ook 'n baie basiese chip wat analoog na digitaal omskakel, en 'n digitale sein met temperatuur en humiditeit uitspoeg. Die digitale sein is redelik maklik om te lees met behulp van enige mikrobeheerder.

DHT22 Hoofkenmerke:

  • Lae koste
  • 3 tot 5V krag en I/O
  • 2.5mA maksimum huidige gebruik tydens omskakeling (terwyl data aangevra word)
  • Goed vir 0-100% humiditeitsmetings met 2-5% akkuraatheid
  • Goed vir temperatuurlesings van -40 tot 125 ° C ± 0,5 ° C akkuraatheid
  • Monstertempo van nie meer as 0,5 Hz (een keer elke 2 sekondes)
  • Liggaamsgrootte 15,1 mm x 25 mm x 7,7 mm
  • 4 penne met 'n afstand van 0,1 duim

As u die sensor gewoonlik op afstande van minder as 20 m gebruik, moet 'n weerstand van 4K7 ohm tussen data- en VCC -penne verbind word. Die DHT22 -uitgangsdata -pen sal aan Raspberry GPIO 16. gekoppel word. Kontroleer die bogenoemde elektriese diagram en koppel die sensor aan RPi -penne soos hieronder:

  1. Speld 1 - Vcc ==> 3.3V
  2. Speld 2 - Data ==> GPIO 16
  3. Speld 3 - Verbind nie
  4. Speld 4 - Gnd ==> Gnd

Moenie vergeet om die weerstand van 4K7 ohm tussen Vcc en datapennetjies te installeer nie

Sodra die sensor gekoppel is, moet ons ook sy biblioteek op ons RPi installeer.

Installeer DHT -biblioteek:

Op u Framboos, begin by /tuis, gaan na /Dokumente

cd Dokumente

Skep 'n gids om die biblioteek te installeer en gaan na daar:

mkdir DHT22_Sensor

cd DHT22_Sensor

Gaan na Adafruit GitHub in u blaaier:

github.com/adafruit/Adafruit_Python_DHT

Laai die biblioteek af deur op die aflaai -skakel na regs te klik en pak die argief uit op u Raspberry Pi -gids wat onlangs gemaak is. Gaan dan na die gids van die biblioteek (submap wat outomaties geskep word wanneer u die lêer uitpak) en voer die opdrag uit:

sudo python3 setup.py installeer

Maak 'n toetsprogram (DHT22_test.py) van my GITHUB oop

voer Adafruit_DHT in

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 humiditeit, temperatuur = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) as humiditeit nie Geen is nie en temperatuur nie: print ('Temp = {0: 0.1f}*C Humidity = {1: 0.1 f}%'. formaat (temperatuur, humiditeit)) anders: druk (' Kon nie lees nie. Probeer weer! ')

Voer die program uit met die opdrag:

python3 DHT22_test.py

Die onderstaande Terminal -afdrukskerm toon die resultaat.

Beeld
Beeld

Stap 3: Installeer DS18B20 - Temperatuursensor

Installeer DS18B20 - Temperatuursensor
Installeer DS18B20 - Temperatuursensor
Installeer DS18B20 - Temperatuursensor
Installeer DS18B20 - Temperatuursensor

Sensoroorsig:

Ons sal in hierdie tutoriaal 'n waterdigte weergawe van die DS18B20 -sensor gebruik. Dit is baie handig vir afgeleë temperatuur in nat toestande, byvoorbeeld op 'n vogtige grond. Die sensor is geïsoleerd en kan metings neem tot 125oC (Adafrut beveel nie aan om dit meer as 100oC te gebruik nie as gevolg van die kabel -PVC -omhulsel).

Die DS18B20 is 'n digitale sensor wat dit goed maak om selfs oor lang afstande te gebruik! Hierdie 1-draads digitale temperatuursensors is redelik presies (± 0,5 ° C oor 'n groot deel van die reeks) en kan tot 12 stukkies presisie van die ingeboude digitaal-na-analoog-omskakelaar gee. Hulle werk uitstekend met die NodeMCU met behulp van 'n enkele digitale pen, en u kan selfs verskeie aan dieselfde pen koppel; elkeen het 'n unieke 64-bis-ID wat by die fabriek ingebrand is om dit te onderskei.

Die sensor werk van 3.0 tot 5.0V, wat beteken dat dit direk van die 3.3V aangedryf kan word deur een van die Framboospenne (1 of 17).

Die sensor het 3 drade:

  • Swart: GND
  • Rooi: VCC
  • Geel: 1-draad data

Hier vind u die volledige data: DS18B20 -datablad

Sensorinstallasie:

Volg die bostaande diagram en maak die verbindings:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Data ==> GPIO 4 (verstek vir biblioteek)

Die installering van die Python -biblioteek:

Laat ons dan die Python -biblioteek installeer wat die sensor sal hanteer:

sudo pip3 installeer w1thermsensor

Voordat u die skrip gebruik om die sensor te toets, moet u kyk of die '1-draad'-koppelvlak in u RPi geaktiveer is (sien die drukskerm hierbo)

Moenie vergeet om u RPi weer te begin nadat u die konfigurasie daarvan verander het nie

Toets die sensor:

Vir die toets van die sensor kan 'n eenvoudige python -script gebruik word:

invoer tyd

vanaf w1thermsensor invoer W1ThermSensor ds18b20Sensor = W1ThermSensor () terwyl True: temperatuur = ds18b20Sensor.get_temperature () druk ("Die temperatuur is % s celsius" % temperatuur) time.sleep (1)

Stap 4: Installeer die BMP180

Die installering van die BMP180
Die installering van die BMP180
Die installering van die BMP180
Die installering van die BMP180
Die installering van die BMP180
Die installering van die BMP180

Sensoroorsig:

Die BMP180 is die opvolger van die BMP085, 'n nuwe generasie hoë presisie digitale druksensors vir verbruikerstoepassings. Die elektronika met baie lae krag, laespanning van die BMP180 is geoptimaliseer vir gebruik in selfone, PDA's, GPS-navigasietoestelle en buitetoerusting. Met 'n lae geraas van slegs 0,25 m tydens 'n vinnige omskakelingstyd, bied die BMP180 uitstekende prestasie. Die I2C -koppelvlak sorg vir maklike stelselintegrasie met 'n mikrobeheerder. Die BMP180 is gebaseer op piëzo-weerstandige tegnologie vir EMC-robuustheid, hoë akkuraatheid en lineariteit sowel as langtermynstabiliteit.

Die volledige BMP -datablad kan hier gevind word: BMP180 - Digitale druksensor

Sensorinstallasie: Volg die diagram hierbo en maak die verbindings:

  • Vin ==> 3.3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Aktiveer I2C -koppelvlak

Gaan na RPi Configuration en bevestig dat die I2C -koppelvlak geaktiveer is. Indien nie, aktiveer dit en herbegin die RPi.

Gebruik die BMP180

As alles goed geïnstalleer is en alles in orde is, is u gereed om u Pi aan te skakel en te sien wat die BMP180 u vertel oor die wêreld om u.

Die eerste ding wat u moet doen, is om te kyk of die Pi u BMP180 sien. Probeer die volgende in 'n terminale venster:

sudo i2cdetect -y 1

As die opdrag werk, moet u iets soortgelyk aan die Terminal Printscreen hierbo sien, wat toon dat die BMP180 op kanaal '77' is.

Die installering van die BMP180 -biblioteek:

Skep 'n gids om die biblioteek te installeer:

mkdir BMP180_Sensorcd BMP180_Sensor

Gaan na Adafruit GITHub in u blaaier:

github.com/adafruit/Adafruit_Python_BMP

Laai die biblioteek af deur op die aflaai -skakel na regs te klik en pak die argief uit op u Raspberry Pi -gemaakte gids. Gaan dan na die gemaakte submap en voer die volgende opdrag uit in die biblioteekgids:

sudo python3 setup.py installeer

Maak u Python IDE oop en skep 'n toetsprogram en noem dit, byvoorbeeld BMP180Test.py

invoer Adafruit_BMP. BMP085 as BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) druk (' Druk = {0: 0.2f} Pa '. formaat (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))

Voer die toetsprogram uit:

python3 BMP180Test.py

Bogenoemde Terminal -afdrukskerm toon die resultaat.

Let daarop dat die druk in Pa (Pascals) voorgestel word. Sien die volgende stap om 'n beter begrip van hierdie eenheid te kry.

Stap 5: Weer en hoogte met BMP180 meet

Weer en hoogte meet met BMP180
Weer en hoogte meet met BMP180

Kom ons neem 'n rukkie om 'n bietjie meer te verstaan oor wat ons gaan kry, met die BMP -lesings. U kan hierdie deel van die tutoriaal oorslaan of later terugkeer.

As u meer wil weet oor sensorlesings, gaan dan na hierdie wonderlike tutoriaal:

Die BMP180 is ontwerp om atmosferiese druk akkuraat te meet. Atmosferiese druk wissel met weer en hoogte.

Wat is atmosferiese druk?

Die definisie van atmosferiese druk is 'n krag wat die lug om jou uitoefen op alles. Die gewig van die gasse in die atmosfeer veroorsaak atmosferiese druk. 'N Algemene eenheid van druk is "pond per vierkante duim" of psi. Ons sal hier die internasionale notasie gebruik, dit wil sê newton per vierkante meter, wat pascal (Pa) genoem word.

As jy 1 cm breed lugkolom neem, sal dit ongeveer 1 kg weeg

Hierdie gewig, wat die voetspoor van die kolom afdruk, skep die atmosferiese druk wat ons met sensors soos die BMP180 kan meet. Omdat die cm -wye lugkolom ongeveer 1 kg weeg, volg dit dat die gemiddelde seevlakdruk ongeveer 101325 pascal is, of beter, 1013,25 hPa (1 hPa staan ook bekend as milibar - mbar). Dit sal ongeveer 4% daal vir elke 300 meter wat u klim. Hoe hoër u word, hoe minder druk sal u sien, want die kolom bo -aan die atmosfeer is soveel korter en weeg dus minder. Dit is handig om te weet, want deur die druk te meet en wiskunde te doen, kan u u hoogte bepaal.

Die lugdruk op 3,810 meter is slegs die helfte van dit op seevlak.

Die BMP180 lewer absolute druk in pascal (Pa) uit. Een pascal is 'n baie klein druk, ongeveer die hoeveelheid wat 'n vel papier op 'n tafel sal uitoefen. U sal meer gereeld metings in hektopascal sien (1 hPa = 100 Pa). Die biblioteek wat hier gebruik word, lewer uitsette dryfpuntwaardes in hPa, wat ook gelyk is aan een millibar (mbar).

Hier is 'n paar omskakelings na ander drukeenhede:

  • 1 hPa = 100 Pa = 1 mbar = 0.001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (pond per vierkante duim)
  • 1 hPa = 0,02953337 inHg (duim kwik)
  • 1 hpa = 0.00098692 atm (standaard atmosfeer)

Temperatuur effekte

Omdat temperatuur die digtheid van 'n gas beïnvloed, en digtheid die massa van 'n gas beïnvloed, en massa die druk (whew) beïnvloed, sal atmosferiese druk dramaties verander met temperatuur. Vlieëniers ken dit as 'digtheidshoogte', wat dit makliker maak om op 'n koue dag op te neem as op 'n warm, omdat die lug digter is en 'n groter aërodinamiese effek het. Om te vergoed vir temperatuur, bevat die BMP180 'n redelike goeie temperatuursensor sowel as 'n druksensor.

Om 'n drukmeting uit te voer, neem u eers 'n temperatuurmeting, en kombineer dit dan met 'n rou drukmeting om 'n finale temperatuurgekompenseerde drukmeting te kry. (Die biblioteek maak dit alles baie maklik.)

Meet absolute druk

As u toepassing absolute druk moet meet, hoef u net 'n temperatuurmeting te kry en dan 'n drukmeting uit te voer (sien die voorbeeldskets vir meer inligting). Die finale drukmeting sal in hPa = mbar wees. As u wil, kan u dit omskakel na 'n ander eenheid met behulp van bogenoemde omskakelingsfaktore.

Let daarop dat die absolute druk van die atmosfeer wissel met u hoogte en die huidige weerpatrone, wat beide nuttige dinge is om te meet.

Weerwaarnemings

Die atmosferiese druk op enige gegewe plek op aarde (of enige plek met 'n atmosfeer) is nie konstant nie. Die komplekse interaksie tussen die aarde se draai, as -kanteling en baie ander faktore lei tot bewegende gebiede met hoër en laer druk, wat weer die variasies in die weer wat ons elke dag sien, veroorsaak. Deur na veranderinge in druk te kyk, kan u veranderinge in die weer op kort termyn voorspel. Byvoorbeeld, om druk te laat val, beteken gewoonlik dat nat weer of 'n storm nader ('n laedrukstelsel beweeg in). Stygende druk beteken gewoonlik dat helder weer nader ('n hoëdrukstelsel beweeg deur). Maar onthou dat atmosferiese druk ook wissel met hoogte. Die absolute druk in my huis, Lo Barnechea in Chili (hoogte 950m) sal altyd laer wees as die absolute druk in byvoorbeeld San Francisco (minder as 2 meter, amper seevlak). As weerstasies net hul absolute druk rapporteer, sou dit moeilik wees om drukmetings direk van een plek na 'n ander te vergelyk (en grootskaalse weervoorspellings hang af van metings van soveel stasies as moontlik).

Om hierdie probleem op te los, verwyder weerstasies altyd die gevolge van hoogte uit hul gerapporteerde drukmetings deur die ekwivalente vaste druk wiskundig by te voeg om dit te laat lyk asof die lesing op seevlak geneem is. As u dit doen, sal 'n hoër lesing in San Francisco as Lo Barnechea altyd wees as gevolg van weerpatrone, en nie as gevolg van hoogte nie.

Om dit te kan doen, is daar 'n funksie in die biblioteek genaamd seevlak (P, A). Dit neem die absolute druk (P) in hPa, en die stasie se huidige hoogte (A) in meter, en verwyder die gevolge van die hoogte van die druk. U kan die uitset van hierdie funksie gebruik om u weerlesings direk met ander stasies regoor die wêreld te vergelyk.

Bepaling van hoogte

Aangesien druk met hoogte verskil, kan u 'n druksensor gebruik om hoogte te meet (met enkele voorbehoud). Die gemiddelde druk van die atmosfeer op seevlak is 1013,25 hPa (of mbar). Dit daal tot nul as jy na die vakuum van die ruimte klim. Omdat die kromme van hierdie afval goed verstaan word, kan u die hoogteverskil tussen twee drukmetings (p en p0) bereken deur 'n spesifieke vergelyking te gebruik.

As u die seevlakdruk (1013,25 hPa) as die basislyndruk (p0) gebruik, sal die uitset van die vergelyking u huidige hoogte bo seespieël wees. Daar is 'n funksie in die biblioteek met die naam hoogte (P, P0) waarmee u die 'berekende hoogte' kan kry.

Bogenoemde verduideliking is onttrek uit BMP 180 Sparkfun -tutoriaal.

Stap 6: Die volledige HW

Die volledige HW
Die volledige HW

Stap 7: Stuur data na ThingSpeak

Stuur data aan ThingSpeak
Stuur data aan ThingSpeak

Op hierdie stadium het ons geleer hoe om die RPi voor te berei om data van al drie sensors vas te lê en op die terminale te druk. Dit is nou tyd om te sien hoe u die data na die IoT -platform, die ThingSpeak, kan stuur.

Laat ons begin!

Eerstens moet u 'n rekening by ThinkSpeak.com hê

Volg die instruksies om 'n kanaal te skep en let op u kanaal -ID en skryf API -sleutel

Laai die Python -script af van my GitHub: localData ToTS_v1_EXT.py

Kom ons gee kommentaar op die belangrikste dele van die kode:

Laat ons eers die ThingSpeak -biblioteek invoer, die WiFi -kliënt definieer en u plaaslike router- en Thinkspeak -geloofsbriewe definieer:

import dinge

Daar is verskillende maniere om met ThingSpeak te kommunikeer; die eenvoudigste manier is om die kliëntbiblioteek te gebruik vir die thingspeak.com API wat ontwikkel is deur Mikolaj Chwaliz en Keith Ellis.

Die biblioteek kan afgelaai word vanaf https://github.com/mchwalisz/thingspeak of deur PIP op terminale te gebruik:

sudo pip3 installeer thingspeak

Opdateer dan die geloofsbriewe van ThingSpeak in die script

chId = 9999999 # Tik in met u kanaal -ID

tsKey = 'Voer in met u kanaalskryfsleutel' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Kom ons initialiseer nou die 3 sensors:

# DS18B20 1-draad biblioteek

vanaf w1thermsensor invoer W1ThermSensor ds18b20Sensor = W1ThermSensor () # By verstek word GPIO 4 deur biblioteek gebruik # DHT22 Biblioteek invoer Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 biblioteek invoer Adafruit_BMP1B85. P85 U moet die werklike hoogte definieer waar u weerstasie geleë is, en die globale veranderlike "altReal" opdateer. In my geval is my stasie 950 m bo seespieël

globale altReal

altReal = 950

As ons eers die werklike hoogte van die stasie as invoer binnegaan, kan ons die absolute druk, seevlakdruk, temperatuur en hoogte verkry met behulp van die funksie bmp180GetData (hoogte):

def bmp180GetData (hoogte):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - altitude/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100, 2) # absolute druk in hPa (of mbar) alt=rond (alt) presSeaLevel = rond (presSeaLevel/100, 2) # absolute druk in hPa (of mbar) returtemperatuur, pres, alt, presSeaLevel

Die funksie getLocalData () gee alle plaaslike data wat deur ons stasie vasgelê is, terug:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Kry tyd om nou te lees = datetime.datetime.now () timeString = now.strftime ("%Y-%m-%d%H:%M") # Lees buitentemperatuur (afstand van 1 meter) tempExt = rond (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor None) en tempDHT is nie Geen nie: humLab = rond (humDHT

Sodra u alle data deur bogenoemde funksies vasgelê het, moet u dit na ThingSpeak stuur. U sal dit doen met die funksie sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Data gestuur vir 5 velde: ", tempLab, tempExt, humLab, presSL, altLab)

Met u kanaaldata opgedateer, stoor u die script en voer dit uit op u terminale:

sudo Python3 localData_ToTs_v1_EXT.py

Oor kommunikasie protokolle

Let daarop dat die 'versoekbiblioteek' met behulp van die 'thingspeak -biblioteek' ingevoer word, dit wil sê 'n Apache2 -gelisensieerde HTTP -biblioteek, geskryf in Python. Die amptelike dokumentasie vir die installering van versoeke kan hier gevind word:

docs.python-requests.org/en/latest/user/install/

Indien nodig, voordat u u skrip uitvoer, kan u verifieer of die versoekbiblioteek geïnstalleer is:

sudo pip3 installeringsversoeke

U kan ook MTTQ gebruik as 'n metode om data na ThingSpeak te stuur. MQTT verskil van HTTP, een keer Dit is spesifiek ontwerp om liggewig te wees en bedoel vir ingebedde toestelle met 'n lae RAM en CPU -prestasie. In die meeste gevalle gebruik MQTT ook minder bandwydte.

Raadpleeg hierdie tutoriaal: Werk 'n ThingSpeak -kanaal op met MQTT op 'n Raspberry Pi vir meer besonderhede.

Stap 8: Stuur eksterne data na ThingSpeak met behulp van ESP8266

Stuur eksterne data na ThingSpeak met behulp van ESP8266
Stuur eksterne data na ThingSpeak met behulp van ESP8266
Stuur eksterne data na ThingSpeak met behulp van ESP8266
Stuur eksterne data na ThingSpeak met behulp van ESP8266

Vir hierdie stap gebruik ons dieselfde HW wat in die tutoriaal verduidelik is:

IETS MAKLIK GEMAAK: AFSTAND VAN WEERGEGEVENS VAN AFSTAND: UV- EN LUFTEMPERATUUR EN VOGTIGHEID

Die kode wat ons hier sal gebruik, is basies dieselfde as in die tutoriaal. Kom ons gee kommentaar op die belangrikste dele van die kode:

Kom ons skakel eers die ESP8266 -biblioteek, definieer die WiFi -kliënt en definieer u plaaslike router- en Thinkspeak -geloofsbriewe:

/ * NodeMCU ESP12-E */

#sluit WiFiClient -kliënt in; const char* MY_SSID = "ENTER MET U SSDID"; const char* MY_PWD = "Voer in met u wagwoord"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ENTER MET U SKRYF SLEUTEL";

Tweedens, laat ons 'n baie belangrike biblioteek vir IoT -projekte insluit: SimpleTimer.h:

/ * TIMER */

#sluit SimpleTimer -timer in;

Derdens, tydens die opstelling (), begin ons met seriële kommunikasie, skakel die funksie connectWiFi () en definieer die tydtellers. Let daarop dat die kodereël: timer.setInterval (60000L, sendDataTS); sal elke 60 sekondes die funksie sendDataTS () noem om data na ThinkSpeak -kanaal op te laai.

leemte opstelling ()

{… Serial.begin (115200); vertraging (10); … connectWifi (); timer.setInterval (60000L, sendDataTS); …}

Uiteindelik, maar tydens die lus (), is die enigste opdrag wat nodig is om die timer te begin en dit is dit!

leemte lus ()

{… timer.run (); // Begin SimpleTimer}

Hieronder kan u die twee belangrike funksies sien wat gebruik word om Thinkspeak -kommunikasie te hanteer:

ESP12-E-verbinding met u WiFi-netwerk:

/***************************************************

*Verbind WiFi ********************************************** ***/ void connectWifi () {Serial.print ("Koppel aan"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); terwyl (WiFi.status ()! = WL_CONNECTED) {vertraging (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi gekoppel"); Serial.println (""); }

ESP12-E stuur data na ThinkSpeak:

***************************************************

*Stuur data na Thinkspeak Channel ******************************************* ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += String (temp); postStr += "& field7 ="; postStr += String (hum); postStr += "& field8 ="; postStr += String (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /opdater HTTP /1.1 / n"); client.print ("Gasheer: api.thingspeak.com / n"); client.print ("verbinding: sluit / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Inhoudstipe: toepassing/x-www-vorm-urlencoded / n"); client.print ("Inhoudlengte:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); vertraging (1000); } gestuur ++; client.stop (); }

Die volledige kode kan gevind word op my GitHub: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Sodra u die kode na u NodeMCU opgelaai het. Kom ons koppel 'n eksterne battery en meet onder die son. Ek sit die afstandstasie op die dak en begin met die opneem van data op ThingSpeak.com soos in die foto's hierbo getoon.

Stap 9: Laaste aantekeninge

Finale aantekeninge
Finale aantekeninge

Die hoofdoel van hierdie tutoriaal was om aan te toon hoe u die Raspberry Pi aan ThingSpeak kan koppel. Dit is wonderlik om data vas te lê en op 'n IoT -platform aan te meld.

Met die geleentheid het ons ook data na die spesifieke kanaal gestuur en dit vanaf 'n afgeleë stasie vasgelê met behulp van 'n ESP8266. Hierdie benadering is OK, maar nie die beste nie. Omdat ons 'n "asynchrone" operasie het, probeer beide RPi en ESP8266 soms terselfdertyd (of met 'n klein interval) aanteken wat deur ThingSpeak weerlê word. Die ideaal sou wees dat die ESP8266 data plaaslik na Raspberry Pi stuur, en die laaste een is verantwoordelik om alle data te hanteer. As u dit doen, kan die 'hoofstasie' (Raspberry Pi) drie dinge doen:

  • Teken alle data op 'n plaaslike databasis aan
  • Gee alle data op 'n plaaslike webbladsy (met behulp van 'n fles soos in die foto hierbo getoon)
  • Stuur alle data terselfdertyd na ThingSpeak.

Op 'n toekomstige tutoriaal, sal ons die opsies ondersoek.

Stap 10: Gevolgtrekking

Afsluiting
Afsluiting

Soos altyd, hoop ek dat hierdie projek ander kan help om die opwindende wêreld van elektronika te vind!

Besoek my GitHub-bewaarplek: RPi-NodeMCU-Weather-Station vir besonderhede en finale kode.

Besoek my blog vir meer projekte: MJRoBot.org

Bly ingeskakel! Volgende tutoriaal stuur ons data van 'n afgeleë weerstasie na 'n sentrale, gebaseer op 'n Raspberry Pi -webbediener:

Beeld
Beeld

Groete uit die suide van die wêreld!

Sien jou in my volgende instruksies!

Dankie, Marcelo

Aanbeveel: