فهرست مطالب:

ایستگاه هواشناسی: ESP8266 با خواب عمیق ، SQL ، رسم نمودار توسط فلاسک و طرح کلی: 3 مرحله
ایستگاه هواشناسی: ESP8266 با خواب عمیق ، SQL ، رسم نمودار توسط فلاسک و طرح کلی: 3 مرحله

تصویری: ایستگاه هواشناسی: ESP8266 با خواب عمیق ، SQL ، رسم نمودار توسط فلاسک و طرح کلی: 3 مرحله

تصویری: ایستگاه هواشناسی: ESP8266 با خواب عمیق ، SQL ، رسم نمودار توسط فلاسک و طرح کلی: 3 مرحله
تصویری: آموزش ساخت ایستگاه هواشناسی آنلاین|| دماسنج آنلاین 2024, جولای
Anonim
ایستگاه هواشناسی: ESP8266 با خواب عمیق ، SQL ، نمودار توسط Flask & Plotly
ایستگاه هواشناسی: ESP8266 با خواب عمیق ، SQL ، نمودار توسط Flask & Plotly

آیا دانستن دما ، رطوبت یا شدت نور در بالکن شما جالب خواهد بود؟ می دانم که می خواهم. بنابراین من یک ایستگاه هواشناسی ساده برای جمع آوری چنین داده هایی ساختم. بخشهای زیر مراحلی است که من برای ساخت آن انجام دادم.

بیایید شروع کنیم!

مرحله 1: ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت

ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت
ایستگاه هواشناسی با سنسورهای نور ، دما و رطوبت

وقتی قصد داشتم یک ایستگاه هواشناسی بسازم ، در خواب بودم که یک ایستگاه آب و هوایی کامل داشته باشم که دارای سرعت باد ، اندازه گیری باران ، سنسور خورشیدی با طیف کامل باشد ، اما معلوم شد که ارزان نخواهد بود و هزینه خرید می تواند پایان یابد. حداقل 100 دلار من گزینه های کامل را کنار گذاشتم و شروع به ساخت یکی از آنها با 10 دلار کردم ، بیشتر یا کمتر. 10 دلار هزینه اجزای اصلی ایستگاه هواشناسی به عنوان قطعات زیر است.

در اینجا قسمت ها آمده است:

1. نام تجاری ESP8266 Wemos 2.39 دلار در Aliexpress هزینه دارد. من نام تجاری Wemos را توصیه می کنم زیرا برنامه نویسی ، به روز رسانی و فلش 4 مگابایت یا بیشتر EPS8266 آن آسان تر است.

2. Wemos Charger-Boost Shield هزینه 1.39 دلار دارد. این مزیت دیگری برای استفاده از این مارک است. دارای یک برد تقویت کننده برای باتری لیتیوم (ولتاژ نامی = 3.7V) تا 5V برای ESP8266. این برد همچنین دارای گزینه شارژ با حداکثر جریان شارژ = 1M است.

*توجه: گزینه ارزان تری برای شارژ/افزایش باتری لیتیوم وجود دارد. قیمت این دستگاه برای 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.4 ولت که دو باتری سری 3.7 ولت یا باتری لیتیوم 18650 است ، نجات دادم. قیمت هر عدد 18650 حدود 5 دلار است. من تصویری دارم که بسته باتری دوربین را خراب می کند. اما مراقب باشید ، اتصال کوتاه هنگام برش روی پوشش پلاستیکی می تواند گرمای شدید ایجاد کند و بسوزد.

5. برد PCB ، بلوز ، سیم ، لحیم کاری ، زمان شما ، شاید برخی از مهارت های اشکال زدایی.

اجازه دهید اجزای سیم با هم شماتیک بالا را دنبال کنند.

سپس ، در حلقه راه اندازی به دنبال کار باشید. این فقط یک کار تک کاره است و با فرمان خواب به پایان می رسد.

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 = event.light؛ else Serial.println ("اضافه بار سنسور")؛

h = SHT21.getHumidity ()؛

t = SHT21.getTemperature ()؛ tempSensor.setWaitForConversion (false) ؛ 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" ، 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 به طور عمیق بحث کنم. من سال گذشته (2017) هنگام آموزش آموزش راه اندازی ایستگاه هواشناسی و سنسورها با استفاده از Node-RED ، MQTT را می شناسم. به هر حال ، من تمام تلاش خود را می کنم تا اطلاعاتی را به شما ارائه دهم. یکی دیگر از مکان های خوب برای شروع ویکی پدیا است.

اگر وقت ندارید در مورد نظریه بخوانید و می خواهید یک کارگزار MQTT راه اندازی کنید ، من یک آموزش دیگر برای این کار ارسال کردم. این پست را نگاه کنید و به مرحله 4 بروید.

برای توضیح این که Message Queuing Telemetry Transport (MQTT) در درک من چیست ، نمودار بالا را آماده کردم. به طور خلاصه ، MQTT یک استاندارد ISO است ، و محصولی مانند پشه و مشتری پشه ، دو بسته ای که من برای ساخت کارگزار MQTT در Raspberry Pi استفاده کردم ، باید با آن استاندارد مطابقت داشته باشد. سپس کارگزار MQTT به رسانه ای برای ناشران تبدیل می شود تا پیام را به داخل منتقل کنند و مشترکان به موضوعی مورد نظر گوش دهند.

ترکیب کتابخانه Arduino PubSubclient با ArduinoJson ، به لطف knolleary و bblanchon ، برای مجموعه سازان ابزار از حسگرها تا تجهیزات هدف یا مشتری نهایی ، کارگران سازنده و توسعه دهندگان را آسان تر می کند.

اجازه دهید با ایجاد Database پیش برویم و برخی از داده ها را نمایش دهیم.

مرحله 3: ذخیره داده ها در SQL و نمایش آنها در سرور وب

ذخیره داده ها در SQL و نمایش آنها بر روی سرور وب
ذخیره داده ها در SQL و نمایش آنها بر روی سرور وب
ذخیره داده ها در SQL و نمایش آنها بر روی سرور وب
ذخیره داده ها در SQL و نمایش آنها بر روی سرور وب

من از sqlite3 برای ایجاد پایگاه داده برای سرور وب استفاده کردم. sqlite3 را در Rapberry Pi نصب کنید:

sudo apt-get sqlite3 را نصب کنید

با تایپ کردن در ترمینال یک پایگاه داده و یک جدول ایجاد کنید:

sqlite3 weatherstation.db

ایجاد جدول اطلاعات هوایی (id INT PRIMARY KEY ، thetime DATETIME ، ldr INT ، tls2561 INT ، ds18b20 REAL ، tsht21 REAL ، hsht21 REAL) ؛

.exit // برای خروج از خط فرمان sqlite و بازگشت به ترمینال لینوکس

برای گوش دادن به موضوعی که توسط ایستگاه هواشناسی منتشر شده است ، از یک کتابخانه پاهو با پایتون استفاده کردم:

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

توصیه شده: