Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-23 15:10
A do të ishte kënaqësi të njihnit temperaturën, lagështinë ose intensitetin e dritës në ballkonin tuaj? E di që do ta bëja. Kështu që unë bëra një stacion të thjeshtë moti për të mbledhur të dhëna të tilla. Seksionet e mëposhtëm janë hapat që kam ndërmarrë për të ndërtuar një të tillë.
Le të fillojmë!
Hapi 1: Stacioni i motit me sensorë të dritës, temperaturës dhe lagështisë
Kur planifikova të ndërtoja një stacion moti, ëndërroja të kisha një stacion moti të plotë që kishte shpejtësinë e erës, matjen e shiut, sensorin diellor me spektër të plotë, por doli, kjo nuk do të ishte e lirë, dhe kostoja e blerjes mund të përfundonte të paktën 100 dollarë. Hoqa dorë nga opsionet e plota dhe fillova të ndërtoj një me 10 dollarë, pak a shumë. 10 dollarë është kostoja e përbërësve bazë të stacionit të motit si pjesët më poshtë.
Këtu janë pjesët:
1. Marka ESP8266 Wemos kushton 2.39 dollarë në Aliexpress. Unë do të rekomandoja markën Wemos sepse EPS8266 e tij është më e lehtë të programohet, përditësohet dhe të ketë flash 4MB ose më shumë.
2. Wemos Charger-Boost Shield kushton $ 1.39 copë. Ky është një përfitim tjetër për të përdorur këtë markë. Ajo ka një bord ngritës për baterinë Litium (tension nominal = 3.7V) në një 5V për ESP8266. Bordi gjithashtu vjen me opsionin e karikimit me një rrymë maksimale të karikimit = 1M.
*Shënim: Ekziston një mundësi më e lirë për karikimin/ngritjen e baterisë litium. Ky kushton 1.77 dollarë për 5 copë. Sidoqoftë, kur e përdor këtë tabelë për ESP8266 (qoftë Wemos ose ESP8266 të zhveshur), mënyra e gjumit të thellë të ESP8266 shkaktoi një rivendosje menjëherë pasi bëri ESP8266 në një lak të gjumit të rivendosur të gjumit, gjë që është shumë e bezdisshme. Nëse e dini se çfarë po ndodhte, ju lutem më shkruani në inbox.
3. Wemos gjithashtu ka disa mburoja për temperaturën dhe lagështinë, por unë do të ndërtoj nga përbërës individualë. Photoresistor (ose rezistencë e varur nga drita-ldr, e lirë), një sensor ndriçimi të tillë si BH1780 ose TSL2561 (rreth 0.87-0.89c copë), një sensor temperature të tillë si DS18B20 (75c secila), dhe një kombinim lagështie dhe temperature siç janë DHT22 (2.35 dollarë këtu) ose SHT21 (2.20 dollarë këtu). Një kosto totale për sensorin 4 dollarë.
4. Bateri litiumi. Unë shpëtova një nga një bateri Canon 7.4V e cila është dy bateri 3.7V në seri ose bateri litium 18650. Çdo 18650 kushton rreth 5 dollarë secila. Unë kam një fotografi që tregon shkatërrimin e baterisë së kamerës. Kini kujdes, megjithatë, qarku i shkurtër gjatë prerjes së kapakut plastik mund të prodhojë nxehtësi ekstreme dhe të digjet.
5. Pllakë PCB, bluzë, tela, saldim, koha juaj, ndoshta disa aftësi për korrigjim.
Lërini përbërësit e telit së bashku të ndjekin skemën e mësipërme.
Pastaj, hidhini një sy detyrës në lakun e konfigurimit. Simplyshtë thjesht një detyrë e kryer një herë dhe përfundon me një komandë gjumi.
void setup () {Serial.begin (115200); Serial.println ("Nyja fillestare e quajtur" + String (SENSORNAME)); setup_wifi (); vonesë (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.filloj (); nëse (! tsl.begin ()) {Serial.print ("TSL2561 nuk u gjet"); ndërsa (1); } vonesë (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (e vërtetë); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); vonesë (100); sensor_event_t event; tsl.getEvent (& ngjarje); nëse (ngjarja.ndritja) lux = ngjarja. drita; tjetër Serial.println ("Mbingarkesa e sensorit");
h = SHT21.getHumidity ();
t = SHT21.getTemperatura (); tempSensor.setWaitForConversion (false); tempSensor.filloj (); vonesë (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 nuk gjendet në pin %d / n", ds18b20); Serial.flush (); vonesa (1000); } vonesë (100); tempSensor.requestTemperaturat (); t18 = tempSensor.getTempCByIndex (0); Serial.printf ("\ nDrita: %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", këtu); vonesë (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (kthim në telefon); rilidheni (); vonesë (100); ESP.deepSleep (3e8); // 300 milion mikro sekonda, 300 sekonda, 5 minuta; }
Gjatë korrigjimit ose konfigurimit, urdhëroni ESP.deepsleep () që të lexoni vazhdimisht Serial. Si gjithmonë, kodi i plotë për t'u ngarkuar në ESP8266 ruhet këtu (GitHub).
Mos harroni të vendosni kërcyesin midis RST dhe D0/GPIO16 për të shkaktuar zgjimin pas një periudhe gjumi të thellë.
Tani, koha për të ngarkuar kodin duke përdorur Arduino IDE në ESP8266.
Hapi 2: MQTT: një medium fleksibël për të publikuar dhe regjistruar të dhëna
Së pari, më pëlqen të përdor MQTT për të dërguar dhe marrë të dhëna në sensorë dhe klientë të ndryshëm në shtëpinë time. Kjo ndodh sepse fleksibiliteti për të dërguar të dhëna të pakufizuara të kategorizuara sipas një teme, dhe klientë të pakufizuar për t'u abonuar në një temë nga një ndërmjetës MQTT. Së dyti, unë nuk jam i kualifikuar për të diskutuar MQTT në thellësi. Unë u njoha me MQTT ndonjëherë vitin e kaluar (2017) kur ndiqja mësimet për të ngritur një stacion moti dhe sensorë duke përdorur Node-RED. Gjithsesi, do të përpiqem të bëj çmos për t'ju paraqitur disa informacione. Një vend tjetër i mirë për të filluar është Wikipedia.
Nëse nuk keni kohë për të lexuar në lidhje me teorinë dhe dëshironi të krijoni një ndërmjetës MQTT, unë postova një tutorial tjetër vetëm për ta bërë këtë. Shikoni këtë postim dhe shkoni poshtë në Hapin 4.
Për të shpjeguar se çfarë është Mesazhi i Radhitjes së Telemetrisë (MQTT) në kuptimin tim, unë përgatita një diagram si më sipër. Me pak fjalë, MQTT është një standard ISO, dhe një produkt i tillë mushkonja dhe klient-mushkonja, dy pako që kam përdorur për të ndërtuar ndërmjetësin MQTT në një Raspberry Pi, duhet të jenë në përputhje me atë standard. Ndërmjetësi MQTT bëhet pastaj një medium për botuesit që të shtyjnë një mesazh dhe pajtimtarët të dëgjojnë një temë të synuar.
Kombinimi i bibliotekës Arduino PubSubclient me ArduinoJson, falë krijuesit të saj knolleary dhe bblanchon, e bën më të lehtë për kallajxhinjtë dhe zhvilluesit për një sërë mjetesh nga sensorë tek pajisjet e synuara ose një klient përfundimtar.
Le të vazhdojmë me krijimin e bazës së të dhënave dhe shfaqjen e disa të dhënave.
Hapi 3: Ruani të dhënat në SQL dhe shfaqini ato në një server në internet
Kam përdorur sqlite3 për të krijuar një bazë të dhënash për serverin në internet. Instaloni sqlite3 në Rapberry Pi duke:
sudo apt-get install sqlite3
krijoi një bazë të dhënash dhe një tabelë duke shtypur në terminal:
sqlite3 weatherstation.db
KRIJONI TABELA të dhënat e motit (id INT KRYESORE FILLORE, DATETIME në kohë, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // për të dalë nga linja e komandës sqlite dhe për t'u kthyer në terminalin Linux
Për të dëgjuar një temë të botuar nga stacioni i motit, kam përdorur një bibliotekë Paho me Python:
#! /usr/bin/python3# miratuar nga: > # 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.
Recommended:
Stacioni i motit NaTaLia: Stacioni i motit Arduino me energji diellore Bëhet në rrugën e duhur: 8 hapa (me fotografi)
Stacioni i motit NaTaLia: Stacioni i motit me energji diellore Arduino Bëhet në rrugën e duhur: Pas 1 viti funksionimi të suksesshëm në 2 vende të ndryshme, unë po ndaj planet e mia të projektit të stacionit të motit me energji diellore dhe po shpjegoj se si evoluoi në një sistem i cili me të vërtetë mund të mbijetojë për një kohë të gjatë periudha nga energjia diellore. Nëse ndiqni
Sensori i lëvizjes ESP-01 me gjumë të thellë: 5 hapa
Sensori i lëvizjes ESP-01 Me gjumë të thellë: Unë kam punuar në krijimin e sensorëve të lëvizjes në shtëpi që dërgojnë një mesazh me email kur aktivizohet. Ka shumë shembuj udhëzues dhe shembuj të tjerë për ta bërë këtë. Kohët e fundit më duhej ta bëja këtë me një sensor lëvizjeje PIR të funksionuar me bateri dhe një ESP
Stacioni i motit DIY & Stacioni i sensorit WiFi: 7 hapa (me fotografi)
DIY Weather Station & WiFi Sensor Station: Në këtë projekt do t'ju tregoj se si të krijoni një stacion moti së bashku me një stacion sensor WiFi. Stacioni i sensorit mat të dhënat e temperaturës dhe lagështisë lokale dhe i dërgon ato, përmes WiFi, në stacionin e motit. Stacioni i motit më pas shfaq t
Kursimi i jetës së baterisë me gjumë të thellë: 20 hapa
Kursimi i jetës së baterisë me gjumë të thellë: A jeni i interesuar të përdorni një bateri me ESP32 tuaj? Nëse është kështu, unë do të diskutoj sot disa informacione të rëndësishme teknike në lidhje me këtë temë. Ne e dimë se ky mikrokontrollues shpenzon shumë energji kur transmeton informacion. Ajo konsumon
Stacioni i motit Acurite 5 në 1 duke përdorur një Raspberry Pi dhe Weewx (Stacionet e tjera të motit janë të pajtueshme): 5 hapa (me fotografi)
Stacioni i motit Acurite 5 në 1 Duke përdorur një Raspberry Pi dhe Weewx (Stacionet e tjera të motit janë të pajtueshme): Kur kisha blerë stacionin e motit Acurite 5 në 1 doja të isha në gjendje të kontrolloja motin në shtëpinë time ndërsa isha larg. Kur mbërrita në shtëpi dhe e vendosa, kuptova se ose duhej ta kisha ekranin të lidhur me një kompjuter ose të blija shpërndarësin e tyre të zgjuar,