Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-23 14:40
Kas oleks lõbus teada oma rõdu temperatuuri, niiskust või valguse intensiivsust? Ma tean, et tahaksin. Seega tegin selliste andmete kogumiseks lihtsa ilmajaama. Järgmised lõigud on sammud, mille tegin selle ehitamiseks.
Alustame!
1. samm: ilmajaam valguse, temperatuuri ja niiskuse anduritega
Kui plaanisin ilmajaama ehitada, unistasin täieõiguslikust ilmajaamast, millel on tuule kiirus, vihma mõõtmine, täisspektriline päikesesensor, kuid selgus, et see poleks odav ja ostukulud võivad lõppeda vähemalt 100 dollarit. Loobusin kõigist valikutest ja hakkasin seda ehitama 10 dollariga, enam -vähem. 10 dollarit on ilmajaama põhikomponentide maksumus, nagu allpool toodud osad.
Siin on osad:
1. ESP8266 Wemos kaubamärk maksab Aliexpressis 2,39 dollarit. Ma soovitaksin Wemose kaubamärki, kuna selle EPS8266 on lihtsam programmeerida, värskendada ja sellel on 4 MB välk või rohkem.
2. Wemos Charger-Boost Shield maksab 1,39 dollarit. See on veel üks selle kaubamärgi kasutamise eelis. Sellel on liitiumaku (nimipinge = 3,7 V) võimendusplaat kuni 5 V ESP8266 jaoks. Plaadil on ka laadimisvõimalus, mille maksimaalne laadimisvool on 1M.
*Märkus. Liitiumaku laadimiseks/suurendamiseks on odavam võimalus. See maksab 1,77 dollarit 5 tk. Kui aga kasutasin seda plaati ESP8266 jaoks (kas Wemos või tühi ESP8266), käivitas ESP8266 sügava une režiim lähtestamise kohe pärast ESP8266 tegemist une-lähtestamise-une tsükliga, mis on väga tüütu. Kui teate, mis toimub, saatke mulle postkast.
3. Wemos on ka mitu kilpi temperatuuri ja niiskuse jaoks, kuid ma hakkan ehitama üksikutest komponentidest. Fototakisti (või valgusest sõltuv takisti-ldr, odav), heledusandur nagu BH1780 või TSL2561 (umbes 0,87–0,89 c tk), temperatuuriandur nagu DS18B20 (igaüks 75c) ning niiskuse ja temperatuuri kombinatsioon, näiteks DHT22 (siin 2,35 dollarit) või SHT21 (siin 2,20 dollarit). Anduri kogumaksumus ~ 4 dollarit.
4. Liitiumpatarei. Päästsin ühe 7,4 V Canoni akust, mis on kaks 3,7 V aku järjestikku või 18650 liitiumaku. Iga 18650 maksab umbes 5 dollarit tükk. Mul on pilt, mis näitab kaamera akupakki. Olge siiski ettevaatlik, plastkatte lõikamisel võib lühis tekitada tugevat kuumust ja põletada.
5. PCB plaat, hüppaja, traat, jootmine, teie aeg, võib -olla mõned silumisoskused.
Laske traatkomponentidel koos järgida ülaltoodud skeemi.
Seejärel otsige ülesannet seadistusahelast. See on lihtsalt ühe ülesande täitmine ja lõpeb unekäsuga.
void setup () {Serial.begin (115200); Serial.println ("Stardisõlme nimi" + string (SENSORNAME)); setup_wifi (); viivitus (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21. Algus (); if (! tsl.begin ()) {Serial.print ("TSL2561 not found"); samas (1); } viivitus (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (tõene); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); viivitus (100); sensor_event_t sündmus; tsl.getEvent (& sündmus); if (sündmus.valgus) lux = sündmus.valgus; else Serial.println ("Anduri ülekoormus");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (vale); tempSensor.begin (); viivitus (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 ei leitud tihvti %d / n", ds18b20); Serial.flush (); viivitus (1000); } viivitus (100); tempSensor.requestTemperatures (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nValgus: %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); viivitus (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (tagasihelistamine); uuesti ühendada (); viivitus (100); ESP.deepSleep (3e8); // 300 miljonit mikrosekundit, 300 sekundit, 5 minutit; }
Silumise või seadistamise ajal käsk ESP.deepsleep () pidevalt seerianäitajaks. Nagu alati, majutatakse ESP8266 -sse laadimiseks kogu kood siin (GitHub).
Ärge unustage panna hüppaja RST ja D0/GPIO16 vahele, et ärgata pärast sügavat und.
Nüüd on aeg kood Arduino IDE abil ESP8266 -sse üles laadida.
2. samm: MQTT: paindlik andmekandja andmete avaldamiseks ja tellimiseks
Esiteks, mulle meeldib üha enam kasutada MQTT -d andmete saatmiseks ja vastuvõtmiseks oma kodu erinevate andurite ja klientide vahel. Seda seetõttu, et paindlikkus saata piiramatuid teemade kaupa kategoriseeritud andmeid ja piiramatu arv kliente ühe teema tellimiseks MQTT maaklerilt. Teiseks, ma ei ole pädev MQTT-d põhjalikult arutama. Õppisin MQTT-d tundma mõnikord eelmisel aastal (2017), kui järgisin Node-RED-i abil ilmajaama ja andurite seadistamise õpetusi. Igatahes proovin anda teile parima teabe. Teine hea koht alustamiseks on Vikipeedia.
Kui teil pole aega teooriast lugeda ja soovite luua MQTT maakleri, postitasin selle tegemiseks teise õpetuse. Otsige üles see postitus ja kerige alla 4. sammuni.
Et selgitada, mis on minu arusaamades sõnumijärjekorra telemeetria transport (MQTT), koostasin ülaltoodud skeemi. Lühidalt öeldes on MQTT ISO standard ning sellised tooted nagu sääsk ja sääsk-klient, kaks pakki, mida ma kasutasin, ehitasid Raspberry Pi-le MQTT maakleri, peavad sellele standardile vastama. MQTT maakler muutub seejärel meediumiks, mille abil kirjastajad saavad sõnumi sisestada ja tellijad sihtteemat kuulata.
Arduino PubSubclient raamatukogu ja ArduinoJson'i kombinatsioon tänu oma looja knolleary'ile ja bblanchonile muudab tihvtide ja arendajate jaoks lihtsamaks tööriistakomplekti alates anduritest kuni sihtvarustuse või lõppkliendini.
Laske andmebaasi loomisel edasi ja kuvage mõned andmed.
Samm: salvestage andmed SQL -i ja kuvage need veebiserveris
Kasutasin veebiserveri jaoks andmebaasi loomiseks sqlite3. Installige sqlite3 rakendusse Rapberry Pi järgmiselt.
sudo apt-get install sqlite3
lõi andmebaasi ja tabeli, sisestades terminali:
sqlite3 ilmajaam.db
CREATE TABLE ilmateabe loomine (id INT PRIMARY KEY, the time DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // sqlite käsurealt väljumiseks ja Linuxi terminali naasmiseks
Ilmajaama avaldatud teema kuulamiseks kasutasin Paho raamatukogu koos Pythoniga:
#! /usr/bin/python3# vastu võetud: > # 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.
Soovitan:
NaTaLia ilmajaam: Arduino päikeseenergial töötav ilmajaam on õigesti tehtud: 8 sammu (piltidega)
NaTaLia ilmajaam: Arduino päikeseenergial töötav ilmajaam on õigesti tehtud: pärast 1 -aastast edukat tegutsemist kahes erinevas kohas jagan oma päikeseenergiaga töötavate ilmajaamade projektiplaane ja selgitan, kuidas see arenes süsteemiks, mis võib pika aja jooksul tõesti ellu jääda perioodid päikeseenergiast. Kui järgite
ESP-01 liikumisandur sügava unega: 5 sammu
ESP-01 Sügava unega liikumisandur: Olen töötanud selle nimel, et teha omatehtud liikumisandureid, mis saadavad käivitamisel meilisõnumi. Selle kohta on palju näpunäiteid ja muid näiteid. Hiljuti oli mul vaja seda teha patareitoitega PIR -liikumisanduri ja ESP -ga
Arduino graafilise ülemineku töötlemine: 5 sammu
Arduino graafilise ülemineku töötlemine: Tere, see projekt on mõeldud nähtava graafika tegemiseks nähtamatutest osakestest, mida andurid võiksid tunda. Sel juhul kasutasin valguse ja kauguse juhtimiseks ultraheli andurit ja fototakisti. Ma visualiseerin seda, luues muutujad seest
Täielik DIY Raspberry Pi ilmajaam koos tarkvaraga: 7 sammu (koos piltidega)
Täielik DIY Raspberry Pi ilmajaam tarkvaraga: veebruari lõpus nägin seda postitust Raspberry Pi saidil. http://www.raspberrypi.org/school-weather-station- … Nad olid loonud koolidele Raspberry Pi ilmajaamad. Ma tahtsin täiesti ühte! Kuid sel ajal (ja ma usun, et kirjutamise ajal
Ehitage jutukast WC -kolvi sisse: 6 sammu (piltidega)
Ehitage jutukast WC -kolvi sisse: jootekolvi, arvuti kõlarite paari ja mõnede sanitaartehniliste seadmetega (sh tualettkolviga). Saate ehitada päris hea Talk Boxi (jutukast on see, mida artistid nagu Daft Punk kasutavad, et saada see robothääleefekt sellistele lugudele nagu Around th