Inhoudsopgave:

Aan de slag met AWS IoT met draadloze temperatuursensor met MQTT - Ajarnpa
Aan de slag met AWS IoT met draadloze temperatuursensor met MQTT - Ajarnpa

Video: Aan de slag met AWS IoT met draadloze temperatuursensor met MQTT - Ajarnpa

Video: Aan de slag met AWS IoT met draadloze temperatuursensor met MQTT - Ajarnpa
Video: Real World Digital Transformation for Small Business | IoT Temperature Monitoring Solution 2024, November
Anonim
Aan de slag met AWS IoT met draadloze temperatuursensor met MQTT
Aan de slag met AWS IoT met draadloze temperatuursensor met MQTT

In eerdere Instructables hebben we verschillende cloudplatforms doorlopen, zoals Azure, Ubidots, ThingSpeak, Losant enz. We hebben het MQTT-protocol gebruikt voor het verzenden van de sensorgegevens naar de cloud in bijna het hele cloudplatform. Voor meer informatie over MQTT, de voordelen en voordelen ervan ten opzichte van het HTTP-protocol, kunt u dit instructable raadplegen.

In deze instructable zoomen we in op nog een ander en meest vertrouwd cloudplatform Amazon Web Services. Velen van jullie zijn misschien bekend met AWS, ook wel Amazon Web Services genoemd, en de cloudfunctionaliteit van AWS. Het is al jaren de kern van webontwikkeling. Met de toenemende schaal van IoT-toepassingen heeft AWS de oplossing van AWSIoT bedacht. AWSIoT is een betrouwbare oplossing voor het hosten van onze IoT-toepassingen.

Door deze instructable te volgen:

  • U kunt een AWS-account instellen voor uw IoT-toepassing
  • U kunt de ESP32 verbinden met de AWS IoT-kern
  • Berichten verzenden en ontvangen met MQTT en
  • Visualiseer de verzonden gegevens in AWS

Stap 1: AWS-account instellen

Het opzetten van een AWS-account is vrij eenvoudig. U hoeft alleen maar een paar certificaten te uploaden, er beleid aan toe te voegen, het apparaat te registreren en de sensorgegevensberichten in AWS te ontvangen.

Volg deze tutorial om het AWS-account in te stellen.

Stap 2: Hardware- en softwarespecificaties

Hardware- en softwarespecificaties
Hardware- en softwarespecificaties

Softwarespecificatie:

Een AWS-account

Hardwarespecificatie:

  • ESP32
  • Draadloze temperatuur- en trillingssensor
  • Zigmo Gateway-ontvanger

Stap 3: Draadloze trillings- en temperatuursensoren

Draadloze trillings- en temperatuursensoren
Draadloze trillings- en temperatuursensoren

Dit is een industriële IoT draadloze vibratie- en temperatuursensor met een groot bereik, met een bereik tot 2 mijl met behulp van een draadloze mesh-netwerkarchitectuur. Deze sensor bevat een 16-bits trillings- en temperatuursensor en verzendt zeer nauwkeurige trillingsgegevens met door de gebruiker gedefinieerde intervallen. Het heeft de volgende kenmerken:

  • Industriële 3-assige trillingssensor met ± 32 g bereik
  • Berekent RMS, MAX en MIN g trillingen
  • Ruisverwijdering met behulp van laagdoorlaatfilter
  • Frequentiebereik (bandbreedte) tot 12, 800 Hz
  • Samplefrequentie tot 25, 600Hz
  • Versleutelde communicatie met een draadloos bereik van 2 mijl
  • Bedrijfstemperatuurbereik -40 tot +85 °C
  • Wandmontage of magneetmontage Behuizing met IP65-classificatie Voorbeeldsoftware voor Visual Studio en LabVIEW
  • Trillingssensor met optie voor externe sonde
  • Tot 500.000 transmissies van 4 AA-batterijenVeel gateway- en modemopties beschikbaar

Stap 4: ESP32 AWS-firmware

Om verbinding te maken met AWS en om te beginnen met het verzenden van de gegevens doorloopt u de volgende stappen:

  • Download de AWS-bibliotheek van de volgende Github-repository:
  • kloon de repo en plaats het AWS_IOT-bestand in de bibliotheekmap van de Arduino-map

git clone

Laten we nu de code doornemen:

  • In deze applicatie hebben we gebruik gemaakt van een captive portal om de wifi-inloggegevens op te slaan en door de IP-instellingen te zweven. Voor de gedetailleerde introductie op de captive portal kunt u de volgende instructable doorlopen.
  • De captive portal geeft ons de mogelijkheid om te kiezen tussen statische en DHCP-instellingen. Voer gewoon de inloggegevens in zoals Static IP, Subnet Mask, gateway en de Wireless Sensor Gateway wordt geconfigureerd op dat IP.
  • Er wordt een webpagina gehost waar een lijst wordt weergegeven met beschikbare WiFi-netwerken en daar RSSI. Selecteer het wifi-netwerk en wachtwoord en voer verzenden in. De inloggegevens worden opgeslagen in de EEPROM en de IP-instelling wordt opgeslagen in de SPIFFS. Meer hierover is te vinden in dit instructable.

Stap 5: De sensorgegevens ophalen van de draadloze trillings- en temperatuursensor

De sensorgegevens ophalen van de draadloze trillings- en temperatuursensor
De sensorgegevens ophalen van de draadloze trillings- en temperatuursensor
De sensorgegevens ophalen van de draadloze trillings- en temperatuursensor
De sensorgegevens ophalen van de draadloze trillings- en temperatuursensor

We krijgen een frame van 54 bytes van de draadloze temperatuur- en trillingssensoren. Dit frame wordt gemanipuleerd om de werkelijke temperatuur en trillingsgegevens te krijgen.

ESP32 heeft drie UART's beschikbaar voor serieel gebruik

  1. RX0 GPIO 3, TX0 GPIO 1
  2. RX1 GPIO9, TX1 GPIO 10
  3. RX2 GPIO 16, TX2 GPIO 17

en 3 hardware seriële poorten

  • serieel
  • Serieel1
  • Serieel2

Initialiseer eerst het Hardware Serial-headerbestand. Hier zullen we RX2 en TX2 aka gebruiken. GPIO 16 en GPIO 17 pinnen van het ESP32-bord om de seriële gegevens te krijgen.

#erbij betrekken

# definieer RXD2 16 # definieer TXD2 17

Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); // pinnen 16 rx2, 17 tx2, 19200 bps, 8 bits geen pariteit 1 stopbit

De volgende stappen leiden u verder om de echte sensorwaarden te krijgen

  • Creëer variabelen voor het opslaan van temperatuur, vochtigheid, batterij en andere sensorwaarden
  • Stel de Rx-, tx-pin, baudrate en pariteitsbits in voor de hardwareserie
  • Controleer eerst of er iets te lezen is met Serial1.available()
  • We krijgen het frame van 54 bytes.
  • Controleer op 0x7E, dit is startbyte.
  • Trillingsgegevens bestaan uit RMS-waarde voor de 3 assen, min waarden voor 3 assen, max waarden voor 3 assen.
  • temperatuur- en batterijwaarden bevatten 2 bytes aan gegevens
  • verkrijg de sensornaam, het type, de sensorversie zal 1 byte aan gegevens bevatten en kan van het respectievelijke adres worden opgehaald

if (Serial2.available()) { Serial.println("Read Serial"); data[0] = Serial2.read(); vertraging (k); if(data[0]==0x7E) { Serial.println("Gekregen pakket"); while (!Serial2.available()); for (i = 1; i< 55; i++) { data = Serial2.read(); vertraging(1); } if(data[15]==0x7F) /////// om te controleren of de ontvangen gegevens correct zijn { if(data[22]==0x08) //////// zorg ervoor dat het sensortype klopt { rms_x = ((uint16_t)(((data[24])<<16) + ((data[25])<<8) + (data[26]))/100); rms_y = ((uint16_t)(((data[27])<<16) + ((data[28])<<8) + (data[29]))/100); rms_z = ((uint16_t)((((data[30])<<16) + ((data[31])<<8) + (data[32]))/100); int16_t max_x = ((uint16_t)(((data[33])<<16) + ((data[34])<<8) + (data[35]))/100); int16_t max_y = ((uint16_t)(((data[36])<<16) + ((data[37])<<8) + (data[38]))/100); int16_t max_z = ((uint16_t)(((data[39])<<16) + ((data[40])<<8) + (data[41]))/100);

int16_t min_x = ((uint16_t)(((data[42])<<16) + ((data[43])<<8) + (data[44]))/100); int16_t min_y = ((uint16_t)(((data[45])<<16) + ((data[46])<<8) + (data[47]))/100); int16_t min_z = ((uint16_t)(((data[48])<<16) + ((data[49])<<8) + (data[50]))/100);

cTemp = ((((gegevens[51]) * 256) + gegevens[52])); float-batterij = ((data[18] * 256) + data[19]); spanning = 0,00322 * batterij; Serial.print("Sensornummer"); Serial.println(data[16]); senseNumber = gegevens[16]; Serial.print("Sensortype "); Serial.println(data[22]); Serial.print("Firmwareversie"); Serial.println(data[17]); Serial.print ("Temperatuur in Celsius:"); Serieel.print(cTemp); Serieel.println("C"); Serial.print ("RMS-trilling in X-as:"); Serial.print(rms_x); Serial.println ("mg"); Serial.print ("RMS-trilling in Y-as:"); Serial.print(rms_y); Serial.println ("mg"); Serial.print ("RMS-trilling in Z-as:"); Serial.print(rms_z); Serial.println ("mg");

Serial.print("Min trilling in X-as:");

Serieel.afdruk(min_x); Serial.println ("mg"); Serial.print ("Min trilling in Y-as:"); Serial.print(min_y); Serial.println ("mg"); Serial.print ("Min trilling in Z-as:"); Serial.print(min_z); Serial.println ("mg");

Serial.print ("ADC-waarde:");

Serial.println(batterij); Serial.print ("Batterijspanning:"); Seriële.afdruk (spanning); Serieel.println("\n"); if (voltage < 1) { Serial.println ("Tijd om de batterij te vervangen"); } } } else { for (i = 0; i< 54; i++) { Serial.print(data); Serieel.print(", "); vertraging(1); } } } }

Stap 6: Verbinding maken met AWS

Verbinding maken met AWS
Verbinding maken met AWS
  • Voeg AWS_IOT.h, WiFi.h-headerbestanden toe om een verbinding met de AWSIoT-hub tot stand te brengen
  • Voer uw hostadres, client-ID in, wat de beleidsnaam zal zijn, en onderwerpnaam die de naam van het ding zal zijn

//**********AWS-referenties ***********//char HOST_ADDRESS="a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID= "ncdGatewayPolicy"; char TOPIC_NAME= "ncdGatewayThing";

Maak een char-variabele om uw JSON op te slaan, in dit geval hebben we een indeling gemaakt om JSON op te slaan

const char *format = "{"SensorId\":\"%d\", \"messageId\":%d, \"rmsX\":%d, \"rmsY\":%d, \"rmsZ \":%d, \"cTemp\":%d, \"voltage\":%.2f}";

Maak een instantie van de AWS_IOT-klasse

AWS_IOT in het bijzonder; // Instantie van AWS_IOT klasse

Maak nu verbinding met de AWSIoT-hub met behulp van de volgende methode

void reconnectMQTT(){ if(hornbill.connect(HOST_ADDRESS, CLIENT_ID)== 0) { Serial.println("Verbonden met AWS"); vertraging (1000);

if(0==hornbill.subscribe(TOPIC_NAME, mySubCallBackHandler))

{ Serial.println ("Abonneren succesvol"); } else { Serial.println("Abonneren mislukt, controleer de naam en certificaten van het ding"); terwijl(1); } } else { Serial.println("AWS-verbinding mislukt, controleer het HOST-adres"); terwijl(1); }

vertraging (2000);

}

publiceer de sensorgegevens na elke minuut

if (tick>= 60) // publiceer elke 5 seconden naar onderwerp {tick=0; char-lading [PAYLOAD_MAX_LEN]; snprintf(payload, PAYLOAD_MAX_LEN, formaat, senseNumber, msgCount++, rms_x, rms_y, rms_z, cTemp, voltage); Serial.println(lading); if(hornbill.publish(TOPIC_NAME, payload) == 0) { Serial.print("Publiceer bericht:"); Serial.println(lading); } else { Serial.println("Publiceren mislukt"); } } vTaskDelay (1000 / portTICK_RATE_MS); vink ++;

Stap 7: Gegevens visualiseren in AWS

Gegevens visualiseren in AWS
Gegevens visualiseren in AWS
Gegevens visualiseren in AWS
Gegevens visualiseren in AWS
Gegevens visualiseren in AWS
Gegevens visualiseren in AWS
  • Log in op uw AWS-account.
  • in de linkerhoek van de werkbalk vindt u het tabblad Services
  • Klik op dit tabblad en selecteer onder de kop Internet of Things IoT Core.
  • Selecteer de QoS en nee. van berichten aan abonnees. Voer de onderwerpnaam in.

Stap 8: Algemene code

Je kunt de algemene code vinden op deze Github-repository.

Credits

  • Arduino Json
  • Draadloze temperatuur- en vochtigheidssensoren
  • ESP32
  • PubSubClient

Aanbevolen: