Мазмұны:
- 1 -қадам: Жарық, температура мен ылғалдылық сенсорлары бар метеостанция
- 2 -қадам: MQTT: деректерді жариялауға және жазылуға икемді орта
- 3 -қадам: деректерді SQL -ге сақтаңыз және оларды веб -серверде көрсетіңіз
Бейне: Ауа райы станциясы: ESP8266 терең ұйқы режимінде, SQL, колба бойынша графиктік және графикалық: 3 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Балкондағы температураны, ылғалдылықты немесе жарық қарқындылығын білу қызықты болар ма еді? Мен білер едім. Мен осындай деректерді жинау үшін қарапайым метеорологиялық станция жасадым. Келесі бөлімдер - мен оны жасау үшін жасаған қадамдар.
Бастайық!
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-ті кейде былтыр (2017 ж.) Node-RED көмегімен ауа райы станциясы мен сенсорларды орнату бойынша оқулықтардан кейін білдім. Қалай болғанда да, мен сізге кейбір ақпаратты ұсынуға тырысамын. Бастаудың тағы бір жақсы жері - Википедия.
Егер сізде теория туралы оқуға уақыт болмаса және MQTT брокерін орнатқыңыз келсе, мен мұны істеу үшін басқа оқулықты жарияладым. Бұл жазбаны іздеңіз және төмен қарай 4 -қадамға өтіңіз.
Түсініктеме бойынша Телеметриялық Транспорт (MQTT) Хабарлама дегеніміз не екенін түсіндіру үшін мен жоғарыдағыдай диаграмма дайындадым. Қысқаша айтқанда, MQTT-бұл ISO стандарты, және мен Raspberry Pi-де MQTT брокерін құрған екі пакет-москит пен москит-клиент өнімі осы стандартқа сәйкес келуі керек. Содан кейін MQTT брокері баспагерлерге хабарды жіберуге және жазылушыларға мақсатты тақырыпты тыңдауға мүмкіндік беретін құралға айналады.
Arduino PubSubclient кітапханасының ArduinoJson -пен үйлесімі, оны жасаушы knolleary және bblanchon арқасында, сенсорлардан мақсатты жабдыққа немесе соңғы клиентке дейінгі құралдар жиынтығын дайындаушылар мен әзірлеушілерге жеңілдетеді.
Мәліметтер қорын құруды жалғастырайық және кейбір деректерді көрсетейік.
3 -қадам: деректерді 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.
Ұсынылған:
DIY ауа райы станциясы мен WiFi сенсорлық станциясы: 7 қадам (суреттермен)
DIY ауа райы станциясы мен WiFi сенсорлық станциясы: Бұл жобада мен сізге WiFi сенсор станциясымен бірге ауа райы станциясын қалай жасау керектігін көрсетемін. Сенсорлық станция жергілікті температура мен ылғалдылық деректерін өлшейді және WiFi арқылы метеостанцияға жібереді. Содан кейін метеостанция мыналарды көрсетеді
Wemos D1 Mini, BME280 және Sensate қолданатын ауа райы станциясы: 6 қадам
Wemos D1 Mini, BME280 және Sensate қолданатын метеорологиялық станция. Алдыңғы жазбаларда мен метеостанцияны құрудың әр түрлі әдістерімен бөліскенмін. Егер сіз оны тексермеген болсаңыз, сілтеме - бұл нұсқаулықта мен Wemos пен Sensate деп аталатын IoT платформасын қолдана отырып, қарапайым метеостанцияны қалай құруға болатынын көрсетемін
Графикалық ауа райы станциясы: 7 қадам (суреттермен)
Графикалық ауа райы станциясы: Сіз әрқашан графикалық ауа райы станциясын алғыңыз келе ме? Және дәл сенсорлармен? Мүмкін бұл жоба сіз үшін бірдеңе шығар. Бұл метеостанцияның көмегімен сіз ауа райының «не істеп жатқанын» көре аласыз. Мысалы, температура көтерілуі немесе төмендеуі мүмкін. Н -ден
RPi және ESP8266 бар IoT ауа райы станциясы: 10 қадам
RPi мен ESP8266 бар IoT ауа райы станциясы: Алдыңғы оқулықтарда біз NodeMCU, сенсорлармен ойнадық және ThingSpeak (Интернеттегі заттар (IoT) платформасында деректерді бұлтта жинауға және сақтауға мүмкіндік беретін) деректерді алуды және тіркеуді үйрендік. және IoT қосымшаларын жасаңыз): IOT
Ауа райы шамы - Ауа райы мен температура бір қарағанда: 8 қадам
Ауа райы шамы - Ауа райы мен температура бір қарағанда: Бұл сиқырлы шамды қолдана отырып, сіз ағымдағы температура мен жағдайды бірден біле аласыз