جدول المحتويات:
- الخطوة 1: BoM - فاتورة المواد
- الخطوة الثانية: تركيب مستشعر درجة الحرارة والرطوبة
- الخطوة الثالثة: تثبيت DS18B20 - مستشعر درجة الحرارة
- الخطوة 4: تثبيت BMP180
- الخطوة 5: قياس الطقس والارتفاع باستخدام BMP180
- الخطوة 6: The Complete HW
- الخطوة 7: إرسال البيانات إلى ThingSpeak
- الخطوة 8: إرسال البيانات البعيدة إلى ThingSpeak باستخدام ESP8266
- الخطوة 9: الملاحظات النهائية
- الخطوة 10: الخاتمة
فيديو: محطة أرصاد إنترنت الأشياء مع RPi و ESP8266: 10 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
في البرامج التعليمية السابقة ، كنا نلعب مع NodeMCU وأجهزة الاستشعار وتعلم كيفية التقاط البيانات وتسجيلها على منصة ThingSpeak (إنترنت الأشياء (IoT) التي تتيح لك جمع بيانات المستشعر وتخزينها في السحابة وتطوير تطبيقات إنترنت الأشياء):
صُنعت بسهولة: التقاط بيانات الطقس عن بُعد: الأشعة فوق البنفسجية ودرجة حرارة الهواء والرطوبة
مع هذا البرنامج التعليمي الجديد ، سوف نتعلم كيفية القيام بنفس الشيء ولكن في هذا الوقت ، باستخدام Raspberry Pi لالتقاط البيانات من عدة أجهزة استشعار مختلفة وكذلك استكشاف طرق مختلفة للتواصل بين الأجهزة والويب:
نوع المجسات والتجميع:
- DHT22 (درجة الحرارة والرطوبة) ==> الاتصال الرقمي
- BMP180 (درجة الحرارة والضغط) ==> بروتوكول I2C
- DS18B20 (درجة الحرارة) ==> بروتوكول سلك واحد
يوضح مخطط الكتلة ما سنحصل عليه في نهاية هذا المشروع:
الخطوة 1: BoM - فاتورة المواد
- Raspberry Pi V3 - 32.00 دولارًا أمريكيًا
- مستشعر درجة الحرارة والرطوبة النسبية DHT22 - 9.95 دولارًا أمريكيًا
- مقاومة 4K7 اوم
- DS18B20 مستشعر درجة حرارة مقاوم للماء - 5.95 دولار أمريكي
- مقاومة 4K7 اوم
- جهاز استشعار الضغط الجوي ودرجة الحرارة والارتفاع BMP180 - 6.99 دولار أمريكي
الخطوة الثانية: تركيب مستشعر درجة الحرارة والرطوبة
سيكون أول جهاز استشعار سيتم تركيبه هو DHT22 لالتقاط بيانات درجة حرارة الهواء والرطوبة النسبية. يوفر موقع ADAFRUIT معلومات رائعة حول تلك المستشعرات. فيما يلي ، تم الحصول على بعض المعلومات من هناك:
ملخص
تعتبر مستشعرات درجة الحرارة والرطوبة منخفضة التكلفة DHT أساسية جدًا وبطيئة ولكنها رائعة للهواة الذين يرغبون في القيام ببعض تسجيل البيانات الأساسية. تتكون مستشعرات DHT من جزأين ، مستشعر رطوبة سعوي وثرمستور. هناك أيضًا شريحة أساسية جدًا بالداخل تقوم ببعض التحويل التناظري إلى الرقمي وتبث إشارة رقمية مع درجة الحرارة والرطوبة. من السهل إلى حد ما قراءة الإشارة الرقمية باستخدام أي متحكم.
الخصائص الرئيسية DHT22:
- منخفض الكلفة
- من 3 إلى 5 فولت و I / O
- 2.5mA أقصى استخدام حالي أثناء التحويل (أثناء طلب البيانات)
- جيد لقراءات الرطوبة 0-100٪ بدقة 2-5٪
- جيد لقراءات درجة حرارة -40 إلى 125 درجة مئوية دقة ± 0.5 درجة مئوية
- معدل أخذ العينات لا يزيد عن 0.5 هرتز (مرة كل ثانيتين)
- حجم الجسم 15.1 مم × 25 مم × 7.7 مم
- 4 دبابيس بمسافة 0.1 بوصة
بمجرد أن تستخدم المستشعر عادةً على مسافات أقل من 20 مترًا ، يجب توصيل المقاوم 4K7 أوم بين دبابيس Data و VCC. سيتم توصيل دبوس بيانات الإخراج DHT22 بـ Raspberry GPIO 16. تحقق من الرسم التخطيطي الكهربائي أعلاه ، وقم بتوصيل المستشعر بدبابيس RPi على النحو التالي:
- السن 1 - Vcc ==> 3.3V
- دبوس 2 - البيانات ==> GPIO 16
- دبوس 3 - غير متصل
- دبوس 4 - Gnd ==> Gnd
لا تنس تثبيت المقاوم 4K7 أوم بين دبابيس Vcc والبيانات
بمجرد توصيل المستشعر ، يجب علينا أيضًا تثبيت مكتبته على RPi الخاص بنا.
تثبيت مكتبة DHT:
على Raspberry الخاص بك ، بدءًا من / home ، انتقل إلى / Documents
وثائق cd
قم بإنشاء دليل لتثبيت المكتبة والانتقال إلى هناك:
مكدير DHT22_Sensor
قرص مضغوط DHT22_Sensor
على المستعرض الخاص بك ، انتقل إلى Adafruit GitHub:
github.com/adafruit/Adafruit_Python_DHT
قم بتنزيل المكتبة بالنقر فوق الارتباط المضغوط للتنزيل الموجود على اليمين وفك ضغط الأرشيف في المجلد الذي تم إنشاؤه مؤخرًا Raspberry Pi. ثم انتقل إلى دليل المكتبة (مجلد فرعي يتم إنشاؤه تلقائيًا عند فك ضغط الملف) ، وقم بتنفيذ الأمر:
sudo python3 setup.py install
افتح برنامج اختبار (DHT22_test.py) من GITHUB الخاص بي
استيراد Adafruit_DHT
DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 رطوبة ، درجة حرارة = Adafruit_DHT.read_retry (DHT22Sensor ، DHTpin) إذا لم تكن الرطوبة بلا ودرجة الحرارة ليست بلا: طباعة ('درجة الحرارة = {0: 0.1f} * درجة الرطوبة = {1: 0.1 f}٪ '. تنسيق (درجة حرارة ، رطوبة)) وإلا: طباعة ("فشل في القراءة. حاول مرة أخرى!")
نفّذ البرنامج بالأمر:
python3 DHT22_test.py
تظهر شاشة الطباعة الطرفية أدناه النتيجة.
الخطوة الثالثة: تثبيت DS18B20 - مستشعر درجة الحرارة
نظرة عامة على جهاز الاستشعار:
سنستخدم في هذا البرنامج التعليمي نسخة مقاومة للماء من مستشعر DS18B20. إنه مفيد جدًا لدرجة الحرارة البعيدة في الظروف الرطبة ، على سبيل المثال في التربة الرطبة. المستشعر معزول ويمكنه إجراء القياسات حتى 125 درجة مئوية (لا ينصح Adafrut باستخدامه فوق 100 درجة مئوية بسبب غلاف الكابل PVC الخاص به).
DS18B20 هو مستشعر رقمي يجعله جيدًا للاستخدام حتى لمسافات طويلة! تتميز مستشعرات درجة الحرارة الرقمية المكونة من سلك واحد بأنها دقيقة إلى حد ما (± 0.5 درجة مئوية على جزء كبير من النطاق) ويمكن أن تعطي ما يصل إلى 12 بتًا من الدقة من المحول الرقمي إلى التناظري المدمج. إنها تعمل بشكل رائع مع NodeMCU باستخدام دبوس رقمي واحد ، ويمكنك حتى توصيل عدة منها بنفس الدبوس ، كل واحد لديه معرف 64 بت فريد تم نسخه في المصنع للتمييز بينها.
يعمل المستشعر من 3.0 إلى 5.0 فولت ، ما يعني أنه يمكن تشغيله مباشرة من 3.3 فولت التي يوفرها أحد دبابيس Raspberry (1 أو 17).
يحتوي المستشعر على 3 أسلاك:
- أسود: GND
- الأحمر: VCC
- الأصفر: بيانات سلك واحد
هنا ، يمكنك العثور على البيانات الكاملة: DS18B20 Datasheet
تركيب المستشعر:
اتبع الرسم البياني أعلاه وقم بإجراء الوصلات:
- Vcc ==> 3.3 فولت
- Gnd ==> Gnd
- البيانات ==> GPIO 4 (الافتراضي للمكتبة)
تثبيت مكتبة Python:
بعد ذلك ، دعنا نثبت مكتبة Python التي ستتعامل مع المستشعر:
تثبيت sudo pip3 w1thermsensor
قبل تشغيل البرنامج النصي لاختبار المستشعر ، تحقق من تمكين واجهة "1-Wire" في RPi (انظر أعلاه شاشة الطباعة)
لا تنس إعادة تشغيل RPi بعد تغيير تكوينه
اختبار المستشعر:
لاختبار المستشعر ، يمكن استخدام برنامج نصي بسيط من لغة بيثون:
وقت الاستيراد
من w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () بينما True: temperature = ds18b20Sensor.get_temperature () print ("درجة الحرارة٪ s مئوية"٪ درجة حرارة) وقت النوم (1)
الخطوة 4: تثبيت BMP180
نظرة عامة على جهاز الاستشعار:
إن BMP180 هو خليفة BMP085 ، وهو جيل جديد من مستشعرات الضغط الرقمية عالية الدقة لتطبيقات المستهلك. تم تحسين الأجهزة الإلكترونية ذات الطاقة المنخفضة والجهد المنخفض الخاصة بـ BMP180 للاستخدام في الهواتف المحمولة وأجهزة المساعد الرقمي الشخصي وأجهزة الملاحة بنظام تحديد المواقع العالمي (GPS) والمعدات الخارجية. مع ضوضاء منخفضة الارتفاع تبلغ 0.25 متر فقط في وقت التحويل السريع ، يوفر BMP180 أداءً فائقًا. تسمح واجهة I2C بتكامل النظام بسهولة مع متحكم دقيق. يعتمد BMP180 على تقنية مقاومة بيزو لقوة التوافق الكهرومغناطيسي والدقة العالية والخطية بالإضافة إلى الاستقرار على المدى الطويل.
يمكن العثور على ورقة بيانات BMP الكاملة هنا: BMP180 - مستشعر الضغط الرقمي
تركيب المستشعر: اتبع الرسم البياني أعلاه وقم بإجراء التوصيلات:
- فين ==> 3.3 فولت
- GND ==> GND
- SCL ==> GPIO 3
- SDA ==> GPIO 2
تمكين واجهة I2C
انتقل إلى تكوين RPi وتأكد من تمكين واجهة I2C. إذا لم يكن كذلك ، فقم بتمكينه وأعد تشغيل RPi.
باستخدام BMP180
إذا تم تثبيت كل شيء على ما يرام ، وتم توصيل كل شيء على ما يرام ، فأنت الآن جاهز لتشغيل Pi والبدء في رؤية ما يخبرك به BMP180 عن العالم من حولك.
أول شيء يجب فعله هو التحقق مما إذا كان Pi يرى BMP180 الخاص بك. جرب ما يلي في نافذة طرفية:
sudo i2cdetect -y 1
إذا نجح الأمر ، يجب أن ترى شيئًا مشابهًا لشاشة Terminal Printscreen أعلاه ، والتي توضح أن BMP180 موجود على القناة "77".
تثبيت مكتبة BMP180:
قم بإنشاء دليل لتثبيت المكتبة:
mkdir BMP180_Sensorcd BMP180_Sensor
على المستعرض الخاص بك ، انتقل إلى Adafruit GITHub:
github.com/adafruit/Adafruit_Python_BMP
قم بتنزيل المكتبة بالنقر فوق رابط التنزيل المضغوط الموجود على اليمين وفك ضغط الأرشيف في المجلد الذي تم إنشاؤه بواسطة Raspberry Pi. ثم انتقل إلى المجلد الفرعي الذي تم إنشاؤه وقم بتنفيذ الأمر التالي في دليل المكتبة:
sudo python3 setup.py install
افتح Python IDE الخاص بك وقم بإنشاء برنامج اختبار وقم بتسميته ، على سبيل المثال BMP180Test.py
استيراد Adafruit_BMP. BMP085 كـ BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} * C'.format (sensor.read_temperature ())) print (' Pressure = {0: 0.2f} Pa '. format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) طباعة (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))
قم بتنفيذ برنامج الاختبار:
python3 BMP180Test.py
تظهر شاشة الطباعة الطرفية أعلاه النتيجة.
لاحظ أنه يتم تقديم هذا الضغط في باسكال. انظر الخطوة التالية لتحسين عدم فهم هذه الوحدة.
الخطوة 5: قياس الطقس والارتفاع باستخدام BMP180
لنأخذ بعض الوقت لفهم المزيد حول ما سنحصل عليه ، من خلال قراءات BMP. يمكنك تخطي هذا الجزء من البرنامج التعليمي ، أو العودة لاحقًا.
إذا كنت تريد معرفة المزيد عن قراءات أجهزة الاستشعار ، فالرجاء الانتقال إلى هذا البرنامج التعليمي الرائع:
تم تصميم BMP180 لقياس الضغط الجوي بدقة. يختلف الضغط الجوي باختلاف الطقس والارتفاع.
ما هو الضغط الجوي؟
تعريف الضغط الجوي هو القوة التي يمارسها الهواء من حولك على كل شيء. وزن الغازات في الغلاف الجوي يخلق ضغطًا جويًا. وحدة الضغط الشائعة هي "رطل لكل بوصة مربعة" أو psi. سنستخدم هنا الترميز الدولي ، أي نيوتن لكل متر مربع ، والتي تسمى باسكال (Pa).
إذا أخذت عمودًا من الهواء بعرض 1 سم فسوف يزن حوالي 1 كجم
هذا الوزن ، الذي يضغط لأسفل على أثر ذلك العمود ، يخلق الضغط الجوي الذي يمكننا قياسه باستخدام مستشعرات مثل BMP180. نظرًا لأن هذا العمود من الهواء الذي يبلغ عرضه سم يزن حوالي 1 كجم ، فإن متوسط ضغط مستوى سطح البحر يبلغ حوالي 101325 باسكال ، أو أفضل ، 1013.25 هكتو باسكال (1 هكتو باسكال يُعرف أيضًا باسم ميليبار - ملي بار). سينخفض هذا بنسبة 4٪ لكل 300 متر تصعدها. كلما ارتفعت ، قل الضغط الذي ستلاحظه ، لأن العمود الموجود أعلى الغلاف الجوي أقصر بكثير وبالتالي يكون وزنه أقل. من المفيد أن تعرف ذلك ، لأنه من خلال قياس الضغط وإجراء بعض العمليات الحسابية ، يمكنك تحديد ارتفاعك.
ضغط الهواء عند 3،810 متر هو فقط نصف ذلك عند مستوى سطح البحر.
ينتج BMP180 الضغط المطلق بالباسكال (Pa). باسكال واحد هو مقدار ضئيل جدًا من الضغط ، تقريبًا المقدار الذي ستمارسه ورقة على المنضدة. سترى في كثير من الأحيان قياسات بالهكتوباسكال (1 hPa = 100 Pa). توفر المكتبة المستخدمة هنا مخرجات قيم الفاصلة العائمة في hPa ، والتي تساوي أيضًا ملي بار واحد (mbar).
فيما يلي بعض التحويلات إلى وحدات ضغط أخرى:
- 1 hPa = 100 Pa = 1 mbar = 0.001 بار
- 1 هيكتو باسكال = 0.75006168 ميلليمتر زئبق
- 1 hPa = 0.01450377 psi (جنيه لكل بوصة مربعة)
- 1 hPa = 0.02953337 بوصة زئبقية (بوصة من الزئبق)
- 1 hpa = 0.00098692 atm (أجواء قياسية)
تأثيرات درجة الحرارة
لأن درجة الحرارة تؤثر على كثافة الغاز ، وتؤثر الكثافة على كتلة الغاز ، وتؤثر الكتلة على الضغط (يا للعجب) ، فإن الضغط الجوي سيتغير بشكل كبير مع درجة الحرارة. يعرف الطيارون هذا باسم "ارتفاع الكثافة" ، مما يجعل الإقلاع في يوم بارد أسهل من اليوم الحار لأن الهواء أكثر كثافة وله تأثير ديناميكي هوائي أكبر. للتعويض عن درجة الحرارة ، يشتمل BMP180 على مستشعر درجة حرارة جيد إلى حد ما بالإضافة إلى مستشعر ضغط.
لإجراء قراءة للضغط ، عليك أولاً أن تأخذ قراءة درجة الحرارة ، ثم تجمعها مع قراءة الضغط الخام للتوصل إلى قياس ضغط نهائي معادل لدرجة الحرارة. (تجعل المكتبة كل هذا سهلاً للغاية.)
قياس الضغط المطلق
إذا كان تطبيقك يتطلب قياس الضغط المطلق ، فكل ما عليك فعله هو الحصول على قراءة لدرجة الحرارة ، ثم إجراء قراءة الضغط (انظر مثال الرسم للحصول على التفاصيل). ستكون القراءة النهائية للضغط بوحدة hPa = mbar. إذا كنت ترغب في ذلك ، يمكنك تحويل هذا إلى وحدة مختلفة باستخدام عوامل التحويل المذكورة أعلاه.
لاحظ أن الضغط المطلق للغلاف الجوي سيختلف باختلاف الارتفاع وأنماط الطقس الحالية ، وكلاهما من الأشياء المفيدة للقياس.
ملاحظات الطقس
الضغط الجوي في أي مكان على الأرض (أو في أي مكان به غلاف جوي) ليس ثابتًا. يؤدي التفاعل المعقد بين دوران الأرض وميل المحور والعديد من العوامل الأخرى إلى تحرك مناطق ذات ضغط أعلى وأقل ، مما يؤدي بدوره إلى التغيرات في الطقس التي نراها كل يوم. من خلال مراقبة التغيرات في الضغط ، يمكنك توقع التغيرات قصيرة المدى في الطقس. على سبيل المثال ، عادةً ما يعني انخفاض الضغط طقسًا رطبًا أو اقتراب عاصفة (نظام ضغط منخفض يتحرك إلى الداخل). ارتفاع الضغط يعني عادة أن الطقس الصافي يقترب (نظام الضغط العالي يتحرك من خلاله). لكن تذكر أن الضغط الجوي يختلف أيضًا باختلاف الارتفاع. سيكون الضغط المطلق في منزلي ، Lo Barnechea في تشيلي (ارتفاع 950 مترًا) دائمًا أقل من الضغط المطلق في سان فرانسيسكو على سبيل المثال (أقل من مترين ، مستوى سطح البحر تقريبًا). إذا أبلغت محطات الطقس للتو عن ضغطها المطلق ، فسيكون من الصعب مقارنة قياسات الضغط مباشرة من موقع إلى آخر (وتعتمد تنبؤات الطقس على نطاق واسع على القياسات من أكبر عدد ممكن من المحطات).
لحل هذه المشكلة ، تقوم محطات الطقس دائمًا بإزالة تأثيرات الارتفاع من قراءات الضغط المُبلغ عنها عن طريق إضافة الضغط الثابت المكافئ رياضيًا لجعله يبدو كما لو تم أخذ القراءة عند مستوى سطح البحر. عند القيام بذلك ، فإن القراءة الأعلى في سان فرانسيسكو عن Lo Barnechea ستكون دائمًا بسبب أنماط الطقس ، وليس بسبب الارتفاع.
للقيام بذلك ، توجد وظيفة في المكتبة تسمى مستوى سطح البحر (P ، A). هذا يأخذ الضغط المطلق (P) في hPa ، والارتفاع الحالي للمحطة (A) بالأمتار ، ويزيل تأثيرات الارتفاع من الضغط. يمكنك استخدام ناتج هذه الوظيفة لمقارنة قراءات الطقس مباشرة بمحطات أخرى حول العالم.
تحديد الارتفاع
نظرًا لاختلاف الضغط مع الارتفاع ، يمكنك استخدام مستشعر ضغط لقياس الارتفاع (مع بعض المحاذير). متوسط ضغط الغلاف الجوي عند مستوى سطح البحر هو 1013.25 hPa (أو mbar). هذا ينخفض إلى الصفر وأنت تتسلق نحو فراغ الفضاء. نظرًا لأن منحنى هذا الانخفاض المفاجئ مفهوم جيدًا ، يمكنك حساب فرق الارتفاع بين قياسين للضغط (p و p0) باستخدام معادلة محددة.
إذا كنت تستخدم ضغط مستوى سطح البحر (1013.25 hPa) كضغط أساسي (p0) ، فسيكون ناتج المعادلة هو الارتفاع الحالي فوق مستوى سطح البحر. هناك وظيفة في المكتبة تسمى الارتفاع (P ، P0) تتيح لك الحصول على "الارتفاع المحسوب".
تم استخراج التفسير أعلاه من البرنامج التعليمي BMP 180 Sparkfun.
الخطوة 6: The Complete HW
الخطوة 7: إرسال البيانات إلى ThingSpeak
في هذه المرحلة ، تعلمنا كيفية إعداد RPi لالتقاط البيانات من جميع أجهزة الاستشعار الثلاثة ، وطباعتها على الجهاز. حان الوقت الآن لمعرفة كيفية إرسال هذه البيانات إلى منصة إنترنت الأشياء ThingSpeak.
هيا نبدأ!
أولاً ، يجب أن يكون لديك حساب في ThinkSpeak.com
اتبع التعليمات لإنشاء قناة ولاحظ معرف القناة ومفتاح واجهة برمجة التطبيقات للكتابة
قم بتنزيل Python Script من GitHub الخاص بي: localData ToTS_v1_EXT.py
دعونا نعلق على أجزاء الكود الأكثر أهمية:
أولاً ، دعنا نستورد مكتبة ThingSpeak ، ونحدد عميل WiFi ، ونحدد بيانات اعتماد جهاز التوجيه المحلي و Thinkspeak:
استيراد الأشياء
هناك عدة طرق للتواصل مع ThingSpeak ، أبسط طريقة هي استخدام مكتبة العميل لواجهة برمجة تطبيقات Thingspeak.com التي طورها Mikolaj Chwaliz و Keith Ellis.
يمكن تنزيل المكتبة من https://github.com/mchwalisz/thingspeak أو استخدام PIP على الجهاز:
تثبيت sudo pip3
بعد ذلك ، داخل البرنامج النصي ، قم بتحديث بيانات اعتماد قناة ThingSpeak
chId = 9999999 # أدخل معرّف قناتك
tsKey = 'أدخل بقناتك WRITE KEY' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId، tsUrl، tsKey)
الآن ، لنبدأ تشغيل أجهزة الاستشعار الثلاثة:
# DS18B20 مكتبة 1-سلك
من w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor () # بشكل افتراضي يتم استخدام GPIO 4 بواسطة المكتبة # DHT22 استيراد المكتبة Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 BMP180 مكتبة استيراد Adafruit_BMP085. يجب عليك تحديد الارتفاع الحقيقي حيث توجد محطة الطقس الخاصة بك ، وتحديث المتغير العالمي "altReal". في حالتي ، تقع محطتي على ارتفاع 950 مترًا فوق مستوى سطح البحر
altReal العالمية
altReal = 950
بمجرد الدخول مع الارتفاع الحقيقي للمحطة كمدخل ، يمكننا الحصول على الضغط المطلق وضغط مستوى سطح البحر ودرجة الحرارة والارتفاع باستخدام الوظيفة bmp180GetData (الارتفاع):
def bmp180GetData (ارتفاع):
temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres / pow (1.0 - height / 44330.0، 5.255) temp = round (temp، 1) pres = round (pres / 100) ، 2) # الضغط المطلق في hPa (أو mbar) alt=round (alt) presSeaLevel = round (presSeaLevel / 100، 2) # الضغط المطلق في hPa (أو mbar) إرجاع درجة الحرارة ، pres ، alt ، presSeaLevel
ستعيد الوظيفة getLocalData () جميع البيانات المحلية التي تم التقاطها بواسطة محطتنا:
def getLocalData ():
global timeString global humLab global tempExt global tempLab global presSL global presAbs # احصل على وقت القراءة الآن = datetime.datetime.now () timeString = now.strftime ("٪ Y-٪ m-٪ d٪ H:٪ M") # قراءة درجة الحرارة الخارجية (مسافة 1 متر) tempExt = round (ds18b20Sensor.get_temperature () ، 1) tempLab ، presAbs ، altLab ، presSL = bmp180GetData (altReal) humDHT ، tempDHT = Adafruit_DHT.read_retry (DHTpinSensor ، DHT is not is no. و tempDHT ليس بلا: humLab = round (humDHT
بمجرد حصولك على جميع البيانات التي تم التقاطها بواسطة الوظائف المذكورة أعلاه ، يجب عليك إرسالها إلى ThingSpeak. ستفعل ذلك باستخدام الوظيفة sendDataTs ():
def sendDataTs ():
data = {"field1": tempLab، "field2": tempExt، "field3": humLab، "field4": presSL، "field5": altLab} ts.update (بيانات) طباعة ("[INFO] البيانات المرسلة لـ 5 حقول: "، tempLab ، tempExt ، humLab ، presSL ، altLab)
مع تحديث بيانات قناتك ، احفظ البرنامج النصي وقم بتنفيذه على جهازك الطرفي:
sudo Python3 localData_ToTs_v1_EXT.py
حول بروتوكولات الاتصال
لاحظ أنه باستخدام "مكتبة Thingspeak" ، يتم استيراد "مكتبة الطلبات" ، وهي مكتبة Apache2 HTTP مرخصة ، مكتوبة بلغة Python. يمكن العثور على الوثائق الرسمية لطلب التثبيت هنا:
docs.python-requests.org/en/latest/user/install/
إذا لزم الأمر ، قبل تشغيل البرنامج النصي ، يمكنك التحقق من تثبيت مكتبة الطلبات:
طلبات تثبيت sudo pip3
اختياريًا ، يمكنك استخدام MTTQ كطريقة لإرسال البيانات إلى ThingSpeak. يختلف MQTT عن HTTP ، بمجرد تصميمه خصيصًا ليكون خفيف الوزن ومخصصًا للأجهزة المدمجة ذات أداء ذاكرة الوصول العشوائي ووحدة المعالجة المركزية المنخفضة. أيضًا ، في معظم الحالات ، تستخدم MQTT نطاقًا تردديًا أقل.
راجع هذا البرنامج التعليمي: قم بتحديث قناة ThingSpeak باستخدام MQTT على Raspberry Pi لمزيد من التفاصيل.
الخطوة 8: إرسال البيانات البعيدة إلى ThingSpeak باستخدام ESP8266
في هذه الخطوة ، سنستخدم نفس HW الموضح في البرنامج التعليمي muy:
صُنعت بسهولة: التقاط بيانات الطقس عن بُعد: الأشعة فوق البنفسجية ودرجة حرارة الهواء والرطوبة
الكود الذي سنستخدمه هنا هو في الأساس نفس الكود المستخدم في هذا البرنامج التعليمي. دعونا نعلق على أجزاء الكود الأكثر أهمية:
أولاً ، دعنا نتصل بمكتبة ESP8266 ، ونحدد عميل WiFi ، ونحدد بيانات اعتماد جهاز التوجيه المحلي و Thinkspeak:
/ * NodeMCU ESP12-E * /
# تضمين عميل WiFiClient ؛ const char * MY_SSID = "أدخل مع SSDID الخاص بك" ؛ const char * MY_PWD = "أدخل بكلمة المرور" ؛ / * Thinkspeak * / const char * TS_SERVER = "api.thingspeak.com" ؛ String TS_API_KEY = "أدخل بمفتاح الكتابة" ؛
ثانيًا ، لنقم بتضمين مكتبة مهمة جدًا لمشاريع إنترنت الأشياء: SimpleTimer.h:
/ * TIMER * /
# تضمين مؤقت SimpleTimer ؛
ثالثًا ، أثناء الإعداد () ، سنبدأ الاتصال التسلسلي ، واستدعاء الوظيفة connectWiFi () وتحديد المؤقتات. لاحظ أن سطر التعليمات البرمجية: timer.setInterval (60000L، sendDataTS)؛ سوف تستدعي الوظيفة sendDataTS () كل 60 ثانية ، من أجل تحميل البيانات إلى قناة ThinkSpeak.
الإعداد باطل()
{… Serial.begin (115200) ، تأخير (10) ؛ … connectWifi () ؛ timer.setInterval (60000L، sendDataTS) ، …}
أخيرًا وليس آخرًا ، أثناء الحلقة () ، الأمر الوحيد المطلوب هو بدء المؤقت وهذا كل شيء!
حلقة فارغة()
{… timer.run () ، // يبدأ SimpleTimer}
أدناه ، يمكنك رؤية الوظيفتين المهمتين المستخدمتين للتعامل مع اتصالات Thinkspeak:
اتصال ESP12-E بشبكة WiFi الخاصة بك:
/***************************************************
* توصيل WiFi ************************************************* *** / void connectWifi () {Serial.print ("Connecting to" + * MY_SSID) ؛ WiFi.begin (MY_SSID ، MY_PWD) ؛ while (WiFi.status ()! = WL_CONNECTED) {delay (1000) ؛ Serial.print (".") ؛ } Serial.println ("") ؛ Serial.println ("WiFi متصل") ؛ Serial.println ("") ؛ }
إرسال البيانات ESP12-E إلى ThinkSpeak:
***************************************************
* إرسال البيانات إلى قناة Thinkspeak ********************************************** ****** / void sendDataTS (باطل) {if (client.connect (TS_SERVER، 80)) {String postStr = TS_API_KEY؛ postStr + = "& field6 =" ؛ postStr + = سلسلة (درجة الحرارة) ؛ postStr + = "& field7 =" ؛ postStr + = سلسلة (همهمة) ؛ postStr + = "& field8 =" ؛ postStr + = String (dataSensorUV) ؛ postStr + = "\ r / n / r / n"؛ client.print ("POST / update HTTP / 1.1 / n") ؛ client.print ("المضيف: api.thingspeak.com / n") ؛ client.print ("الاتصال: إغلاق / n") ؛ client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n") ؛ client.print ("نوع المحتوى: application / x-www-form-urlencoded / n") ؛ client.print ("طول المحتوى:") ؛ client.print (postStr.length ()) ؛ client.print ("\ n / n") ؛ client.print (postStr) ؛ تأخير (1000) ؛ } أرسلت ++ ؛ client.stop () ؛ }
يمكن العثور على الكود الكامل على جيثب الخاص بي: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT
بمجرد تحميل الرمز إلى NodeMCU الخاص بك. لنقم بتوصيل بطارية خارجية وإجراء بعض القياسات تحت أشعة الشمس. وضعت محطة التحكم عن بعد على السطح وبدأت في التقاط البيانات على موقع ThingSpeak.com كما هو موضح في الصور أعلاه.
الخطوة 9: الملاحظات النهائية
كان الغرض الرئيسي من هذا البرنامج التعليمي هو إظهار كيفية توصيل Raspberry Pi بـ ThingSpeak. يعد هذا أمرًا رائعًا لالتقاط البيانات وتسجيلها على منصة إنترنت الأشياء.
باستخدام الفرصة ، قمنا أيضًا بإرسال البيانات إلى تلك القناة المحددة ، والتقاطها من محطة بعيدة باستخدام ESP8266. هذا نهج جيد ، لكنه ليس الأفضل. نظرًا لأن لدينا عملية "غير متزامنة" ، في بعض الأحيان ، يحاول كل من RPi و ESP8266 تسجيل ما تم دحضه بواسطة ThingSpeak في نفس الوقت (أو بفاصل زمني صغير). المثالي هو إرسال ESP8266 للبيانات محليًا إلى Raspberry Pi والأخير هو المسؤول عن التعامل مع جميع البيانات. عند القيام بذلك ، يمكن لـ "المحطة الرئيسية" (Raspberry Pi) القيام بثلاثة أشياء:
- سجل جميع البيانات في قاعدة بيانات محلية
- تقديم جميع البيانات على صفحة ويب محلية (باستخدام Flask كما هو موضح في الصورة أعلاه)
- إرسال جميع البيانات إلى ThingSpeak في نفس الوقت.
في برنامج تعليمي مستقبلي ، سوف نستكشف هذه الخيارات.
الخطوة 10: الخاتمة
كما هو الحال دائمًا ، آمل أن يساعد هذا المشروع الآخرين في العثور على طريقهم إلى عالم الإلكترونيات المثير!
للحصول على التفاصيل والرمز النهائي ، يرجى زيارة مستودع GitHub الخاص بي: RPi-NodeMCU-Weather-Station
لمزيد من المشاريع ، يرجى زيارة مدونتي: MJRoBot.org
ابقوا متابعين! البرنامج التعليمي التالي سنرسل البيانات من محطة طقس بعيدة إلى محطة مركزية ، بناءً على خادم ويب Raspberry Pi:
Saludos من جنوب العالم!
نراكم في بلدي التعليمات القادمة!
شكرا لك،
مارسيلو
موصى به:
إنترنت الأشياء - انشر البيانات إلى كلام الأشياء باستخدام ESP8266: 3 خطوات
إنترنت الأشياء | نشر البيانات في موقع Thingspeak باستخدام ESP8266: في الوقت الحاضر ، يتجه إنترنت الأشياء وهناك الكثير من البيانات التي يمكن تحميلها عبر السحابة وتحليل البيانات. تقوم المستشعرات الصغيرة بتحديث البيانات الموجودة على السحابة ويعمل المحرك على طرف آخر عليها ، وسأشرح أحد أمثلة إنترنت الأشياء. أنا هذا المقال وأنا
وحدة طاقة إنترنت الأشياء: إضافة ميزة قياس طاقة إنترنت الأشياء إلى وحدة التحكم في شحن الطاقة الشمسية لدي: 19 خطوة (بالصور)
وحدة طاقة إنترنت الأشياء: إضافة ميزة قياس طاقة إنترنت الأشياء إلى وحدة التحكم في شحن الطاقة الشمسية الخاصة بي: مرحبًا بالجميع ، أتمنى أن تكونوا جميعًا رائعون! في هذا الدليل ، سأوضح لك كيف صنعت وحدة قياس طاقة إنترنت الأشياء التي تحسب كمية الطاقة التي تولدها الألواح الشمسية الخاصة بي ، والتي يتم استخدامها بواسطة جهاز التحكم في الشحن الشمسي الخاص بي
أساسيات إنترنت الأشياء: توصيل إنترنت الأشياء الخاص بك بالسحابة باستخدام نظام تشغيل Mongoose: 5 خطوات
أساسيات إنترنت الأشياء: توصيل إنترنت الأشياء الخاص بك بالسحابة باستخدام نظام التشغيل Mongoose: إذا كنت شخصًا يعمل في مجال الإصلاح والإلكترونيات ، في كثير من الأحيان ، ستصادف مصطلح إنترنت الأشياء ، والذي يُختصر عادةً باسم IoT ، وهذا هو يشير إلى مجموعة من الأجهزة التي يمكنها الاتصال بالإنترنت! أن تكون مثل هذا الشخص
مراقبة تجمع إنترنت الأشياء باستخدام لوحة الأشياء: 8 خطوات
مراقبة IoT Pool with ThingsBoard: سيوضح هذا التوجيه كيفية مراقبة الأس الهيدروجيني و ORP ودرجة حرارة تجمع أو منتجع صحي وتحميل البيانات إلى خدمة التصور والتخزين في ThingsBoard.io
المدخلات التناظرية لإنترنت الأشياء - الشروع في استخدام إنترنت الأشياء: 8 خطوات
المدخلات التناظرية لإنترنت الأشياء - الشروع في استخدام إنترنت الأشياء: يعد فهم المدخلات التناظرية جزءًا مهمًا من فهم كيفية عمل الأشياء من حولنا ، ومعظم إن لم يكن كل المستشعرات عبارة عن مستشعرات تناظرية (في بعض الأحيان يتم تحويل هذه المستشعرات إلى رقمية). على عكس المدخلات الرقمية التي يمكن تشغيلها أو إيقاف تشغيلها فقط ، فإن الإدخال التناظري