Intel Edison Bekerja dengan Intel IoT Analytics Cloud: Manajemen Perangkat

Manajemen perangkat Intel IoT Analytics

Terus bekerja dengan cloud Intel IoT Analytics akan fokus pada umpan balik dari perangkat, mengirim perintah untuk mengelola perangkat. Bagian pertama dari Intel Edison. Bekerja dengan cloud Intel IoT Analytics: pendaftaran dan pengiriman data . Kami menyadari operasi menyalakan / mematikan LED dan relay. Untuk menunjukkan, ambil sikap dari pos sebelumnya.
Untuk mengirim perintah ke perangkat, jenis komponen khusus digunakan - Aktuasi . Dalam posting sebelumnya, kami mempertimbangkan jenis komponen "sensor", yang memungkinkan Anda mengirim data dari perangkat. Actuation mentransmisikan data melalui protokol MQTT dan WebSocket. Jenis komponen ini memanggil perintah string perintah dan parameter nama / nilainya.

Mendaftarkan Aktuasi di Intel IoT Analytics Cloud
Pertimbangkan Aktuasi default , yang akan pas tidak berubah untuk LED. Buka bagian Akun , bagian Katalog , komponen Powerswitch.v1.0
Manajemen perangkat Intel IoT Analytics
Jendela properti
Manajemen perangkat Intel IoT Analytics
komponen Powerswitch.v1.0 Jenis komponen aktuator . Karena LED hanya bisa di dua negara, maka tipe datanya adalah Boolean . LED.v1.0 - perintah untuk LED. Kunci / nilai, nama - LED , nilai yang diterima adalah 0 atau 1 .
Relai adalah jenis komponen yang sama dengan LED, jadi kami juga membuat Actuator untuk relai.
Manajemen perangkat Intel IoT Analytics
Jenis komponen dibuat.

Mengkonfigurasi agen iotkit pada Intel Edison
Sekarang Anda harus masuk melalui SSH ke Intel Edison. Dalam posting sebelumnya, Wi-Fi telah dikonfigurasi, sehingga Anda dapat terhubung ke perangkat melalui LAN. Dukungan
komponen aktuasi telah diumumkan hanya dengan agen versi 1.5.2 dan lebih tinggi. Disarankan agar Anda memutakhirkan agen ke versi terbaru saat ini.

Cari tahu versi agen:
# iotkit-admin -V
Perintah pembaruan agen:
# npm pembaruan iotkit-agen

Dalam versi terbaru agen, menjadi mungkin untuk bekerja di WebSocket. Untuk bekerja di WebSocket, Anda perlu mengkonfigurasi agen dengan perintah:
# iotkit-admin protocol rest + ws Beralih

kembali ke mode MQTT:
# iotkit-admin protocol mqtt

Daftarkan Actuator untuk LED dan nyalakan Intel Edison.
Pendaftaran sensor dilakukan dengan perintah # iotkit-admin register [sensor_name] [sensor_type] . Kami menjalankan perintah:
# iotkit-admin register led1 powerswitch.v1.0
# iotkit-admin register relay1 relay.v1.0
Manajemen perangkat Intel IoT Analytics

Mempersiapkan sketsa untuk Arduino
Komponen terdaftar. Sekarang kita akan menyiapkan sketsa untuk Arduino, ambil contoh IoTKitActuationExample sebagai contoh .

Perhatikan kode:
Fungsi void setup () tidak berbeda dari contoh sebelumnya.
Dalam fungsi void loop () , sebuah fungsi diperkenalkan untuk secara berkala memeriksa pesan yang diterima, di mana json adalah penunjuk ke pesan dalam format JSON.
void loop() {
  iotkit.receive(callback);
  delay(5000);
}

Fungsi panggilan balik kosong (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;
  }

Jika data yang diterima ada, maka kami menganalisis lebih lanjut.
  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

Memeriksa perintah LED.v1.0 yang diterima, dan nilai "0" atau "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);
        }
      }
    }
  }


Sketsa akhir dengan sensor dan kontrol:
//LCD 
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDR    0x20 // Define I2C Address where the PCF8574T is
#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);
//BMP085 Barometric Pressure & Temp Sensor
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;

//for Intel Cloud
#include <IoTkit.h>    // include IoTkit.h to use the Intel IoT Kit
#include <Ethernet.h>  // must be included to use IoTkit
// create an object of the IoTkit class
IoTkit iotkit;
float temperature1;
int pressure1;
int moisturevalue1;
bool led1,relay1;

void setup() {  
  iotkit.begin();
  Serial.begin(9600);
  bmp.begin();
  //init LCD
  lcd.begin (20,4);
  lcd.setBacklightPin(BACKLIGHT,NEGATIVE); // init the backlight
  lcd.setBacklight(HIGH); // Backlight on
  lcd.home ();                  // go home
  lcd.setCursor ( 0, 0 );        
  lcd.print("Edison. Habrahabr");
  //Current state Actiator
  //LED  DFRobot  
  pinMode(8, OUTPUT);
  digitalWrite(8, !false);
  pinMode(9, OUTPUT);
  digitalWrite(9, false);
  //Send state Actiator
  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));
  //read
  temperature1=bmp.readTemperature();
  pressure1=bmp.readPressure();
  moisturevalue1=analogRead(0);
  //Console and Send to Intel Cloud
  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);
  //Get command for Actiator
  iotkit.receive(callback);
  //
  delay(1000);               // wait for a second
}

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
  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);
          //Send state Actiator
          iotkit.send("led1", 0);
        }
        if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
          Serial.println("Light on!");
          digitalWrite(8, !true);
          //Send state Actiator
          iotkit.send("led1", 0);
        }
      }
    }
  }
  //RELAY
  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);
          //Send state Actiator
          iotkit.send("relay1", 0);
        }
        if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
          Serial.println("Relay on!");
          digitalWrite(9, true);
          //Send state Actiator
          iotkit.send("relay1", 0);
        }
      }
    }
  }  
}


Mengirim
tim manajemen Kirim tim manajemen dari cloud Intel IoT Analytics. Buka bagian Kontrol . Pilih perangkat dan komponen.
Manajemen perangkat Intel IoT Analytics

Tambahkan tindakan untuk menghidupkan dan mematikan LED. Setelah mengisi kolom, klik tombol Tambahkan tindakan.
Manajemen perangkat Intel IoT Analytics

Kami melakukan hal yang sama untuk relay. Hasilnya, empat entri muncul di tabel. Untuk menyalakan LED, pilih baris terakhir dan klik tautan Kirim .
Manajemen perangkat Intel IoT Analytics

Setelah beberapa detik, LED akan menyala.
Manajemen perangkat Intel IoT Analytics

Sebagai rangkuman,
manajemen perangkat tidak lebih rumit daripada menerima data dari sensor. Pengembang harus menguraikan permintaan yang masuk dalam format JSON dan menerapkan logika yang sesuai.

Referensi
  1. Sketsa daftar kode IoTkit
  2. github.com - enableiotcom
  3. Panduan Memulai Edison - Windows
  4. Flashing Intel Edison (kabel) - Windows
  5. Cloud Intel IoT Analytics
  6. Kit Pengembang Intel Internet of Things (IoT) Panduan Pengguna IoT Analisis Berbasis Cloud November 2014

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


All Articles