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 CloudPertimbangkan Aktuasi default , yang akan pas tidak berubah untuk LED. Buka bagian Akun , bagian Katalog , komponen Powerswitch.v1.0
Jendela properti
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.
Jenis komponen dibuat.Mengkonfigurasi agen iotkit pada Intel EdisonSekarang Anda harus masuk melalui SSH ke Intel Edison. Dalam posting sebelumnya, Wi-Fi telah dikonfigurasi, sehingga Anda dapat terhubung ke perangkat melalui LAN. Dukungankomponen 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 -VPerintah pembaruan agen:# npm pembaruan iotkit-agenDalam versi terbaru agen, menjadi mungkin untuk bekerja di WebSocket. Untuk bekerja di WebSocket, Anda perlu mengkonfigurasi agen dengan perintah:# iotkit-admin protocol rest + ws Beralihkembali 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
Mempersiapkan sketsa untuk ArduinoKomponen 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:
#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);
}
}
}
}
}
Mengirimtim manajemen Kirim tim manajemen dari cloud Intel IoT Analytics. Buka bagian Kontrol . Pilih perangkat dan komponen.
Tambahkan tindakan untuk menghidupkan dan mematikan LED. Setelah mengisi kolom, klik tombol Tambahkan tindakan.
Kami melakukan hal yang sama untuk relay. Hasilnya, empat entri muncul di tabel. Untuk menyalakan LED, pilih baris terakhir dan klik tautan Kirim .
Setelah beberapa detik, LED akan menyala.
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- Sketsa daftar kode IoTkit
- github.com - enableiotcom
- Panduan Memulai Edison - Windows
- Flashing Intel Edison (kabel) - Windows
- Cloud Intel IoT Analytics
- Kit Pengembang Intel Internet of Things (IoT) Panduan Pengguna IoT Analisis Berbasis Cloud November 2014