فهرست مطالب:
- مرحله 1: سخت افزار مورد نیاز است
- مرحله 2: اتصالات سخت افزاری
- مرحله 3: کد برنامه ریزی وظایف
- مرحله 4: کد برای خواندن مقادیر دما و رطوبت
- مرحله 5: کد میزبانی وب سرور
- مرحله 6: کد ارسال داده ها به Thing Speak
- مرحله 7: کد کلی
تصویری: برنامه آب و هوا با استفاده از Esp8266: 7 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
SHT 31 یک سنسور دما و رطوبت است که توسط Sensirion ساخته شده است. SHT31 دارای دقت بالایی در حدود 2 R RH است. محدوده رطوبت آن بین 0 تا 100 range و محدوده دما بین -40 تا 125 درجه سانتی گراد است. بسیار مطمئن و سریع با 8 ثانیه زمان پاسخگویی سنسور. عملکرد آن شامل پردازش سیگنال پیشرفته و سازگاری با I2C است. این سیستم دارای حالت های مختلفی است که باعث صرفه جویی در مصرف انرژی می شود.
در این آموزش ، ما SHT 31 را با برد Adafruit Huzzah وصل کرده ایم. برای خواندن مقادیر دما و رطوبت از سپر ESP8266 I2C استفاده کرده ایم. این آداپتور تمام پین ها را در دسترس کاربر قرار می دهد و محیط کاربرپسند I2C را ارائه می دهد.
مرحله 1: سخت افزار مورد نیاز است
سخت افزار مورد استفاده برای تکمیل این کار:
1. SHT31
2. Adafruit Huzzah ESP8266
3. آداپتور ESP8266 I2C
4. کابل I2C
مرحله 2: اتصالات سخت افزاری
این مرحله شامل راهنمای اتصال سخت افزاری است. این بخش اساساً اتصالات سیم کشی مورد نیاز بین سنسور و ESP8266 را توضیح می دهد. اتصالات به شرح زیر است.
- SHT31 از طریق I2C کار می کند. تصویر بالا ارتباط بین ماژول ESP8266 و SHT31 را نشان می دهد. ما از کابل I2C برای آن استفاده می کنیم یا می توانیم از سیم های بلوز 4 F تا F استفاده کنیم.
- یک سیم برای Vcc ، سیم دوم برای GND و دو سیم دیگر به ترتیب برای SDA و SCL استفاده می شود.
- مطابق آداپتور I2C پین 2 و پین 14 یک برد ESP8266 به ترتیب به عنوان SDA و SCL استفاده می شود
مرحله 3: کد برنامه ریزی وظایف
در این آموزش ، ما سه عمل را انجام می دهیم
- داده های SHT11 را با استفاده از پروتکل I2C بخوانید
- میزبانی وب سرور و ارسال سنسور خوانده شده به صفحه وب
- قرائت سنسور را در ThingSpeak API ارسال کنید
برای دستیابی به این هدف از کتابخانه TaskScheduler استفاده می کنیم. ما سه کار مختلف را با اشاره به سه عملیات مختلف کنترل برنامه ریزی کرده ایم. این به صورت زیر انجام می شود
- وظیفه 1 برای خواندن مقدار سنسور است که این کار 1 ثانیه اجرا می شود تا زمانی که به 10 ثانیه برسد.
- وقتی Task1 به مهلت خود رسید ، وظیفه 2 فعال و Task1 غیرفعال است.
- در این تماس به AP متصل می شویم ، دو متغیر بولی برای جابجایی بین STA و AP در نظر گرفته شده است
- در وظیفه 2 ما میزبان یک وب سرور با شماره 192.168.1.4 هستیم. این کار هر 5 ثانیه اجرا می شود تا زمانی که به 50 ثانیه برسد
- وقتی Task 2 به پایان رسید Task 3 فعال است و Task2 غیرفعال است.
- در این تماس تلفنی به STA (IP محلی) متصل می شویم
- در وظیفه 3 ما خواندن سنسور را برای ابر ThingSpeak API ارسال می کنیم
- وظیفه 3 هر پنج ثانیه اجرا می شود تا زمان پایان آن یعنی 50 ثانیه برسد
- هنگامی که Task3 به مهلت خود می رسد Task 1 دوباره فعال می شود و Task3 غیرفعال می شود.
- هنگامی که هیچ تماس تلفنی فراخوانی نمی شود یا دستگاه بیکار است به Light Sleep می رود در نتیجه در مصرف برق صرفه جویی می شود.
زمانبندی ts؛
// وظایف برای i2c ، میزبانی وب سرور و ارسال در thingspeak
Task tI2C (1 * TASK_SECOND ، TASK_FOREVER ، & taskI2CCallback ، & ts ، false ، NULL ، و taskI2CD غیر فعال) ؛ Task tAP (5*TASK_SECOND ، TASK_FOREVER ، & taskAPCallback ، & ts، false ، NULL ، & taskAPDisable) ؛ Task tWiFi (5* TASK_SECOND ، TASK_FOREVER ، & taskWiFiCallback ، & ts، false ، NULL ، و taskWiFiDisable) ؛ // زمان انجام وظایف tI2C.setTimeout (10 * TASK_SECOND) ؛ tAP.setTimeout (50 * TASK_SECOND) ؛ tWiFi.setTimeout (50 * TASK_SECOND) ؛ // فعال کردن I2C task tI2C.enable ()؛
مرحله 4: کد برای خواندن مقادیر دما و رطوبت
ما از کتابخانه Wire.h برای خواندن مقادیر دما و رطوبت استفاده می کنیم. این کتابخانه ارتباط i2c بین سنسور و دستگاه اصلی را تسهیل می کند. 0x44 آدرس I2C برای SHT31 است.
SHT31 در حالت های مختلف عمل می کند. برای این منظور می توانید به برگه داده مراجعه کنید.
ما از 0x2C و 0x06 به ترتیب به عنوان MSB و LSB برای عملیات تک شات استفاده می کنیم.
// I2C task callback void taskI2CCallback ()
{Serial.println ("taskI2CStarted") ؛ ریشه int بدون علامت [6]؛ // شروع انتقال از 0x44 ؛ Wire.beginTransmission (Addr)؛ // برای انتقال یک شات با تکرارپذیری بالا از 0x2C (MSB) و 0x06 (LSB) Wire.write (0x2C) استفاده می کنیم. Wire.write (0x06) ؛ // پایان انتقال Wire.endTransmission ()؛ // درخواست بایت از 0x44 Wire.beginTransmission (Addr) ؛ Wire.endTransmission ()؛ سیم. درخواست از (Addr، 6)؛ if (Wire.available () == 6) {// داده [0] و داده [1] حاوی 16 بیت دما است. root [0] = Wire.read ()؛ root [1] = Wire.read ()؛ // داده [2] شامل 8 بیت ریشه CRC است [2] = Wire.read ()؛ // داده [3] و داده [4] حاوی 16 بیت ریشه رطوبت است [3] = Wire.read ()؛ root [4] = Wire.read ()؛ // داده [5] شامل ریشه CRC 8 بیتی [5] = Wire.read ()؛ } int temp = (ریشه [0] * 256) + ریشه [1] ؛ // MSB را با 8 بیت تغییر دهید LSB float cTemp = -45.0 + (175.0 * temp /65535.0) ؛ float fTemp = (cTemp * 1.8) + 32.0 ؛ // MSB را با 8 بیت تغییر دهید LSB را به آن اضافه کنید تا با وضوح کامل و * 100 برای درصد رطوبت شناور = (100.0 * ((ریشه [3] * 256.0) + ریشه [4])) /65535.0 ؛
tempC = cTemp؛
tempF = fTemp؛ مرطوب = رطوبت ؛ Serial.print ("دما در C: / t") ؛ Serial.println (رشته (cTemp ، 1)) ؛ Serial.print ("دما در F: / t") ؛ Serial.println (رشته (fTemp ، 1)) ؛ Serial.print ("رطوبت: / t")؛ Serial.println (رشته (رطوبت ، 1)) ؛ }
مرحله 5: کد میزبانی وب سرور
ما میزبان یک وب سرور از دستگاه خود بر روی IP ثابت هستیم.
- از کتابخانه ESP8266WebServer برای میزبانی وب سرور استفاده می شود
- ابتدا باید آدرس IP ، Gateway و subnet mask را برای ایجاد IP ثابت خود اعلام کنیم
- حالا ssid و رمز عبور را برای Access Point خود اعلام کنید.
- از هر دستگاه STA به نقطه دسترسی متصل شوید
- میزبان سرور روی پورت 80 که یک پورت پیش فرض برای پروتکل ارتباطات اینترنتی است ، پروتکل انتقال ابرمتن (HTTP)
- برای معرفی وب سایت 192.168.1.4 را در مرورگر وب خود و 192.168.1.4/ ارزش صفحه را برای خواندن سنسور وارد کنید
// static Ip برای AP
آدرس IP ap_local_IP (192 ، 168 ، 1 ، 4) ؛
IPAddress ap_gateway (192 ، 168 ، 1 ، 254) ؛
IPAddress ap_subnet (255 ، 255 ، 255 ، 0) ؛ // ssid و AP برای WiFi محلی در حالت STA
const char WiFissid = "*********"؛
const char WiFipass = "*********"؛
// ssid و pass for AP
const char APssid = "********"؛
const char APpass = "********"؛
سرور ESP8266WebServer (80) ؛
void setup {
server.on ("/" ، onHandleDataRoot) ؛
server.on ("/Value" ، onHandleDataFeed) ؛
server.onNotFound (onHandleNotFound) ؛
}
void taskAPCallback () {
Serial.println ("taskAP شروع شد") ؛
server.handleClient ()؛
}
void onHandleDataRoot () {server.send (200 ، "text/html" ، PAGE1) ؛ }
void onHandleDataFeed () {
server.send (200 ، "text/html" ، PAGE2) ؛ }
void onHandleNotFound () {
پیام رشته = "فایل پیدا نشد / n / n"؛
message += "URI:"؛
پیام += server.uri ()؛
پیام += "\ n روش:"؛
پیام += (server.method () == HTTP_GET)؟ "GET": "POST"؛
پیام += "\ n استدلال:"؛
پیام += server.args ()؛
پیام += "\ n"؛
server.send (404 ، "text/plain"، message)؛}
void reconnectAPWiFi () {
WiFi.mode (WIFI_AP_STA) ؛
تأخیر (100) ؛
WiFi.disconnect ()؛
وضعیت بولی = WiFi.softAPConfig (ap_local_IP ، ap_gateway ، ap_subnet) ؛
if (status == true) {
Serial.print ("تنظیم نرم افزار AP …") ؛
boolean ap = WiFi.softAP (APssid، APpass) ؛
if (ap == true) {
Serial.print ("متصل به: / t")؛
// IPAddress myIP = WiFi.softAPIP ()؛
Serial.println (WiFi.softAPIP ()) ؛
}
server.begin ()؛
}
}
مرحله 6: کد ارسال داده ها به Thing Speak
در اینجا ما قرائت سنسور را در Thing Speak ارسال می کنیم. برای انجام این کار مراحل زیر لازم است-
- حساب خود را در thing talk ایجاد کنید
- کانال ها و زمینه هایی برای ذخیره داده های حسگر خود ایجاد کنید
- ما می توانیم داده ها را از ESP به thingSpeak بدست آوریم و برعکس با استفاده از درخواست های GET و POST به API.
- ما می توانیم داده های خود را به شرح زیر در ThingSpeak ارسال کنیم
void taskWiFiCallback () {
WiFiClient wifiClient ؛ if (wifiClient.connect (hostId، 80)) {String postStr = apiKey؛ postStr += "& field1 ="؛ postStr += رشته (مرطوب) ؛ postStr += "& field2 ="؛ postStr += رشته (tempC)؛ postStr += "& field3 ="؛ postStr += رشته (tempF) ؛ postStr += "\ r / n / r / n"؛ wifiClient.print ("ارسال /به روز رسانی HTTP /1.1 / n") ؛ wifiClient.print ("میزبان: api.thingspeak.com / n") ؛ wifiClient.print ("اتصال: بستن / n") ؛ wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n") ؛ wifiClient.print ("نوع محتوا: application/x-www-form-urlencoded / n") ؛ wifiClient.print ("Content-Length:")؛ wifiClient.print (postStr.length ()) ؛ wifiClient.print ("\ n / n")؛ wifiClient.print (postStr) ؛ } wifiClient.stop ()؛ }
مرحله 7: کد کلی
کد کلی در مخزن github من موجود است
وام:
- آردوینو JSON: آردوینوجسون
- ESP826WebServer
- وظیفه زمانبندی
- SHT 31
- اسکن I2C
- آموزش دستورالعمل HIH6130
- سیم آردوینو
- NCD.io
توصیه شده:
تشخیص آلودگی هوا + تصفیه هوا: 4 مرحله
تشخیص آلودگی هوا + تصفیه هوا: دانش آموزان (Aristobulus Lam ، Victor Sim ، Nathan Rosenzweig و Declan Loges) مدرسه بین المللی سوئیس آلمان با کارکنان MakerBay برای ایجاد یک سیستم یکپارچه برای اندازه گیری آلودگی هوا و اثر فیلتراسیون هوا کار کردند. این
نحوه برنامه ریزی PIC MCU با برنامه نویس PICkit با استفاده از Breadboard: 3 مرحله
نحوه برنامه ریزی PIC MCU با برنامه نویس PICkit با استفاده از Breadboard: برای بازی با میکروکنترلرهای PIC (یا هر دستگاه دیگر) نیازی به ابزارهای گران قیمت و پیچیده ندارید. تنها چیزی که نیاز دارید یک تخته نان است که در آن مدار و برنامه نویسی خود را آزمایش کنید. البته نوعی برنامه نویس و IDE ضروری است. در این دستورالعمل
گزارش آب و هوا با استفاده از برنامه های کاربردی ThingSpeak MQTT و IFTTT: 8 مرحله
گزارش آب و هوا با استفاده از ThletSpeak MQTT و IFTTT Applets: مقدمه یک برنامه آب و هوایی مبتنی بر ابر که گزارشات روزانه آب و هوا را به عنوان اطلاع رسانی ایمیل ارائه می دهد. این وب برنامه دما و رطوبت را با استفاده از SHT25 و Adafruit Huzzah ESP8266 اندازه گیری می کند. این دما و رطوبت در زمان واقعی را برای ما فراهم می کند
شمع آب و هوا - آب و هوا و دما در یک نگاه: 8 مرحله
شمع آب و هوا - آب و هوا در یک نگاه: با استفاده از این شمع جادویی ، می توانید دما و شرایط فعلی بیرون را فوراً تشخیص دهید
اینترنت اشیا آسان: ضبط داده های آب و هوا از راه دور: UV و هوا دما و رطوبت: 7 مرحله
اینترنت اشیا آسان شده: ضبط داده های آب و هوایی از راه دور: اشعه ماوراء بنفش و دما و رطوبت هوا: در این آموزش ، ما داده های از راه دور را به عنوان اشعه ماوراء بنفش (اشعه ماوراء بنفش) ، دما و رطوبت هوا ضبط می کنیم. این داده ها بسیار مهم خواهند بود و در ایستگاه هواشناسی کامل آینده مورد استفاده قرار خواهند گرفت. نمودار بلوک نشان می دهد که در پایان چه چیزی را بدست خواهیم آورد