Բովանդակություն:

Եղանակային կայան ՝ ESP8266 Deep Sleep, SQL, Graphing by Flask & Plotly: 3 Steps
Եղանակային կայան ՝ ESP8266 Deep Sleep, SQL, Graphing by Flask & Plotly: 3 Steps

Video: Եղանակային կայան ՝ ESP8266 Deep Sleep, SQL, Graphing by Flask & Plotly: 3 Steps

Video: Եղանակային կայան ՝ ESP8266 Deep Sleep, SQL, Graphing by Flask & Plotly: 3 Steps
Video: Esp8266 NodeMCU Ağdan Düşme Sorunlarına Çözümler 2024, Նոյեմբեր
Anonim
Եղանակային կայան. ESP8266 Deep Sleep, SQL, Graphing by Flask & Plotly
Եղանակային կայան. ESP8266 Deep Sleep, SQL, Graphing by Flask & Plotly

Funվարճալի՞ կլինի իմանալ ձեր պատշգամբի ջերմաստիճանը, խոնավությունը կամ լույսի ուժգնությունը: Ես գիտեմ, որ կանեի: Այսպիսով, ես ստեղծեցի մի պարզ եղանակային կայան `նման տվյալներ հավաքելու համար: Հետևյալ բաժիններն այն քայլերն են, որոնք ես ձեռնարկել եմ մեկը կառուցելու համար:

Եկեք սկսենք!

Քայլ 1. Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով

Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով
Եղանակային կայան ՝ լույսի, ջերմաստիճանի և խոնավության տվիչներով

Երբ ես պլանավորում էի օդերևութաբանական կայան կառուցել, ես երազում էի ունենալ լիարժեք եղանակային կայան, որն ունի քամու արագություն, անձրևի չափում, արևի ամբողջական սենսոր, բայց պարզվեց, որ դա էժան չէր լինի, և գնման արժեքը կարող էր ավարտվել: առնվազն 100 դոլարով: Ես հրաժարվեցի լիարժեք տարբերակներից և սկսեցի կառուցել մեկը $ 10 -ով, քիչ թե շատ: $ 10 -ը եղանակային կայանի հիմնական բաղադրիչների արժեքն է, ինչպես ստորև ներկայացված մասերը:

Ահա հատվածները.

1. ESP8266 Wemos ապրանքանիշը Aliexpress- ում արժե 2,39 դոլար: Ես խորհուրդ կտայի Wemos ապրանքանիշը, քանի որ նրա EPS8266- ն ավելի հեշտ է ծրագրավորել, թարմացնել և ունենալ 4 ՄԲ ֆլեշ կամ ավելի:

2. Wemos Charger-Boost Shield- ի արժեքը 1.39 դոլար է: Սա այս ապրանքանիշից օգտվելու ևս մեկ առավելություն է: Այն ունի լիթիումի մարտկոցի հզորացման տախտակ (անվանական լարումը = 3.7 Վ) մինչև 5 Վ ESP8266- ի համար: Տախտակը նաև ունի լիցքավորման տարբերակ `առավելագույն լիցքավորման հոսանք = 1 Մ:

*Նշում. Լիթիումի մարտկոցի լիցքավորման/լիցքավորման ավելի էժան տարբերակ կա: Այս մեկն արժե 1,77 դոլար 5 հատի համար: Այնուամենայնիվ, երբ ես օգտագործում էի այս տախտակը 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.4 Վ Canon մարտկոցից, որը երկու շարքով 3.7 Վ մարտկոց է կամ 18650 Լիթիումի մարտկոց: Յուրաքանչյուր 18650 -ի արժեքը կազմում է մոտ 5 դոլար: Ես ունեմ մի նկար, որը ցույց է տալիս տեսախցիկի մարտկոցի տուփը քանդելը: Thoughգույշ եղեք, սակայն, կարճ միացումը պլաստիկ ծածկը կտրելիս կարող է առաջացնել ծայրահեղ ջերմություն և այրվել:

5. PCB տախտակ, jumper, մետաղալար, զոդում, ձեր ժամանակը, գուցե կարգաբերման որոշ հմտություններ:

Թող մետաղալարերի բաղադրիչները միասին հետևեն վերը նշված սխեմային:

Այնուհետեւ, առաջադրանքը փնտրեք կարգաբերման օղակում: Դա պարզապես առաջադրանքների մեկ կատարում է և ավարտվում է քնի հրամանով:

void setup () {Serial.begin (115200); Serial.println («Մեկնարկային հանգույց անունով» + Լար (SENSORNAME)); setup_wifi (); ուշացում (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21. սկսել (); եթե (! 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 = event.light; 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 ("\ n Լույս: %d lux / t", լյուքս); 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:

Իմ հասկացությամբ, թե որն է Message Queuing Telemetry Transport (MQTT) - ը, ես պատրաստեցի վերևի դիագրամ: Մի խոսքով, MQTT- ն ISO ստանդարտ է, և այնպիսի արտադրանք, ինչպիսին են մոծակները և մոծակները, երկու փաթեթ, որոնք ես օգտագործել եմ, ստեղծում եմ MQTT բրոքեր Raspberry Pi- ի վրա, պետք է համապատասխանեն այդ ստանդարտին: MQTT բրոքերն այնուհետև դառնում է հրատարակիչների համար հաղորդագրություն մղելու և բաժանորդների համար `նպատակային թեման լսելու համար:

Arduino PubSubclient գրադարանի և ArduinoJson- ի գրադարանի համադրությունը, իր ստեղծող knolleary- ի և bblanchon- ի շնորհիվ, ավելի հեշտ է դարձնում հնարամիտների և մշակողների համար սենսորներից մինչև թիրախային սարքավորում կամ վերջնական հաճախորդ գործիքների հավաքածու:

Եկեք շարունակենք ստեղծել տվյալների շտեմարան և ցուցադրենք որոշ տվյալներ:

Քայլ 3. Պահպանեք տվյալները SQL- ում և ցուցադրեք դրանք վեբ սերվերի վրա

Պահպանեք տվյալները SQL- ում և ցուցադրեք դրանք վեբ սերվերի վրա
Պահպանեք տվյալները SQL- ում և ցուցադրեք դրանք վեբ սերվերի վրա
Պահպանեք տվյալները SQL- ում և ցուցադրեք դրանք վեբ սերվերի վրա
Պահպանեք տվյալները SQL- ում և ցուցադրեք դրանք վեբ սերվերի վրա

Ես օգտագործել եմ sqlite3 ՝ վեբ սերվերի համար տվյալների բազա ստեղծելու համար: Տեղադրեք sqlite3- ը Rapberry Pi- ում ՝

sudo apt-get տեղադրել sqlite3

տերմինալ մուտքագրելով ՝ ստեղծեց տվյալների բազա և աղյուսակ.

sqlite3 weatherstation.db

Ստեղծել աղյուսակ եղանակային տվյալներ (id INT PRIMARY KEY, the time 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.

Խորհուրդ ենք տալիս: