Taula de continguts:

Estació meteorològica IoT amb RPi i ESP8266: 10 passos
Estació meteorològica IoT amb RPi i ESP8266: 10 passos

Vídeo: Estació meteorològica IoT amb RPi i ESP8266: 10 passos

Vídeo: Estació meteorològica IoT amb RPi i ESP8266: 10 passos
Vídeo: ESP32 IoT con ThingSpeak | Estación meteorológica en la nube WiFi con ESP32 y BME280 | Micropython 2024, Desembre
Anonim
Estació meteorològica IoT amb RPi i ESP8266
Estació meteorològica IoT amb RPi i ESP8266

En tutorials anteriors, hem estat jugant amb NodeMCU, sensors i aprenent a capturar i registrar dades a ThingSpeak (una plataforma Internet de les coses (IoT) que us permet recopilar i emmagatzemar dades del sensor al núvol i desenvolupar aplicacions IoT):

M'HO FACILITAT: CAPTURAR DADES DE TEMPS REMOTES: TEMPERATURA I HUMITAT DE UV I AIRE

Amb aquest nou tutorial, aprendrem a fer el mateix, però en aquest moment, utilitzant un Raspberry Pi per capturar dades de diversos sensors diferents i explorant també diferents maneres de comunicar-nos entre els dispositius i la web:

Sensors i tipus de combinació:

  • DHT22 (temperatura i humitat) ==> Comunicació digital
  • BMP180 (temperatura i pressió) ==> Protocol I2C
  • DS18B20 (temperatura) ==> Protocol d'1 cable

El diagrama de blocs mostra què aconseguirem al final amb aquest projecte:

Imatge
Imatge

Pas 1: BoM: llista de materials

  1. Raspberry Pi V3: 32,00 dòlars EUA
  2. Sensor de temperatura i humitat relativa DHT22: 9,95 USD
  3. Resistència 4K7 ohm
  4. Sensor de temperatura impermeable DS18B20: 5,95 USD
  5. Resistència 4K7 ohm
  6. BMP180 Sensor de pressió, temperatura i altitud baromètrica: 6,99 USD

Pas 2: Instal·lació del sensor de temperatura i humitat

Instal·lació del sensor de temperatura i humitat
Instal·lació del sensor de temperatura i humitat

El primer sensor que s’instal·larà serà el DHT22 per captar dades de temperatura de l’aire i humitat relativa. El lloc ADAFRUIT proporciona una gran informació sobre aquests sensors. A continuació, es pot obtenir informació d’allà:

Visió general

Els sensors de temperatura i humitat DHT de baix cost són molt bàsics i lents, però són ideals per als aficionats que vulguin fer un registre de dades bàsic. Els sensors DHT estan formats per dues parts, un sensor d’humitat capacitiva i un termistor. També hi ha un xip molt bàsic que fa una conversió analògica a digital i escolta un senyal digital amb la temperatura i la humitat. El senyal digital és bastant fàcil de llegir mitjançant qualsevol microcontrolador.

DHT22 Característiques principals:

  • Baix cost
  • Potència de 3 a 5V i E / S
  • Ús màxim de 2,5 mA actual durant la conversió (mentre es sol·liciten dades)
  • Bo per a lectures d'humitat del 0-100% amb una precisió del 2-5%
  • Bona per a lectures de temperatura de -40 a 125 ° C amb una precisió de ± 0,5 ° C
  • Freqüència de mostreig superior a 0,5 Hz (un cop cada 2 segons)
  • Mides del cos 15,1 mm x 25 mm x 7,7 mm
  • 4 pins amb espaiat de 0,1"

Una vegada que normalment utilitzeu el sensor a distàncies inferiors a 20 m, s’hauria de connectar una resistència de 4K7 ohm entre les dades i els pins VCC. El pin de dades de sortida DHT22 es connectarà a Raspberry GPIO 16. Comproveu el diagrama elèctric anterior, connectant el sensor als pins RPi de la manera següent:

  1. Pin 1 - Vcc ==> 3.3V
  2. Pin 2: dades ==> GPIO 16
  3. Pin 3: no connecta
  4. Pin 4: Gnd ==> Gnd

No us oblideu d’instal·lar la resistència 4K7 ohm entre Vcc i els pins de dades

Un cop connectat el sensor, també hem d’instal·lar la seva biblioteca al nostre RPi.

Instal·lació de la biblioteca DHT:

Al vostre gerd, des de / home, aneu a / Documents

cd Documents

Creeu un directori per instal·lar la biblioteca i aneu-hi:

mkdir DHT22_Sensor

cd DHT22_Sensor

Al navegador, aneu a Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Descarregueu la biblioteca fent clic a l'enllaç zip de baixada de la dreta i descomprimiu l'arxiu de la carpeta de Raspberry Pi creada recentment. A continuació, aneu al directori de la biblioteca (subcarpeta que es crea automàticament quan heu descomprimit el fitxer) i executeu l'ordre:

sudo python3 setup.py install

Obriu un programa de prova (DHT22_test.py) des del meu GITHUB

importa Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 humitat, temperatura = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) si la humitat no és Cap i la temperatura no és Cap: imprimeix ('Temp = {0: 0.1f} * C Humitat = {1: 0.1 f}% '. format (temperatura, humitat)) else: print (' No s'ha pogut llegir. Torneu-ho a provar! ')

Executeu el programa amb l'ordre:

python3 DHT22_test.py

La pantalla d’impressió del terminal següent mostra el resultat.

Imatge
Imatge

Pas 3: Instal·lació del DS18B20: sensor de temperatura

Instal·lació del DS18B20: sensor de temperatura
Instal·lació del DS18B20: sensor de temperatura
Instal·lació del DS18B20: sensor de temperatura
Instal·lació del DS18B20: sensor de temperatura

Visió general del sensor:

Utilitzarem en aquest tutorial una versió impermeable del sensor DS18B20. És molt útil per a temperatures remotes en condicions humides, per exemple en un sòl humit. El sensor està aïllat i pot mesurar fins a 125oC (Adafrut no recomana utilitzar-lo a més de 100oC a causa de la seva jaqueta de cable de PVC).

El DS18B20 és un sensor digital que el fa bo utilitzar fins i tot a llargues distàncies. Aquests sensors de temperatura digitals d’un fil són bastant precisos (± 0,5 ° C en gran part del rang) i poden proporcionar fins a 12 bits de precisió des del convertidor digital-analògic incorporat. Funcionen molt bé amb el NodeMCU mitjançant un sol pin digital i, fins i tot, podeu connectar-ne diversos al mateix pin; cadascun té un ID de 64 bits únic gravat a la fàbrica per diferenciar-los.

El sensor funciona de 3,0 a 5,0 V, cosa que significa que es pot alimentar directament des dels 3,3 V que proporciona un dels pins Raspberry (1 o 17).

El sensor té 3 cables:

  • Negre: GND
  • Vermell: VCC
  • Groc: dades de 1 cable

Aquí podeu trobar les dades completes: Full de dades DS18B20

Instal·lació del sensor:

Seguiu l'esquema anterior i feu les connexions:

  • Vcc ==> 3,3V
  • Gnd ==> Gnd
  • Dades ==> GPIO 4 (per defecte per a la biblioteca)

Instal·lació de la biblioteca Python:

A continuació, instal·larem la biblioteca Python que gestionarà el sensor:

sudo pip3 instal·la w1thermsensor

Abans d'executar l'script per provar el sensor, comproveu si la interfície "1-Wire" està activada al vostre RPi (vegeu la pantalla d'impressió superior)

No oblideu reiniciar el vostre RPi després de canviar-ne la configuració

Prova del sensor:

Per provar el sensor, es pot utilitzar un simple script Python:

temps d'importació

d'importació de w1thermsensor W1ThermSensor ds18b20Sensor = W1ThermSensor () mentre True: temperature = ds18b20Sensor.get_temperature () print ("La temperatura és% s celsius"% temperatura) time.sleep (1)

Pas 4: Instal·lació del BMP180

Instal·lació del BMP180
Instal·lació del BMP180
Instal·lació del BMP180
Instal·lació del BMP180
Instal·lació del BMP180
Instal·lació del BMP180

Visió general del sensor:

El BMP180 és el successor del BMP085, una nova generació de sensors de pressió digitals d'alta precisió per a aplicacions de consum. L'electrònica de baixa tensió i baixa potència del BMP180 està optimitzada per a ús en telèfons mòbils, PDA, dispositius de navegació GPS i equips exteriors. Amb un soroll de baixa altitud de només 0,25 m en un temps de conversió ràpid, el BMP180 ofereix un rendiment superior. La interfície I2C permet una fàcil integració del sistema amb un microcontrolador. El BMP180 es basa en tecnologia piezo-resistiva per a la robustesa, l’alta precisió i la linealitat de l’EMC, així com l’estabilitat a llarg termini.

Podeu trobar el full de dades complet de BMP aquí: BMP180 - Sensor de pressió digital

Instal·lació del sensor: seguiu l'esquema anterior i feu les connexions:

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

Habilitació de la interfície I2C

Aneu a Configuració de RPi i confirmeu que la interfície I2C està activada. Si no, activeu-lo i reinicieu l'RPi.

Ús del BMP180

Si tot s’ha instal·lat bé i tot s’ha connectat bé, ara ja esteu a punt per encendre el vostre Pi i començar a veure el que us diu el BMP180 sobre el món que us envolta.

El primer que heu de fer és comprovar si el Pi veu el vostre BMP180. Proveu el següent en una finestra de terminal:

sudo i2cdetect -y 1

Si l'ordre va funcionar, hauríeu de veure alguna cosa similar a la Terminal Printscreen anterior, que mostra que el BMP180 és al canal '77'.

Instal·lació de la biblioteca BMP180:

Creeu un directori per instal·lar la biblioteca:

mkdir BMP180_Sensorcd BMP180_Sensor

Al navegador, aneu a Adafruit GITHub:

github.com/adafruit/Adafruit_Python_BMP

Baixeu la biblioteca fent clic a l'enllaç zip de baixada de la dreta i descomprimiu l'arxiu de la carpeta creada per Raspberry Pi. A continuació, aneu a la subcarpeta creada i executeu l'ordre següent al directori de la biblioteca:

sudo python3 setup.py install

Obriu el vostre IDE de Python i creeu un programa de prova i nomeneu-lo, per exemple BMP180Test.py

importar Adafruit_BMP. BMP085 com BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} * C'. format (sensor.read_temperature ())) print ('Pressure = {0: 0.2f} Pa'). format (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 ()))

Executeu el programa de prova:

python3 BMP180Test.py

La pantalla d’impressió del terminal anterior mostra el resultat.

Tingueu en compte que aquesta pressió es presenta en Pa (Pascals). Vegeu el següent pas per conèixer millor aquesta unitat.

Pas 5: mesurar el temps i l'altitud amb BMP180

Mesurant el temps i l’altitud amb BMP180
Mesurant el temps i l’altitud amb BMP180

Dediquem una estona a entendre una mica més el que aconseguirem, amb les lectures de BMP. Podeu ometre aquesta part del tutorial o tornar més tard.

Si voleu obtenir més informació sobre les lectures del sensor, aneu a aquest fantàstic tutorial:

El BMP180 va ser dissenyat per mesurar amb precisió la pressió atmosfèrica. La pressió atmosfèrica varia amb el temps i l’altitud.

Què és la pressió atmosfèrica?

La definició de pressió atmosfèrica és una força que l'aire que l'envolta exerceix sobre tot. El pes dels gasos a l’atmosfera crea pressió atmosfèrica. Una unitat comuna de pressió és "lliures per polzada quadrada" o psi. Utilitzarem aquí la notació internacional, és a dir, newtons per metre quadrat, que s’anomenen pascals (Pa).

Si prengués 1 cm d'ample, la columna d'aire pesaria aproximadament 1 kg

Aquest pes, pressionant la petjada d’aquesta columna, crea la pressió atmosfèrica que podem mesurar amb sensors com el BMP180. Com que aquesta columna d'aire de cm d'ample pesa aproximadament 1 kg, es dedueix que la pressió mitjana del nivell del mar és d'uns 101325 pascals, o millor, de 1013,25 hPa (1 hPa també es coneix com milibar - mbar). Això baixarà aproximadament un 4% per cada 300 metres que pugis. Com més puja, menys pressió veuràs, perquè la columna de la part superior de l’atmosfera és molt més curta i, per tant, pesa menys. És útil saber-ho, ja que mesurant la pressió i fent algunes matemàtiques, podeu determinar la vostra altitud.

La pressió de l'aire a 3, 810 metres és només la meitat de la del nivell del mar.

El BMP180 emet una pressió absoluta en pascals (Pa). Un pascal és una pressió molt petita, aproximadament la quantitat que exerceix un full de paper sobre una taula. Veureu més sovint mesures en hectopascals (1 hPa = 100 Pa). La biblioteca que s'utilitza aquí proporciona valors de coma flotant de sortida a hPa, que també equival a un milibar (mbar).

Aquí hi ha algunes conversions a altres unitats de pressió:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (lliures per polzada quadrada)
  • 1 hPa = 0,02953337 inHg (polzades de mercuri)
  • 1 hpa = 0,00098692 atm (atmosferes estàndard)

Efectes de la temperatura

Com que la temperatura afecta la densitat d’un gas i la densitat afecta la massa d’un gas i la massa afecta la pressió (ruixat), la pressió atmosfèrica canviarà dràsticament amb la temperatura. Els pilots ho saben com a "altitud de densitat", cosa que fa que sigui més fàcil enlairar-se en un dia fred que en un de calor, perquè l'aire és més dens i té un efecte aerodinàmic més gran. Per compensar la temperatura, el BMP180 inclou un sensor de temperatura bastant bo i un sensor de pressió.

Per realitzar una lectura de pressió, primer feu una lectura de temperatura, i després combineu-la amb una lectura de pressió bruta per obtenir una mesura de pressió final compensada per la temperatura. (La biblioteca facilita tot això.)

Mesurament de la pressió absoluta

Si la vostra aplicació requereix mesurar la pressió absoluta, tot el que heu de fer és obtenir una lectura de temperatura i, a continuació, realitzar una lectura de pressió (vegeu l’esbós d’exemple per obtenir més informació). La lectura de pressió final serà en hPa = mbar. Si ho desitgeu, podeu convertir-lo en una unitat diferent utilitzant els factors de conversió anteriors.

Tingueu en compte que la pressió absoluta de l’atmosfera variarà tant amb la vostra altitud com amb els patrons meteorològics actuals, que són coses útils per mesurar.

Observacions meteorològiques

La pressió atmosfèrica en qualsevol lloc de la terra (o en qualsevol lloc amb atmosfera) no és constant. La complexa interacció entre el gir de la terra, la inclinació de l’eix i molts altres factors té com a resultat zones en moviment de pressió més alta i més baixa, que al seu torn provoquen les variacions del temps que veiem cada dia. Observant els canvis de pressió, es poden predir canvis a curt termini en el clima. Per exemple, caure pressió normalment significa temps humit o s’acosta una tempesta (s’instal·la un sistema de baixa pressió). L’augment de la pressió normalment significa que s’acosta un temps clar (s’està movent un sistema d’alta pressió). Però recordeu que la pressió atmosfèrica també varia amb l’altitud. La pressió absoluta a casa meva, Lo Barnechea a Xile (950 m d’altitud) sempre serà inferior a la pressió absoluta a San Francisco per exemple (menys de 2 metres, gairebé el nivell del mar). Si les estacions meteorològiques acabessin d’informar de la seva pressió absoluta, seria difícil comparar directament les mesures de pressió d’un lloc a un altre (i les prediccions meteorològiques a gran escala depenen de les mesures de tantes estacions com sigui possible).

Per resoldre aquest problema, les estacions meteorològiques sempre eliminen els efectes de l’altitud de les lectures de pressió reportades afegint matemàticament la pressió fixa equivalent per fer-la aparèixer com si la lectura es fes al nivell del mar. Quan feu això, una lectura més elevada a San Francisco que Lo Barnechea sempre serà deguda als patrons meteorològics i no a l’altitud.

Per fer-ho, a la biblioteca hi ha una funció anomenada nivell del mar (P, A). Això pren la pressió absoluta (P) en hPa i l’altura actual de l’estació (A) en metres i elimina els efectes de l’altitud de la pressió. Podeu utilitzar la sortida d'aquesta funció per comparar directament les lectures meteorològiques amb altres estacions del món.

Determinació de l’altitud

Com que la pressió varia amb l'altitud, podeu utilitzar un sensor de pressió per mesurar l'altitud (amb algunes advertències). La pressió mitjana de l’atmosfera a nivell del mar és de 1013,25 hPa (o mbar). Això es redueix a zero mentre es puja cap al buit de l’espai. Com que s’entén bé la corba d’aquest descens, podeu calcular la diferència d’altitud entre dues mesures de pressió (p i p0) mitjançant una equació específica.

Si utilitzeu la pressió del nivell del mar (1013,25 hPa) com a pressió basal (p0), la sortida de l’equació serà la vostra altitud actual sobre el nivell del mar. A la biblioteca hi ha una funció anomenada altitud (P, P0) que us permet obtenir l '"altitud calculada".

L'explicació anterior es va extreure del tutorial de BMP 180 Sparkfun.

Pas 6: HW complet

El HW complet
El HW complet

Pas 7: enviament de dades a ThingSpeak

S’envia dades a ThingSpeak
S’envia dades a ThingSpeak

En aquest punt, hem après a preparar l’RPi per capturar dades dels 3 sensors, imprimint-los al terminal. Ara, és hora de veure com enviar aquestes dades a la plataforma IoT, ThingSpeak.

Anem a començar!

En primer lloc, heu de tenir un compte a ThinkSpeak.com

Seguiu les instruccions per crear un canal i preneu nota del vostre identificador de canal i de la clau API d'escriptura

Baixeu-vos l’escriptura Python des del meu GitHub: localData ToTS_v1_EXT.py

Comentem les parts més importants del codi:

En primer lloc, importem la biblioteca ThingSpeak, definim el client WiFi i definim les vostres credencials de router i Thinkspeak locals:

importar coses

Hi ha diverses maneres de comunicar-se amb ThingSpeak, la manera més senzilla seria utilitzar la biblioteca client per a l'API thingspeak.com desenvolupada per Mikolaj Chwaliz i Keith Ellis.

La biblioteca es pot descarregar des de https://github.com/mchwalisz/thingspeak o utilitzar PIP al terminal:

sudo pip3 instal·la thingspeak

A continuació, dins de l'script, actualitzeu les credencials del canal ThingSpeak

chId = 9999999 # Introduïu amb el vostre identificador de canal

tsKey = 'ENTRAR AMB LA CLAU D'ESCRIPTURA DEL CANAL' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Ara, inicialitzem els 3 sensors:

# DS18B20 Biblioteca d'un cable

des de la importació de w1thermsensor W1ThermSensor ds18b20Sensor = W1ThermSensor () # Per defecte el GPIO 4 és utilitzat per la biblioteca # DHT22 Importació de biblioteques Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 biblioteca import Adafruit_BMP. BMP0B85 Heu de definir l'altitud real on es troba l'estació meteorològica, actualitzant la variable global "altReal". En el meu cas, la meva estació es troba a 950 m sobre el nivell del mar

altReal global

altReal = 950

Un cop introduïu l’altura real de l’estació com a entrada, podem obtenir la pressió absoluta, la pressió del nivell del mar, la temperatura i l’altitud mitjançant la funció bmp180GetData (altitud):

def bmp180GetData (altitud):

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) # pressió absoluta en hPa (o mbar) alt=rodó (alt) presSeaLevel = rodó (presSeaLevel / 100, 2) # pressió absoluta en hPa (o mbar) temperatura de retorn, pres, alt, presSeaLevel

La funció getLocalData (), retornarà totes les dades locals capturades per la nostra estació:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Get time of reading now = datetime.datetime.now () timeString = now.strftime ("% Y-% m-% d% H:% M") # Llegir temperatura exterior (1 metre de distància) tempExt = round (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin no) i tempDHT no és Cap: humLab = round (humDHT

Un cop tingueu totes les dades capturades per les funcions anteriors, les heu d’enviar a ThingSpeak. Ho faràs mitjançant la funció sendDataTs ():

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Dades enviades per a 5 camps: ", tempLab, tempExt, humLab, presSL, altLab)

Amb les dades del canal actualitzades, deseu l'script i executeu-lo al vostre terminal:

sudo Python3 localData_ToTs_v1_EXT.py

Quant als protocols de comunicació

Tingueu en compte que mitjançant la "biblioteca de coses", s'importa la "biblioteca de sol·licituds", és a dir, una biblioteca HTTP amb llicència Apache2, escrita en Python. Podeu trobar la documentació oficial de sol·licitud d’instal·lació aquí:

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

Si cal, abans d'executar el vostre script, podeu verificar si la biblioteca de sol·licituds està instal·lada:

sudo pip3 sol·licituds d’instal·lació

Opcionalment, podeu utilitzar MTTQ com a mètode per enviar dades a ThingSpeak. MQTT és diferent de HTTP, un cop està dissenyat específicament per ser lleuger i destinat a dispositius incrustats amb poc rendiment de RAM i CPU. A més, en la majoria dels casos, MQTT utilitza menys amplada de banda.

Consulteu aquest tutorial: actualitzeu un canal ThingSpeak mitjançant MQTT en un Raspberry Pi per obtenir més informació.

Pas 8: Enviament de dades remotes a ThingSpeak mitjançant ESP8266

Enviament de dades remotes a ThingSpeak mitjançant ESP8266
Enviament de dades remotes a ThingSpeak mitjançant ESP8266
Enviament de dades remotes a ThingSpeak mitjançant ESP8266
Enviament de dades remotes a ThingSpeak mitjançant ESP8266

Per a aquest pas, farem servir el mateix HW que s'ha explicat a molt tutorial:

M'HO FACILITAT: CAPTURAR DADES DE TEMPS REMOTES: TEMPERATURA I HUMITAT DE UV I AIRE

El codi que farem servir aquí és bàsicament el mateix que s’utilitzava en aquest tutorial. Comentem les parts més importants del codi:

En primer lloc, truquem a la biblioteca ESP8266, definim el client WiFi i definim les vostres credencials de router i Thinkspeak locals:

/ * NodeMCU ESP12-E * /

#include client WiFiClient; const char * MY_SSID = "ENTRAR AMB EL SEU SSDID"; const char * MY_PWD = "ENTRAR AMB LA VOSTRA CONTRASENYA"; / * Thinkspeak * / const char * TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ENTRAR AMB LA CLAU D'ESCRIPTURA";

En segon lloc, incloguem una biblioteca molt important per a projectes IoT: SimpleTimer.h:

/ * TEMPORITZADOR * /

#include temporitzador SimpleTimer;

En tercer lloc, durant la configuració (), iniciarem la comunicació en sèrie, trucarem a la funció connectWiFi () i definirem els temporitzadors. Tingueu en compte que la línia de codi: timer.setInterval (60000L, sendDataTS); trucarà a la funció sendDataTS () cada 60 segons per tal de pujar dades al canal ThinkSpeak.

configuració nul·la ()

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

Per últim, però no menys important, durant el bucle (), l’única ordre necessària és iniciar el temporitzador i ja està!

bucle buit ()

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

A continuació, podeu veure les dues funcions importants que s’utilitzen per gestionar la comunicació de Thinkspeak:

Connexió ESP12-E amb la vostra xarxa WiFi:

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

* Connexió WiFi ************************************************ *** / void connectWifi () {Serial.print ("Connexió a" + * MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi connectat"); Serial.println (""); }

ESP12-E enviament de dades a ThinkSpeak:

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

* Enviament de dades al canal Thinkspeak ********************************************* ****** / 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 / actualització HTTP / 1.1 / n"); client.print ("Amfitrió: api.thingspeak.com / n"); client.print ("Connexió: tancar / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Tipus de contingut: application / x-www-form-urlencoded / n"); client.print ("Longitud del contingut:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); retard (1000); } enviat ++; client.stop (); }

El codi complet es pot trobar al meu GitHub: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Un cop tingueu el codi penjat al vostre NodeMCU. Connectem una bateria externa i fem algunes mesures sota el sol. Poso l'Estació Remota al terrat i començo a capturar dades a ThingSpeak.com tal com es mostra a les fotos anteriors.

Pas 9: notes finals

Notes finals
Notes finals

L’objectiu principal d’aquest tutorial era mostrar com connectar el Raspberry Pi a ThingSpeak. Això és fantàstic per capturar dades i registrar-les en una plataforma IoT.

Aprofitant l’oportunitat, també vam enviar dades a aquest canal específic, capturant-les des d’una estació remota mitjançant un ESP8266. Aquest enfocament està bé, però no el millor. Com que tenim una operació "asíncrona", de vegades, tots dos, RPi i ESP8266 intenten registrar al mateix temps (o amb un petit interval) el que és refutat per ThingSpeak. L’ideal seria que l’ESP8266 enviés dades localment a Raspberry Pi i que l’últim fos el responsable de gestionar totes les dades. Fent això, la "estación principal" (Raspberry Pi) podria fer tres coses:

  • Registreu totes les dades en una base de dades local
  • Presentar totes les dades en una pàgina web local (utilitzant Flask com es mostra a la foto anterior)
  • S’envia totes les dades a ThingSpeak al mateix temps.

En un futur tutorial, explorarem aquestes opcions.

Pas 10: Conclusió

Conclusió
Conclusió

Com sempre, espero que aquest projecte pugui ajudar els altres a endinsar-se en l’apassionant món de l’electrònica.

Per obtenir més informació i el codi final, visiteu el dipòsit de GitHub: RPi-NodeMCU-Weather-Station

Per obtenir més projectes, visiteu el meu bloc: MJRoBot.org

Estigueu atents! El següent tutorial enviarem dades d'una estació meteorològica remota a una central, basada en un servidor web Raspberry Pi:

Imatge
Imatge

Saluts del sud del món!

Ens veiem a la meva propera instrucció!

Gràcies, Marcelo

Recomanat: