ربط المختبر الرقمي NR05 بإنترنت الأشياء



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

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

تحتوي منصة ThingSpeak على واجهة برمجة تطبيقات مطورة (واجهة برمجة التطبيقات) - واجهة بين الموقع وتطبيقاتك ، والتي لا تسمح لك فقط بإرسال البيانات وتخزينها والوصول إليها ، ولكنها توفر أيضًا طرقًا إحصائية مختلفة لمعالجتها. على سبيل المثال ، سننظر في قناة واحدة لجمع البيانات ؛ في المجمل ، يوفر النظام الأساسي ما يصل إلى 8 قنوات لكل مستخدم. باستخدام بيانات كل قناة ، يمكنك تنفيذ إجراءات منفصلة واستخدام النتائج حسب تقديرك.

للوصول إلى الإنترنت ، سنستخدم وحدة Wi-Fi استنادًا إلى شريحة ESP8266 مع إصدار البرامج الثابتة AT- 0.21 . تعمل هذه الشريحة الشعبية كأساس لبناء عدد كبير من الوحدات التي تختلف ماديًا في عدد المخرجات ونوع الهوائي وواجهة USB وميزات إضافية. من حيث المبدأ ، فإن أي جهاز مبني على أساس ESP8266 هو جهاز مكتفٍ ذاتيًا يمكن توصيل أجهزة الاستشعار الخارجية به ، ولكن هذا موضوع للنظر بشكل منفصل. في هذه الحالة ، نستخدم الوحدة فقط كجهاز للوصول إلى الإنترنت اللاسلكي ، وسوف نستخدمها للاتصال بأي نقطة وصول ونقل البيانات إلى ThingSpeak. يمكن الاطلاع على قائمة بجميع أوامر AT الثابتة لمقارنتها ببرنامج Arduino هنا .

يجب أن يقال بضع كلمات حول كيفية التحقق من إصدار البرنامج الثابت وكيفية ترقية الوحدة النمطية إذا كان الإصدار غير مناسب. للقيام بذلك ، قم بتوصيل الوحدة بمحول USB-UART ، على سبيل المثال BM8051، وإصدار الأمر AT + GMR. إذا تم عرض إصدار البرنامج الثابت على أنه 0021 ، فسيكون كل شيء في محله. إذا لم يكن الأمر كذلك ، فهناك طريقتان: تغيير برنامج Arduino وفقًا لعدم التطابق المحتمل لتنسيقات الأوامر ، أو تعيد تحميل ملفات الوحدة النمطية. تتظاهر مشكلات ESP8266 الوامضة بمقال منفصل ، لذلك لن نأخذها في الاعتبار هنا ، ولكننا ننصحك بالرجوع إلى المواد المنشورة على المواقع والمنتديات المتخصصة المخصصة لهذه الوحدة. كمستشعر درجة حرارة ، نستخدم مستشعر DS18B20 الموجود في مجموعة NR05. تحتوي مجموعة البرامج التعليمية على فصل حول توصيل واستخدام هذا المستشعر ، بالإضافة إلى أمثلة برمجة تتعلق بقراءة وعرض قياسات درجة الحرارة. يتم توصيل المستشعر بجهات الاتصال ذات التسمية المقابلة على لوحة التوسيع لمجموعة NR05.

كوحدة نمطية قائمة على ESP8266 ، يمكنك استخدام عدة أجهزة من مجموعة Master Kit: MP8266-01 و MP8266-03 و MP8266-07 و MP8266-12E وكذلك MP3508 . الجهاز الأخير هو لوحة المطور و "محشوة" إلى أقصى حد. لا يتطلب الأمر مثبتًا إضافيًا 3.3 فولت ومحول USB-UART للبرمجة - كل هذا موجود بالفعل على اللوحة.

بالنسبة للوحدات المتبقية ، قد يكون هناك حاجة إلى محول USB-UART للوميض إذا لزم الأمر ، ولكن هناك حاجة إلى مثبت 3.3 فولت (على سبيل المثال AMS1117) ، لأن مصدر هذا الجهد في لوحة Arduino Nano المدرجة في مجموعة NR05 لا يوفر التيار المطلوب ل مزود الطاقة ESP8266.

على أي حال ، في المشروع النهائي ، نستخدم فقط أربعة مخرجات ESP: الطاقة والأرض و RX و TX للتواصل مع Arduino.

الخوارزمية العامة لبرنامج Arduino هي كما يلي:
- التحقق من جاهزية ESP ؛
- إذا كان جاهزًا ، اتصل بنقطة الوصول ؛

(تتكرر الإجراءات الأخرى مرة واحدة في الدقيقة):
- نقرأ البيانات من مستشعر درجة الحرارة ؛
- عرض درجة الحرارة الحالية على مؤشر بطاقة التوسيع ؛
- إنشاء اتصال بموقع Thingspeak.com ؛
- نقل درجة الحرارة الحالية إلى القناة المقابلة للموقع.

حول النظرية ، ربما يكفي. دعنا ننتقل إلى الممارسة.

أولاً ، قم بالتسجيل مجانًا على Thingspeak.com واحصل على مفتاح API نتيجة للتسجيل ، والذي يجب استخدامه عند نقل البيانات إلى القناة. تتغير واجهة الموقع ، لذلك قد يكون وصفنا غير متناسق قليلاً من حيث ما هو مرئي في المتصفح. ولكن بشكل عام ، فإن الواجهة بديهية ، لذلك لا ينبغي أن تكون هناك أي مشاكل خطيرة عند التسجيل وإنشاء قناة جديدة.
لذا ، بعد التسجيل ، أنشئ قناة جديدة: Channels-My Channels-New Channel. يجب إعطاء القناة اسمًا ووصفًا موجزًا ​​، كما يمكن أن تكون القناة خاصة وعامة ، اخترها بنفسك. بعد إنشاء القناة ، يمكنك رؤية مفتاح API المطلوب ، نحتاج إلى مفتاح API للكتابة لكتابة البيانات إلى القناة.

يمكنك اختبار سجل البيانات بإدخال السطر التالي في سطر المستعرض:api.thingspeak.com/update؟key=yourAPIkey&field1=0
يمكن أن يكون الحرف الأخير في السلسلة (0) أي قيمة ، سيتم كتابته على القناة. بعد الضغط على Enter ، سيرد الموقع برقم يتوافق مع عدد القيم المسجلة في القناة. ضع في اعتبارك أن الحد الأدنى للفاصل الزمني بين التسجيلات هو 15 ثانية. الآن يمكنك نقل البيانات ، وتشكيل خطوط مماثلة في Arduino ونقلها باستخدام ESP8266 إلى قناتنا.

يتم عرض مخطط اتصال العناصر في الشكل التالي:



استخدمنا وحدة MP8266-07 ، لذلك كنا بحاجة إلى مثبت ومكثف. أيضًا ، للتشغيل الصحيح للوحدة ، من الضروري توصيل دبوس GPIO15 بالأرض ، ودبوس CH_PD (اختيار الرقاقة) بطاقة 3.3V. تربط الوحدة بثقة حتى هوائي مدمج بنقطة وصول تقع في غرفة مجاورة على مسافة حوالي 20 مترًا.

قائمة تخطيطية لاردوينو مع تعليقات مفصلة:
//
#include <DallasTemperature.h>
#include <OneWire.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
// ,
unsigned long pauseTime = 60000;
//
unsigned long currentTime;
unsigned long previousTime = 0;
// D10 D18B20
// ONE WIRE
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// WiFi
#define SSID «»
#define PASS «»
// IP thingspeak.com
#define IP «184.106.153.149»
// GET API thingspeak.com
String GET = «GET /update?key=API&field1=»;
// ESP8266
// AT- ;
// ( AT- v0.21 SDK 0.9.5
// esp8266.ru/esp8266-sdk-0-9-5-v0-21 )
SoftwareSerial esp(11, 12); // RX, TX
// LCD-
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);

void setup()
{
// :
esp.begin(9600); // - ESP8266 9600
Serial.begin(9600); // - COM- ( )
sensors.begin(); //
lcd.begin(16, 2); // LCD-
lcd.clear();
// ESP8266 AT
Send(«AT»);
delay(1000);
// OK,
if(esp.find(«OK»)){
Serial.println(«ESP8266 Ready: OK»);
connectWiFi();
previousTime = millis() + 2*pauseTime;
}
}

void loop(){
currentTime = millis();
if(currentTime — previousTime > pauseTime) {
//
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
//
char buffer[10];
String temp = dtostrf(tempC, 4, 1, buffer);
// thingspeak.com
updateData(temp);
lcd.setCursor(0,0);
lcd.print(temp);
lcd.print("\xDF"«C»); // \xDF —
previousTime = currentTime;
}
}

// ESP8266 thingspeak.com
void updateData(String data){
// thingspeak.com
String cmd = «AT+CIPSTART=\»TCP\",\"";
cmd += IP;
cmd += "\",80";
Send(cmd);
delay(3000);
if(esp.find(«OK»))
Serial.println(«CONNECT TO IP: OK»);
else
Serial.println(«CONNECT TO IP: Error»);
//
cmd = GET;
cmd += data;
cmd += "\r\n";
esp.print(«AT+CIPSEND=»);
esp.println(cmd.length());
// ESP8266
if(esp.find(">")){
Serial.print(">");
//
esp.print(cmd);
Serial.print(cmd);
if(esp.find(«OK»)) Serial.println(«DATA SEND: OK»);
else Serial.println(«DATA SEND: Error»);
}
else{
Send(«AT+CIPCLOSE»);
if(esp.find(«OK»)) Serial.println(«CONNECTION FOR IP CLOSE: OK»);
else Serial.println(«CONNECTION FOR IP CLOSE: Error»);
}
Serial.println();
}

// ESP8266
void Send(String cmd){
Serial.print(«SEND TO ESP8266: „);
esp.println(cmd);
Serial.println(cmd);
}

// WiFi
boolean connectWiFi(){
esp.println(“AT+CWMODE=1»);
delay(2000);
String cmd=«AT+CWJAP=\»";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Send(cmd);
delay(5000);
if(esp.find(«OK»)){
Serial.println(«CONNECT TO WIFI: OK»);
return true;
}
else{
Serial.println(«CONNECT TO WIFI: Error»);
return false;
}
}


يتم تجميع جميع العناصر ، ويتم إطلاق البرنامج:



وإليك كيف تبدو نتائج القياس على الموقع:



يعرض الرسم البياني الأول تغير درجة الحرارة بمرور الوقت ، والثاني هو رسم بياني تم إنشاؤه بواسطة أدوات التصور المستندة إلى MatLab المضمنة في ThingSpeak الذي يعرض عدد المرات خلال الـ 24 ساعة الماضية يتم قياس قيمة كل درجة حرارة. على الموقع ، يسمى هذا الرسم البياني "تغير درجة الحرارة" ، أقرب مصطلح روسي هو تقلب درجات الحرارة.

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

Source: https://habr.com/ru/post/ar394357/


All Articles