جدول المحتويات:

تطبيق Weather Web باستخدام Esp8266: 7 خطوات
تطبيق Weather Web باستخدام Esp8266: 7 خطوات

فيديو: تطبيق Weather Web باستخدام Esp8266: 7 خطوات

فيديو: تطبيق Weather Web باستخدام Esp8266: 7 خطوات
فيديو: WEATHER MONITORING SYSTEM Tutorial | Nodemcu ESP8266 with WEATHER MONITORING SYSTEM [Full Guide] 2024, يمكن
Anonim
تطبيق ويب الطقس باستخدام Esp8266
تطبيق ويب الطقس باستخدام Esp8266

SHT 31 عبارة عن مستشعرات درجة الحرارة والرطوبة من إنتاج شركة Sensirion. يوفر SHT31 مستوى عاليًا من الدقة حول ± 2٪ RH. تتراوح رطوبتها ما بين 0 إلى 100٪ ومدى درجة الحرارة بين -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 ، يتم استخدام pin2 والدبوس 14 من لوحة ESP8266 كـ SDA و SCL على التوالي

الخطوة 3: رمز جدولة المهام

في هذا البرنامج التعليمي ، نقوم بإجراء ثلاث عمليات

  • اقرأ البيانات من SHT11 باستخدام بروتوكول I2C
  • قم باستضافة خادم الويب وانشر قراءة المستشعر على صفحة الويب
  • انشر قراءات المستشعر في ThingSpeak API

لتحقيق ذلك نحن نستخدم مكتبة TaskScheduler. لقد قمنا بجدولة ثلاث مهام مختلفة تشير إلى ثلاث عمليات تحكم مختلفة. هكذا يتم فعل هذا

  • المهمة 1 لقراءة قيمة المستشعر تعمل هذه المهمة لمدة ثانية واحدة حتى تصل إلى 10 ثوانٍ.
  • عندما تصل Task1 إلى مهلتها ، يتم تمكين المهمة 2 وتعطيل Task1.
  • نقوم بالاتصال بـ AP في رد الاتصال هذا ، يتم أخذ متغيرين منطقيين لرعاية التبديل بين STA و AP
  • في المهمة 2 ، نستضيف خادم ويب على 192.168.1.4. تعمل هذه المهمة كل 5 ثوانٍ حتى تصل إلى مهلتها وهي 50 ثانية
  • عندما تصل المهمة 2 إلى مهلة انتهاء المهلة ، يتم تمكين المهمة 3 وتعطيل Task2.
  • نقوم بالاتصال بـ STA (IP المحلي) في رد الاتصال هذا
  • في المهمة 3 ، ننشر قراءة المستشعر إلى واجهة ThingSpeak API السحابية
  • يتم تشغيل المهمة 3 كل خمس ثوان حتى تصل إلى مهلتها ، أي 50 ثانية
  • عندما تصل Task3 إلى مهلتها ، يتم تمكين المهمة 1 مرة أخرى ويتم تعطيل Task3.
  • عندما لا يتم استدعاء أي رد أو أن الجهاز في وضع الخمول ، فإنه ينتقل إلى Light Sleep وبالتالي توفير الطاقة.

مجدول ts

// المهام لـ i2c ، استضافة خادم الويب والنشر على Thingspeak

مهمة tI2C (1 * TASK_SECOND ، TASK_FOREVER ، & taskI2CCallback ، & ts ، false ، NULL ، & taskI2CDisable) ؛ Task tAP (5 * TASK_SECOND ، TASK_FOREVER ، & taskAPCallback ، & ts ، false ، NULL ، & taskAPDisable) ؛ مهمة 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 tI2C.enable () ؛

الخطوة 4: كود لقراءة قيم درجة الحرارة والرطوبة

نحن نستخدم مكتبة Wire.h لقراءة قيم درجة الحرارة والرطوبة. تسهل هذه المكتبة اتصال i2c بين المستشعر والجهاز الرئيسي. 0x44 هو عنوان I2C لـ SHT31.

يعمل SHT31 في وضع مختلف للعمليات. يمكنك الرجوع إلى ورقة البيانات لذلك.

نحن نستخدم 0x2C و 0x06 كـ MSB و LSB على التوالي لعملية طلقة واحدة.

// I2C مهمة رد الاتصال باطلة مهمة I2CCallback ()

{Serial.println ("taskI2CStarted") ؛ جذر int غير موقع [6] ؛ // بدء الإرسال من 0x44 ؛ Wire.beginTransmission (العنوان) ؛ // من أجل إرسال طلقة واحدة مع قابلية عالية للتكرار ، نستخدم 0x2C (MSB) و 0x06 (LSB) Wire.write (0x2C) ؛ Wire.write (0x06) ؛ // نهاية الإرسال Wire.endTransmission () ؛ // طلب البايت من 0x44 Wire.beginTransmission (Addr) ؛ Wire.endTransmission () ؛ Wire.request From (Addr، 6) ؛ إذا كانت (Wire.available () == 6) {// data [0] والبيانات [1] تحتوي على 16 بت من درجة الحرارة. الجذر [0] = Wire.read () ، الجذر [1] = Wire.read () ، // البيانات [2] تحتوي على 8 بت من جذر CRC [2] = Wire.read () ؛ // البيانات [3] والبيانات [4] تحتوي على 16 بتًا من جذر الرطوبة [3] = Wire.read ()؛ الجذر [4] = Wire.read () ؛ // البيانات [5] تتكون من 8 بت جذر CRC [5] = Wire.read () ؛ } int temp = (root [0] * 256) + root [1] ؛ // تحول MSB بمقدار 8 بتات إضافة LSB float cTemp = -45.0 + (175.0 * temp / 65535.0) ؛ تعويم fTemp = (cTemp * 1.8) + 32.0 ؛ // انقل MSB بمقدار 8 بتات وأضف LSB مقسمًا عليها بدقة كاملة و * 100 للنسبة المئوية للرطوبة الطافية = (100.0 * ((root [3] * 256.0) + root [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 والبوابة وقناع الشبكة الفرعية لإنشاء عنوان IP الثابت الخاص بنا
  • أعلن الآن عن SSID وكلمة المرور لنقطة الوصول الخاصة بك.
  • الاتصال بنقطة الوصول من أي جهاز STA
  • استضافة الخادم على المنفذ 80 وهو منفذ افتراضي لبروتوكول اتصال الإنترنت ، بروتوكول نقل النص التشعبي (HTTP)
  • أدخل 192.168.1.4 على متصفح الويب الخاص بك لصفحة الويب التمهيدية و 192.168.1.4/Value لصفحة الويب الخاصة بقراءة المستشعر

// ثابت IP لـ AP

IPAddress 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 وتمريره لـ AP

const char APssid = "********" ؛

تجاوز الحرف الثابت = "********" ؛

خادم ESP8266WebServer (80) ؛

الإعداد باطل{

server.on ("/"، onHandleDataRoot)؛

server.on ("/ القيمة"، onHandleDataFeed)؛

server.onNotFound (onHandleNotFound) ،

}

TaskAPCallback باطلة {

Serial.println ("بدأ TaskAP") ؛

server.handleClient () ،

}

void onHandleDataRoot () {server.send (200، "text / html"، PAGE1) ؛ }

باطل onHandleDataFeed () {

server.send (200، "text / html"، PAGE2) ؛ }

باطل onHandleNotFound () {

رسالة السلسلة = "الملف غير موجود / n / n" ؛

الرسالة + = "URI:" ؛

message + = server.uri () ؛

message + = "\ n الطريقة:" ؛

message + = (server.method () == HTTP_GET)؟ "GET": "POST" ؛

message + = "\ n الوسائط:" ؛

message + = server.args () ؛

الرسالة + = "\ n" ؛

server.send (404، "نص / عادي" ، رسالة) ؛}

إعادة الاتصال باطل APWiFi () {

WiFi.mode (WIFI_AP_STA) ؛

تأخير (100) ؛

WiFi.disconnect () ؛

الحالة المنطقية = WiFi.softAPConfig (ap_local_IP، ap_gateway، ap_subnet) ؛

إذا (الحالة == صحيح) {

Serial.print ("Setting soft-AP …")؛

boolean ap = WiFi.softAP (APssid ، APpass) ؛

إذا (أب == صحيح) {

Serial.print ("متصل بـ: / t") ؛

// IPAddress myIP = WiFi.softAPIP () ؛

Serial.println (WiFi.softAPIP ()) ؛

}

server.begin () ،

}

}

الخطوة 6: رمز إرسال البيانات إلى الشيء الحديث

رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث
رمز لترحيل البيانات إلى الشيء يتحدث

نحن هنا ننشر قراءات المستشعر على Thing Speak. الخطوات التالية مطلوبة لإكمال هذه المهمة-

  • إنشاء حسابك في شيء يتكلم
  • قم بإنشاء قنوات وحقول لتخزين بيانات المستشعر
  • يمكننا الحصول على البيانات ونشرها من ESP إلى thingSpeak والعكس بالعكس باستخدام طلبات GET و POST إلى واجهة برمجة التطبيقات.
  • يمكننا نشر بياناتنا على ThingSpeak على النحو التالي

مهمة باطلةWiFiCallback () {

WiFiClient wifi العميل ؛ if (wifiClient.connect (hostId، 80)) {String postStr = apiKey؛ postStr + = "& field1 ="؛ postStr + = سلسلة (رطبة) ؛ postStr + = "& field2 ="؛ postStr + = String (tempC) ؛ postStr + = "& field3 =" ؛ postStr + = String (tempF) ؛ postStr + = "\ r / n / r / n"؛ wifiClient.print ("POST / تحديث 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 ("طول المحتوى:") ؛ wifiClient.print (postStr.length ()) ، wifiClient.print ("\ n / n") ؛ wifiClient.print (postStr) ؛ } wifiClient.stop () ، }

الخطوة 7: الكود العام

الكود العام متاح في مستودع جيثب الخاص بي

الاعتمادات:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • جدول المهام
  • SHT 31
  • مسح I2C
  • HIH6130 تعليمي تعليمي
  • سلك اردوينو
  • NCD.io

موصى به: