Мазмұны:

Ауа райы станциясы: ESP8266 терең ұйқы режимінде, SQL, колба бойынша графиктік және графикалық: 3 қадам
Ауа райы станциясы: ESP8266 терең ұйқы режимінде, SQL, колба бойынша графиктік және графикалық: 3 қадам

Бейне: Ауа райы станциясы: ESP8266 терең ұйқы режимінде, SQL, колба бойынша графиктік және графикалық: 3 қадам

Бейне: Ауа райы станциясы: ESP8266 терең ұйқы режимінде, SQL, колба бойынша графиктік және графикалық: 3 қадам
Бейне: WiFi ESP8266 Weather Station Forecast Clock 2024, Желтоқсан
Anonim
Ауа райы станциясы: ESP8266 терең ұйқыда, SQL, колба бойынша графикалық және плотлы
Ауа райы станциясы: ESP8266 терең ұйқыда, SQL, колба бойынша графикалық және плотлы

Балкондағы температураны, ылғалдылықты немесе жарық қарқындылығын білу қызықты болар ма еді? Мен білер едім. Мен осындай деректерді жинау үшін қарапайым метеорологиялық станция жасадым. Келесі бөлімдер - мен оны жасау үшін жасаған қадамдар.

Бастайық!

1 -қадам: Жарық, температура мен ылғалдылық сенсорлары бар метеостанция

Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
Жарық, температура мен ылғалдылық сенсорлары бар метеостанция

Мен метеостанция салуды жоспарлаған кезде мен желдің жылдамдығы, жаңбырды өлшейтін, толық спектрлі күн датчигі бар толыққанды метеостанцияға ие болуды армандадым, бірақ бұл арзан емес еді, ал сатып алу құны аяқталуы мүмкін. кем дегенде 100 доллар. Мен толық нұсқалардан бас тарттым және 10 доллардан көп немесе аз құра бастадым. 10 доллар - метеостанцияның негізгі компоненттерінің бағасы төмендегі бөліктер.

Міне, бөліктер:

1. ESP8266 Wemos бренді Aliexpress -те 2,39 доллар тұрады. Мен Wemos брендін ұсынар едім, себебі оның EPS8266 бағдарламалауға, жаңартуға және 4 МБ флэш немесе одан да көпке оңай.

2. Wemos Charger-Boost Shield бағасы $ 1.39 дана. Бұл брендті қолданудың тағы бір артықшылығы. Онда литий батареясының күшейткіш тақтасы бар (номиналды кернеу = 3,7В) ESP8266 үшін 5В дейін. Сондай -ақ, тақтада зарядтаудың максималды тогы = 1М болатын опция бар.

*Ескертпе: литий батареясын зарядтау/жоғарылатудың арзан нұсқасы бар. Бұл 5 дана үшін 1,77 доллар тұрады. Алайда, мен бұл тақтаны ESP8266 (Wemos немесе жалаң ESP8266) үшін қолданған кезде, ESP8266 терең ұйқы режимі ESP8266 ұйқы режимін қалпына келтіру-ұйқы циклінде жасағаннан кейін бірден қалпына келтіруді тудырды, бұл өте тітіркендіргіш. Егер сіз не болып жатқанын білсеңіз, маған хат жазыңыз.

3. Wemos -та температура мен ылғалдылыққа арналған бірнеше қалқандар бар, бірақ мен оларды жеке компоненттерден жасайтын боламын. Фоторезистор (немесе жарыққа тәуелді резистор-ldr, арзан), BH1780 немесе TSL2561 сияқты жарықтылық сенсоры (шамамен 0,87-0,89c дана), DS18B20 сияқты температура датчигі (әрқайсысы 75c), ылғалдылық пен температура комбинациясы DHT22 (мұнда $ 2.35) немесе SHT21 (мұнда $ 2.20). Сенсордың жалпы құны ~ 4 доллар.

4. Литий батареясы. Мен 7.4V Canon батареясынан құтқардым, ол екі 3.7V сериялы батареядан немесе 18650 литий батареясынан. Әр 18650 -дің әрқайсысы шамамен $ 5 тұрады. Менде камераның аккумуляторлық жинағын көрсететін сурет бар. Сақ болыңыз, пластикалық қақпақты кесу кезінде қысқа тұйықталу қатты қызуды тудыруы мүмкін.

5. ПХД тақтасы, секіргіш, сым, дәнекерлеу, сіздің уақытыңыз, мүмкін отладка жасау дағдылары.

Сымның компоненттерін бірге жоғарыдағы схемаға сәйкес келтірейік.

Содан кейін, орнату цикліндегі тапсырманы іздеңіз. Бұл тек бір реттік тапсырмалар және ұйқы командасымен аяқталады.

void setup () {Serial.begin (115200); Serial.println («Бастапқы түйін» + Жол (SENSORNAME) деп аталады); setup_wifi (); кешіктіру (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21.begin (); if (! tsl.begin ()) {Serial.print («TSL2561 табылмады»); кезінде (1); } кешіктіру (100); ldr = analogRead (ldrPin); tsl.enableAutoRange (шын); tsl.setIntegrationTime (TSL2561_INTEGRATIONTIME_13MS); кешіктіру (100); sensors_event_t оқиғасы; tsl.getEvent (& оқиға); if (event.light) lux = оқиға.жарық; else Serial.println («Сенсордың шамадан тыс жүктелуі»);

h = SHT21.getHumidity ();

t = SHT21.getTemperature (); tempSensor.setWaitForConversion (жалған); tempSensor.begin (); кешіктіру (100); if (tempSensor.getDeviceCount () == 0) {Serial.printf («DS18x20 %d / n түйінде табылмады», ds18b20); Serial.flush (); кешіктіру (1000); } кешіктіру (100); tempSensor.requestTemperatures (); 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», с); Serial.printf («HIC: %0.2f / t», hic); кешіктіру (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (кері шақыру); қайта қосу (); кешіктіру (100); ESP.deepSleep (3e8); // 300 миллион микро секунд, 300 секунд, 5 минут; }

Жөндеу немесе реттеу кезінде, ESP.deepsleep () жүйелі түрде оқуды үздіксіз жүргізуге бұйрық беріңіз. Әдеттегідей, ESP8266 -ге жүктеудің толық коды осында орналасқан (GitHub).

Ұйықтау кезеңінен кейін ояту үшін RST және D0/GPIO16 арасындағы секіргішті киюді ұмытпаңыз.

Енді Arduino IDE көмегімен ESP8266 кодын жүктеу уақыты келді.

2 -қадам: MQTT: деректерді жариялауға және жазылуға икемді орта

MQTT: деректерді жариялауға және жазылуға икемді орта
MQTT: деректерді жариялауға және жазылуға икемді орта
MQTT: деректерді жариялауға және жазылуға икемді орта
MQTT: деректерді жариялауға және жазылуға икемді орта

Біріншіден, мен MQTT -ді үйдегі әр түрлі сенсорлар мен клиенттер бойынша деректерді жіберу және алу үшін қолдануды ұнатамын. Бұл тақырып бойынша санатталған шектеусіз деректерді жіберу икемділігі және клиенттерге MQTT брокерінен бір тақырыпқа жазылу мүмкіндігі. Екіншіден, мен MQTT-ті терең талқылауға құқығым жоқ. Мен MQTT-ті кейде былтыр (2017 ж.) Node-RED көмегімен ауа райы станциясы мен сенсорларды орнату бойынша оқулықтардан кейін білдім. Қалай болғанда да, мен сізге кейбір ақпаратты ұсынуға тырысамын. Бастаудың тағы бір жақсы жері - Википедия.

Егер сізде теория туралы оқуға уақыт болмаса және MQTT брокерін орнатқыңыз келсе, мен мұны істеу үшін басқа оқулықты жарияладым. Бұл жазбаны іздеңіз және төмен қарай 4 -қадамға өтіңіз.

Түсініктеме бойынша Телеметриялық Транспорт (MQTT) Хабарлама дегеніміз не екенін түсіндіру үшін мен жоғарыдағыдай диаграмма дайындадым. Қысқаша айтқанда, MQTT-бұл ISO стандарты, және мен Raspberry Pi-де MQTT брокерін құрған екі пакет-москит пен москит-клиент өнімі осы стандартқа сәйкес келуі керек. Содан кейін MQTT брокері баспагерлерге хабарды жіберуге және жазылушыларға мақсатты тақырыпты тыңдауға мүмкіндік беретін құралға айналады.

Arduino PubSubclient кітапханасының ArduinoJson -пен үйлесімі, оны жасаушы knolleary және bblanchon арқасында, сенсорлардан мақсатты жабдыққа немесе соңғы клиентке дейінгі құралдар жиынтығын дайындаушылар мен әзірлеушілерге жеңілдетеді.

Мәліметтер қорын құруды жалғастырайық және кейбір деректерді көрсетейік.

3 -қадам: деректерді SQL -ге сақтаңыз және оларды веб -серверде көрсетіңіз

Деректерді SQL -ге сақтаңыз және оларды веб -серверде көрсетіңіз
Деректерді SQL -ге сақтаңыз және оларды веб -серверде көрсетіңіз
Деректерді SQL -ге сақтаңыз және оларды веб -серверде көрсетіңіз
Деректерді SQL -ге сақтаңыз және оларды веб -серверде көрсетіңіз

Мен веб -сервер үшін мәліметтер қорын құру үшін sqlite3 қолдандым. Sqlite3 бағдарламасын Rapberry Pi -ге мына жолмен орнатыңыз:

sudo apt-get sqlite3 орнатыңыз

терминалға енгізу арқылы мәліметтер базасы мен кестені құрды:

sqlite3 ауа райы станциясы.db

Кесте ауа райы деректерін жасаңыз (id INT PRIMARY KEY, DATETIME уақыты, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);

.exit // sqlite пәрмен жолынан шығып, Linux терминалына қайту үшін

Метеостанция жариялаған тақырыпты тыңдау үшін мен Python көмегімен Пахо кітапханасын қолдандым:

#! /usr/bin/python3# қабылданды: > # 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.

Ұсынылған: