Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-23 15:12
Nakatutuwa bang malaman ang temperatura, halumigmig, o gaanong ilaw sa iyong balkonahe? Alam kong gagawin ko. Kaya gumawa ako ng isang simpleng istasyon ng panahon upang mangolekta ng nasabing data. Ang mga sumusunod na seksyon ay ang mga hakbang na kinuha ko upang makabuo ng isa.
Magsimula na tayo!
Hakbang 1: Station ng Panahon na May Mga Sensor ng Magaan, Temperatura at Humidity
Nang balak kong magtayo ng isang istasyon ng panahon, nangangarap akong magkaroon ng isang ganap na istasyon ng panahon na may bilis ng hangin, pagsukat ng ulan, full-spectrum solar sensor, ngunit naging hindi ito mura, at maaaring matapos ang gastos sa pagbili hanggang sa $ 100. Sinuko ko ang buong mga pagpipilian at nagsimulang bumuo ng isa na may $ 10, higit pa o mas kaunti. Ang $ 10 ay ang gastos ng mga pangunahing bahagi ng istasyon ng panahon tulad ng mga bahagi sa ibaba.
Narito ang mga bahagi:
1. Ang tatak ng ESP8266 Wemos ay nagkakahalaga ng $ 2.39 mga pcs sa Aliexpress. Inirerekumenda ko ang tatak ng Wemos dahil ang EPS8266 nito ay mas madaling i-program, i-update, at magkaroon ng 4MB flash o higit pa.
2. Ang Wemos Charger-Boost Shield ay nagkakahalaga ng $ 1.39 pcs. Ito ay isa pang pakinabang upang magamit ang tatak na ito. Mayroon itong isang boost-up board para sa baterya ng Lithium (nominal boltahe = 3.7V) sa isang 5V para sa ESP8266. Ang board ay may kasamang pagpipilian sa pagsingil na may isang kasalukuyang pagsingil ng maximum = 1M.
* Tandaan: Mayroong isang mas murang opsyon para sa pag-charge / pagpapalakas ng baterya ng Lithium. Ang isang ito ay nagkakahalaga ng $ 1.77 para sa 5pcs. Gayunpaman, nang ginamit ko ang board na ito para sa ESP8266 (alinman sa Wemos's o isang hubad na ESP8266), ang mode ng deep-sleep ng ESP8266 ay nagpalitaw ng isang pag-reset pagkatapos na gawin ang ESP8266 sa isang loop ng sleep-reset-sleep, na kung saan ay nakakainis. Kung alam mo kung anong nangyayari, mangyaring inbox ako.
3. Ang Wemos ay mayroon ding maraming mga kalasag para sa temperatura at halumigmig ngunit magtatayo ako mula sa mga indibidwal na sangkap. Photoresistor (o light-dependant resistor - ldr, mura), isang sensor ng luminosity tulad ng BH1780 o TSL2561 (mga 0.87-0.89c pcs), isang sensor ng temperatura tulad ng DS18B20 (75c bawat isa), at isang combo ng temperatura at temperatura tulad ng DHT22 ($ 2.35 dito) o SHT21 ($ 2.20 dito). Isang kabuuang gastos para sa sensor ~ $ 4.
4. Baterya ng lithium. Iniligtas ko ang isa mula sa isang 7.4V Canon Battery na kung saan ay dalawang 3.7V na baterya sa serye o 18650 na baterya ng Lithium. Ang bawat 18650 ay nagkakahalaga ng halos $ 5 bawat piraso. Mayroon akong isang larawan ipakita ang luha-down ang camera baterya pack. Gayunpaman, mag-ingat, ang maikling pag-ikot kapag pinutol ang takip na plastik ay maaaring makabuo ng matinding init, at masunog.
5. PCB board, jumper, wire, paghihinang, iyong oras, marahil ilang mga kasanayan sa pag-debug.
Hayaan ang mga bahagi ng kawad na magkakasunod na sumusunod sa eskematiko sa itaas.
Pagkatapos, tingnan ang gawain sa loop ng pag-setup. Ito ay simpleng isang-run ng mga gawain at nagtatapos sa pamamagitan ng isang utos sa pagtulog.
void setup () {Serial.begin (115200); Serial.println ("Simula sa Node na pinangalanang" + String (SENSORNAME)); setup_wifi (); pagkaantala (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); kung (! tsl.begin ()) {Serial.print ("hindi nahanap ang TSL2561"); habang (1); } pagkaantala (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (totoo); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); pagkaantala (100); kaganapan ng sensors_event_t; tsl.getEvent (& kaganapan); kung (event.light) lux = event.light; kung hindi man Serial.println ("Sensor overload");
h = SHT21.getHumidity ();
t = SHT21.getTemperature (); tempSensor.setWaitForConversion (false); tempSensor.begin (); pagkaantala (100); kung (tempSensor.getDeviceCount () == 0) {Serial.printf ("DS18x20 hindi natagpuan sa pin% d / n", ds18b20); Serial.flush (); pagkaantala (1000); } pagkaantala (100); tempSensor.requestTemperature (); 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); pagkaantala (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (callback); ikonekta muli (); pagkaantala (100); ESP.deepS Sleep (3e8); // 300 milyong micro segundo, 300 segundo, 5 minuto; }
Sa panahon ng pag-debug o pag-set up, utusan ang ESP.deeps Sleep () upang patuloy na magpatuloy sa pagbasa ng Serial. Tulad ng dati, ang buong code upang mai-upload sa ESP8266 ay naka-host dito (GitHub).
Tandaan na ilagay sa jumper sa pagitan ng RST at D0 / GPIO16 para sa pag-agaw ng paggising pagkatapos ng isang panahon ng mahimbing na pagtulog.
Ngayon, oras upang mai-upload ang code gamit ang Arduino IDE sa ESP8266.
Hakbang 2: MQTT: isang Flexible Medium upang Mag-publish at Mag-subscribe ng Data
Una, nasisiyahan ako sa paggamit ng MQTT upang magpadala at makatanggap ng data sa iba't ibang mga sensor at kliyente sa aking tahanan. Iyon ay dahil ang kakayahang umangkop upang magpadala ng walang limitasyong data na ikinategorya ng isang paksa, at walang limitasyong mga kliyente upang mag-subscribe sa isang paksa mula sa isang MQTT broker. Pangalawa, hindi ako kwalipikadong talakayin nang malalim ang MQTT. Nalaman ko ang MQTT minsan noong nakaraang taon (2017) kapag sumusunod sa mga tutorial upang mag-set up ng isang istasyon ng panahon at mga sensor gamit ang Node-RED. Gayunpaman, susubukan ko ang aking makakaya upang maipakita sa iyo ang ilang impormasyon. Ang isa pang magandang lugar upang magsimula ay ang Wikipedia.
Kung wala kang oras upang mabasa ang tungkol sa teorya, at nais na mag-set up ng isang MQTT broker, nag-post ako ng isa pang tutorial upang magawa ito. Hanapin ang post na ito, at mag-scroll pababa sa Hakbang 4.
Upang maipaliwanag kung ano ang Mensahe ng Queue Telemetry Transport (MQTT) sa aking pag-unawa, naghanda ako ng isang diagram tulad ng nasa itaas. Sa madaling sabi, ang MQTT ay isang pamantayang ISO, at isang produkto tulad ng mosquitto at mosquitto-client, dalawang pakete na ginamit ko ang pagbuo ng MQTT broker sa isang Raspberry Pi, kailangang sumunod sa pamantayang iyon. Ang MQTT broker pagkatapos ay naging isang medium para sa mga publisher upang itulak ang isang mensahe sa at mga tagasuskribi upang makinig sa isang target na paksa.
Ang kumbinasyon ng Arduino PubSubclient library na may ArduinoJson, salamat sa tagalikha nito na knolleary at bblanchon, ay ginagawang madali para sa mga tinker at developer para sa isang hanay ng mga tool mula sa mga sensor hanggang sa isang target na kagamitan o isang end client.
Hayaang magpatuloy sa paglikha ng Database at ipakita ang ilang data.
Hakbang 3: I-save ang Data sa SQL at Ipakita ang mga Ito sa isang Web Server
Gumamit ako ng sqlite3 upang lumikha ng isang database para sa web server. I-install ang sqlite3 sa Rapberry Pi sa pamamagitan ng:
sudo apt-get install sqlite3
lumikha ng isang database at isang talahanayan sa pamamagitan ng pagta-type sa terminal:
sqlite3 weatherstation.db
GUMAWA NG TABLE weatherdata (id INT PRIMARY KEY, thetime DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);
.exit // upang lumabas sa linya ng utos ng sqlite at bumalik sa terminal ng Linux
Upang makinig sa isang paksang inilathala ng istasyon ng panahon, gumamit ako ng isang Paho library na may Python:
#! / usr / bin / python3 # pinagtibay mula sa: > # 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.
Inirerekumendang:
Istasyon ng Panahon na Tinulungan ng Satellite: 5 Mga Hakbang
Istasyon ng Panahon ng Katulong na Satellite: Ang proyektong ito ay inilaan para sa mga taong nais mangolekta ng kanilang sariling data sa panahon. Masusukat nito ang bilis at direksyon ng hangin, temperatura at halumigmig ng hangin. May kakayahan din itong makinig sa mga satellite ng panahon na umiikot sa Earth minsan sa bawat 100 minuto. Gusto ko
Istasyon ng Panahon Sa Arduino: 14 Mga Hakbang
Weather Station Sa Arduino: Pagbuo ng isang istasyon ng panahon gamit ang Arduino
ESP-01 Motion Sensor Na May Malalim na Pagtulog: 5 Hakbang
ESP-01 Motion Sensor With Deep Sleep: Nagtatrabaho ako sa paggawa ng mga homemade motion sensor na nagpapadala ng isang mensahe sa email kapag na-trigger. Maraming mga halimbawa ng itinuturo at iba pang mga halimbawa ng paggawa nito. Kamakailan ko kailangan itong gawin sa isang baterya na pinatatakbo ng PIR motion sensor at isang ESP
Isang Istasyon ng Panahon ng Panahon ng Home ng ESP-Ngayon: 9 Mga Hakbang (na may Mga Larawan)
Isang Station ng Panahon ng Panahon ng Home ng ESP-Ngayon: Nais kong magkaroon ng isang istasyon ng panahon sa bahay nang medyo matagal at isa na madaling suriin ng lahat sa pamilya para sa temperatura at halumigmig. Bilang karagdagan upang subaybayan ang mga kondisyon sa labas nais kong subaybayan ang mga tukoy na silid sa bahay bilang wel
Pag-save ng Buhay ng Baterya Sa Malalim na Pagtulog: 20 Hakbang
Sine-save ang Buhay ng Baterya Sa Malalim na Pagtulog: Interesado ka bang gumamit ng baterya sa iyong ESP32? Kung gayon, tatalakayin ko ngayon ang ilang mahahalagang impormasyong panteknikal patungkol sa paksang ito. Alam namin na ang microcontroller na ito ay gumastos ng maraming enerhiya kapag nagpapadala ito ng impormasyon. Naubos nito