תוכן עניינים:

תחנת מזג אוויר: ESP8266 עם שינה עמוקה, SQL, גרפים לפי בקבוק ובעצם: 3 שלבים
תחנת מזג אוויר: ESP8266 עם שינה עמוקה, SQL, גרפים לפי בקבוק ובעצם: 3 שלבים

וִידֵאוֹ: תחנת מזג אוויר: ESP8266 עם שינה עמוקה, SQL, גרפים לפי בקבוק ובעצם: 3 שלבים

וִידֵאוֹ: תחנת מזג אוויר: ESP8266 עם שינה עמוקה, SQL, גרפים לפי בקבוק ובעצם: 3 שלבים
וִידֵאוֹ: Weather Station with ESP8266-WiFi 2024, יולי
Anonim
תחנת מזג אוויר: ESP8266 עם שינה עמוקה, SQL, גרפים לפי בקבוק ובעצם
תחנת מזג אוויר: ESP8266 עם שינה עמוקה, SQL, גרפים לפי בקבוק ובעצם

האם יהיה כיף לדעת את הטמפרטורה, הלחות או עוצמת האור במרפסת שלך? אני יודע שהייתי עושה זאת. אז יצרתי תחנת מזג אוויר פשוטה לאיסוף נתונים כאלה. הסעיפים הבאים הם השלבים שלקחתי לבניית אחד.

בואו נתחיל!

שלב 1: תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות

תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות
תחנת מזג אוויר עם חיישני אור, טמפרטורה ולחות

כשתכננתי לבנות תחנת מזג אוויר, חלמתי שתהיה לי תחנת מזג אוויר מלאה שיש לה מהירות רוח, מדידת גשם, חיישן סולארי ספקטרום מלא, אבל התברר שזה לא יהיה זול ועלות הרכישה עלולה להסתיים עד 100 $ לפחות. ויתרתי על האפשרויות המלאות והתחלתי לבנות אחת עם 10 $, פחות או יותר. $ 10 הוא עלות הרכיבים הבסיסיים של תחנת מזג האוויר כחלקים למטה.

להלן החלקים:

1. מותג ESP8266 Wemos עולה 2.39 $ יח 'על Aliexpress. אני ממליץ על המותג Wemos מכיוון ש- EPS8266 שלו קל יותר לתכנת, לעדכן ולהחזיק פלאש בנפח 4MB או יותר.

2. Wemos Charger-Boost Shield עולה 1.39 $ יח '. זהו יתרון נוסף לשימוש במותג זה. יש לו לוח הגברה לסוללת ליתיום (מתח נומינלי = 3.7V) ל -5V עבור ESP8266. הלוח מגיע גם עם אפשרות טעינה עם זרם טעינה מרבי = 1M.

*הערה: ישנה אפשרות זולה יותר לטעינת/הגברת סוללת ליתיום. זה עולה 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 שהיא שתי סוללות 3.7V בסדרה או סוללת ליתיום 18650. כל 18650 עולה כ -5 $ ליחידה. יש לי תמונה שמציגה את קרע הסוללה של המצלמה. עם זאת, היזהר, קצר בעת חיתוך מכסה הפלסטיק עלול ליצור חום קיצוני ושריפה.

5. לוח PCB, מגשר, חוט, הלחמה, הזמן שלך, אולי כמה כישורי איתור באגים.

תן רכיבי חוט ביחד בהתאם לסכימה לעיל.

לאחר מכן, חפש את המשימה בלולאת ההתקנה. זה פשוט מבצע אחד של משימות ומסתיים בפקודת שינה.

הגדרת חלל () {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 (& event); אם (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 ("\ 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", h); Serial.printf ("HIC: %0.2f / t", hic); עיכוב (100); client.setServer (mqtt_server, mqtt_port); client.setCallback (callback); התחבר מחדש (); עיכוב (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, ומוצר כגון יתוש ולקוח יתוש, שתי חבילות שהשתמשתי בהן לבנות מתווך 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

צור נתוני מזג אוויר בלוח (מזהה ראשוני INT INT, DATETIME, ldr INT, tls2561 INT, ds18b20 REAL, tsht21 REAL, hsht21 REAL);

.exit // כדי לצאת משורת הפקודה 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.

מוּמלָץ: