فهرست مطالب:

THINGSPEAK TEMPERATURE و HUMIDITY APP با استفاده از ESP8266: 9 مرحله
THINGSPEAK TEMPERATURE و HUMIDITY APP با استفاده از ESP8266: 9 مرحله

تصویری: THINGSPEAK TEMPERATURE و HUMIDITY APP با استفاده از ESP8266: 9 مرحله

تصویری: THINGSPEAK TEMPERATURE و HUMIDITY APP با استفاده از ESP8266: 9 مرحله
تصویری: Full Control of DC Motor with ESP8266 NodeMCU D1 Mini over WiFi 2024, نوامبر
Anonim
برنامه دما و رطوبت THINGSPEAK با استفاده از ESP8266
برنامه دما و رطوبت THINGSPEAK با استفاده از ESP8266

در حالی که مشغول کار با وسایل الکترونیکی خود بودم ، این ایده را پیدا کردم که برنامه آب و هوایی مبتنی بر وب را ایجاد کنم. این برنامه وب از سنسور SHT31 برای دریافت داده های دما و رطوبت در زمان واقعی استفاده می کند. ما پروژه خود را روی ماژول WiFi ESP8266 مستقر کرده ایم. آنلاین یا آفلاین! نیازی به نگرانی نیست ، چه آنلاین باشید و چه آفلاین ، از هر کجا و هر زمان به روز رسانی آب و هوا را دریافت خواهید کرد. این برنامه وب داده ها را به سرور وب محلی و همچنین به ابر ارسال می کند. برای عملیات ابری ، ما از ThingSpeak API استفاده می کنیم. SHT31 از I2C برای دریافت داده ها از سنسور استفاده می کند.

SHT 31 یک سنسور دما و رطوبت است که توسط Sensirion ساخته شده است. SHT31 دارای دقت بالایی در حدود 2 R RH است. محدوده رطوبت آن بین 0 تا 100 range و محدوده دما بین -40 تا 125 درجه سانتی گراد است. بسیار مطمئن و سریع با 8 ثانیه زمان پاسخگویی سنسور. عملکرد آن شامل پردازش سیگنال پیشرفته و سازگاری با I2C است. این سیستم دارای حالت های مختلفی است که باعث صرفه جویی در مصرف انرژی می شود.

در این آموزش ، ما SHT 31 را با برد Adafruit Huzzah وصل کرده ایم. برای خواندن مقادیر دما و رطوبت از سپر ESP8266 I2C استفاده کرده ایم. این آداپتور تمام پین ها را در دسترس کاربر قرار می دهد و محیط کاربرپسند I2C را ارائه می دهد.

مرحله 1: سخت افزار مورد نیاز است

سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز
سخت افزار مورد نیاز

سخت افزار مورد استفاده برای تکمیل این کار:

  1. SHT 31
  2. Adafruit Huzzah ESP8266
  3. آداپتور ESP8266 I2C
  4. کابل I2C

مرحله 2: اتصالات سخت افزاری

اتصالات سخت افزاری
اتصالات سخت افزاری

این مرحله شامل راهنمای اتصال سخت افزاری است. این بخش اساساً اتصالات سیم کشی مورد نیاز بین سنسور و ESP8266 را توضیح می دهد. اتصالات به شرح زیر است.

  1. SHT31 از طریق I2C کار می کند. تصویر بالا ارتباط بین ماژول ESP8266 و SHT31 را نشان می دهد. ما از کابل I2C برای آن استفاده می کنیم یا می توانیم از سیم های بلوز 4 F تا F استفاده کنیم.
  2. یک سیم برای Vcc ، سیم دوم برای GND و دو سیم دیگر به ترتیب برای SDA و SCL استفاده می شود
  3. مطابق آداپتور I2C پین 2 و پین 14 یک برد ESP8266 به ترتیب به عنوان SDA و SCL استفاده می شود

مرحله 3: کد برنامه ریزی وظایف

کد برنامه ریزی وظایف
کد برنامه ریزی وظایف

در این آموزش ، ما سه عمل را انجام می دهیم

  • داده های SHT11 را با استفاده از پروتکل I2C بخوانید
  • میزبانی وب سرور و ارسال سنسور خوانده شده به صفحه وب
  • قرائت سنسور را در ThingSpeak API ارسال کنید

برای دستیابی به این هدف از کتابخانه TaskScheduler استفاده می کنیم. ما سه کار مختلف را با اشاره به سه عملیات مختلف کنترل برنامه ریزی کرده ایم. این به صورت زیر انجام می شود

  • وظیفه 1 برای خواندن مقدار سنسور است که این کار 1 ثانیه اجرا می شود تا زمانی که به 10 ثانیه برسد.
  • وقتی Task1 به پایان رسید ، Task 2 فعال و Task1 غیرفعال است.
  • در این تماس به AP متصل می شویم ، دو متغیر بولی برای جابجایی بین STA و AP در نظر گرفته شده است
  • در وظیفه 2 ما میزبان یک وب سرور با شماره 192.168.1.4 هستیم. این کار هر 5 ثانیه اجرا می شود تا زمانی که به 50 ثانیه برسد
  • وقتی Task 2 به پایان رسید Task 3 فعال است و Task2 غیرفعال است.
  • ما در این calback به STA (IP محلی) متصل می شویم. در Task 3 ما خواندن سنسور را در ابر ThingSpeak API ارسال می کنیم
  • وظیفه 3 هر پنج ثانیه اجرا می شود تا زمان پایان آن یعنی 50 ثانیه برسد

  • وقتی Task3 به پایان رسید ، Task 1 دوباره فعال می شود و Task3 غیرفعال می شود.
  • هنگامی که هیچ تماس تلفنی فراخوانی نمی شود یا دستگاه بیکار است به Light Sleep می رود در نتیجه در مصرف برق صرفه جویی می شود.

void taskI2CCallback ()؛

void taskI2CDisable ()؛ void taskAPCallback ()؛ void taskAPDisable ()؛ void taskWiFiCallback ()؛ void taskWiFiDisable ()؛ // وظایف برای i2c ، میزبانی وب سرور و ارسال در thingspeak Task tI2C (1 * TASK_SECOND ، TASK_FOREVER ، & taskI2CCallback ، & ts ، false ، NULL ، و taskI2CD غیر فعال) ؛ 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 و گذرواژه را برای نقطه دسترسی خود اعلام کنید. از هر دستگاه STA به نقطه دسترسی متصل شوید
  • میزبان سرور روی پورت 80 که یک پورت پیش فرض برای پروتکل ارتباطات اینترنتی است ، پروتکل انتقال ابرمتن (HTTP) 192.168.1.4 را در مرورگر وب خود برای صفحه وب مقدماتی و 192.168.1.4/Value برای خواندن صفحه وب سنسور وارد کنید

// IP ثابت برای APIPAddress ap_local_IP (192 ، 168 ، 1 ، 4) ؛ IP_ddress 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 () {String message = "فایل پیدا نشد / 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 ("Setting soft-AP …")؛ boolean ap = WiFi.softAP (APssid، APpass) ؛ if (ap == true) {Serial.print ("متصل به: / t")؛ // IPAddress myIP = WiFi.softAPIP ()؛ Serial.println (WiFi.softAPIP ()) ؛ } server.begin ()؛

}

مرحله 6: تنظیم Thingspeak

راه اندازی Thingspeak
راه اندازی Thingspeak
راه اندازی Thingspeak
راه اندازی Thingspeak
راه اندازی Thingspeak
راه اندازی Thingspeak

ThingSpeak یک بستر اینترنت اشیا است. ThingSpeak یک سرویس وب رایگان است که به شما امکان می دهد داده های حسگر را در ابر جمع آوری و ذخیره کنید.

در این مرحله ، من یک روش مختصر برای تنظیم حساب Thing Speak خود به شما ارائه می دهم

  • برای حساب کاربری جدید در ThingSpeak ثبت نام کنید
  • با انتخاب کانالها ، کانالهای من و سپس کانال جدید یک کانال جدید ایجاد کنید
  • زمینه های خود را ویرایش کنید
  • این فیلدها حاوی اطلاعات حسگر شما هستند
  • به کلید نوشتن API و شناسه کانال توجه کنید
  • در طرح آردوینو خود می توانید از کتابخانه ThingSpeak برای آردوینو استفاده کنید یا می توانید داده ها را مستقیماً به API ThingSpeak ارسال کنید
  • مرحله بعدی در مورد ارسال محتوا به API Thing Speak توضیح بیشتری می دهد

مرحله 7: کد ارسال داده ها به Thing Speak

کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن
کد ارسال اطلاعات به صحبت کردن

در اینجا ما قرائت سنسور را در Thing Speak ارسال می کنیم. برای انجام این کار مراحل زیر لازم است-

  • حساب خود را در thing talk ایجاد کنید کانال ها و زمینه هایی برای ذخیره داده های حسگر خود ایجاد کنید
  • ما می توانیم داده ها را از ESP به thingSpeak بدست آوریم و برعکس با استفاده از درخواست های GET و POST به API.
  • ما می توانیم داده های خود را به شرح زیر در ThingSpeak ارسال کنیم

id 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 ()؛ }

مرحله 8: کد کلی

کد کلی در مخزن GitHub من موجود است

مرحله 9: اعتبار

  • آردوینو JSON
  • ESP826WebServer
  • وظیفه زمانبندی
  • SHT 31
  • اسکن I2C
  • آموزش دستورالعمل HIH6130
  • سیم
  • NCD.io

توصیه شده: