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

سهولة إنترنت الأشياء: ESP-MicroPython-MQTT-ThingSpeak: 12 خطوة
سهولة إنترنت الأشياء: ESP-MicroPython-MQTT-ThingSpeak: 12 خطوة

فيديو: سهولة إنترنت الأشياء: ESP-MicroPython-MQTT-ThingSpeak: 12 خطوة

فيديو: سهولة إنترنت الأشياء: ESP-MicroPython-MQTT-ThingSpeak: 12 خطوة
فيديو: How To Make DIY Weather Station With ESP32 | DIY Weather Station| Hammad weather station | @NASA 2024, يوليو
Anonim
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak

في تعليمي السابق ، MicroPython على ESP باستخدام Jupyter ، تعلمنا كيفية تثبيت وتشغيل MicroPython على جهاز ESP. باستخدام Jupyter Notebook كبيئة تطوير خاصة بنا ، تعلمنا أيضًا كيفية القراءة من المستشعرات (درجة الحرارة والرطوبة واللمعان) ، ونستخدم العديد من بروتوكولات وطرق الاتصال ، التناظرية والرقمية وسلك واحد و I2C ، وهذا الأخير لعرضنا الملتقطة. البيانات على شاشة OLED.

الآن ، في هذا البرنامج التعليمي باستخدام بروتوكول MQTT ، سنحصل على جميع البيانات التي تم التقاطها ، وإرسالها إلى خدمة إنترنت الأشياء ، ThingSpeak.com وإلى تطبيق جوال (Thingsview) ، حيث يمكننا تسجيل البيانات واللعب بها.

هنا ، الرسم التخطيطي لمشروعنا:

صورة
صورة

الخطوة 1: BoM - فاتورة المواد

  1. NodeMCU - 8.39 دولار أمريكي
  2. مستشعر درجة الحرارة والرطوبة النسبية DHT22 - 9.95 دولارًا أمريكيًا
  3. DS18B20 مستشعر درجة حرارة مقاوم للماء - 5.95 دولار أمريكي
  4. شاشة OLED SSD1366- 8.99 دولار أمريكي (اختياري)
  5. LDR (1x)
  6. المصابيح (1x) (اختياري)
  7. زر ضغط (1x)
  8. مقاوم 4K7 أوم (2x)
  9. مقاوم 10 كيلو اوم (1x)
  10. مقاوم 220 اوم (1x)

الخطوة 2: The Hw

الأب
الأب

Hw الذي سنستخدمه هنا بشكل أساسي هو نفسه المستخدم في البرنامج التعليمي: Micropython على ESP باستخدام Jupyter. الرجوع إليها لجميع اتصالات HW.

الاستثناء هو المؤازرة ، التي لن نستخدمها في هذا المشروع.

أعلاه يمكنك رؤية HW الكامل. قم بتوصيل الأجهزة كما هو موضح هناك.

الخطوة 3: Micropython ، REPL ، Jupyter

Micropython ، REPL ، كوكب المشتري
Micropython ، REPL ، كوكب المشتري
Micropython ، REPL ، كوكب المشتري
Micropython ، REPL ، كوكب المشتري

يجب أن يكون لديك مترجم Micropython تم تحميله على جهاز ESP الخاص بك. بمجرد التحميل ، يجب عليك برمجة برنامج ESP الخاص بك باستخدام أي من الطرق المتاحة / IDEs المتاحة ، مثل:

  • REPL
  • دفتر Jupyter
  • مو
  • ESPCut (نظام التشغيل Windows فقط)
  • … إلخ

في البرنامج التعليمي الخاص بي ، Micropython على ESP باستخدام Jupyter ، قمت بتفصيل كيفية تنزيل وتثبيت مترجم MicroPython ، ESPTool لإدارة أجهزة ESP وكيفية استخدام Jupyter Notebook كبيئة تطوير. لا تتردد في استخدام ما هو أكثر راحة لك.

عادةً ما أقوم بإجراء جميع عمليات التطوير على Jupyter Notebook ، وبمجرد حصولي على الكود النهائي ، أقوم بنسخها إلى Geany وتحميلها على برنامج ESP الخاص بي باستخدام Ampy.

الخطوة 4: المستشعرات

مجسات
مجسات

دعنا نثبِّت المكتبات ، ونعرِّف GPIO ، وننشئ كائنات ، ووظائف لجميع أجهزة الاستشعار على حدة:

A. DHT (درجة الحرارة والرطوبة)

دعنا نثبت مكتبة DHT وننشئ كائنًا:

من dht استيراد DHT22

من رقم التعريف الشخصي لاستيراد الجهاز dht22 = DHT22 (رقم التعريف الشخصي (12))

الآن ، قم بإنشاء وظيفة لقراءة مستشعر DHT:

def readDht ():

dht22.measure () إرجاع dht22.temperature () ، dht22.humidity () اختبار وظيفة DHT

طباعة (readDht ())

يجب أن تكون النتيجة على سبيل المثال:

(17.7, 43.4)

B. DS18B20 (درجة الحرارة الخارجية)

لنقم بتثبيت المكتبات وإنشاء كائن:

استيراد onewire ، ds18x20

وقت الاستيراد # تحديد الدبوس الذي سيتم توصيل الجهاز أحادي السلك ==> الدبوس 2 (D4) dat = Pin (2) # إنشاء كائن onewire ds = ds18x20. DS18X20 (onewire. OneWire (dat)) ابحث عن الأجهزة الموجودة على bu

مجسات = ds.scan ()

طباعة ("الأجهزة الموجودة" ، أجهزة الاستشعار)

النتيجة المطبوعة ليست مهمة حقًا ، ما نحتاجه هو أول مستشعر تم اكتشافه: المستشعرات [0]. والآن يمكننا بناء وظيفة لقراءة بيانات المستشعر:

قراءات def ():

ds.convert_temp () time.sleep_ms (750) إرجاع ds.read_temp (أجهزة الاستشعار [0])

من المهم دائمًا اختبار المستشعر باستخدام الوظيفة التي تم إنشاؤها

طباعة (readDs ()) إذا حصلت على قيمة درجة الحرارة ، فإن الكود الخاص بك صحيح

17.5

C. LDR (اللمعان)

سيستخدم LDR الدبوس التمثيلي الخاص بـ ESP (إنه واحد فقط في حالة ESP8266 والعديد من ESP32).

الرجوع إلى البرنامج التعليمي الخاص بي ESP32 للحصول على التفاصيل.

كما حدث من قبل:

# مكتبة استيراد

من استيراد الجهاز ADC # تعريف الكائن adc = ADC (0) وظيفة بسيطة: يمكن استخدام adc.read () لقراءة قيمة ADC. لكن تذكر أن ADC الداخلي سيحول الفولتية بين 0 و 3.3V بقيم رقمية متوافقة ، تتراوح من 0 إلى 1023. بمجرد اهتمامنا بـ "اللمعان" ، سنعتبر الحد الأقصى للضوء هو أقصى قيمة تم التقاطها من المستشعر (في بلدي حالة 900) والحد الأدنى للضوء في حالتي هو 40. وبوجود هذه القيم يمكننا "تعيين" القيمة من 40 إلى 900 في 0 إلى 100٪ من اللمعان. لذلك ، سننشئ وظيفة جديدة

def readLdr ():

lumPerct = (adc.read () - 40) * (10/86) # تحويل بالنسبة المئوية ("map") جولة العودة (lumPerct)

يجب عليك اختبار الوظيفة باستخدام print (readLDR ()). يجب أن تكون النتيجة عددًا صحيحًا بين o و 100.

زر الضغط (إدخال رقمي)

نحن هنا نستخدم زر الضغط كمستشعر رقمي ، ولكن يمكن أن يكون "صدى" لمشغل (مضخة تم تشغيلها وإيقافها ، على سبيل المثال).

# حدد الدبوس 13 كمدخل وقم بتنشيط مقاوم سحب داخلي:

button = Pin (13، Pin. IN، Pin. PULL_UP) # وظيفة لقراءة حالة الزر: def readBut (): return button.value ()

يمكنك اختبار الزر قراءة وظيفة الطباعة (readBut ()). بدون الضغط على النتيجة يجب أن تكون "1". بالضغط على الزر النتيجة يجب أن تكون "0"

الخطوة 5: التقاط جميع بيانات المستشعر وعرضها محليًا

التقاط وعرض جميع بيانات أجهزة الاستشعار محليًا
التقاط وعرض جميع بيانات أجهزة الاستشعار محليًا

الآن وقد أنشأنا وظيفة واحدة لكل مستشعر ، فلنقم بإنشاء آخر وظيفة ستقرأها جميعًا في نفس الوقت:

عيب colectData ():

temp ، hum ، = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () إرجاع درجة الحرارة ، همهمة ، extTemp ، lum ، butSts الآن إذا كنت تستخدم

print (colectData ())

سينتج عن ذلك مجموعة تتضمن جميع البيانات التي تم التقاطها من أجهزة الاستشعار:

(17.4, 45.2, 17.3125, 103, 1)

يمكننا أيضًا ، اختياريًا ، إظهار تلك البيانات على شاشة محلية:

# استيراد مكتبة وإنشاء كائن i2c

من استيراد الجهاز I2C i2c = I2C (scl = Pin (5)، sda = Pin (4)) # مكتبة استيراد وإنشاء كائن oled import ssd1306 i2c = I2C (scl = Pin (5)، sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128، 64، i2c، 0x3c) # إنشاء دالة: def displayData (temp، hum، extTemp، lum، butSts): oled.fill (0) oled.text ("Temp:" + str (temp)) + "oC"، 0، 4) oled.text ("Hum:" + str (hum) + "٪"، 0، 16) oled.text ("ExtTemp:" + str (extTemp) + "oC"، 0، 29) oled.text ("Lumin:" + str (lum) + "٪"، 0، 43) oled.text ("Button:" + str (butSts)، 0، 57) oled.show () # عرض البيانات باستخدام عرض الوظيفة Data (temp، hum، extTemp، lum، butSts)

كخيار ، سأقوم أيضًا بتضمين مؤشر LED ليتم تشغيله عندما نبدأ في قراءة أجهزة الاستشعار ، وإيقاف التشغيل بعد عرض تلك البيانات. سيساعد القيام بذلك في التأكد من أن البرنامج يعمل عندما يكون لدينا ESP مفصولًا عن الكمبيوتر ويعمل تلقائيًا.

لذا ، فإن الوظيفة الرئيسية ستكون:

# الوظيفة الرئيسية لقراءة جميع أجهزة الاستشعار

def main (): # عرض البيانات مع وظيفة led.on () temp، hum، extTemp، lum، butSts = colectData () displayData (temp، hum، extTemp، lum، butSts) led.off ()

لذلك ، عند تنفيذ main () ، سنحصل على بيانات المستشعر المعروضة على OLED كما هو موضح في الصورة.

الخطوة 6: تشغيل رمز المحطة المحلية عند بدء تشغيل ESP

تشغيل رمز المحطة المحلية عند بدء تشغيل ESP
تشغيل رمز المحطة المحلية عند بدء تشغيل ESP

يمكننا الحصول على كل ما تم تطويره حتى الآن على ملف واحد ليتم تنفيذه بواسطة برنامج ESP الخاص بنا.

دعونا نفتح أي محرر نصوص ونلصق عليه كل الكود:

# استيراد مكتبات عامة

من استيراد الجهاز وقت استيراد رقم التعريف الشخصي # حدد الدبوس 0 كإخراج led = رقم التعريف الشخصي (0، Pin. OUT) # DHT من استيراد dht DHT22 dht22 = DHT22 (Pin (12)) # وظيفة لقراءة DHT def readDht (): dht22.measure () إرجاع dht22.temperature () ، dht22.humidity () # DS18B20 استيراد onewire ، ds18x20 # تحديد دبوس الجهاز أحادي الأسلاك الذي سيتم توصيله ==> pin 2 (D4) dat = Pin (2) # إنشاء سلك واحد object ds = ds18x20. DS18X20 (onewire. OneWire (dat)) # مسح للأجهزة الموجودة على مستشعرات الناقل = ds.scan () # وظيفة لقراءة DS18B20 def readDs (): ds.convert_temp () time.sleep_ms (750) return round (ds.read_temp (مستشعرات [0]) ، 1) # LDR من استيراد الجهاز ADC # تعريف كائن adc = ADC (0) # وظيفة لقراءة اللمعان def readLdr (): lumPerct = (adc.read () - 40) * (10/86) # تحويل بالنسبة المئوية ("الخريطة") جولة العودة (lumPerct) # حدد دبوس 13 كمدخل وقم بتنشيط مقاوم سحب داخلي: زر = دبوس (13 ، Pin. IN ، Pin. PULL_UP) # وظيفة لقراءة حالة الزر: def readBut (): return button.value () # وظيفة لقراءة جميع البيانات: def cole ctData (): temp ، hum ، = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () إرجاع temp ، hum ، extTemp ، lum ، butSts # مكتبة الاستيراد وإنشاء كائن i2c من استيراد الجهاز I2C i2c = I2C (scl = Pin (5)، sda = Pin (4)) # مكتبة استيراد وإنشاء كائن oled import ssd1306 i2c = I2C (scl = Pin (5)، sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128 ، 64، i2c، 0x3c) # إنشاء دالة: def displayData (temp، hum، extTemp، lum، butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC"، 0، 4) oled.text ("Hum:" + str (hum) + "٪"، 0، 16) oled.text ("ExtTemp:" + str (extTemp) + "oC"، 0، 29) oled. text ("Lumin:" + str (lum) + "٪"، 0، 43) oled.text ("Button:" + str (butSts)، 0، 57) oled.show () # الوظيفة الرئيسية لقراءة جميع أجهزة الاستشعار def main (): # عرض البيانات مع وظيفة led.on () temp، hum، extTemp، lum، butSts = colectData () displayData (temp، hum، extTemp، lum، butSts) led.off () '' - ----- تشغيل الوظيفة الرئيسية -------- '' main ()

احفظه ، على سبيل المثال باسم localData.py.

لتشغيل هذا الرمز مباشرة على جهازك ، ستحتاج إلى Ampy.

أولاً ، في Terminal ، دعنا نبلغ Ampy بمنفذنا التسلسلي:

تصدير AMPY_PORT = / dev / tty. SLAB_USBtoUART

الآن ، يمكننا رؤية الملفات الموجودة داخل دليل جذر ESP الخاص بنا:

امبي ل

ردًا على ذلك ، سنحصل على boot.py ، وهو الملف الأول الذي سيتم تشغيله في النظام.

الآن ، لنستخدم Ampy لتحميل برنامج python Script LocalData.py كـ /main.py ، لذلك سيتم تشغيل البرنامج النصي بعد التمهيد مباشرة:

وضع ampy localData.py / main / py

إذا استخدمنا الأمر amp ls الآن ، فسترى ملفين داخل ESP.: boot.py و main.py

ستؤدي إعادة تعيين المرساب الكهروستاتيكي إلى تشغيل البرنامج localData.py تلقائيًا وعرض بيانات المستشعر على الشاشة.

توضح شاشة الطباعة الطرفية أعلاه ما قمنا به.

باستخدام الكود أعلاه ، سيتم عرض الشاشة مرة واحدة فقط ، ولكن يمكننا تحديد حلقة على الوظيفة الرئيسية () ، والتي ستعرض البيانات في كل فترة زمنية محددة (PUB_TIME_SEC) ، وعلى سبيل المثال ، حتى نضغط على الزر:

# حلقة للحصول على البيانات حتى يتم الضغط على الزر

while button.value (): led.on () temp، hum، extTemp، lum، butSts = colectData () displayData (temp، hum، extTemp، lum، butSts) led.off () time.sleep (PUB_TIME_SEC)

يجب الإعلان عن المتغير PUB_TIME_SEC بحلول الوقت الذي تريد فيه عيناتك.

لتعزيز المزيد من الكود الخاص بنا ، سيكون من الجيد إعلامنا بأننا سنخرج من الحلقة ، لذلك سنحدد وظيفتين عامتين جديدتين ، واحدة لمسح الشاشة والأخرى لميض مؤشر LED لعدد معين من المرات.

# عرض واضح:

def displayClear (): oled.fill (0) oled.show () # إنشاء وظيفة وميض def وميض LED (num): من أجل i في النطاق (0 ، عدد): led.on () سكون (0.5) led.off () النوم (0.5)

لذا ، يمكننا الآن إعادة كتابة دالة () الرئيسية الخاصة بنا:

بينما button.value ():

led.on () temp، hum، extTemp، lum، butSts = colectData () displayData (temp، hum، extTemp، lum، butSts) led.off () time.sleep (PUB_TIME_SEC) blinkLed (3) displayClear ()

يمكن تنزيل الكود النهائي من GitHub: localData.py وأيضًا من Jupyter Notebook المستخدم لتطوير الكود الكامل: Jupyter Local Data Development.

الخطوة 7: توصيل ESP بشبكة WiFi المحلية

توصيل ESP بشبكة WiFi المحلية
توصيل ESP بشبكة WiFi المحلية

تُستخدم وحدة الشبكة لتكوين اتصال WiFi. هناك نوعان من واجهات WiFi ، واحدة للمحطة (عندما يتصل ESP8266 بجهاز توجيه) والأخرى لنقطة الوصول (للأجهزة الأخرى للاتصال بـ ESP8266). هنا ، سيتم توصيل ESP الخاص بنا بالشبكة المحلية. دعنا ندعو المكتبة ونحدد بيانات اعتماد شبكتنا:

شبكة الاستيراد

WiFi_SSID = "SSID الخاص بك" WiFi_PASS = "كلمة المرور"

يمكن استخدام الوظيفة أدناه لتوصيل ESP بشبكتك المحلية:

def do_connect ():

wlan = network. طباعة ('network config:'، wlan.ifconfig ())

عند تشغيل الوظيفة ، يمكنك الحصول على عنوان IP نتيجة لذلك:

do_connect ()

ستكون النتيجة:

تهيئة الشبكة: ('10.0.1.2 '،' 255.255.255.0 '، '10.0.1.1'، '10.0.1.1 ')

كان ، في حالتي ، 10.0.1.2 ، هو عنوان ESP IP.

الخطوة 8: The ThingSpeak

الشيء
الشيء

في هذه المرحلة ، تعلمنا كيفية التقاط البيانات من جميع أجهزة الاستشعار ، وعرضها على OLED الخاص بنا. حان الوقت الآن لمعرفة كيفية إرسال هذه البيانات إلى منصة إنترنت الأشياء ThingSpeak.

هيا نبدأ!

أولاً ، يجب أن يكون لديك حساب في ThinkSpeak.com. بعد ذلك ، اتبع التعليمات لإنشاء قناة ولاحظ معرف القناة ومفتاح واجهة برمجة التطبيقات للكتابة.

أعلاه يمكنك رؤية الحقول الخمسة التي سيتم استخدامها على قناتنا.

الخطوة 9: بروتوكول MQTT واتصال ThingSpeak

بروتوكول MQTT واتصال ThingSpeak
بروتوكول MQTT واتصال ThingSpeak

MQTT هي بنية نشر / اشتراك تم تطويرها بشكل أساسي لتوصيل النطاق الترددي والأجهزة المقيدة بالطاقة عبر الشبكات اللاسلكية. إنه بروتوكول بسيط وخفيف الوزن يتم تشغيله عبر مآخذ TCP / IP أو WebSockets. يمكن تأمين MQTT عبر WebSockets باستخدام SSL. تتيح بنية النشر / الاشتراك دفع الرسائل إلى أجهزة العميل دون الحاجة إلى قيام الجهاز باستقصاء الخادم باستمرار.

وسيط MQTT هو نقطة الاتصال المركزية ، وهو المسؤول عن إرسال جميع الرسائل بين المرسلين والمستلمين الشرعيين. العميل هو أي جهاز يتصل بالوسيط ويمكنه نشر الموضوعات أو الاشتراك فيها للوصول إلى المعلومات. يحتوي الموضوع على معلومات التوجيه الخاصة بالوسيط. كل عميل يريد إرسال رسائل ينشرها لموضوع معين ، وكل عميل يريد استقبال الرسائل يشترك في موضوع معين. يقوم الوسيط بتسليم جميع الرسائل ذات الموضوع المطابق للعملاء المناسبين.

ThingSpeak ™ لديه وسيط MQTT على عنوان URL mqtt.thingspeak.com والمنفذ 1883. يدعم وسيط ThingSpeak كلاً من نشر MQTT والاشتراك في MQTT.

في حالتنا ، سوف نستخدم: MQTT Publish

صورة
صورة

يصف الشكل هيكل الموضوع. مطلوب مفتاح API للكتابة للنشر. يقر الوسيط بطلب اتصال صحيح مع CONNACK.

يتم دعم بروتوكول MQTT في مكتبة مضمنة في ثنائيات Micropython - يمكن استخدام هذا البروتوكول لإرسال البيانات من ESP8266 الخاص بك ، عبر WIFI ، إلى قاعدة بيانات سحابية مجانية.

دعنا نستخدم مكتبة umqtt.simple:

من umqtt.simple استيراد MQTTClient

ومعرفة معرف الخادم الخاص بنا ، من الممكن إنشاء كائن عميل MQTT الخاص بنا:

الخادم = "mqtt.thingspeak.com"

العميل = MQTTClient ("umqtt_client" ، الخادم)

الآن ، بعد الحصول على بيانات اعتماد ThingSpeak الخاصة بك في متناول اليد:

CHANNEL_ID = "معرّف القناة"

WRITE_API_KEY = "مفتاحك هنا"

لنقم بإنشاء "موضوع" MQTT الخاص بنا:

الموضوع = "قنوات /" + CHANNEL_ID + "/ نشر /" + WRITE_API_KEY

دعنا نرسل بياناتنا إلى ThingSpeak IoT Service ، باستخدام الوظيفة التي تم إنشاؤها وربط استجابتها بمتغيرات بيانات محددة:

temp، hum، extTemp، lum، butSts = colectData ()

مع تحديث هذه المتغيرات ، يمكننا إنشاء "حمولة MQTT" الخاصة بنا:

الحمولة = "field1 =" + str (temp) + "& field2 =" + str (hum) + "& field3 =" + str (extTemp) + "& field4 =" + str (lum) + "& field5 =" + str (بوتس))

وهذا كل شيء! نحن على استعداد لإرسال البيانات إلى ThinsSpeak ، ببساطة باستخدام 3 أسطر من التعليمات البرمجية أدناه:

client.connect ()

client.publish (موضوع ، حمولة) client.disconnect ()

الآن ، إذا انتقلت إلى صفحة قناتك (كما هو موضح أعلاه) ، فسترى أن كل حقل من الحقول الخمسة سيحتوي على بيانات متعلقة بأجهزة الاستشعار الخاصة بك.

الخطوة 10: مسجل بيانات الاستشعار

مسجل بيانات الاستشعار
مسجل بيانات الاستشعار

الآن ، بعد أن علمنا أنه من خلال بضعة أسطر فقط من التعليمات البرمجية ، من الممكن تحميل البيانات إلى خدمة إنترنت الأشياء ، فلنقم بإنشاء وظيفة حلقة للقيام بذلك تلقائيًا في فترة زمنية منتظمة (على غرار ما فعلناه مع "البيانات المحلية ").

باستخدام نفس المتغير (PUB_TIME_SEC) ، المعلن من قبل ، فإن الوظيفة الرئيسية البسيطة لالتقاط البيانات باستمرار ، وتسجيلها على قناتنا ستكون:

احيانا صحيح:

temp ، hum ، extTemp ، lum ، butSts = colectData () الحمولة = "field1 =" + str (temp) + "& field2 =" + str (hum) + "& field3 =" + str (extTemp) + "& field4 =" + str (lum) + "& field5 =" + str (butSts) client.connect () client.publish (موضوع ، حمولة) client.disconnect () time.sleep (PUB_TIME_SEC)

لاحظ أنه يجب تحديث "الحمولة" فقط ، بمجرد أن يرتبط "الموضوع" ببيانات اعتماد القناة الخاصة بنا ولن يتغير.

عند البحث عن صفحة قناة ThingSpeak الخاصة بك ، ستلاحظ أنه سيتم تحميل البيانات بشكل مستمر لكل حقل. يمكنك تغطية LDR ، ووضع يدك على مستشعرات درجة الحرارة / همهمة ، والضغط على الزر ، وما إلى ذلك ، ومعرفة كيف سيتم تلقائيًا "تسجيل" هذه البيانات لتحليلها في المستقبل.

عادة ، بالنسبة لتسجيل البيانات ، يجب أن نحاول استخدام أقل قدر ممكن من الطاقة ، لذلك ، لن نستخدم LED أو العرض محليًا. أيضًا ، من الشائع مع أجهزة ESP ، وضعها على "النوم العميق" ، حيث يكون المعالج الدقيق في حالته الدنيا من الطاقة حتى يحين وقت التقاط البيانات وإرسالها إلى منصة إنترنت الأشياء.

ولكن بمجرد أن تتعلم الفكرة ، فلنقم أيضًا بتضمين الشاشة و LED كما فعلنا من قبل. عند القيام بذلك ، ستكون وظيفة "المسجل" الخاصة بنا:

بينما button.value ():

led.on () temp، hum، extTemp، lum، butSts = colectData () displayData (temp، hum، extTemp، lum، butSts) led.off () temp، hum، extTemp، lum، butSts = colectData () payload = "field1 =" + str (temp) + "& field2 =" + str (hum) + "& field3 =" + str (extTemp) + "& field4 =" + str (lum) + "& field5 =" + str (butSts) client.connect () client.publish (موضوع ، حمولة) client.disconnect () time.sleep (PUB_TIME_SEC) وميض (3) displayClear ()

يمكن العثور على البرنامج النصي microPython الكامل هنا: dataLoggerTS_EXT.py ويمكن أيضًا العثور على دفتر Jupyter الذي تم استخدامه للتطوير هنا: IoT ThingSpeak Data Logger EXT.ipynb.

لتحميل البرنامج النصي على ESP ، استخدم الأمر على الجهاز الطرفي:

وضع ampy dataLoggerTS.py /main.py

واضغط على زر ESP - إعادة الضبط. سيكون لديك ESP يلتقط البيانات وتسجيلها على ThingSpeak.com حتى يتم الضغط على الجزء السفلي (انتظر حتى يومض LED 3 مرات وإيقاف تشغيل OLED).

الخطوة 11: تطبيق ThingView

تطبيق ThingView
تطبيق ThingView

يمكن عرض البيانات المسجلة مباشرة على موقع ThingSpeak.com أو عبر أحد التطبيقات ، على سبيل المثال ، عرض الأشياء!

ThingView هو تطبيق تم تطويره بواسطة CINETICA ، والذي يمكّنك من تصور قنوات ThingSpeak الخاصة بك بطريقة سهلة ، فقط أدخل معرف القناة وستكون جاهزًا للانطلاق.

للقنوات العامة ، سيحترم التطبيق إعدادات الويندوز الخاصة بك: اللون ومقياس الوقت ونوع الرسم البياني وعدد النتائج. يدعم الإصدار الحالي المخططات الخطية والعمودية ، ويتم عرض المخططات الفرعية كمخططات خطية.

بالنسبة للقنوات الخاصة ، سيتم عرض البيانات باستخدام الإعدادات الافتراضية ، حيث لا توجد طريقة لقراءة إعدادات النوافذ الخاصة باستخدام مفتاح API فقط.

يمكن تنزيل تطبيق ThingView لنظامي Android و IPHONE.

الخطوة 12: الخاتمة

استنتاج
استنتاج

كما هو الحال دائمًا ، آمل أن يساعد هذا المشروع الآخرين في العثور على طريقهم إلى عالم الإلكترونيات المثير!

للحصول على التفاصيل والرمز النهائي ، يرجى زيارة مستودع GitHub الخاص بي: IoT_TS_MQTT

لمزيد من المشاريع ، يرجى زيارة مدونتي: MJRoBot.org

Saludos من جنوب العالم!

نراكم في بلدي التعليمات القادمة!

شكرا لك،

مارسيلو

موصى به: