ESP32 - AWS IoT

Deze tutorial legt uit hoe u de ESP32 gebruikt in combinatie met AWS IoT Core. In detail leert u:

ESP32 AWS IoT

Hardware Benodigd

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB Kabel Type-C
1×Breadboard (experimenteerprint)
1×Jumper Draden (mannelijk-mannelijk)
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over ESP32 en AWS IoT

De ESP32 maakt verbinding met AWS IoT Core via het MQTT-protocol. Hoewel er bibliotheken beschikbaar zijn die deze verbinding vergemakkelijken, is het niet zo eenvoudig als verbinden met een lokale MQTT broker zoals Mosquitto op uw pc. Dit komt doordat AWS IoT Core strenge beveiligingsmaatregelen hanteert die configuratiestappen vereisen om authenticatiegegevens te verkrijgen en autorisatie te regelen voordat deze in de ESP32-code kunnen worden geïntegreerd. Samengevat bestaat het proces uit twee hoofdonderdelen:

  • Stap 1: AWS IoT Core configureren – Hierbij stelt u AWS IoT Core in om de benodigde authenticatiegegevens te genereren die later in de ESP32-code worden gebruikt.
  • Stap 2: De ESP32-code schrijven – Nadat u de authenticatiegegevens van AWS IoT Core hebt ontvangen, schrijft u de ESP32-code waarin de vereiste authenticatie en communicatiesystemen worden geïntegreerd.

Laten we elke stap nader bekijken om deze beter te begrijpen.

AWS IoT Core configureren voor gebruik met ESP32

De doelen van deze stap zijn:

  • Een representation (representatie) van het ESP32-apparaat aanmaken op AWS IoT Core, genaamd een "Thing".
  • De benodigde autorisatie configureren om het ESP32-apparaat toe te staan verbinding te maken, te publiceren en te abonneren op AWS IoT Core, ook wel een "Policy" genoemd.
  • De AWS-credentials genereren die voor authenticatie nodig zijn, genaamd "Certificates". Deze worden gedownload en in de Arduino ESP32-code geïntegreerd.

Hieronder vindt u instructies voor het configureren van AWS IoT Core voor gebruik met ESP32 via de AWS IoT Console. Merk op dat de gebruikersinterface in de loop der tijd kan veranderen, maar het proces zal vergelijkbaar blijven met onderstaande stappen:

  • Meld u aan bij de AWS IoT Console
  • Maak een Thing aan door te navigeren naar Manage All devices Things
AWS IoT creates Things
  • Klik op de knop Create things.
  • Selecteer Create single things en klik op de Next knop.
AWS IoT Core creates Things
  • Geef de Thing name op, bijvoorbeeld ESP32-thing en klik onderaan de pagina op de Next knop.
AWS IoT Core Thing name
  • Genereer de credentials door de optie Auto-generate a new certificate te selecteren en klik op de Next knop.
AWS IoT Core generates certificate
  • Er wordt nu een Certificate aangemaakt en gekoppeld aan de Thing.
  • Maak een policy aan door te klikken op de knop Create policy.
AWS IoT Core Create policy
  • Er opent een nieuw tabblad.
AWS IoT Core Create policy ESP32
  • Geef de Policy name op, bijvoorbeeld ESP32-policy en klik op de JSON knop.
  • Kopieer de onderstaande JSON-policy en plak deze in het veld Policy document:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
  • Klik onderaan de pagina op de knop Create om de policy aan te maken.
  • Er is nu een Policy aangemaakt en gekoppeld aan het Certificate. Sluit de pagina en keer terug naar de Thing-pagina.
  • Vink de ESP32-policy aan en klik op de knop Create thing om het Thing aan te maken.
AWS IoT Core creates Thing ESP32
  • Er verschijnt een popup waarmee u de credential-bestanden kunt downloaden. Download alle bestanden en bewaar ze op een veilige plek op uw pc en houd ze vertrouwelijk.
AWS IoT Core credentials file
  • Klik vervolgens op de knop Done.

Van de gedownloade bestanden worden er drie gebruikt in de ESP32-code in de volgende stappen:

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

Deze bestanden kunt u openen met een eenvoudige teksteditor zoals Kladblok of Notepad++.

ESP32-code schrijven om te verbinden met AWS IoT Core

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/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); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("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("ESP32 connecting to AWS IOT"); while (!client.connect(THINGNAME)) { Serial.print("."); delay(100); } Serial.println(); if (!client.connected()) { Serial.println("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("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"]; */ }

Snelle Stappen

  • Als u de ESP32 voor het eerst gebruikt, zie dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Open de Library Manager door te klikken op het icoon Library Manager in de linker navigatiebalk van Arduino IDE.
  • Typ MQTT in de zoekbalk en zoek de MQTT-bibliotheek van Joel Gaehwiler.
  • Klik op de knop Install om de MQTT-bibliotheek te installeren.
ESP32 MQTT library
  • Typ ArduinoJson in de zoekbalk en zoek de ArduinoJson-bibliotheek van Benoit Blanchon.
  • Klik op de knop Install om de ArduinoJson-bibliotheek te installeren.
ESP32 Json library
  • Kopieer de bovenstaande code en plak deze in Arduino IDE.
  • Maak het bestand secrets.h aan in Arduino IDE door:
    • Ofwel te klikken op de knop direct onder het serial monitor-icoon en kies New Tab, of gebruik de toetsencombinatie Ctrl+Shift+N.
    Arduino IDE 2 adds file
    • Geef het bestand de naam secrets.h en klik op OK.
    Arduino IDE 2 adds file secrets.h
    • Kopieer onderstaande code en plak deze in het gemaakte secrets.h bestand.
    #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";
    • Werk de volgende gegevens in secrets.h bij:
      • De WIFI_SSID en WIFI_PASSWORD van uw WiFi-netwerk
      • De AWS_CERT_CA, AWS_CERT_CRT, en AWS_CERT_PRIVATE. Deze informatie staat in de bestanden die u in de vorige stap gedownload heeft.
      • De AWS_IOT_ENDPOINT. Deze informatie vindt u in de AWS IoT Console via Setting, zoals in de onderstaande afbeelding:
      AWS IoT endpoint
      • Compileer en upload de code naar het ESP32-board door op de knop Upload te klikken in Arduino IDE.

Data verzenden van ESP32 naar AWS IoT

De bovenstaande ESP32-code leest periodiek data van een analoge pin en stuurt deze elke 4 seconden naar AWS IoT. Als u de Serial Monitor in Arduino IDE opent, ziet u de volgende log:

COM6
Send
ESP32 connecting to AWS IOT. 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  

Om te controleren of de data door AWS IoT ontvangen zijn, doet u het volgende:

  • Ga in AWS IoT Console naar Test MQTT Test Client
AWS IoT MQTT Test Client ESp32
  • Klik op de knop Subscribe to a topic.
  • Typ esp32/esp32-to-aws in het veld Topic filter. U kunt het topic wijzigen, maar het MOET overeenkomen met het topic in de ESP32-code.
  • Klik op de knop Subscribe.
  • U zult de data zien die vanaf de ESP32 naar de AWS IoT Console worden gestuurd.

Data verzenden van AWS IoT naar ESP32

U kunt ook data vanuit de AWS IoT Console naar de ESP32 sturen door de volgende stappen te volgen:

  • Open de Serial Monitor in Arduino IDE
  • Ga in AWS IoT Console naar Test MQTT Test Client
AWS IoT MQTT Test Client ESp32
  • Klik op de knop Publish to a topic.
  • Typ esp32/aws-to-esp32 in het veld Topic name. U kunt het topic wijzigen, maar het MOET overeenkomen met het topic in de ESP32-code.
  • Optioneel kunt u de message payload aanpassen, of gewoon de standaardwaarde aanhouden.
  • Klik op de knop Publish.
  • Kijk naar de Serial Monitor in Arduino IDE, u ziet het bericht dat vanuit de AWS IoT Console is verzonden.
COM6
Send
received: - topic: esp32/aws-to-esp32 - payload: { "message": "Hello from AWS IoT console" }
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Meer doen met AWS

Nu kunt u bidirectionele communicatie tot stand brengen tussen de ESP32 en AWS IoT Core. Dit betekent dat u data kunt sturen van de ESP32 naar AWS IoT Core en ook data kunt ontvangen van AWS IoT Core op de ESP32. Daarnaast hebt u de mogelijkheid om IoTRules te configureren, waarmee de ESP32 naadloos kan samenwerken met andere AWS-diensten zoals Lambda, DynamoDB, Amplify en RDS. Met IoTRules kunt u acties automatiseren gebaseerd op data die van de ESP32 binnenkomen, wat een breed scala aan IoT-toepassingen en integraties mogelijk maakt.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!