Arduino Nano ESP32 - AWS IoT

Ce tutoriel vous explique comment connecter un Arduino Nano ESP32 à AWS IoT Core. En détail, nous apprendrons :

Arduino Nano ESP32 AWS IoT

Préparation du matériel

1×Arduino Nano ESP32
1×USB Cable Type-C
1×Breadboard
1×Jumper Wires
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos d'Arduino Nano ESP32 et AWS IoT

Arduino Nano ESP32 se connecte à AWS IoT Core via le protocole MQTT. Ce n'est pas compliqué car les bibliothèques sont disponibles, ce qui facilite son utilisation.

Cependant, il n'est pas aussi simple de connecter l'Arduino Nano ESP32 à un courtier MQTT tel que Mosquitto installé sur votre PC. En effet, AWS IoT Core applique strictement des mesures de sécurité. Une configuration sur AWS IoT Core est nécessaire pour obtenir des justificatifs d'authentification et une autorisation avant de rédiger le code de l'Arduino Nano ESP32. En résumé, nous devons prendre deux mesures principales :

  • Étape 1 : Configuration d'AWS IoT Core. Après cette étape, nous obtiendrons les informations d'authentification, qui seront utilisées dans le code Arduino Nano ESP32.
  • Étape 2 : Rédaction du code Arduino Nano ESP32.

Allons dans le détail

Configurer AWS IoT Core pour une utilisation avec Arduino Nano ESP32.

Les objectifs de cette étape sont :

  • Création d'une représentation du Arduino Nano ESP32 sur AWS IoT Core (appelée une Chose).
  • Configuration de l'autorisation qui permet au Arduino Nano ESP32 de se connecter/publier/s'abonner à/depuis AWS IoT Core (appelée une Politique).
  • Génération des identifiants AWS qui seront utilisés pour l'authentification (appelés Certificats). Une fois créés, nous téléchargerons les identifiants et les placerons dans le code Arduino ESP32.

La procédure suivante montre comment configurer AWS IoT Core pour être utilisé avec un Arduino Nano ESP32 via la console IoT d'AWS. Veuillez noter que l'interface utilisateur peut être modifiée par AWS au fil du temps, mais elle sera similaire à ce qui suit :

  • Connectez-vous à la console IoT AWS
  • Créez un objet en naviguant vers Gérer Tous les appareils Objets
AWS IoT crée des objets.
  • Cliquez sur le bouton Créer des choses.
  • Sélectionnez Créer une chose unique et cliquez sur le bouton Suivant.
AWS IoT Core crée des choses.
  • Précisez le nom de l'appareil, par exemple, ESP32-thing et cliquez sur le bouton Suivant en bas de la page.
Nom de l'objet AWS IoT Core
  • Générez les identifiants en sélectionnant l'option Générer automatiquement un nouveau certificat, puis cliquez sur le bouton Suivant.
AWS IoT Core génère un certificat.
  • Un Certificat est maintenant créé et associé au Thing.
  • Créer une politique en cliquant sur le bouton Créer une politique.
Politique de création AWS IoT Core
  • Un nouvel onglet sera ouvert.
Création de politique AWS IoT Core ESP32
  • Spécifiez le nom de la politique, par exemple, ESP32-policy et cliquez sur le bouton JSON.
  • Copiez le contenu de la politique JSON ci-dessous et collez-le dans la zone Document de politique :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
  • Cliquez sur le bouton Créer en bas de la page pour créer la politique.
  • À présent, une Politique est créée et attachée au Certificat. Fermez cette page et retournez à la page des Choses.
  • Vérifiez la ESP32-policy et cliquez sur le bouton Créer chose pour créer la Chose.
AWS IoT Core crée la chose ESP32.
  • Une fenêtre popup apparaît qui vous permet de télécharger les fichiers d'identifiants. Téléchargez tous les fichiers et stockez-les dans un endroit sûr sur votre PC et gardez-les de manière confidentielle.
Fichier d'identifiants AWS IoT Core
  • Ensuite, cliquez sur le bouton Terminé.

Parmi les fichiers téléchargés, trois fichiers seront utilisés dans le code Arduino Nano ESP32 dans les étapes suivantes :

  • Xxxxxxxxxx-certificate.pem.crt
  • Xxxxxxxxxx-private.pem.key
  • AmazonRootCA1.pem

Ces fichiers peuvent être ouverts avec n'importe quel éditeur de texte, tel que Notepad ou Notepad++.

Rédaction du code Arduino Nano ESP32 pour se connecter à AWS IoT Core.

/* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano-esp32/arduino-nano-esp32-aws-iot */ #include "secrets.h" #include <WiFiClientSecure.h> #include <MQTTClient.h> #include <ArduinoJson.h> #include "WiFi.h" // The MQTT topics that this device should publish/subscribe #define AWS_IOT_PUBLISH_TOPIC "esp32/esp32-to-aws" #define AWS_IOT_SUBSCRIBE_TOPIC "esp32/aws-to-esp32" #define PUBLISH_INTERVAL 4000 // 4 seconds WiFiClientSecure net = WiFiClientSecure(); MQTTClient client = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToAWS(); } void loop() { client.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToAWS(); lastPublishTime = millis(); } } void connectToAWS() { // Configure WiFiClientSecure to use the AWS IoT device credentials net.setCACert(AWS_CERT_CA); net.setCertificate(AWS_CERT_CRT); net.setPrivateKey(AWS_CERT_PRIVATE); // Connect to the MQTT broker on the AWS endpoint we defined earlier client.begin(AWS_IOT_ENDPOINT, 8883, net); // Create a handler for incoming messages client.onMessage(messageHandler); Serial.print("Arduino Nano ESP32 connecting to AWS IOT"); while (!client.connect(THINGNAME)) { Serial.print("."); delay(100); } Serial.println(); if (!client.connected()) { Serial.println("Arduino Nano ESP32 - AWS IoT Timeout!"); return; } // Subscribe to a topic, the incoming messages are processed by messageHandler() function client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - AWS IoT Connected!"); } void sendToAWS() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // Or you can read data from other sensors char messageBuffer[512]; serializeJson(message, messageBuffer); // print to client client.publish(AWS_IOT_PUBLISH_TOPIC, messageBuffer); Serial.println("sent:"); Serial.print("- topic: "); Serial.println(AWS_IOT_PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("received:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // You can process the incoming data as json object, then control something /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

Étapes rapides

  • Si c'est la première fois que vous utilisez Arduino Nano ESP32, consultez comment configurer l'environnement pour Arduino Nano ESP32 sur Arduino IDE.
  • Ouvrez le gestionnaire de bibliothèques en cliquant sur l'icône Gestionnaire de bibliothèques située dans la barre de navigation gauche de l'Arduino IDE.
  • Tapez MQTT dans la boîte de recherche, puis recherchez la bibliothèque MQTT de Joel Gaehwiler.
  • Cliquez sur le bouton Install pour installer la bibliothèque MQTT.
Bibliothèque MQTT Arduino Nano ESP32
  • Tapez ArduinoJson dans la boîte de recherche, puis cherchez la bibliothèque ArduinoJson de Benoit Blanchon.
  • Cliquez sur le bouton Install pour installer la bibliothèque ArduinoJson.
Bibliothèque Json pour Arduino Nano ESP32
  • Copiez le code ci-dessus et collez-le dans l'IDE Arduino.
  • Créez le fichier secrets.h dans l'IDE Arduino en :
    • Cliquant sur le bouton juste en dessous de l'icône du moniteur série et en choisissant Nouvel Onglet, ou utilisez les touches Ctrl+Shift+N.
    Arduino IDE 2 ajoute un fichier
    • Nommez le fichier secrets.h et cliquez sur le bouton OK.
    L'IDE Arduino 2 ajoute le fichier secrets.h
    • Copiez le code ci-dessous et collez-le dans le fichier secrets.h créé.
    #include <pgmspace.h> #define SECRET #define THINGNAME "ESP32-thing" const char WIFI_SSID[] = ""; const char WIFI_PASSWORD[] = ""; const char AWS_IOT_ENDPOINT[] = "xxxxx.amazonaws.com"; // Amazon Root CA 1 static const char AWS_CERT_CA[] PROGMEM = R"EOF( -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- )EOF"; // Device Certificate static const char AWS_CERT_CRT[] PROGMEM = R"KEY( -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- )KEY"; // Device Private Key static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY( -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- )KEY";
    • Mettez à jour les informations suivantes dans le secrets.h :
      • Le WIFI_SSID et le WIFI_PASSWORD de votre réseau WiFi
      • Le AWS_CERT_CA, AWS_CERT_CRT, et AWS_CERT_PRIVATE. Ces informations se trouvent dans les fichiers que vous avez téléchargés à l'étape précédente.
      • Le AWS_IOT_ENDPOINT. Cette information peut être trouvée sur la console IoT d'AWS en naviguant jusqu'à Paramètre comme indiqué sur l'image ci-dessous :
      Point de terminaison AWS IoT
      • Compiler et télécharger le code vers la carte Arduino Nano ESP32 en cliquant sur le bouton Upload dans l'IDE Arduino.

Envoyer des données de Arduino Nano ESP32 à AWS IoT

Le code Arduino Nano ESP32 ci-dessus lit périodiquement les données d'une broche analogique et les envoie à AWS IoT toutes les 4 secondes. Si vous ouvrez le moniteur série sur Arduino IDE, vous verrez le journal comme ci-dessous :

COM6
Send
Arduino Nano ESP32 connecting to AWS IOT. Arduino Nano ESP32 - AWS IoT Connected! sent: - topic: esp32/esp32-to-aws - payload:{"timestamp":12743,"data":0} sent: - topic: esp32/esp32-to-aws - payload:{"timestamp":16745,"data":130}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Pour vérifier si les données sont reçues par AWS IoT ou non, suivez les étapes suivantes :

  • Dans la console AWS IoT, naviguez jusqu'à Test Client de test MQTT
Client de test MQTT IoT AWS ESP32
  • Cliquez sur le bouton S'abonner à un sujet.
  • Tapez esp32/esp32-to-aws dans le filtre de sujet. Vous pouvez changer le sujet, mais il DOIT correspondre au sujet dans le code Arduino Nano ESP32.
  • Cliquez sur le bouton S'abonner.
  • Vous pourrez voir les données envoyées depuis l'Arduino Nano ESP32 sur la console IoT AWS.

Envoyer des données d'AWS IoT vers Arduino Nano ESP32

Vous pouvez envoyer les données de la console AWS IoT à l'Arduino Nano ESP32 en suivant les étapes suivantes :

  • Dans l'IDE Arduino, ouvrez le moniteur série
  • Sur la console AWS IoT, naviguez jusqu'à Test Client de test MQTT
Client de test MQTT IoT AWS ESP32
  • Cliquez sur le bouton Publier sur un sujet.
  • Tapez esp32/aws-to-esp32 dans le nom du sujet. Vous pouvez changer le sujet mais il DOIT correspondre au sujet dans le code Arduino Nano ESP32.
  • Optionnellement, vous pouvez changer le contenu du message, ou simplement le laisser par défaut.
  • Cliquez sur le bouton Publier.
  • Consultez le moniteur série sur l'IDE Arduino, vous verrez le message envoyé depuis la console AWS IoT.
COM6
Send
received: - topic: esp32/aws-to-esp32 - payload: { "message": "Hello from AWS IoT console" }
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Faites plus avec AWS

Vous pouvez désormais envoyer des données depuis l'Arduino Nano ESP32 vers AWS IoT Core et vice versa. Ensuite, vous pouvez configurer IoTRule pour connecter l'Arduino Nano ESP32 à d'autres services AWS tels que Lambda, DynamoDB, Amplify, RDS...

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!