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

تطبيق THINGSPEAK TEMPERATURE AND HUMIDITY APP باستخدام ESP8266: 9 خطوات
تطبيق THINGSPEAK TEMPERATURE AND HUMIDITY APP باستخدام ESP8266: 9 خطوات

فيديو: تطبيق THINGSPEAK TEMPERATURE AND HUMIDITY APP باستخدام ESP8266: 9 خطوات

فيديو: تطبيق THINGSPEAK TEMPERATURE AND HUMIDITY APP باستخدام ESP8266: 9 خطوات
فيديو: How to Make a Weather Monitoring System with ESP32 Board and Blynk app 2024, شهر نوفمبر
Anonim
تطبيق THINGSPEAK TEMPERATURE AND HUMIDITY APP باستخدام ESP8266
تطبيق THINGSPEAK TEMPERATURE AND HUMIDITY APP باستخدام ESP8266

أثناء العبث بالأشياء الإلكترونية الخاصة بي ، خطرت لي هذه الفكرة لإنشاء تطبيق طقس على شبكة الإنترنت. يستخدم تطبيق الويب هذا مستشعر SHT31 للحصول على بيانات درجة الحرارة والرطوبة في الوقت الفعلي. لقد نشرنا مشروعنا على وحدة ESP8266 WiFi. متصل أو غير متصل! لا داعي للقلق ، سواء كنت متصلاً بالإنترنت أو غير متصل بالإنترنت ، فستتلقى تحديثات الطقس من أي مكان وفي أي وقت. ينشر تطبيق الويب هذا البيانات إلى خادم الويب المحلي بالإضافة إلى السحابة. بالنسبة للعمليات السحابية ، فإننا نستخدم ThingSpeak API. يستخدم SHT31 I2C للحصول على البيانات من المستشعر.

SHT 31 عبارة عن مستشعرات درجة الحرارة والرطوبة من إنتاج شركة Sensirion. يوفر SHT31 مستوى عاليًا من الدقة حول ± 2٪ RH. تتراوح رطوبتها ما بين 0 إلى 100٪ ومدى درجة الحرارة بين -40 إلى 125 درجة مئوية. إنه أكثر موثوقية وسرعة مع 8 ثوانٍ من وقت استجابة المستشعر. تتضمن وظائفه معالجة الإشارات المحسنة وتوافق I2C. لديها طرق مختلفة للعمليات مما يجعلها موفرة للطاقة.

في هذا البرنامج التعليمي ، قمنا بتوصيل SHT 31 مع لوحة Adafruit Huzzah. لقراءة قيم درجة الحرارة والرطوبة ، استخدمنا درع ESP8266 I2C. هذا المحول يجعل جميع المسامير في متناول المستخدم ويوفر بيئة I2C سهلة الاستخدام.

الخطوة 1: الأجهزة المطلوبة

الأجهزة مطلوبة
الأجهزة مطلوبة
الأجهزة مطلوبة
الأجهزة مطلوبة
الأجهزة مطلوبة
الأجهزة مطلوبة

الأجهزة المستخدمة لإكمال هذه المهمة:

  1. SHT 31
  2. حوزة أدافروت 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 المحلي) في هذا calback في المهمة 3 ، ننشر قراءة المستشعر إلى واجهة ThingSpeak API السحابية
  • يتم تشغيل المهمة 3 كل خمس ثوان حتى تصل إلى مهلتها ، أي 50 ثانية

  • عندما تصل Task3 إلى مهلتها ، يتم تمكين المهمة 1 مرة أخرى ويتم تعطيل Task3.
  • عندما لا يتم استدعاء أي رد أو أن الجهاز في وضع الخمول ، فإنه ينتقل إلى Light Sleep وبالتالي توفير الطاقة.

TaskI2CCallback () باطلة ؛

TaskI2CDisable () باطلة ؛ TaskAPCallback () باطلة ، TaskAPDisable () باطلة ؛ TaskWiFiCallback () باطلة ، TaskWiFiDisable () باطلة ، // مهام i2c ، استضافة خادم الويب والنشر على مهمة Thingspeak tI2C (1 * TASK_SECOND ، TASK_FOREVER ، & taskI2CCallback ، & ts ، false ، NULL ، & TaskI2CDisable) ؛ مهمة 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 Task callback void taskI2CCallback () {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 لـ APIPAddress 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 = "********" ؛ تجاوز الحرف الثابت = "********" ؛ خادم 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)؛ } void onHandleDataFeed () {server.send (200، "text / html"، PAGE2)؛ } void onHandleNotFound () {String message = "لم يتم العثور على الملف / 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) ؛ إذا (ap == true) {Serial.print ("متصل بـ: / t") ؛ // IPAddress myIP = WiFi.softAPIP () ؛ Serial.println (WiFi.softAPIP ()) ؛ } server.begin () ؛

}

الخطوة 6: إعداد الكلام

إعداد Thingspeak
إعداد Thingspeak
إعداد Thingspeak
إعداد Thingspeak
إعداد Thingspeak
إعداد Thingspeak

ThingSpeak هي عبارة عن منصة إنترنت الأشياء. ThingSpeak هي خدمة ويب مجانية تتيح لك جمع بيانات المستشعر وتخزينها في السحابة.

في هذه الخطوة ، سأقدم لك إجراءً موجزًا لإعداد حساب Thing Speak الخاص بك

  • قم بالتسجيل للحصول على حساب مستخدم جديد في ThingSpeak
  • قم بإنشاء قناة جديدة عن طريق تحديد القنوات ، والقنوات الخاصة بي ، ثم القناة الجديدة
  • قم بتحرير الحقول الخاصة بك
  • تحتوي هذه الحقول على بيانات المستشعر الخاصة بك
  • لاحظ كتابة مفتاح API ومعرف القناة
  • في رسم Arduino الخاص بك ، يمكنك استخدام مكتبة ThingSpeak لـ Arduino أو يمكنك نشر البيانات مباشرة على ThingSpeak API
  • توضح الخطوة التالية كيفية نشر المحتوى على Thing Speak API

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

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

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

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

معرف TaskWiFiCallback () {WiFiClient wifiClient؛ 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 () ، }

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

الرمز العام متاح في مستودع GitHub الخاص بي

الخطوة 9: الاعتمادات

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

موصى به: