Სარჩევი:

ამინდის სადგური: ESP8266 ღრმა ძილით, SQL, გრაფიკული შეფუთვა და ნაკვეთი: 3 ნაბიჯი
ამინდის სადგური: ESP8266 ღრმა ძილით, SQL, გრაფიკული შეფუთვა და ნაკვეთი: 3 ნაბიჯი

ვიდეო: ამინდის სადგური: ESP8266 ღრმა ძილით, SQL, გრაფიკული შეფუთვა და ნაკვეთი: 3 ნაბიჯი

ვიდეო: ამინდის სადგური: ESP8266 ღრმა ძილით, SQL, გრაფიკული შეფუთვა და ნაკვეთი: 3 ნაბიჯი
ვიდეო: ESP8266 WiFi Weather Forecast 2024, ივლისი
Anonim
ამინდის სადგური: ESP8266 ღრმა ძილით, SQL, გრაფიკული შეფუთვა და ნაკვეთი
ამინდის სადგური: ESP8266 ღრმა ძილით, SQL, გრაფიკული შეფუთვა და ნაკვეთი

იქნება სახალისო იცოდეთ ტემპერატურა, ტენიანობა ან სინათლის ინტენსივობა თქვენს აივანზე? ვიცი რომ გავაკეთებ. ასე რომ, მე გავაკეთე მარტივი ამინდის სადგური ასეთი მონაცემების შესაგროვებლად. შემდეგი სექციები არის ის ნაბიჯები, რაც მე გადავდგი ერთის ასაშენებლად.

Დავიწყოთ!

ნაბიჯი 1: ამინდის სადგური სინათლის, ტემპერატურისა და ტენიანობის სენსორებით

ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით
ამინდის სადგური სინათლის, ტემპერატურის და ტენიანობის სენსორებით

როდესაც მე ვგეგმავდი ამინდის სადგურის აშენებას, მე ვოცნებობდი მქონოდა სრულფასოვანი ამინდის სადგური, რომელსაც აქვს ქარის სიჩქარე, წვიმის გაზომვა, მზის სენსორის სრული სპექტრი, მაგრამ აღმოჩნდა, რომ ეს არ იქნება იაფი და შესყიდვის ღირებულება შეიძლება დასრულდეს მინიმუმ 100 დოლარამდე. მე უარი ვთქვი სრულ ვარიანტებზე და დავიწყე მისი შექმნა 10 დოლარით, მეტ -ნაკლებად. $ 10 არის ამინდის სადგურის ძირითადი კომპონენტების ღირებულება, როგორც ქვემოთ მოყვანილი ნაწილები.

აქ არის ნაწილები:

1. ESP8266 Wemos ბრენდი ღირს $ 2.39 ცალი ალიექსპრესზე. მე ვურჩევ Wemos ბრენდს, რადგან მისი EPS8266 უფრო ადვილია პროგრამირება, განახლება და აქვს 4 მბ ფლეშ ან მეტი.

2. Wemos Charger-Boost Shield ღირს $ 1.39 ცალი. ეს არის კიდევ ერთი სარგებელი ამ ბრენდის გამოყენებისთვის. მას აქვს გამაძლიერებელი დაფა ლითიუმის ბატარეისთვის (ნომინალური ძაბვა = 3.7V) 5V– მდე 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.4V Canon ბატარეიდან, რომელიც არის სერიის ორი 3.7V ბატარეა ან 18650 ლითიუმის ბატარეა. თითოეული 18650 ღირს დაახლოებით $ 5 თითო. მე მაქვს სურათი, რომელიც აჩვენებს კამერის ბატარეის პაკეტის დანგრევას. ფრთხილად იყავით, პლასტიკური საფარის გაჭრისას მოკლე ჩართვამ შეიძლება გამოიწვიოს უკიდურესი სითბო და დაწვა.

5. PCB დაფა, ჯუმპერი, მავთული, შედუღება, თქვენი დრო, შესაძლოა გამართვის ზოგიერთი უნარი.

მოდით მავთულის კომპონენტები მიჰყვეს ზემოთ სქემატურს.

შემდეგ, მოძებნეთ დავალება კონფიგურაციის მარყუჟში. ეს უბრალოდ ამოცანების ერთჯერადია და სრულდება ძილის ბრძანებით.

void setup () {Serial.begin (115200); Serial.println ("დაწყებული კვანძი სახელწოდებით" + სიმებიანი (SENSORNAME)); setup_wifi (); დაგვიანება (100); Wire.begin (); pinMode (ldrPin, INPUT); SHT21. დასაწყისი (); 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 = event.light; სხვაგან 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 ნაბიჯზე.

იმის გასაგებად, თუ რა არის მესეტური რიგის ტელემეტრიული ტრანსპორტი (MQTT) ჩემი გაგებით, მე მოვამზადე დიაგრამა, როგორც ზემოთ. მოკლედ რომ ვთქვათ, MQTT არის ISO სტანდარტი და პროდუქტი, როგორიცაა კოღო და კოღო-კლიენტი, ორი პაკეტი, რომელიც მე გამოვიყენე Raspberry Pi– ზე MQTT ბროკერის შესაქმნელად, უნდა შეესაბამებოდეს ამ სტანდარტს. MQTT ბროკერი შემდეგ ხდება გამომცემლებისთვის, რომ გააგზავნონ შეტყობინება და აბონენტები მოუსმინონ სამიზნე თემას.

Arduino PubSubclient ბიბლიოთეკის კომბინაცია ArduinoJson– სთან ერთად, მისი შემქმნელისა და ბლანქონის წყალობით, დამთმობი და დეველოპერებს უადვილებს სენსორებიდან დაწყებული მოწყობილობამდე ან საბოლოო კლიენტამდე ხელსაწყოების ნაკრებებს.

მოდით გავაგრძელოთ მონაცემთა ბაზის შექმნა და აჩვენოთ გარკვეული მონაცემები.

ნაბიჯი 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);

. გასვლა // რათა გამოხვიდეთ sqlite ბრძანების სტრიქონიდან და დაუბრუნდეთ Linux ტერმინალს

ამინდის სადგურის მიერ გამოქვეყნებული თემის მოსასმენად, მე გამოვიყენე პაჰოს ბიბლიოთეკა პითონთან ერთად:

#! /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.

გირჩევთ: