Station météorologique sur arduinopar Raphaël BOURGEAY Université d'Aix-Marseille - DUT Réseaux et Télécommunications 2020 |
8.1.1 Carte Arduino
8.1.3 Potentiomètre
8.3 Configuration routeur internet
DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 22 DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 23 11 Bibliographie / sources Ouvrage BENGHOZI, Pierre-Jean et al. L'internet des objets : quels enjeux pour l'Europe ? Les Editions de la MSH, 2009. 170p. Codes https://github.com/256dpi/arduino-mqtt Article GUILLEMIN, Patrick État de l'art sur l'Internet des Objets en Europe - L'IdO (IoT) en Europe. Innovation | Innovations technologiques. Aout 2018, Réf : TE8001V1. 20p Document de thèse GAILLARD, Guillaume. Opérer les réseaux de l'Internet des Objets à l'aide de contrats de qualité de service (Service Level Agreements), Thèse de doctorat : Lyon : INSA : 2016. 161p Site web https://www.hivemq.com/ https://www.github.com Page web https://hackernoon.com/a-detailed-guide-to-the-world-of-mqtt-bo1d63cay http://www.steves-internet-guide.com/mosquitto_pub-sub-clients/ https://blog.groupe-sii.com/le-protocole-mqtt-dans-liot/ Fichier en ligne GUBBI, et al. Internet of Things (IoT): A vision, architectural elements, and future directions [en ligne], IoT Group. [Consulté le 22/06/2020] http://www.parkjonghyuk.net/lecture/2014-2nd-lecture/ubiquitous/salahe.pdf Lily Trible, Internet of Things [consulté le 29/06/2020] https://www.mindmeister.com/fr/1199107014/internet-of-things?fullscreen=1 Documentation http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 24 12 Tutoriel Ce premier tutoriel utilise le IoT cloud d'Arduino, tout d'abord, il vous faudra vous rendre à ce lien : https://create.arduino.cc/iot/ vous devrez créer un compte et vous n'aurez plus qu'à suivre les étapes pour l'enregistrement de la carte Figure T1 : Montage sur la Breadboard / Figure T2 : Montage général Par la suite vous arriverez sur une page comme celle-ci, où il ne restera plus qu'à ajouter les objets, pour les permissions, vous utiliserez RO pour un capteur et R&W pour un actionneur : Figure T3 : Propriétés Une fois les propriétés renseignées, une bonne partie du code se génère. Code.ino #define LED_PIN A2 #define LED_PIN2 A3 #define POTENTIOMETER_PIN A4 #define THERMOMETRE A5 #define PHOTOR A6 #include "thingProperties.h" void setup() { // Initialize serial and wait for port to open: pinMode (LED_PIN, OUTPUT); pinMode (LED_PIN2, OUTPUT); Serial.begin(9600); delay(1500); initProperties(); ArduinoCloud.begin(ArduinoIoTPreferredConnection); setDebugMessageLevel(2); ArduinoCloud.printDebugInfo(); } void loop() { ArduinoCloud.update(); int potence = analogRead(POTENTIOMETER_PIN); potentio = map(potence, 0, 1023, 0, 1000); int photores = analogRead(PHOTOR); resistancephoto = map(photores, 0, 1023, 0, 1000); int thermo = analogRead(THERMOMETRE); float temperature_celcius = thermo * (5.0 / 1023.0 * 100.0); thermometre = map(temperature_celcius, 0, 60, 0, 1); } void onThingChange() { digitalWrite(LED_PIN, thing); Serial.print("The thing is "); if(thing){ Serial.println("ON"); }else { Serial.println("OFF"); } } void onThing2Change() { digitalWrite(LED_PIN2, thing2); Serial.print("The thing is "); if(thing2){ Serial.println("ON"); } else { Serial.println("OFF"); } } DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 25 thingProperties.h #include <ArduinoIoTCloud.h> #include <Arduino_ConnectionHandler.h> const char THING_ID[] = "52b35df3-e5c1-4e5d-932f-c8f20d9024ce"; const char SSID[] = SECRET_SSID; // Network SSID (name) const char PASS[] = SECRET_PASS; // Network password (use for WPA, or use as key for WEP) void onThingChange(); void onThing2Change(); CloudTemperature thermometre; int potentio; int resistancephoto; bool thing; bool thing2; void initProperties(){ ArduinoCloud.setThingId(THING_ID); ArduinoCloud.addProperty(thermometre, READ, ON_CHANGE, NULL); ArduinoCloud.addProperty(potentio, READ, ON_CHANGE, NULL, 10); ArduinoCloud.addProperty(resistancephoto, READ, ON_CHANGE, NULL, 10); ArduinoCloud.addProperty(thing, READWRITE, ON_CHANGE, onThingChange); ArduinoCloud.addProperty(thing2, READWRITE, ON_CHANGE, onThing2Change); } WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS); DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 26 Figure T4 : dashboard illustrant une journée (soleil, lumières éteintes) Figure T4 : dashboard illustrant la nuit (lune, lumières allumées DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 27 Il suffit ensuite de créer le dashboard avec les elements à selectionner. Figure T6 : installation de mosquitto Figure T7 : installation de mosquitto-clients Figure T8 : installation de paho-mqtt Figure T5 : mise à jour des paquets DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 28 Figure T10 : modification du code pour la sécurisation Figure T9 : test de l'envoi de données DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 29 Figure T11 : création d'un mot de passe : ici « raph » Figure T12 : test de l'envoi de données avec sécurité Figure T13 : installation de Node-Red Figure T14 : installation du paquet node-red-admin (pour avoir un mot de passe sur l'interface) Figure T15 : génération d'un mot de passe crypté pour Node-Red (ici « raph ») DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 30 Figure T16 : sécurisation de Node-Red Figure T17 : interface d'entrée à Node-Red accessible via AdresseIp/PortNode-Red DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 31 Figure T18 : interface de création de l'interface graphique DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 32 Figure T19 : Menu Figure T20 : installation de la palette dashboard DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 33 Figure T21 : apparition de la palette dashboard Dans la palette network, choisir « mqtt in » Figure T22 : renseignement du serveur (avec port du broker) et du topic Et brancher en sortie un noeud « debug », dans la catégorie common Figure T23 propriétés du noeud debug DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 34 DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 35 Figure T24 : reception des données Il ne vous reste qu'à utiliser les différents noeuds disponibles pour votre interface graphique Figure T25 : mise en forme des données DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 36 Interface graphique accessible via AdresseIp:PortNode-Red/ui (UI : User Interface) Figure T26 : interface graphique Code à utiliser : // Identifiant de connection au point d'acces Wi-Fi local #define SSID L "Nom de la box" // Nom du réseau
Wi-Fi #define MOT_DE_PASSE_L "Mot de passe" // Mot De Passe du réseau Wi-Fi // Adresse IP et port du serveur MQTT #define ADRESSE_IP_SERVEUR_MQTT "adresse x.x.x.x" #define PORT_SERVEUR_MQTT 1883 // Identifiants MQTT #define mqtt_user "nom d'utilisateur" // Si configuré sur
le Broker ! // Déclaration des bibliothèques utilisées #include <WiFi101.h> #include <MQTT.h> #include <PubSubClient.h> // Définition des constantes globales int led_Bleu = 7; #define PORT_LED_INTERNE 6 // Numéro de port auquel est branchée la LED interne. // Déclaration globales WiFiClient ClientWiFi; // Déclaration de notre Client Ethernet pour la connexion au serveur MySQL MQTTClient ClientMqtt; // Déclaration de notre Client pour
la PubSubClient client(ClientWiFi); long lastMsg = 0; int value = 0; char message_buff[100]; // Fonction appelée lors de la réception d'un topic + traitement du payload: void callback(char* topic, byte* payload, unsigned int length) { int i = 0; Serial.print("Message reçu ["); Serial.print(topic); String topic2 = String(topic); Serial.println("] "); // Traitement du payload, on le transforme en String. for (i = 0; i<length; i++) { message_buff[i] = payload[i]; } message_buff[i] = '\0'; String msgString = String(message_buff); Serial.println("Payload: " + msgString); if (topic2 == "raph/switchBleu") // LED bleue, il faudra rajouter { // cette condition pour chaque LED digitalWrite(led_Bleu, HIGH); } else { digitalWrite(led_Bleu, LOW); } } } //Connexion to WiFi: void setup_wifi() { delay(10); Serial.println(); Serial.print("Connexion à "); Serial.println(SSID_L); WiFi.begin(SSID_L, MOT_DE_PASSE_L); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Connexion WiFi établie "); Serial.print("=> Adresse IP : "); Serial.println(WiFi.localIP()); } void reconnect() { // Boucle de reconnxion tant que l'on est pas connecté while (!client.connected()) { Serial.print("En attente de la connexion au serveur MQTT..."); // On attend la connection, mqtt_user et mqtt_password si configuré sur le Broker ! if (client.connect("raph", mqtt_user, mqtt_password)){ // DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 37 DUT R&T - Mémoire 2020 - BOURGEAY Raphaël 38 Serial.println("connected"); // Une fois connectée, on souscrit aux différents topics: client.subscribe("raph/switchBleu"); //à répéter pour chaque switch } else { Serial.print("erreur, rc="); Serial.print(client.state()); Serial.println(" nouvel essai dans 5 secondes"); // On attend 5 secondes pour essayer de se reconnecter au Broker delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); //Connexion au wifi client.setServer(ADRESSE_IP_SERVEUR_MQTT, 1883); //Connexion au serveur MQTT, port à changer selon votre cas client.setCallback(callback); delay(5000); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); // Configuration des pins Arduino en sortie: pinMode(led_Bleu, OUTPUT); //pour chacun } void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); if (now - lastMsg > 5000) // toute les 5 secondes on envoie les mesures au Broker { char t[10]; lastMsg = now; ++value; // On envoie les mesures au Broker: float potence; int potentio = analogRead(A1); float pontence = potentio; client.publish("raph/potence", String(potence).c_str()); int photo = analogRead(A6); float photor = photo; client.publish("raph/photor", String(photor).c_str()); Serial.println("Publication des messages des capteurs"); } } |
|