سيركز العمل المتواصل مع Intel IoT Analytics cloud على التعليقات الواردة من الجهاز ، وإرسال الأوامر لإدارة الجهاز. الجزء الأول من إنتل إديسون. العمل مع السحابة Intel IoT Analytics: التسجيل وإرسال البيانات . ندرك عملية تشغيل / إيقاف تشغيل LED والترحيل. للتظاهر ، اتخذ موقفًا من وظيفة سابقة.لإرسال أوامر إلى الجهاز ، يتم استخدام نوع مكون خاص - تفعيل . في مقالة سابقة ، أخذنا في الاعتبار نوع "المستشعر" الذي يسمح لك بإرسال البيانات من الجهاز. يشتغل ينقل البيانات عبر بروتوكول MQTT وWebSocket. يستدعي هذا النوع من المكونات أمر سلسلة الأوامر ومعلمات الاسم / القيمة الخاصة به.تسجيل التشغيل في Intel IoT Analytics Cloudضع في اعتبارك الإصدار الافتراضي ، والذي سيتناسب مع LED. افتح قسم الحساب ، قسم الكتالوج ، مكون Powerswitch.v1.0 .
نافذة الخصائص
لمكون Powerswitch.v1.0 . نوع مكون المحرك . لان يمكن أن يكون LED في حالتين فقط ، ثم يكون نوع البيانات منطقيًا . LED.v1.0 - أمر LED. المفتاح / القيمة ، الاسم - LED ، القيمة المقبولة هي 0 أو 1 .التتابع هو نفس نوع المكون مع LED ، لذلك نقوم أيضًا بإنشاء مشغل للتتابع.
تم إنشاء أنواع المكونات.تكوين عامل iotkit على Intel Edisonالآن تحتاج إلى تسجيل الدخول عبر SSH إلى Intel Edison. في منشور سابق ، تم تكوين Wi-Fi ، حتى تتمكن من الاتصال بالجهاز عبر شبكة LAN. تم الإعلان عن دعممكون التشغيل فقط مع إصدار الوكيل 1.5.2 وأعلى. من المستحسن ترقية الوكيل إلى أحدث إصدار حالي.اكتشف إصدار الوكيل:# iotkit-admin -VAgent update command:# npm update iotkit-agentفي أحدث إصدار للوكيل ، أصبح من الممكن العمل على WebSocket. للعمل على WebSocket ، تحتاج إلى تكوين الوكيل باستخدام الأمر:# بروتوكول بروتوكول iotkit-admin rest + ws التبديلإلى وضع MQTT:# iotkit-admin protocol mqtt
قم بتسجيل المحرك الخاص بمصابيح LED والتتابع على Intel Edison.يتم تسجيل المستشعرات بواسطة الأمر # iotkit-admin register [sensor_name] [sensor_type] . نقوم بتنفيذ الأوامر:# تسجيل iotkit-admin led1 powerswitch.v1.0# تسجيل iotkit-admin relay1 relay.v1.0
تحضير رسم لاردوينويتم تسجيل المكونات. سنقوم الآن بإعداد رسم تخطيطي لـ Arduino ، ونأخذ IoTKitActuationExample كمثال .فكر في الرمز: لا تختلفوظيفة void setup () عن المثال السابق.في دالة void loop () ، يتم تقديم وظيفة للتحقق دوريًا من الرسائل المستلمة ، حيث يكون json مؤشرًا لرسالة بتنسيق JSON.void loop() {
iotkit.receive(callback);
delay(5000);
}
وظيفة رد اتصال باطلة (char * json)void callback(char* json) {
Serial.println(json);
aJsonObject* parsed = aJson.parse(json);
if (&parsed == NULL) {
// invalid or empty JSON
Serial.println("recieved invalid JSON");
return;
}
إذا كانت البيانات المستلمة موجودة ، فإننا نقوم بتحليلها بشكل إضافي. aJsonObject* component = aJson.getObjectItem(parsed, "component");
aJsonObject* command = aJson.getObjectItem(parsed, "command");
aJsonObject* argv = aJson.getObjectItem(parsed, "argv");
aJsonObject* argvArray = argv->child;
aJsonObject* name = argvArray->child; // name : on
aJsonObject* value = name->next; // value: 1/0
التحقق من أوامر LED.v1.0 المستلمة والقيم "0" أو "1" if ((component != NULL)) {
if (strcmp(component->valuestring, "power") == 0) {
if ((command != NULL)) {
if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
Serial.println("Light Off!");
pinMode(13, OUTPUT);
digitalWrite(13, false);
}
if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
Serial.println("Light on!");
pinMode(13, OUTPUT);
digitalWrite(13, true);
}
}
}
}
رسم نهائي مع أجهزة استشعار وضوابط:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDR 0x20
#define BACKLIGHT 7
#define LCD_EN 4
#define LCD_RW 5
#define LCD_RS 6
#define LCD_D4 0
#define LCD_D5 1
#define LCD_D6 2
#define LCD_D7 3
LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
#include <IoTkit.h> // include IoTkit.h to use the Intel IoT Kit
#include <Ethernet.h> // must be included to use IoTkit
IoTkit iotkit;
float temperature1;
int pressure1;
int moisturevalue1;
bool led1,relay1;
void setup() {
iotkit.begin();
Serial.begin(9600);
bmp.begin();
lcd.begin (20,4);
lcd.setBacklightPin(BACKLIGHT,NEGATIVE);
lcd.setBacklight(HIGH);
lcd.home ();
lcd.setCursor ( 0, 0 );
lcd.print("Edison. Habrahabr");
pinMode(8, OUTPUT);
digitalWrite(8, !false);
pinMode(9, OUTPUT);
digitalWrite(9, false);
iotkit.send("led1", 0);
iotkit.send("relay1", 0);
}
void loop() {
lcd.setCursor ( 0, 1 );
lcd.print("Tempera. = ");
lcd.print(bmp.readTemperature());
lcd.print(" *C");
lcd.setCursor ( 0, 2 );
lcd.print("Pressure = ");
lcd.print(bmp.readPressure());
lcd.print(" Pa");
lcd.setCursor ( 0, 3 );
lcd.print("Moisture Value = ");
lcd.print(analogRead(0));
temperature1=bmp.readTemperature();
pressure1=bmp.readPressure();
moisturevalue1=analogRead(0);
Serial.println("Sensors");
Serial.print("temperature1=");
Serial.println(temperature1);
iotkit.send("temperature1", temperature1);
delay(2000);
Serial.print("pressure1=");
Serial.println(pressure1);
iotkit.send("pressure1", pressure1);
delay(2000);
Serial.print("moisturevalue1=");
Serial.println(moisturevalue1);
moisturevalue1=20;
iotkit.send("moisturevalue1", moisturevalue1);
iotkit.receive(callback);
delay(1000);
}
void callback(char* json) {
Serial.println(json);
aJsonObject* parsed = aJson.parse(json);
if (&parsed == NULL) {
Serial.println("recieved invalid JSON");
return;
}
aJsonObject* component = aJson.getObjectItem(parsed, "component");
aJsonObject* command = aJson.getObjectItem(parsed, "command");
aJsonObject* argv = aJson.getObjectItem(parsed, "argv");
aJsonObject* argvArray = argv->child;
aJsonObject* name = argvArray->child;
aJsonObject* value = name->next;
if ((component != NULL)) {
if (strcmp(component->valuestring, "led1") == 0) {
if ((command != NULL)) {
if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
Serial.println("Light Off!");
digitalWrite(8, !false);
iotkit.send("led1", 0);
}
if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
Serial.println("Light on!");
digitalWrite(8, !true);
iotkit.send("led1", 0);
}
}
}
}
if ((component != NULL)) {
if (strcmp(component->valuestring, "relay1") == 0) {
if ((command != NULL)) {
if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
Serial.println("Relay Off!");
digitalWrite(9, false);
iotkit.send("relay1", 0);
}
if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
Serial.println("Relay on!");
digitalWrite(9, true);
iotkit.send("relay1", 0);
}
}
}
}
}
إرسالفرق الإدارة إرسال فرق الإدارة من Intel IoT Analytics cloud. افتح قسم التحكم . اختر جهازًا ومكونًا.
أضف إجراءات لتشغيل LED وإيقاف تشغيله. بعد ملء الحقول ، انقر فوق الزر إضافة إجراء.
نفعل نفس الشيء للمرحلات. نتيجة لذلك ، تظهر أربعة إدخالات في الجدول. لتشغيل LED ، حدد السطر الأخير وانقر على رابط إرسال .
بعد بضع ثوانٍ ، سيضيء مصباح LED.
للتلخيص ،إدارة الأجهزة ليست أكثر تعقيدًا من تلقي البيانات من أجهزة الاستشعار. مطلوب من المطور تحليل الطلب الوارد بتنسيق JSON وتطبيق المنطق المناسب.المراجع- IoTkit رمز رسم القائمة
- github.com - Enableiotcom
- اديسون دليل البدء - ويندوز
- امض انتل اديسون (سلكي) - ويندوز
- سحابة إنتل تحليلات إنترنت الأشياء
- مجموعة أدوات Intel Internet of Things (IoT) Developer Kit IoT Cloud-Based Cloud نوفمبر 2014