La poursuite du travail avec le cloud Intel IoT Analytics se concentrera sur les commentaires de l'appareil, en envoyant des commandes pour gérer l'appareil. La première partie d' Intel Edison. Travailler avec le cloud Intel IoT Analytics: enregistrement et envoi de données . Nous réalisons l'opération d'allumer / éteindre la LED et le relais. Pour démontrer, prenez position dans un post précédent.Pour envoyer des commandes à l'appareil, un type de composant spécial est utilisé - Actionnement . Dans un article précédent, nous avons considéré le type de «capteur» de composant, qui vous permet d'envoyer des données depuis l'appareil. L'activation transmet des données via le protocole MQTT et WebSocket. Ce type de composant appelle la commande chaîne de commande et ses paramètres nom / valeur.Enregistrement de l'activation dans le cloud Intel IoT AnalyticsConsidérez l' activation par défaut , qui restera inchangée pour la LED. Ouvrez la section Compte , la section Catalogue , le composant Powerswitch.v1.0 .
Fenêtre des propriétés du
composant Powerswitch.v1.0 . Type de composant actionneur . Parce que La LED ne peut être que dans deux états, alors le type de données est booléen . LED.v1.0 - commande pour la LED. Clé / valeur, nom - LED , la valeur acceptée est 0 ou 1 .Le relais est le même type de composant avec une LED, nous créons donc également un actionneur pour le relais.
Types de composants créés.Configuration de l'agent iotkit sur Intel EdisonVous devez maintenant vous connecter via SSH à Intel Edison. Dans un article précédent, le Wi-Fi a été configuré, vous pouvez donc vous connecter à l'appareil via LAN. La prise en charge ducomposant d' activation n'a été annoncée qu'avec la version 1.5.2 et supérieure de l'agent. Il est recommandé de mettre à niveau l'agent vers la dernière version actuelle.Découvrez la version de l'agent:# iotkit-admin -VCommande de mise à jour de l'agent:# npm update iotkit-agentDans la dernière version de l'agent, il est devenu possible de travailler sur WebSocket. Pour travailler sur WebSocket, vous devez configurer l'agent avec la commande:# iotkit-admin protocol rest + wsRevenez en mode MQTT:# iotkit-admin protocol mqtt
Actuator Intel Edison.# iotkit-admin register [_] [_]. :
# iotkit-admin register led1 powerswitch.v1.0
# iotkit-admin register relay1 relay.v1.0
Arduino. Arduino,
IoTKitActuationExample:void setup(), .
void loop(), , json — JSON.
void loop() {
iotkit.receive(callback);
delay(5000);
}
Fonction de rappel nul (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;
}
Si les données reçues sont présentes, nous les analysons plus en détail. 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
Vérification des commandes LED.v1.0 reçues et des valeurs «0» ou «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);
}
}
}
}
Croquis final avec capteurs et commandes:
#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);
}
}
}
}
}
Envoi d'équipes de gestion Envoyez des équipes de gestion à partir du cloud Intel IoT Analytics. Ouvrez la section Contrôle . Choisissez un appareil et un composant.
Ajoutez des actions pour allumer et éteindre la LED. Après avoir rempli les champs, cliquez sur le bouton Ajouter une action.
Nous faisons de même pour les relais. Par conséquent, quatre entrées apparaissent dans le tableau. Pour allumer la LED, sélectionnez la dernière ligne et cliquez sur le lien Envoyer .
Après quelques secondes, la LED s'allume.
Pour résumer, lagestion des appareils n'est pas plus compliquée que la réception de données de capteurs. Le développeur doit analyser la demande entrante au format JSON et appliquer la logique appropriée.Références- Croquis de la liste des codes IoTkit
- github.com - enableiotcom
- Guide de démarrage d'Edison - Windows
- Flash Edison Intel (câblé) - Windows
- Cloud Intel IoT Analytics
- Intel Internet of Things (IoT) Developer Kit IoT Cloud-Based Analytics User Guide November 2014