فهرست مطالب:

برنامه آب و هوا با استفاده از Esp8266: 7 مرحله
برنامه آب و هوا با استفاده از Esp8266: 7 مرحله

تصویری: برنامه آب و هوا با استفاده از Esp8266: 7 مرحله

تصویری: برنامه آب و هوا با استفاده از Esp8266: 7 مرحله
تصویری: Lesson 68, Home Automation: How to control 16 Channel Relay module using Arduino control 16 AC loads 2024, نوامبر
Anonim
برنامه وب آب و هوا با استفاده از Esp8266
برنامه وب آب و هوا با استفاده از Esp8266

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 را توضیح می دهد. اتصالات به شرح زیر است.

  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 به مهلت خود رسید ، وظیفه 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

توصیه شده: