Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03
Seria divertido saber a temperatura, umidade ou intensidade da luz em sua varanda? Eu sei que sim. Então fiz uma estação meteorológica simples para coletar esses dados. As seções a seguir são as etapas que executei para construir um.
Vamos começar!
Etapa 1: Estação meteorológica com sensores de luz, temperatura e umidade
Quando planejei construir uma estação meteorológica, sonhava em ter uma estação meteorológica completa que tivesse velocidade do vento, medição de chuva, sensor solar de espectro total, mas descobri que não seria barato e o custo de compra poderia acabar até pelo menos $ 100. Desisti de todas as opções e comecei a construir uma com $ 10, mais ou menos. $ 10 é o custo dos componentes básicos da estação meteorológica conforme as peças abaixo.
Aqui estão as peças:
1. ESP8266 marca Wemos custa $ 2,39 pcs no Aliexpress. Eu recomendaria a marca Wemos porque seu EPS8266 é mais fácil de programar, atualizar e tem 4 MB de flash ou mais.
2. Wemos Charger-Boost Shield custa $ 1,39 unidades. Esse é outro benefício de usar essa marca. Tem uma placa de reforço para bateria de lítio (tensão nominal = 3,7 V) a 5 V para ESP8266. A placa também vem com opção de carregamento com uma corrente de carregamento máxima = 1M.
* Observação: há uma opção mais barata para carregar / aumentar a bateria de lítio. Este custa $ 1,77 para 5pcs. No entanto, quando usei esta placa para ESP8266 (seja Wemos ou um ESP8266 vazio), o modo de sono profundo do ESP8266 acionou uma reinicialização logo após fazer o ESP8266 em um loop de sleep-reset-sleep, o que é muito irritante. Se você sabe o que está acontecendo, por favor, me mande uma mensagem.
3. Wemos também tem vários escudos para temperatura e umidade, mas vou construir com componentes individuais. Fotoresistor (ou resistor dependente de luz - ldr, barato), um sensor de luminosidade como BH1780 ou TSL2561 (cerca de 0,87-0,89c pcs), um sensor de temperatura como DS18B20 (75c cada) e uma combinação de umidade e temperatura como DHT22 ($ 2,35 aqui) ou SHT21 ($ 2,20 aqui). Um custo total para o sensor ~ $ 4.
4. Bateria de lítio. Eu recuperei uma bateria de 7,4 V da Canon, que são duas baterias de 3,7 V em série ou bateria de lítio 18650. Cada 18650 custa cerca de US $ 5 cada. Tenho uma foto que mostra a destruição da bateria da câmera. Porém, tenha cuidado, um curto-circuito ao cortar a tampa de plástico pode gerar calor extremo e queimar.
5. Placa PCB, jumper, fio, solda, seu tempo, talvez algumas habilidades de depuração.
Deixe os componentes do fio juntos seguir o esquema acima.
Em seguida, dê uma olhada na tarefa no loop de configuração. É simplesmente uma execução única de tarefas e termina com um comando de suspensão.
void setup () {Serial.begin (115200); Serial.println ("Nó inicial nomeado" + String (SENSORNAME)); setup_wifi (); atraso (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); if (! tsl.begin ()) {Serial.print ("TSL2561 não encontrado"); enquanto (1); } atraso (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (true); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); atraso (100); sensores_event_t event; tsl.getEvent (& event); if (event.light) lux = event.light; else Serial.println ("Sobrecarga do sensor");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (false); tempSensor.begin (); atraso (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 não encontrado no pino% d / n", ds18b20); Serial.flush (); atraso (1000); } atraso (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nLuz:% 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); atraso (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (callback); reconectar (); atraso (100); ESP.deepSleep (3e8); // 300 milhões de micro segundos, 300 segundos, 5 minutos; }
Durante a depuração ou configuração, comande o ESP.deepsleep () para ter uma leitura serial continuamente. Como sempre, o código completo para upload para ESP8266 está hospedado aqui (GitHub).
Lembre-se de colocar o jumper entre RST e D0 / GPIO16 para acionar um despertar após um período de sono profundo.
Agora, é hora de fazer o upload do código usando o IDE do Arduino para o ESP8266.
Etapa 2: MQTT: um meio flexível para publicar e assinar dados
Primeiro, estou começando a gostar de usar o MQTT para enviar e receber dados por meio de diferentes sensores e clientes em minha casa. Isso ocorre porque a flexibilidade para enviar dados ilimitados categorizados por um tópico e clientes ilimitados para assinar um tópico de um broker MQTT. Em segundo lugar, não estou qualificado para discutir o MQTT em profundidade. Conheci o MQTT algumas vezes no ano passado (2017) ao seguir tutoriais para configurar uma estação meteorológica e sensores usando o Node-RED. De qualquer forma, farei o possível para apresentar a vocês algumas informações. Outro bom lugar para começar é a Wikipedia.
Se você não tem tempo para ler sobre a teoria e deseja configurar um broker MQTT, postei outro tutorial apenas para isso. Pesquise esta postagem e role para baixo até a Etapa 4.
Para explicar o que é MQTT (Message Queuing Telemetry Transport) no meu entendimento, preparei um diagrama conforme acima. Resumindo, MQTT é um padrão ISO, e um produto como mosquitto e mosquitto-client, dois pacotes que usei para construir o corretor MQTT em um Raspberry Pi, deve estar em conformidade com esse padrão. O broker MQTT então se torna um meio para que os publicadores enviem uma mensagem e os assinantes escutem um tópico de destino.
A combinação da biblioteca Arduino PubSubclient com o ArduinoJson, graças ao seu criador knolleary e bblanchon, torna mais fácil para os criadores e desenvolvedores um conjunto de ferramentas de sensores a um equipamento alvo ou um cliente final.
Vamos prosseguir com a criação do banco de dados e exibir alguns dados.
Etapa 3: Salvar dados em SQL e exibi-los em um servidor web
Usei sqlite3 para criar um banco de dados para o servidor web. Instale o sqlite3 no Rapberry Pi por:
sudo apt-get install sqlite3
criou um banco de dados e uma tabela digitando no terminal:
sqlite3 weatherstation.db
CREATE TABLE weatherdata (id INT PRIMARY KEY, thetime DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // para sair da linha de comando sqlite e retornar ao terminal Linux
Para ouvir um tópico publicado pela estação meteorológica, usei uma biblioteca Paho com Python:
#! / usr / bin / python3 # adotado 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.
Recomendado:
Estação meteorológica assistida por satélite: 5 etapas
Estação meteorológica assistida por satélite: Este projeto destina-se a pessoas que desejam coletar seus próprios dados meteorológicos. Ele pode medir a velocidade e direção do vento, temperatura e umidade do ar. Também é capaz de ouvir satélites meteorológicos orbitando a Terra uma vez a cada 100 minutos. Eu irei
Estação meteorológica NaTaLia: Estação meteorológica com energia solar Arduino Feito da maneira certa: 8 etapas (com fotos)
Estação meteorológica de NaTaLia: Estação meteorológica com energia solar Arduino feito da maneira certa: após 1 ano de operação bem-sucedida em 2 locais diferentes, estou compartilhando meus planos de projeto de estação meteorológica movida a energia solar e explicando como ela evoluiu para um sistema que pode realmente sobreviver por muito tempo períodos de energia solar. Se você seguir
Sensor de movimento ESP-01 com sono profundo: 5 etapas
ESP-01 Sensor de movimento com sono profundo: Tenho trabalhado na criação de sensores de movimento caseiros que enviam uma mensagem de e-mail quando acionados. Existem muitos exemplos de instructables e outros exemplos de como fazer isso. Recentemente, precisei fazer isso com um sensor de movimento PIR operado por bateria e um ESP
Estação meteorológica DIY e estação de sensor WiFi: 7 etapas (com fotos)
Estação meteorológica DIY e estação de sensor WiFi: Neste projeto, vou mostrar como criar uma estação meteorológica juntamente com uma estação de sensor WiFi. A estação sensora mede os dados locais de temperatura e umidade e os envia, via WiFi, para a estação meteorológica. A estação meteorológica exibe então t
Estação meteorológica Pocket ESP8266 [No ThingsSpeak] [alimentada por bateria]: 11 etapas
Estação meteorológica Pocket ESP8266 [Sem ThingsSpeak] [alimentada por bateria]: Uma estação meteorológica de bolso especialmente criada para os geeks de tecnologia sentados lá fora e observando meu instrutor. Então, deixe-me contar a você sobre esta estação meteorológica de bolso. Principalmente este relógio de bolso tem um cérebro ESP8266 e funciona com bateria, pois é H