Taula de continguts:
- Pas 1: estació meteorològica amb sensors de llum, temperatura i humitat
- Pas 2: MQTT: un mitjà flexible per publicar i subscriure dades
- Pas 3: deseu les dades a SQL i visualitzeu-les en un servidor web
Vídeo: Estació meteorològica: ESP8266 amb son profund, SQL, gràfic per flascó i gràfic: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:11
Seria divertit conèixer la temperatura, la humitat o la intensitat de la llum del balcó? Sé que ho faria. Així que vaig fer una senzilla estació meteorològica per recopilar aquestes dades. Les seccions següents són els passos que vaig fer per crear-ne un.
Comencem!
Pas 1: estació meteorològica amb sensors de llum, temperatura i humitat
Quan vaig planejar construir una estació meteorològica, somiava tenir una estació meteorològica completa que tingués velocitat del vent, mesura de pluja, sensor solar d’espectre complet, però resultés que no seria barat i el cost de la compra podria acabar fins a 100 dòlars com a mínim. Vaig renunciar a les opcions completes i vaig començar a crear-ne una amb 10 o més dòlars. 10 dòlars són el cost dels components bàsics de l’estació meteorològica, tal com es detallen a continuació.
Aquí hi ha les parts:
1. La marca Wemos ESP8266 costa 2,39 dòlars a Aliexpress. Recomanaria la marca Wemos perquè el seu EPS8266 és més fàcil de programar, actualitzar i tenir 4 MB de flaix o més.
2. Wemos Charger-Boost Shield costa 1,39 USD. Aquest és un altre avantatge d’utilitzar aquesta marca. Té una placa de reforç per a bateria de liti (tensió nominal = 3,7 V) a 5 V per ESP8266. La placa també inclou opció de càrrega amb un corrent de càrrega màxim = 1 M.
* Nota: hi ha una opció més barata per carregar / augmentar la bateria de liti. Aquest costa 1,77 dòlars per 5 unitats. Tanmateix, quan vaig utilitzar aquesta placa per a ESP8266 (ja sigui de Wemos o un ESP8266 nu), el mode de son profund de l’ESP8266 va activar un restabliment just després de fer l’ESP8266 en un bucle de repòs-repòs-repòs, cosa que és molt molest. Si sabeu què passava, si us plau envieu-me una safata d’entrada.
3. Wemos també té diversos blindatges de temperatura i humitat, però vaig a construir a partir de components individuals. Fotoresistència (o resistència que depèn de la llum - ldr, barat), un sensor de lluminositat com BH1780 o TSL2561 (uns 0,87-0,89c unitats), un sensor de temperatura com DS18B20 (75c cadascun) i un combinat d'humitat i temperatura, com ara DHT22 (2,35 dòlars aquí) o SHT21 (2,20 dòlars aquí). Un cost total del sensor ~ 4 $.
4. Bateria de liti. N’he recuperat una d’una bateria Canon de 7,4 V, que és una bateria de 3,7 V en sèrie o una bateria de liti 18650. Cada 18650 costa aproximadament 5 dòlars per peça. Tinc una imatge que mostra la demolició de la bateria de la càmera. Tingueu cura, però, de fer un curtcircuit en tallar la tapa de plàstic i generar calor extrem.
5. Tauler de PCB, pont, cable, soldadura, el vostre temps, potser algunes habilitats de depuració.
Deixeu que els components de filferro seguin l'esquema anterior.
A continuació, busqueu la tasca al bucle de configuració. Simplement és una sola execució de tasques i acaba amb una ordre de son.
configuració nul·la () {Serial.begin (115200); Serial.println ("Node d'inici anomenat" + Cadena (SENSORNAME)); setup_wifi (); retard (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); if (! tsl.begin ()) {Serial.print ("TSL2561 no trobat"); mentre que (1); } retard (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (true); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); retard (100); sensors_event_t esdeveniment; tsl.getEvent (& event); if (event.light) lux = event.light; else Serial.println ("Sobrecàrrega del sensor");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (fals); tempSensor.begin (); retard (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 no es troba al pin% d / n", ds18b20); Serial.flush (); retard (1000); } retard (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nLight:% d lux / t", lux); Serial.printf ("LDR:% d / 1024 / t", ldr); Serial.printf ("T:% 0.2f * C / t", t); Serial.printf ("H:% 0.2f / t", h); Serial.printf ("HIC:% 0.2f / t", hic); retard (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (devolució de trucada); reconnectar (); retard (100); ESP.deepSleep (3e8); // 300 milions de microsegons, 300 segons, 5 minuts; }
Durant la depuració o la configuració, ordeneu a ESP.deepsleep () perquè la lectura sèrie sigui contínua. Com sempre, el codi complet per penjar-lo a ESP8266 està allotjat aquí (GitHub).
Recordeu posar el pont entre RST i D0 / GPIO16 per activar un despert després d'un període de son profund.
Ara, és hora de carregar el codi mitjançant Arduino IDE a l’ESP8266.
Pas 2: MQTT: un mitjà flexible per publicar i subscriure dades
En primer lloc, cada vegada m’agrada més utilitzar MQTT per enviar i rebre dades a través de diferents sensors i clients de casa meva. Això es deu a la flexibilitat per enviar dades il·limitades classificades per tema, i a clients il·limitats per subscriure's a un tema des d'un corredor MQTT. En segon lloc, no estic capacitat per discutir en profunditat sobre MQTT. De vegades vaig conèixer MQTT l'any passat (2017) quan seguia tutorials per configurar una estació meteorològica i sensors mitjançant Node-RED. De tota manera, faré tot el possible per presentar-vos alguna informació. Un altre bon lloc per començar és Wikipedia.
Si no teniu temps de llegir sobre la teoria i voleu crear un broker MQTT, he publicat un altre tutorial només per fer-ho. Cerqueu aquesta publicació i desplaceu-vos cap avall fins al pas 4.
Per explicar què és el mode de transport de telemetria de missatges de cua (MQTT) al meu entendre, he preparat un diagrama com es va indicar anteriorment. En poques paraules, MQTT és un estàndard ISO, i un producte com mosquitto i mosquitto-client, dos paquets que he utilitzat per construir un corredor MQTT en un Raspberry Pi, han de complir aquest estàndard. El corredor MQTT es converteix llavors en un mitjà perquè els editors puguin enviar un missatge i els subscriptors escoltin un tema objectiu.
La combinació de la biblioteca Arduino PubSubclient amb ArduinoJson, gràcies al seu creador knolleary i bblanchon, facilita als tinkers i als desenvolupadors un conjunt d’eines, des de sensors fins a un equip objectiu o un client final.
Continuem amb la creació de bases de dades i mostrem algunes dades.
Pas 3: deseu les dades a SQL i visualitzeu-les en un servidor web
He utilitzat sqlite3 per crear una base de dades per al servidor web. Instal·leu sqlite3 a Rapberry Pi mitjançant:
sudo apt-get install sqlite3
ha creat una base de dades i una taula escrivint al terminal:
sqlite3 weatherstation.db
CREA TABLE weatherdata (id INT PRIMARY KEY, thetime DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // per sortir de la línia d’ordres sqlite i tornar al terminal Linux
Per escoltar un tema publicat per l’estació meteorològica, he utilitzat una biblioteca Paho amb Python:
#! / usr / bin / python3 # adoptat des de: > # binh nguyen, august 04, 2018, from time import localtime, strftime, sleep import paho.mqtt.client as mqtt import sqlite3, json
mqtt_topic = 'balcony/weatherstation'
mqtt_username = "johndoe" mqtt_password = "password" dbfile = "/path/to/databse/weatherstation.db" mqtt_broker_ip = '192.168.1.50'
# the callback for when the client receives a connack response from the server.
def on_connect(client, userdata, flags, rc): print("connected with result code "+str(rc)) client.subscribe(mqtt_topic) # the callback for when a publish message is received from the server. def on_message(client, userdata, msg): thetime = strftime("%y-%m-%d %h:%m:%s", localtime())
topic = msg.topic
payload = json.dumps(msg.payload.decode('utf-8')) sql_cmd = sql_cmd = """insert into weatherdata values ({0}, '{1}', {2[ldr]}, {2[tsl2561]}, {2[ds18b20]}, {2[tsht21]}, {2[hsht21]})""".format(none, time_, payload) writetodb(sql_cmd) print(sql_cmd) return none
def writetodb(sql_cmd):
conn = sqlite3.connect(dbfile) cur = conn.cursor() cur.execute(sql_command) conn.commit()
client = mqtt.client()
client.on_connect = on_connect client.on_message = on_message client.username_pw_set(username=mqtt_username, password=mqtt_password) client.connect(mqtt_broker_ip, 1883, 60) sleep(1) client.loop_forever()
to display data from use another sql command to query data from the database such as:
sql_command = """ select * from weatherdata order by thetime desc limit 1000;"
this sql command is included in the app.py that uses flask framework and plotty to make a web server and plotting a graph.
the complete code is hosted on the github.
if the esp8266 cannot read the ds18b20, it assigned a value of -127 as the temperature which skews the relative range of other readable temperatures. i cleaned up those values by set a null value to those equals to -127:
sqlite3 weatherstation.db
sqlite3> update weatherdata set ds18b20 = null where ds18b20 = -127;
to set up an environment for this mini web server, i used the shared libraries on raspberry pi. a virtualenv is a better option if the web server is hosted on a powerful computer. start the web server by:
python3 app.py
press control + c to stop the server.
the web server is set to auto-refreshed for every 60 seconds. you can change the interval in index.html file:
battery performance:
i did not measure the current between the normal state or sleep state of esp8266. many others did so. the first google search turned to this page. the normal state of esp8266 consumes about 100ma depends on the rate of transmitting and wifi activity. the deep-sleep state needs in the range of micro a, which a thousand times less.
for 5-minute interval between sleeping and waking up, one single lithium 18650 (2000mah) could fuel my weather station for 12 days. the same battery only enough for esp 8266 ran less than a day with a normal working state. the one i took from the camera battery pack (did not know the capacity) was enough to run the weather station with deep sleep for 5-6 days.
thank you for spending time with me to this end.
Recomanat:
Estació meteorològica NaTaLia: l'estació meteorològica amb energia solar Arduino s'ha fet correctament: 8 passos (amb imatges)
Estació meteorològica NaTaLia: Estació meteorològica amb energia solar Arduino feta de la manera correcta: després d’un any d’exitació en 2 llocs diferents, comparteixo els plans del projecte de la meva estació meteorològica amb energia solar i explico com va evolucionar cap a un sistema que realment pot sobreviure durant molt de temps períodes des de l'energia solar. Si segueixes
Sensor de moviment ESP-01 amb son profund: 5 passos
ESP-01 Sensor de moviment amb son profund: He estat treballant en la creació de sensors de moviment casolans que envien un missatge de correu electrònic quan s’activen. Hi ha molts exemples instructius i altres exemples de fer-ho. Fa poc havia de fer-ho amb un sensor de moviment PIR amb bateria i un ESP
Estació meteorològica de bricolatge i estació de sensor WiFi: 7 passos (amb imatges)
Estació meteorològica de bricolatge i estació de sensor WiFi: en aquest projecte us mostraré com crear una estació meteorològica juntament amb una estació de sensor WiFi. L'estació del sensor mesura les dades de temperatura i humitat locals i les envia, mitjançant WiFi, a l'estació meteorològica. L'estació meteorològica mostra llavors
Estalvi de vida de la bateria amb son profund: 20 passos
Estalvieu la vida de la bateria amb un son profund: us interessa utilitzar una bateria amb el vostre ESP32? Si és així, parlaré avui d’alguna informació tècnica important sobre aquest tema. Sabem que aquest microcontrolador gasta molta energia quan transmet informació. Consumeix
Estació meteorològica Acurite 5 en 1 amb Raspberry Pi i Weewx (altres estacions meteorològiques són compatibles): 5 passos (amb imatges)
Estació meteorològica Acurite 5 en 1 amb Raspberry Pi i Weewx (altres estacions meteorològiques són compatibles): quan havia comprat l’estació meteorològica Acurite 5 en 1, volia poder comprovar el temps a casa mentre era fora. Quan vaig arribar a casa i el vaig configurar, em vaig adonar que havia de tenir la pantalla connectada a un ordinador o comprar el seu hub intel·ligent