Table des matières:

PInt@t10n : Système de surveillance d'usine intelligent : 9 étapes
PInt@t10n : Système de surveillance d'usine intelligent : 9 étapes

Vidéo: PInt@t10n : Système de surveillance d'usine intelligent : 9 étapes

Vidéo: PInt@t10n : Système de surveillance d'usine intelligent : 9 étapes
Vidéo: BOSCHE - Dehnungssensor T10N 2024, Juillet
Anonim
PInt@t10n: Système de surveillance intelligent des installations
PInt@t10n: Système de surveillance intelligent des installations

Ce projet a été créé en tant que test pour le cloud ibm iot. Nous utilisons un esp-8266 pour envoyer et recevoir des données vers et depuis le cloud ibm. La communication entre l'esp et le cloud ibm se fait via MQTT.

Pour gérer toutes les données et présenter à l'utilisateur une interface utilisateur, nous utilisons node-red. C'est très convivial pour les débutants.

Pour commencer, vous avez besoin de:

  • Esp-8266
  • capteur de température/humidité dht 11/22
  • diode photosensible (mesure de la lumière)
  • avertisseur sonore
  • capteur d'humidité du sol
  • compte cloud ibm

Étape 1: Connectez vos capteurs

Connectez vos capteurs
Connectez vos capteurs
Connectez vos capteurs
Connectez vos capteurs
Connectez vos capteurs
Connectez vos capteurs

Comme nous l'avons mentionné précédemment, nous allons utiliser l'esp8266 pour lire et envoyer les données du capteur. Pour ce tutoriel, nous allons supposer que vous savez comment connecter vos capteurs à votre micro contrôleur. Vous devez également déjà savoir comment télécharger du code sur un esp8266.

Notre modèle esp n'a qu'un seul port analogique, nous avons donc choisi de recevoir des informations analogiques de notre capteur de lumière, car nous pouvons alors surveiller la quantité de lumière que reçoit la plante.

Tous les autres capteurs sont connectés numériquement. Notre capteur DHT11 envoie des données numériquement et nous utilisons la bibliothèque dht pour interpréter les données des capteurs.

Ci-dessus, vous pouvez trouver un schéma de circuit pour les capteurs que nous avons utilisés. Mais gardez à l'esprit que les capteurs que nous avons utilisés sont souvent livrés avec un module afin que vous puissiez facilement le connecter à votre microcontrôleur sans toutes les résistances supplémentaires que nous avons incluses dans le schéma.

Étape 2: Coder

C'est le croquis arduino que nous avons utilisé. Vous pouvez en apprendre davantage sur le fonctionnement du code si vous lisez les commentaires.

#include ArduinoJson.h#include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h

#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define wetPin 4 #define DHTType DHT11 DHT dht(DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; température flottante = 0; flotteur humidité = 0; humidité booléenne = faux; lumière int = 0; const char* ssid = STASSID; const char* mot de passe = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; Client PubSubClient (espClient); long lastMsg = 0; char msg[50]; valeur entière = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d:cmfwqk:ESP8266:ESP" #define MQTT_USER "use-token-auth" #define_ MQTTcll_2018TOKEN iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitches.h" // notes dans la mélodie: // durées des notes: 4 = quart note, 8 = croche, etc.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi() { delay(10); // On commence par se connecter à un réseau WiFi Serial.println(); Serial.print("Connexion à "); Serial.println(ssid); WiFi.begin(ssid, mot de passe); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connecté"); Serial.println("Adresse IP: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrivé ["); Serial.print(sujet); Serial.print("] "); for (int i = 0; i < longueur; i++) { Serial.print((char)payload); } Serial.println(); StaticJsonDocument jsonBuffer; deserializeJson(jsonBuffer, charge utile); JsonObject racine = jsonBuffer.as(); if(root["chanson"]=="darude"){ darude(); } if(root["chanson"]=="starwars"){ starwars(); } if(root["chanson"]=="jacques"){ Serial.println("jakakakakakkakaka"); Jacques(); } } void reconnect() { // Boucle jusqu'à ce que nous soyons reconnectés while (!client.connected()) { Serial.print("Tentative de connexion MQTT…"); // Tentative de connexion if (client.connect(MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) { Serial.println("connecté"); client.subscribe(MQTT_TOPIC_DISPLAY); } else { Serial.print("échec, rc="); Serial.print(client.state()); Serial.println(" réessayez dans 5 secondes"); // Attendre 5 secondes avant de réessayer delay(5000); } } } void setup() { Serial.begin(9600); pinMode(humiditéPin, INPUT); dht.begin(); pinMode(0, SORTIE); setup_wifi(); client.setServer(mqtt_server, MQTT_PORT); client.setCallback(rappel); retard(20); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); humidité = digitalRead(humiditéPin); lumière = lecture analogique (A0); temp = dht.readTemperature(); humidité= dht.readHumidity(); Serial.println("Temperature =" + String(temp, 1) + "\nHumidity =" + String(humidité, 1) + "\nHumidité: "+String(humidité)+"\nLight: "+String(light)); Charge utile de la chaîne = "{"ts\":{"t\": "+String(temp, 1)+", \"h\": "+String(humidité, 1)+"}, \"ms \":{"m\": "+String(humidité)+"}, \"ls\":{"l\":"+String(light)+"}}"; Serial.println (charge utile); if (client.publish(MQTT_TOPIC, (char*) payload.c_str())){ Serial.println("publish ok"); }else { Serial.println("la publication a échoué"); } retard (2000); } void darude(){ tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, longTone); retard(longTone); pas de tonalité(0); delay(delayBetweenBars); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, longTone); délai (ton long); pas de tonalité(0); délai (délai standard); tone(0, NOTE_E4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_E4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_E4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_E4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_E4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_E4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); ton(0, NOTE_E4, longTone); retard(longTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_D4, longTone); retard(longTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_A3, longTone); retard(longTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, longTone); retard(longTone); pas de tonalité(0); delay(delayBetweenBars); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, longTone); retard(longTone); pas de tonalité(0); délai (délai standard); ton(0, NOTE_E4, longTone); retard(longTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, longTone); retard(longTone); pas de tonalité(0); delay(delayBetweenBars); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, shortTone); delay(shortTone); pas de tonalité(0); délai (délai standard); tone(0, NOTE_B3, longTone); délai (ton long); pas de tonalité(0); délai (délai standard); ton(0, NOTE_E4, longTone); délai (ton long); pas de tonalité(0); délai (délai standard); } void starwars() { bip(NOTE_A4, 500); bip(NOTE_A4, 500); bip(NOTE_A4, 500); bip(NOTE_F4, 350); bip(NOTE_C5, 150); bip(NOTE_A4, 500); bip(NOTE_F4, 350); bip(NOTE_C5, 150); bip(NOTE_A4, 650); retard (500); bip(NOTE_E5, 500); bip(NOTE_E5, 500); bip(NOTE_E5, 500); bip(NOTE_F5, 350); bip(NOTE_C5, 150); bip(NOTE_GS4, 500); bip(NOTE_F4, 350); bip(NOTE_C5, 150); bip(NOTE_A4, 650); } void beep(int note, int duration) { //Jouer la tonalité sur buzzerPin tone(0, note, duration); retard(durée); pas de tonalité(0); délai (délai standard); } void heartOfCourage(){ } void jacques(){ beep(NOTE_C4, 500); bip(NOTE_D4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_C4, 500); bip(NOTE_D4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_E4, 500); bip(NOTE_F4, 500); bip(NOTE_G4, 500); bip(NOTE_E4, 500); bip(NOTE_F4, 500); bip(NOTE_G4, 500); bip(NOTE_G4, 500); bip(NOTE_A4, 500); bip(NOTE_G4, 500); bip(NOTE_F4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_G4, 500); bip(NOTE_A4, 500); bip(NOTE_G4, 500); bip(NOTE_F4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_C4, 500); bip(NOTE_G4, 500); bip(NOTE_C4, 500); bip(NOTE_C4, 500); bip(NOTE_G4, 500); bip(NOTE_C4, 500); }

Étape 3: IBM Cloud

Nuage IBM
Nuage IBM

Vous devez configurer une instance IBM-cloud. Vous pouvez trouver des informations à ce sujet via ce lien: github.

Étape 4: Node-RED

Nous utilisons node-red pour gérer notre logique métier générale et pour visualiser ces données dans une interface utilisateur intuitive.

Étape 5: Configuration de Node-RED: Lumière

Configuration Node-RED: Lumière
Configuration Node-RED: Lumière

Importez le code suivant dans votre projet.

[{"id":"deb0d57.1c46528", "type":"tab", "label":"Light", "disabled":false, "info":""}, {"id":"8a0fcaac. 4e54", "type":"ibmiot in", "z":"deb0d57.1c46528", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Obtenir les données d'ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":

Étape 6: Configuration de Node-RED: Température

Configuration Node-RED: Température
Configuration Node-RED: Température

Importez le code suivant dans votre projet.

[{"id":"fbad3799.f0e0e", "type":"tab", "label":"Temperature", "disabled":false, "info":""}, {"id":"b8618eb9. 1c9288", "type":"ibmiot in", "z":"fbad3799.f0e0e", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Obtenir les données d'ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":

Étape 7: Configuration de Node-RED: Humidité

Configuration Node-RED: Humidité
Configuration Node-RED: Humidité

Importez le code suivant dans votre projet.

[{"id":"144cd53b.c00473", "type":"tab", "label":"Humidité", "disabled":false, "info":""}, {"id":"d958f58b. 2678e", "type":"ibmiot in", "z":"144cd53b.c00473", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Obtenir les données d'ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":

Étape 8: Configuration de Node-RED: Humidité

Configuration Node-RED: Humidité
Configuration Node-RED: Humidité

Importez le code suivant dans votre projet.

[{"id":"4ee73536.ec6fc4", "type":"tab", "label":"Humidité", "disabled":false, "info":""}, {"id":"a6daac3e. 2d5268", "type":"ibmiot out", "z":"4ee73536.ec6fc4", "authentication":"boundService", "apiKey":"", "outputType":"cmd", "deviceId":" ESP", "deviceType":"ESP8266", "eventCommandType":"update", "format":"json", "data":"msg", "qos":0, "name":"Envoyer la commande à ESP ", "service":"registered", "x":804.1944580078125, "y":383.0000305175781, "wires":}, {"id":"4134fdb7.18e9b4", "type":"ibmiot in", "z":"4ee73536.ec6fc4", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":"", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"update", "commandType":"", "format":"json", "name":"Obtenir des données d'ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "wires":

Étape 9: Vous avez terminé

Toutes nos félicitations! vous disposez maintenant d'un système d'observation de l'usine fonctionnel.

Si vous avez des questions, n'hésitez pas à nous contacter !