جدول المحتويات:
- الخطوة 1: محطة الطقس مع مستشعرات الضوء ودرجة الحرارة والرطوبة
- الخطوة 2: MQTT: وسيط مرن لنشر البيانات والاشتراك فيها
- الخطوة 3: حفظ البيانات في SQL وعرضها على خادم ويب
فيديو: محطة الطقس: ESP8266 مع النوم العميق ، SQL ، الرسم البياني بواسطة Flask & Plotly: 3 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-02-02 14:32
هل سيكون من الممتع معرفة درجة الحرارة أو الرطوبة أو شدة الضوء على شرفتك؟ أعلم أنني سأفعل. لذلك أنشأت محطة أرصاد جوية بسيطة لجمع مثل هذه البيانات. الأقسام التالية هي الخطوات التي اتخذتها لبناء واحد.
هيا بنا نبدأ!
الخطوة 1: محطة الطقس مع مستشعرات الضوء ودرجة الحرارة والرطوبة
عندما خططت لبناء محطة أرصاد جوية ، كنت أحلم بأن يكون لدي محطة أرصاد جوية كاملة لديها سرعة الرياح ، وقياس المطر ، ومستشعر شمسي كامل الطيف ، ولكن تبين أن ذلك لن يكون رخيصًا ، وقد تنتهي تكلفة الشراء ما لا يقل عن 100 دولار. لقد تخليت عن الخيارات الكاملة وبدأت في بناء واحدة بمبلغ 10 دولارات ، أو أكثر أو أقل. 10 دولارات هي تكلفة المكونات الأساسية لمحطة الطقس كما هو موضح أدناه.
ها هي الأجزاء:
1. تكاليف العلامة التجارية Wemos ESP8266 $ 2.39 على Aliexpress. أوصي بعلامة Wemos التجارية لأن EPS8266 أسهل في البرمجة والتحديث ولديه فلاش 4 ميجا بايت أو أكثر.
2. تكلفة Wemos Charger-Boost Shield تبلغ 1.39 دولارًا أمريكيًا. هذه فائدة أخرى لاستخدام هذه العلامة التجارية. يحتوي على لوحة تعزيز لبطارية الليثيوم (الجهد الاسمي = 3.7 فولت) إلى 5 فولت لـ ESP8266. تأتي اللوحة أيضًا مع خيار الشحن بحد أقصى شحن = 1M.
* ملاحظة: يوجد خيار أرخص لشحن / زيادة بطارية الليثيوم. هذا واحد يكلف 1.77 دولار مقابل محفظة 5pcs. ومع ذلك ، عندما استخدمت هذه اللوحة لـ ESP8266 (إما Wemos أو ESP8266 العاري) ، أدى وضع السكون العميق لـ ESP8266 إلى إعادة الضبط مباشرة بعد جعل ESP8266 في حلقة من النوم-إعادة تعيين-النوم ، وهو أمر مزعج للغاية. إذا كنت تعرف ما كان يحدث ، من فضلك أرسل لي بريداً إلكترونياً.
3. يحتوي Wemos أيضًا على العديد من الدروع للحرارة والرطوبة ولكنني سأقوم بالبناء من مكونات فردية. المقاوم الضوئي (أو المقاوم المعتمد على الضوء - ldr ، رخيص) ، مستشعر الإضاءة مثل BH1780 أو TSL2561 (حوالي 0.87-0.89c قطعة) ، مستشعر درجة الحرارة مثل DS18B20 (75 درجة مئوية لكل منهما) ، ومجموعة رطوبة ودرجة حرارة مثل DHT22 (2.35 دولارًا هنا) أو SHT21 (2.20 دولارًا هنا). التكلفة الإجمالية لجهاز الاستشعار ~ 4 دولارات.
4. بطارية الليثيوم. لقد أنقذت واحدة من بطارية كانون 7.4 فولت وهي بطاريتان 3.7 فولت في سلسلة أو بطارية ليثيوم 18650. كل 18650 يكلف حوالي 5 دولارات للقطعة الواحدة. لدي صورة تظهر تمزيق حزمة بطارية الكاميرا. كن حذرًا ، فالتقصير عند قطع الغطاء البلاستيكي يمكن أن يولد حرارة شديدة ويحترق.
5. مجلس ثنائي الفينيل متعدد الكلور ، العبور ، الأسلاك ، لحام ، وقتك ، ربما بعض مهارات التصحيح.
دع مكونات الأسلاك معًا تتبع التخطيطي أعلاه.
بعد ذلك ، ابحث عن المهمة في حلقة الإعداد. إنها ببساطة عملية تشغيل واحدة من المهام وتنتهي بأمر السكون.
إعداد باطل () {Serial.begin (115200) ؛ Serial.println ("بدء العقدة المسماة" + سلسلة (SENSORNAME)) ؛ setup_wifi () ، تأخير (100) ؛ Wire.begin () ؛ pinMode (ldrPin ، الإدخال) ؛ 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 (& event) ؛ if (event.light) lux = event.light ؛ آخر Serial.println ("الاستشعار الزائد") ؛
ح = SHT21.getHumidity () ؛
ر = 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 Light:٪ 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"، h) ؛ 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 ، ويجب أن يتوافق منتج مثل عميل البعوض والبعوض ، وهما حزمتان استخدمتهما لبناء وسيط MQTT على Raspberry Pi ، مع هذا المعيار. يصبح وسيط MQTT وسيطًا للناشرين لدفع رسالة إلى والمشتركين للاستماع إلى موضوع مستهدف.
إن الجمع بين مكتبة Arduino PubSubclient مع ArduinoJson ، بفضل منشئها knolleary و bblanchon ، يسهل على المصلحين والمطورين مجموعة من الأدوات من المستشعرات إلى المعدات المستهدفة أو العميل النهائي.
دعنا ننتقل إلى إنشاء قاعدة بيانات وعرض بعض البيانات.
الخطوة 3: حفظ البيانات في SQL وعرضها على خادم ويب
لقد استخدمت sqlite3 لإنشاء قاعدة بيانات لخادم الويب. قم بتثبيت sqlite3 في Rapberry Pi عن طريق:
sudo apt-get install sqlite3
إنشاء قاعدة بيانات وجدول عن طريق الكتابة في المحطة:
sqlite3 weatherstation.db
إنشاء جدول بيانات الطقس (id INT PRIMARY KEY، thetime DATETIME، ldr INT، tls2561 INT، ds18b20 REAL، tsht21 REAL، hsht21 REAL) ؛
.exit // للخروج من سطر أوامر sqlite والعودة إلى محطة Linux
للاستماع إلى موضوع نشرته محطة الطقس ، استخدمت مكتبة Paho مع 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.
موصى به:
الرسم البياني لشريط الترانزستور LED: 4 خطوات
الرسم البياني لشريط ترانزستور LED: يوضح هذا المقال طريقة فريدة ومثيرة للجدل لإنشاء عرض رسم بياني شريطي LED. تحتاج هذه الدائرة إلى إشارة تيار متردد عالية السعة. يمكنك محاولة توصيل مضخم صوت من الفئة D تم تصميم هذه الدائرة ونشرها منذ سنوات عديدة بناءً على
رسم الرسم البياني في الوقت الفعلي على Android من Arduino من خلال HC-05: 3 خطوات
رسم رسم بياني في الوقت الفعلي على Android من Arduino من خلال HC-05: مرحبًا ، إليك برنامج تعليمي لكيفية رسم رسم بياني للقيم في الوقت الفعلي من وحدة تحكم دقيقة مثل Arduino إلى التطبيق. يستخدم وحدة Bluetooth مثل HC-05 للعمل كجهاز مراسلة لنقل واستقبال البيانات بين Ar
جهاز استشعار الحركة ESP-01 مع النوم العميق: 5 خطوات
مستشعر الحركة ESP-01 مع النوم العميق: لقد كنت أعمل على صنع مستشعرات حركة محلية الصنع ترسل رسالة بريد إلكتروني عند تشغيلها. هناك العديد من الأمثلة على التعليمات وأمثلة أخرى للقيام بذلك. احتجت مؤخرًا إلى القيام بذلك باستخدام مستشعر حركة PIR يعمل بالبطارية و ESP
مؤشر البيتكوين مع الرسم البياني: 8 خطوات
Bitcoin Ticker With Graph: لقد صنعت هذا بناءً على مشروع لمؤشر أسعار BTC ، والذي يحصل على معلومات الأسعار من coinmarketcap.com الذي كتبه في الأصل Brian Lough. استخدم ESP8266 ، وهي لوحة متوافقة مع Arduino تأتي مع WiFi مدمج. كما يصف
كيفية صنع مقياس درجة حرارة مخصص DIY باستخدام الرسم البياني الشريطي و Atmega328p: 3 خطوات (بالصور)
كيفية صنع مقياس درجة حرارة مخصص DIY باستخدام رسم بياني شريطي و Atmega328p: في هذا المنشور سأوضح لك كيفية عمل مقياس درجة الحرارة باستخدام Bar Graph & amp؛ Atmega328p. سيتضمن المنشور جميع التفاصيل مثل مخطط الدائرة وتصنيع ثنائي الفينيل متعدد الكلور والترميز والتجميع والتجميع. اختبارات. لقد قمت أيضًا بتضمين مقطع فيديو يحتوي على جميع