Daftar Isi:

Stasiun Cuaca: ESP8266 Dengan Deep Sleep, SQL, Graphing by Flask&Plotly: 3 Langkah
Stasiun Cuaca: ESP8266 Dengan Deep Sleep, SQL, Graphing by Flask&Plotly: 3 Langkah

Video: Stasiun Cuaca: ESP8266 Dengan Deep Sleep, SQL, Graphing by Flask&Plotly: 3 Langkah

Video: Stasiun Cuaca: ESP8266 Dengan Deep Sleep, SQL, Graphing by Flask&Plotly: 3 Langkah
Video: Управляйте GPIO ESP32 и ESP8266 из любой точки мира 2024, Juli
Anonim
Stasiun Cuaca: ESP8266 Dengan Deep Sleep, SQL, Graphing oleh Flask&Plotly
Stasiun Cuaca: ESP8266 Dengan Deep Sleep, SQL, Graphing oleh Flask&Plotly

Apakah menyenangkan mengetahui suhu, kelembaban, atau intensitas cahaya di balkon Anda? Saya tahu saya akan melakukannya. Jadi saya membuat stasiun cuaca sederhana untuk mengumpulkan data tersebut. Bagian berikut adalah langkah-langkah yang saya ambil untuk membuatnya.

Mari kita mulai!

Langkah 1: Stasiun Cuaca Dengan Sensor Cahaya, Suhu, dan Kelembaban

Stasiun Cuaca Dengan Sensor Cahaya, Suhu dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu, dan Kelembaban
Stasiun Cuaca Dengan Sensor Cahaya, Suhu, dan Kelembaban

Ketika saya berencana membangun stasiun cuaca, saya bermimpi memiliki stasiun cuaca lengkap yang memiliki kecepatan angin, pengukuran hujan, sensor surya spektrum penuh, tetapi ternyata, itu tidak murah, dan biaya pembelian bisa berakhir naik minimal $100. Saya melepaskan opsi penuh dan mulai membuatnya dengan $10, kurang lebih. $10 adalah biaya komponen dasar stasiun cuaca sebagai bagian di bawah ini.

Berikut adalah bagian-bagiannya:

1. ESP8266 merek Wemos berharga $2.39 pcs di Aliexpress. Saya akan merekomendasikan merek Wemos karena EPS8266-nya lebih mudah diprogram, diperbarui, dan memiliki flash 4MB atau lebih.

2. Wemos Charger-Boost Shield berharga $1,39 pcs. Ini adalah manfaat lain untuk menggunakan merek ini. Ini memiliki papan boost-up untuk baterai Lithium (tegangan nominal = 3.7V) ke 5V untuk ESP8266. Papan juga dilengkapi dengan opsi pengisian daya dengan arus pengisian maksimum = 1M.

*Catatan: Ada opsi yang lebih murah untuk pengisian/peningkatan baterai Lithium. Yang ini berharga $ 1,77 untuk 5 pcs. Namun, ketika saya menggunakan papan ini untuk ESP8266 (baik Wemos atau ESP8266 telanjang), mode deep-sleep ESP8266 memicu reset tepat setelah membuat ESP8266 dalam lingkaran sleep-reset-sleep, yang sangat mengganggu. Jika Anda tahu apa yang terjadi, silakan inbox saya.

3. Wemos juga memiliki beberapa pelindung untuk suhu dan kelembaban tetapi saya akan membangun dari komponen individu. Fotoresistor (atau resistor bergantung cahaya -- ldr, murah), sensor luminositas seperti BH1780 atau TSL2561 (sekitar 0,87-0,89c pcs), sensor suhu seperti DS18B20 (masing-masing 75c), dan kombo kelembaban dan suhu seperti DHT22 ($2,35 di sini) atau SHT21 ($2,20 di sini). Total biaya untuk sensor ~$4.

4. Baterai litium. Saya menyelamatkan satu dari Baterai Canon 7.4V yang merupakan dua baterai seri 3.7V atau baterai Lithium 18650. Setiap 18650 berharga sekitar $5 masing-masing. Saya memiliki gambar yang menunjukkan pembongkaran baterai kamera. Namun hati-hati, hubungan arus pendek saat memotong penutup plastik dapat menghasilkan panas yang ekstrem, dan terbakar.

5. Papan PCB, jumper, kawat, solder, waktu Anda, mungkin beberapa keterampilan debugging.

Biarkan komponen kawat bersama-sama mengikuti skema di atas.

Kemudian, lihat tugas di loop pengaturan. Ini hanyalah tugas sekali jalan dan diakhiri dengan perintah tidur.

void setup() { Serial.begin(115200); Serial.println("Awal Node bernama " + String(SENSORNAME)); setup_wifi(); penundaan(100); Kawat.mulai(); pinMode(ldrPin, INPUT); SHT21.mulai(); if(!tsl.begin()) { Serial.print("TSL2561 tidak ditemukan"); sementara(1); } penundaan(100); ldr = analogRead(ldrPin); tsl.enableAutoRange(benar); tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); penundaan(100); sensor_event_t acara; tsl.getEvent(&acara); if (event.light) lux = event.light; else Serial.println("Sensor kelebihan beban");

h = SHT21.getHumidity();

t = SHT21.getSuhu(); tempSensor.setWaitForConversion(salah); tempSensor.begin(); penundaan(100); if (tempSensor.getDeviceCount() == 0) { Serial.printf("DS18x20 tidak ditemukan pada pin %d\n", ds18b20); Serial.flush(); penundaan (1000); } penundaan(100); tempSensor.requestTemperatures(); t18 = tempSensor.getTempCByIndex(0); Serial.printf("\nCahaya: %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", hik); penundaan(100); client.setServer(mqtt_server, mqtt_port); client.setCallback(panggilan balik); sambungkan kembali(); penundaan(100); ESP. Tidur nyenyak(3e8); // 300 juta mikro detik, 300 detik, 5 menit; }

Selama debugging atau pengaturan, perintahkan ESP.deepsleep() untuk memiliki pembacaan Serial secara terus-menerus. Seperti biasa, kode lengkap untuk diunggah ke ESP8266 di-host di sini (GitHub).

Ingatlah untuk memakai jumper antara RST dan D0/GPIO16 untuk memicu bangun setelah periode tidur nyenyak.

Sekarang, saatnya mengunggah kode menggunakan Arduino IDE ke ESP8266.

Langkah 2: MQTT: Media Fleksibel untuk Memublikasikan dan Berlangganan Data

MQTT: Media Fleksibel untuk Memublikasikan dan Berlangganan Data
MQTT: Media Fleksibel untuk Memublikasikan dan Berlangganan Data
MQTT: Media Fleksibel untuk Memublikasikan dan Berlangganan Data
MQTT: Media Fleksibel untuk Memublikasikan dan Berlangganan Data

Pertama, saya semakin suka menggunakan MQTT untuk mengirim dan menerima data di berbagai sensor dan klien di rumah saya. Itu karena fleksibilitas untuk mengirim data tak terbatas yang dikategorikan berdasarkan topik, dan klien tak terbatas untuk berlangganan satu topik dari broker MQTT. Kedua, saya tidak memenuhi syarat untuk membahas MQTT secara mendalam. Saya mengenal MQTT kadang-kadang tahun lalu (2017) ketika mengikuti tutorial untuk mengatur stasiun cuaca dan sensor menggunakan Node-RED. Bagaimanapun, saya akan mencoba yang terbaik untuk menyajikan kepada Anda beberapa info. Tempat lain yang bagus untuk memulai adalah Wikipedia.

Jika Anda tidak punya waktu untuk membaca tentang teorinya, dan ingin membuat broker MQTT, saya memposting tutorial lain hanya untuk melakukannya. Cari posting ini, dan gulir ke bawah ke Langkah 4.

Untuk menjelaskan apa itu Message Queuing Telemetry Transport (MQTT) menurut pemahaman saya, saya menyiapkan diagram seperti di atas. Singkatnya, MQTT adalah standar ISO, dan produk seperti mosquitto dan mosquitto-client, dua paket yang saya gunakan untuk membangun broker MQTT pada Raspberry Pi, harus memenuhi standar itu. Broker MQTT kemudian menjadi media bagi penerbit untuk memasukkan pesan ke dalam dan pelanggan untuk mendengarkan topik target.

Kombinasi perpustakaan Arduino PubSubclient dengan ArduinoJson, berkat penciptanya knolleary dan bblanchon, memudahkan para pembuat dan pengembang untuk seperangkat alat dari sensor ke peralatan target atau klien akhir.

Mari lanjutkan dengan membuat Database dan menampilkan beberapa data.

Langkah 3: Simpan Data ke SQL dan Tampilkan di Server Web

Simpan Data ke SQL dan Tampilkan di Server Web
Simpan Data ke SQL dan Tampilkan di Server Web
Simpan Data ke SQL dan Tampilkan di Server Web
Simpan Data ke SQL dan Tampilkan di Server Web

Saya menggunakan sqlite3 untuk membuat database untuk server web. Instal sqlite3 di Rapberry Pi dengan:

sudo apt-get install sqlite3

membuat database dan tabel dengan mengetik di terminal:

sqlite3 weatherstation.db

CREATE TABLE data cuaca (id INT PRIMARY KEY, waktu DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);

.exit //untuk keluar dari baris perintah sqlite dan kembali ke terminal Linux

Untuk mendengarkan topik yang diterbitkan oleh stasiun cuaca, saya menggunakan perpustakaan Paho dengan Python:

#! /usr/bin/python3# diadopsi dari: > # 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.

Direkomendasikan: