Inhoudsopgave:
- Stap 1: Hardware- en softwarespecificatie
- Stap 2: Gebruikersreferenties opslaan
- Stap 3: Uw webformulier instellen in SPIFFS
- Stap 4: Taakplanning
- Stap 5: Temperatuur- en vochtigheidswaarden aflezen van SHT25
- Stap 6: Waarden publiceren naar ThingSpeak met behulp van de ThingSpeak MQTT API
- Stap 7: E-mailmelding weerrapport
- Stap 8: Algemene code
Video: Weerrapport met behulp van ThingSpeak MQTT- en IFTTT-applets: 8 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Invoering
Een op de cloud gebaseerde weertoepassing die dagelijkse weerberichten als e-mailmelding levert. Deze webapplicatie meet temperatuur en vochtigheid met behulp van SHT25 en Adafruit Huzzah ESP8266. Het biedt ons realtime temperatuur- en vochtigheidsgegevens en analyses per uur. De gegevens worden verzonden met behulp van de ThingSpeak MQTT API en later sturen we een e-mailmelding aan de gebruiker wanneer de temperatuur de toegewezen drempel bereikt met behulp van het IFTTT-protocol. SHT25 is een temperatuur- en vochtigheidssensor gemaakt door Sensirion. De SHT25 biedt een hoge mate van nauwkeurigheid rond ±2% RV. Het vochtigheidsbereik ligt tussen 0 en 100% en het temperatuurbereik ligt tussen -40 en 125 °C. Het is veel betrouwbaarder en sneller met een sensorresponstijd van 8 seconden.
Functies
- Biedt u realtime analyses en statistieken met behulp van Thing Speak MQTT API
- Een e-mailmelding wordt op een toegewezen tijd aan de gebruiker gegeven met behulp van IFTTT
- Taakplanner wordt gebruikt om de taak te plannen, zoals het ophalen van gegevens van sensoren, het publiceren van de sensormetingen, het abonneren op MQTT-onderwerp
- Het gebruikt het I2C-protocol om de sensormeting op te halen die nauwkeuriger, uitbreidbaar en schaalbaar is
- slaapmodus wanneer het apparaat inactief is of als er geen taak wordt teruggeroepen.
- effectieve taakplanning zorgt voor probleemloos gebruik
- Er wordt een aparte webpagina gehost waar de gebruiker zijn gebruikersreferenties moet opgeven om te voorkomen dat uw apparaat elke keer knippert wanneer het in het bereik van andere wifi-netwerken is
- SPIFFS wordt gebruikt om onze webpagina op te slaan om onze code leesbaar en minder onhandig te maken
Stap 1: Hardware- en softwarespecificatie
Hardwarespecificatie:
- Adafruit esp8266 Huzzah bord
- Huzzah Bord Schild
- SHT25 Sensormodule
- I2C-kabel
Softwarespecificatie:
- Arduino IDE
- IFTTT ding spreken
- MQTT-API
Stap 2: Gebruikersreferenties opslaan
Hier gebruiken we de SHT25 I2C-sensor om de realtime waarde van temperatuur en relatieve vochtigheid te lezen en deze waarde in de cloud te plaatsen. Om de bijgewerkte sensorwaarde van tijd tot tijd te krijgen en deze updates tegelijkertijd te plaatsen, gebruiken we Arduino's Task Scheduler Library. Voor cloudoperaties gebruiken we ThingSpeak MQTT API. Later bieden we de gebruiker een realtime weerbericht met behulp van IFTTT-applets. U kunt deze stappen volgen om uw eigen weerstation te maken. Dus doe-het-zelf.
Alvorens verder te gaan. We moeten de gebruikersgegevens opslaan. Voor dit doel hosten we een webserver op 192.169.1.4. We hebben ons webformulier opgeslagen in SPIFFS. Zodra het apparaat is gestart, host het gedurende 60 seconden een webserver. De gebruiker moet deze stappen volgen.
- Maak verbinding met de AP ESP-gebruiker. Deze staat vermeld in uw beschikbare wifi-netwerklijst. Maak verbinding met dit AP en voer het wachtwoord "*******" in
- Zodra het is verbonden, gaat u naar uw browser en voert u het IP-adres 192.168.1.4 in.
- Voer de SSID en het wachtwoord van uw lokale wifi in de invoervelden in en voer SUBMIT in
- Deze referenties worden opgeslagen in EEPROM
- Na 60 seconden verbreekt het apparaat automatisch de verbinding met AP
- De volgende keer dat u het apparaat inschakelt, hoeft de gebruiker deze procedure niet te volgen. Het apparaat haalt automatisch de gebruikersreferenties op uit de EEPROM en gaat verder met het ophalen van de sensormetingen van de I2C-interface en deze naar de cloud te posten
//--------- AP-configuratie ------------// IPAddress ap_local_IP (192, 168, 1, 4); IPA-adres ap_gateway(192, 168, 1, 254); IPA-adres ap_subnet(255, 255, 255, 0);
Serial.print("Toegangspunt configureren…");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print("Gebruikersreferenties instellen");
WiFi.softAP(ssidAP, passAP);
server.on("/", handleRoot);
server.onNotFound(onHandleNotFound);
server.begin();
APTimer = millis();
while(millis()-APTimer < APInterval){
server.handleClient();
}
//****************************** HANDVAT WORTEL****************** *******//void handleRoot() {
if (server.hasArg("ssid")&& server.hasArg("wachtwoord"))
{
//Als alle formuliervelden gegevensoproep bevatten
handelSubmit()
handvatSubmit(); }
anders {
// Geef het formulier opnieuw weer
//lees het bestand in spiffs
Bestandsbestand =SPIFFS.open("/webform.html", "r");
server.streamFile(bestand, "tekst/html");
// vergeet niet het bestand te sluiten
bestand.close();
}}
// Controleer de status dat het de argumenten ssid en wachtwoord heeft
// Schrijf vervolgens de inloggegevens naar ROM
ROMwrite(String(server.arg("ssid")), String(server.arg("wachtwoord")))
Stap 3: Uw webformulier instellen in SPIFFS
SPIFFS
Serial Peripheral Interface Flash File System, of kortweg SPIFFS. Het is een lichtgewicht bestandssysteem voor microcontrollers met een SPI-flashchip. De ingebouwde flashchip van de ESP8266 biedt voldoende ruimte voor je webpagina's, zeker als je de 1MB, 2MB of 4MB versie hebt. We hebben onze webpagina ook opgeslagen in Flash System. Er zijn een paar stappen die we moeten volgen om gegevens naar spiffs te uploaden
- Download de tool:
- Maak in je Arduino-schetsboekmap een map met tools als deze nog niet bestaat
- Pak de tool uit in de map tools (het pad ziet eruit als /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Herstart Arduino IDE
- Open een schets (of maak een nieuwe en sla deze op)
- Ga naar de schetsmap (kies Sketch > Show Sketch Folder)
- Maak een map met de naam data en alle bestanden die u wilt in het bestandssysteem daar. We hebben onze HTML-pagina geüpload met de naam webform.html
- Zorg ervoor dat je een bord, poort en gesloten seriële monitor hebt geselecteerd
- Selecteer Extra > ESP8266 Schetsgegevens uploaden. Dit zou moeten beginnen met het uploaden van de bestanden naar het ESP8266 flash-bestandssysteem. Als u klaar bent, wordt in de IDE-statusbalk het bericht SPIFFS Image Uploaded weergegeven.
Bestandsbestand =SPIFFS.open("/webform.html", "r");
server.streamFile(bestand, "tekst/html");
// vergeet niet het bestand te sluiten
bestand.close();
Stap 4: Taakplanning
In deze zelfstudie voeren we twee bewerkingen uit:
- Lees de gegevens van SHT25 met behulp van het I2C-protocol
- Plaats de bijgewerkte gegevens in de cloud met behulp van de ThingSpeak MQTT API
Om dit te bereiken gebruiken we de TaskScheduler-bibliotheek. We hebben twee verschillende taken gepland die verwijzen naar twee verschillende controleoperaties. dit gaat als volgt
- Taak 1 is voor het uitlezen van de sensorwaarde. Deze taak duurt 1 seconde totdat de time-out van 10 seconden wordt bereikt.
- Wanneer de Task1 zijn time-out bereikt, maken we verbinding met lokale wifi en MQTT-makelaar.
- Taak 2 is nu ingeschakeld en we schakelen Taak 1 uit Taak 2 is voor het publiceren van de sensorgegevens naar Thing Speak MQTT-broker. Deze taak duurt 20 seconden totdat de time-out van 20 seconden wordt bereikt
- Wanneer Taak 2 zijn time-out bereikt, wordt Taak 1 weer ingeschakeld en Taak 2 uitgeschakeld. ook hier krijgen we de bijgewerkte waarde en het proces gaat door
- wanneer er niet wordt teruggebeld of het apparaat inactief is, gaat het naar de lichte slaapstand, waardoor energie wordt bespaard.
//---------prototype voor taak callback------------//
ongeldige taakI2CCallback();
void taskI2CDisable();
ongeldige taakWiFiCallback();
ongeldige taakWiFiDisable();
//--------- Taken------------//
Taak tI2C(2 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable);
Taak tWiFi (20* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);
// schakel tI2C in tI2C.enable ();
Stap 5: Temperatuur- en vochtigheidswaarden aflezen van SHT25
I2C is een tweedraadsinterface die slechts twee draden gebruikt om met het masterapparaat te communiceren. De ene is SCL (Serial Clock) en de andere is SDA (Serial Data). Elk slave-apparaat heeft een uniek adres. SHT 25 heeft ook een 8-bits adres en is toegankelijk via een 0x44-adres. het heeft 8 bits van het adres waarbij 7 bits het werkelijke adres zijn en terwijl de meest rechtse LSB bit 0 wordt gebruikt om het lezen van of schrijven naar het apparaat te signaleren. Als bit 0 is ingesteld op 1 dan leest het master-apparaat van het slave I2C-apparaat. I2C is veel betrouwbaarder, schaalbaarder en sneller en heeft zelfs veel werkingsmodi waardoor het veel energiezuiniger is
We gebruiken de Wire.h-bibliotheek om de temperatuur- en vochtigheidswaarden te lezen. Deze bibliotheek vergemakkelijkt i2c-communicatie tussen de sensor en het masterapparaat. 0x44 is het I2C-adres voor SHT25. SHT25 werkt in een andere bedrijfsmodus. U kunt daarvoor verwijzen naar de datasheet. We gebruiken 0x2C en 0x06 als respectievelijk MSB en LSB voor single shot operatie
Stap 6: Waarden publiceren naar ThingSpeak met behulp van de ThingSpeak MQTT API
Voor het plaatsen van onze temperatuur- en vochtigheidswaarden in de cloud gebruiken we ThingSpeak MQTT API. ThingSpeak is een IoT-platform. ThingSpeak is een gratis webservice waarmee u sensorgegevens in de cloud kunt verzamelen en opslaan. MQTT is een veelgebruikt protocol dat in IoT-systemen wordt gebruikt om apparaten en sensoren op een laag niveau met elkaar te verbinden. MQTT wordt gebruikt om korte berichten van en naar een makelaar door te geven. ThingSpeak heeft onlangs een MQTT-broker toegevoegd, zodat apparaten berichten naar ThingSpeak kunnen sturen. Je kunt de procedure volgen om ThingSpeak Channel in te stellen vanuit dit bericht
ThingSpeak MQTT
MQTT is een publiceer/abonneer-architectuur die voornamelijk is ontwikkeld om bandbreedte en stroombeperkte apparaten via draadloze netwerken te verbinden. Het is een eenvoudig en lichtgewicht protocol dat over TCP/IP-sockets of WebSockets loopt. MQTT via WebSockets kan worden beveiligd met SSL. Dankzij de architectuur voor publiceren/abonneren kunnen berichten naar de clientapparaten worden gepusht zonder dat het apparaat continu de server hoeft te pollen. Een client is elk apparaat dat verbinding maakt met de broker en onderwerpen kan publiceren of erop kunnen abonneren om toegang te krijgen tot de informatie. Een onderwerp bevat de routeringsinformatie voor de makelaar. Elke klant die berichten wil verzenden, publiceert ze naar een bepaald onderwerp, en elke klant die berichten wil ontvangen, abonneert zich op een bepaald onderwerp
Publiceren en abonneren met ThingSpeak MQTT
- Publiceren naar kanaalfeedkanalen /publish/
- Publiceren naar een bepaald veld kanalen /publish/fields/field/
- Abonneer je op het kanaalveld kanalen /subscribe//
- Abonneer u op de privékanaalfeedkanalen //subscribe/fields/field/
- Abonneer je op alle velden van een kanaal. kanalen// abonneren/velden/veld /
ongeldige taakWiFiCallback()
{
Serial.println("taskWiFiCallbackStarted");
Serial.print("time-out voor deze taak: \t");
Serial.println(tWiFi.getTimeout());
if(!mqttCli.connected())
{
Serial.println ("Cliënt niet verbonden");
reconnectMQTT();
}
String topicString ="channels/"+String(channelID)+"/publish/"+String(writeAPIKey);
int topicLength = topicString.length()+1;
char topicBuffer[topicLength];
topicString.toCharArray(topicBuffer, topicLength+1);
Serial.println(topicBuffer);
String dataString = String("field1="+ String(tempC, 1) + "&field2=" + String(tempF, 1) + "&field3=" + String(vochtig, 1));
int dataLength = dataString.length()+1;
byte dataBuffer [dataLength];
dataString.getBytes(dataBuffer, dataLength);
mqttCli.beginPublish(topicBuffer, dataLength, false);
Serial.println(mqttCli.write(dataBuffer, dataLength)? "gepubliceerd": "gepubliceerd mislukt");
mqttCli.endPublish();
//mqttCli.loop();
}
Stap 7: E-mailmelding weerrapport
We gebruiken IFTTT-applets om realtime weerberichten per e-mail aan de gebruiker te geven. We hebben het dus geïmplementeerd via ThingSpeak. We nemen het gemiddelde van de 5-fay-waarden van temperatuur en vochtigheid. Wanneer de waarde van de laatste invoer groter is dan de gemiddelde waarde. Het zal een e-mailmelding activeren "het is een warme dag". en wanneer deze lager is dan de gemiddelde waarde. Het zal een e-mailmelding activeren "Wat een mooie dag". Elke dag rond 10:00 uur (IST) krijgen we een e-mailmelding
kanaal-ID= ******;
iftttURL='https://maker.ifttt.com/**************';
vochtData=thingSpeakRead(channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead(channelID, 'Fields', 1, 'NumDays', 5);
perHumid=max(vochtgegevens)-min(vochtgegevens);
vochtigheidswaarde=0.1*perVocht+min (vochtgegevens);
perTemp=max(tempData)-min(tempData);
tempValue=0.1*perTemp+min (tempData);
urlTemp=strcat('https://api.thingspeak.com/channels/', string(channelID), '/fields/1/last.txt');
urlHumid = strcat('https://api.thingspeak.com/channels/', string(channelID), '/fields/3/last.txt'); lastTempValue=str2num(webread(urlTemp)); lastHumidValue = str2num(webbread(urlHumid));
if (lastTempValue
if (lastTempValue>tempValue || lastHumidValue>humidValue)
plantMessage=' Het is een warme dag.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); einde
Stap 8: Algemene code
Algemene code
De algemene code is beschikbaar in deze GitHub-repository
Beperkingen
- Er zijn enkele problemen met het publiceren van de gegevens met behulp van een methode publiceren voor het grootste deel van de gegevens. Om dit probleem op te lossen gebruiken we de functie write()
- SPIFFS moet worden geformatteerd voordat de nieuwe gegevens naar SPIFFS worden geüpload.
- U mag de functie delay() niet gebruiken. delay() belemmert de achtergrondbewerking. Maak in plaats daarvan alleen vertragingen met millis() als dat nodig is
Credits
- ESP826Webserver
- Taakplanner
- SHT 25
- ThingSpeak MQTT-API
- IFTTT
- PubSubClient
Aanbevolen:
Internet/cloudgestuurde huisautomatisering met behulp van Esp8266 (aREST, MQTT, IoT): 7 stappen (met afbeeldingen)
Internet/cloudgestuurde huisautomatisering met behulp van Esp8266 (aREST, MQTT, IoT): ALLE credits naar http://arest.io/ voor de cloudservice!!IoT het meest besproken onderwerp ter wereld op dit moment!! Cloudservers en -services die dit mogelijk maken, is het aantrekkingspunt van de wereld van vandaag… DE AFSTANDSBARRIRE UITSLUITEN was en is de
Controle geleid over de hele wereld met behulp van internet met behulp van Arduino - Ajarnpa
Controle over de hele wereld via internet met Arduino: Hallo, ik ben Rithik. We gaan een internetgestuurde led maken met je telefoon. We gaan software gebruiken zoals Arduino IDE en Blynk. Het is eenvoudig en als het je gelukt is, kun je zoveel elektronische componenten bedienen als je wilt Dingen die we nodig hebben: Hardware:
Voorspellend onderhoud van roterende machines met behulp van een trilling en Thingspeak - Ajarnpa
Voorspellend onderhoud van roterende machines met behulp van een trilling en Thingspeak: Roterende machines zoals windturbines, hydroturbines, inductiemotoren enz. hebben te maken met verschillende soorten slijtage. De meeste van deze fouten en slijtage worden veroorzaakt door de abnormale trillingen in het apparaat. Deze machines worden vaak onder zwaarbelaste
Autonome regeling van het toerental van de motor met behulp van een feedbacksysteem van een op IR gebaseerde toerenteller - Ajarnpa
Autonome regeling van het toerental van de motor met behulp van feedbacksysteem van een op IR gebaseerde toerenteller: er is altijd behoefte aan automatisering van een proces, of het nu een eenvoudig/monsterlijk proces is. methoden om ons kleine stukje land water te geven / te irrigeren. Het probleem van geen huidige toevoerleiding
Hoe u gebruikersniveaus van NUMA toevoegt aan uw exemplaar van N met behulp van NumADD Firefox AddOn: 4 stappen
Gebruikersniveaus van NUMA toevoegen aan uw exemplaar van N NumADD Firefox-add-on gebruiken: Elke gebruiker van Metanet's N-database op gebruikersniveau NUMA weet hoe onhandig de interface is voor het kopiëren van door gebruikers gemaakte niveaus naar uw exemplaar van het spel. NumADD, elimineert de noodzaak van kopiëren en plakken en maakt het overzetten van niveaus het werk van één muisklik