
Innholdsfortegnelse:
- Trinn 1: Spesifikasjon for maskinvare og programvare
- Trinn 2: Lagre brukerlegitimasjon
- Trinn 3: Konfigurere nettskjemaet ditt i SPIFFS
- Trinn 4: Oppgaveplanlegging
- Trinn 5: Lesing av temperatur- og fuktighetsverdier fra SHT25
- Trinn 6: Publisere verdier til ThingSpeak ved hjelp av ThingSpeak MQTT API
- Trinn 7: Værmelding via e -post
- Trinn 8: Samlet kode
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02

Introduksjon
En skybasert værprogram som gir daglige værmeldinger som e-postvarsel. Denne nettapplikasjonen måler temperatur og fuktighet ved bruk av SHT25 og Adafruit Huzzah ESP8266. Det gir oss sanntids temperatur- og fuktighetsdata og timeanalyse. Dataene sendes ved hjelp av ThingSpeak MQTT API, og senere sender vi en e -postvarsel til brukeren når temperaturen når den tildelte terskelen ved hjelp av IFTTT -protokollen. SHT25 er en temperatur- og fuktighetssensorer laget av Sensirion. SHT25 gir en høy nøyaktighet rundt ± 2% RH. Luftfuktighetsområdet er mellom 0 til 100% og temperaturområdet er mellom -40 til 125 ° C. Det er mye mer pålitelig og rask med 8 sekunder sensorresponstid.
Funksjoner
- Gir deg sanntidsanalyse og statistikk ved hjelp av Thing Speak MQTT API
- En e -postvarsel gis til brukeren på et bestemt tidspunkt ved bruk av IFTTT
- Oppgaveplanlegger brukes til å planlegge oppgaven som å hente data fra sensorer, publisere sensoravlesningene, abonnere på MQTT -emne
- Den bruker I2C -protokoll for å hente sensoravlesningen som er mer nøyaktig, utvidbar og skalerbar
- hvilemodus når enheten er inaktiv eller det ikke ringes opp en tilbakeringing.
- effektiv oppgaveplanlegging gir problemfri bruk
- En egen webside er vert der brukeren må oppgi brukerlegitimasjon for å unngå å blinke enheten din hver gang når den er tilgjengelig for andre wifi -nettverk
- SPIFFS brukes til å lagre nettsiden vår for å gjøre koden vår lesbar og mindre klønete
Trinn 1: Spesifikasjon for maskinvare og programvare


Maskinvarespesifikasjon
- Adafruit esp8266 Huzzah -brett
- Huzzah Board Shield
- SHT25 Sensormodul
- I2C -kabel
Programvarespesifikasjon
- Arduino IDE
- IFTTT Thing Speak
- MQTT API
Trinn 2: Lagre brukerlegitimasjon


Her bruker vi SHT25 I2C-sensor til å lese sanntidsverdien av temperatur og relativ fuktighet og legge ut denne verdien til skyen. For å få den oppdaterte sensorverdien tid til annen og for å legge ut disse oppdateringene samtidig bruker vi Arduinos Task Scheduler Library. For skyoperasjoner bruker vi ThingSpeak MQTT API. Senere leverer vi værmelding i sanntid til brukeren ved hjelp av IFTTT-appletter. Du kan følge disse trinnene for å lage din egen værstasjon. Så, DIY.
Før du går videre. Vi må lagre brukerens legitimasjon. For dette formålet er vi vert for en webserver på 192.169.1.4. Vi har lagret nettskjemaet vårt i SPIFFS. Når enheten starter, er den vert for en webserver i 60 sekunder. Brukeren bør følge disse trinnene.
- Koble til AP ESPuser, Dette er oppført i listen over tilgjengelige wifi -nettverk. Koble til denne AP -en og skriv inn passordet "*******"
- Når den blir tilkoblet, går du til nettleseren din og skriver inn IP 192.168.1.4.
- Skriv inn SSID og passord for din lokale WiFi i inndatafeltene og skriv inn SEND
- Disse legitimasjonene blir lagret i EEPROM
- Etter 60 sekunder kobler enheten seg automatisk fra AP
- Neste gang du slår på enheten, trenger ikke brukeren å følge denne prosedyren. Enheten vil automatisk hente brukeropplysningene fra EEPROM og fortsette med å få sensoravlesningene fra I2C -grensesnittet og legge det ut i skyen
// --------- AP config ------------ // IPAddress ap_local_IP (192, 168, 1, 4); IPAddress ap_gateway (192, 168, 1, 254); IPAddress ap_subnet (255, 255, 255, 0);
Serial.print ("Konfigurere tilgangspunkt …");
WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
Serial.print ("Sette opp brukerlegitimasjon");
WiFi.softAP (ssidAP, passAP);
server.on ("/", handleRoot);
server.onNotFound (onHandleNotFound);
server.begin ();
APTimer = millis ();
while (millis ()-APTimer <APInterval) {
server.handleClient ();
}
// *************************** HANDTELROT ******************* ********* // void handleRoot () {
if (server.hasArg ("ssid") && server.hasArg ("passord"))
{
// Hvis alle skjemafelt inneholder dataanrop
handelSubmit ()
handleSubmit (); }
annet {
// Vis skjemaet på nytt
// les filen som finnes i spiffs
Filfil = SPIFFS.open ("/webform.html", "r");
server.streamFile (fil, "tekst/html");
// ikke glem å lukke filen
file.close ();
}}
// Kontroller statusen for at den har argumentene ssid og passord
// Skriv deretter legitimasjonen til ROM
ROMwrite (String (server.arg ("ssid")), String (server.arg ("passord")))
Trinn 3: Konfigurere nettskjemaet ditt i SPIFFS
SPIFFS
Serielt perifert grensesnitt Flash File System, eller SPIFFS for kort. Det er et lett filsystem for mikrokontrollere med en SPI-flash-brikke. Den innebygde flash -brikken til ESP8266 har god plass til nettsidene dine, spesielt hvis du har 1 MB, 2 MB eller 4 MB versjon. Vi har også lagret nettsiden vår i Flash System. Det er noen få trinn vi må følge for å laste opp data til spiffs
- Last ned verktøyet:
- I din Arduino skissebok -katalog, opprett verktøykatalog hvis den ikke eksisterer ennå
- Pakk ut verktøyet i verktøykatalogen (banen vil se ut som /Arduino/tools/ESP8266FS/tool/esp8266fs.jar)
- Start Arduino IDE på nytt
- Åpne en skisse (eller lag en ny og lagre den)
- Gå til skisse -katalogen (velg Skisse> Vis skisse -mappe)
- Lag en katalog som heter data og eventuelle filer du vil ha i filsystemet der. Vi har lastet opp HTML -siden vår med navnet webform.html
- Sørg for at du har valgt et kort, port og lukket seriell skjerm
- Velg Verktøy> ESP8266 Sketch Data Upload. Dette bør begynne å laste opp filene til ESP8266 flash -filsystemet. Når dette er gjort, vil IDE -statuslinjen vise SPIFFS Image Uploaded -melding.
Filfil = SPIFFS.open ("/webform.html", "r");
server.streamFile (fil, "tekst/html");
// ikke glem å lukke filen
file.close ();
Trinn 4: Oppgaveplanlegging
I denne opplæringen utfører vi to operasjoner:
- Les dataene fra SHT25 ved hjelp av I2C -protokollen
- Legg ut de oppdaterte dataene til skyen ved hjelp av ThingSpeak MQTT API
For å oppnå dette bruker vi TaskScheduler -biblioteket. Vi har planlagt to forskjellige oppgaver som refererer til to forskjellige kontrolloperasjoner. dette gjøres som følger
- Oppgave 1 er for å lese sensorverdien denne oppgaven kjører i 1 sekund til den når timeout på 10 sekunder.
- Når oppgave1 når sin timeout Vi kobler til lokal Wifi- og MQTT -megler.
- Nå er oppgave 2 aktivert og vi deaktiverer oppgave 1 oppgave 2 er for å publisere sensordata til Thing Speak MQTT -megler, denne oppgaven kjører i 20 sekunder til den når timeout på 20 sekunder
- Når oppgave 2 når sin tidsavbrudd, blir oppgave 1 aktivert igjen og oppgave 2 er deaktivert. her igjen, vi får den oppdaterte verdien, og prosessen fortsetter
- når det ikke ringes tilbake eller enheten er inaktiv, går den til Light Sleep og sparer strøm.
// --------- prototype for tilbakeringing av oppgaver ------------ //
void taskI2CCallback ();
void taskI2CDisable ();
void taskWiFiCallback ();
void taskWiFiDisable ();
// --------- Oppgaver ------------ //
Oppgave tI2C (2 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable);
Oppgave tWiFi (20* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);
// aktiver tI2C tI2C.enable ();
Trinn 5: Lesing av temperatur- og fuktighetsverdier fra SHT25

I2C er et to-leder grensesnitt som bare bruker to ledninger for å kommunisere med hovedenheten. Den ene er SCL (Serial Clock) og den andre er SDA (Serial Data). Hver slaveenhet har en unik adresse. SHT 25 har også en 8-biters adresse og kan nås med en 0x44-adresse. den har en 8 -bit av adressen der 7 biter er den faktiske adressen, og mens høyre LSB -bit 0 brukes til å signalisere lesing fra eller skriving til enheten. Hvis bit 0 er satt til 1, vil master -enheten lese fra slave I2C -enheten. I2C er mye mer pålitelig, skalerbar og rask, og selv den har mange driftsmåter som gjør den mye mer energieffektiv
Vi bruker Wire.h -biblioteket til å lese temperatur- og fuktighetsverdiene. Dette biblioteket muliggjør i2c -kommunikasjon mellom sensoren og hovedenheten. 0x44 er I2C -adressen til SHT25. SHT25 opererer i en annen modus. Du kan referere til databladet for det. Vi bruker 0x2C og 0x06 som henholdsvis MSB og LSB for enkeltskuddsoperasjon
Trinn 6: Publisere verdier til ThingSpeak ved hjelp av ThingSpeak MQTT API

For å legge våre temperatur- og fuktighetsverdier til skyen bruker vi ThingSpeak MQTT API. ThingSpeak er en IoT -plattform. ThingSpeak er en gratis webtjeneste som lar deg samle og lagre sensordata i skyen. MQTT er en vanlig protokoll som brukes i IoT-systemer for å koble til enheter og sensorer på lavt nivå. MQTT brukes til å sende korte meldinger til og fra en megler. ThingSpeak har nylig lagt til en MQTT -megler, slik at enheter kan sende meldinger til ThingSpeak. Du kan følge prosedyren for å sette opp ThingSpeak Channel fra dette innlegget
ThingSpeak MQTT
MQTT er en publiser/abonner-arkitektur som først og fremst er utviklet for å koble båndbredde og strømbegrensede enheter over trådløse nettverk. Det er en enkel og lett protokoll som kjører over TCP/IP -kontakter eller WebSockets. MQTT over WebSockets kan sikres med SSL. Publiser/abonner -arkitekturen gjør det mulig å skyve meldinger til klientenhetene uten at enheten trenger å polle serveren kontinuerlig. En klient er en hvilken som helst enhet som kobles til megleren og kan publisere eller abonnere på emner for å få tilgang til informasjonen. Et emne inneholder ruteinformasjon for megleren. Hver klient som ønsker å sende meldinger, publiserer dem til et bestemt emne, og hver klient som ønsker å motta meldinger, abonnerer på et bestemt emne
Publiser og abonner med ThingSpeak MQTT
- Publisering til kanalfeedkanaler /publish /
- Publisering til et bestemt felt kanaler/publish/fields/field/
- Abonner på kanalfeltet kanaler/abonner //
- Abonner på kanalene for private kanal // abonnere/felter/felt/
- Abonner på alle feltene på en kanal. kanaler // abonnere/felter/feild/
ugid taskWiFiCallback ()
{
Serial.println ("taskWiFiCallbackStarted");
Serial.print ("timeout for denne oppgaven: / t");
Serial.println (tWiFi.getTimeout ());
hvis (! mqttCli.connected ())
{
Serial.println ("Klienten er ikke tilkoblet");
koble til igjen MQTT ();
}
String topicString = "channel/"+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 (fuktig, 1));
int dataLength = dataString.length ()+1;
byte dataBuffer [dataLength];
dataString.getBytes (dataBuffer, dataLength);
mqttCli.beginPublish (topicBuffer, dataLength, false);
Serial.println (mqttCli.write (dataBuffer, dataLength)? "Publisert": "publisert mislyktes");
mqttCli.endPublish ();
//mqttCli.loop ();
}
Trinn 7: Værmelding via e -post


Vi bruker IFTTT-appleter for å gi værmelding i sanntid via e-post til brukeren. Så, vi har implementert det gjennom ThingSpeak. Vi gjennomsnitter 5-fay-verdiene av temperatur og fuktighet. Når verdien til den siste oppføringen er større enn gjennomsnittsverdien. Det vil utløse en e -postvarsling "det er en varm dag". og når den er mindre enn gjennomsnittsverdien. Det vil utløse en e -postvarsling "What a beautiful day". Hver dag rundt kl. 10:00 (IST) får vi en e -postvarsel
channelID = ******;
iftttURL = 'https://maker.ifttt.com/**************';
moistData = thingSpeakRead (channelID, 'Fields', 3, 'NumDays', 5); tempData = thingSpeakRead (channelID, 'Fields', 1, 'NumDays', 5);
perHumid = maks (fuktighetsdata) -min (fuktighetsdata);
humidValue = 0,1*perHumid+min (fuktighetsdata);
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 (webread (urlHumid));
hvis (lastTempValue
hvis (lastTempValue> tempValue || lastHumidValue> humidValue)
plantMessage = 'Det er en varm dag.'; webwrite (iftttURL, 'value1', plantMessage, 'value2', lastTempValue, 'value3', lastHumidValue); slutt
Trinn 8: Samlet kode



Samlet kode
Den generelle koden er tilgjengelig i dette GitHub -depotet
Begrensninger
- Det er noen problemer med å publisere dataene ved hjelp av publiseringsmetode for den store mengden data. For å løse dette problemet bruker vi skrive () -funksjonen
- SPIFFS bør formateres før du laster opp de nye dataene til SPIFFS.
- Du må ikke bruke funksjonen forsinkelse (). forsinkelse () hindrer bakgrunnsoperasjonen. Opprett i stedet forsinkelser med millis () bare hvis det er nødvendig
Studiepoeng
- ESP826WebServer
- Oppgaveplanlegger
- SHT 25
- ThingSpeak MQTT API
- IFTTT
- PubSubClient
Anbefalt:
TTS værmelding: 5 trinn

TTS Weather Broadcast: Jeg bestemmer vanligvis om jeg skal ta anumbrella basert på værforholdene før jeg går ut. Jeg pleide å ta feil beslutninger fordi været var skiftende de siste to ukene , det var solfylt da jeg gikk ut at jeg ikke tok med meg en paraply, og
Kontroll ledet over hele verden ved bruk av internett ved hjelp av Arduino: 4 trinn

Kontroll ledet over hele verden ved bruk av internett ved hjelp av Arduino: Hei, jeg er Rithik. Vi kommer til å lage en Internett -kontrollert LED ved hjelp av telefonen din. Vi kommer til å bruke programvare som Arduino IDE og Blynk. Det er enkelt, og hvis du lyktes kan du kontrollere så mange elektroniske komponenter du vilTing We Need: Hardware:
Overvåke akselerasjon ved bruk av Raspberry Pi og AIS328DQTR ved hjelp av Python: 6 trinn

Overvåke akselerasjon ved hjelp av Raspberry Pi og AIS328DQTR Bruke Python: Akselerasjon er begrenset, tror jeg i henhold til noen fysikklover.- Terry Riley En gepard bruker fantastisk akselerasjon og raske endringer i hastighet når jeg jager. Den raskeste skapningen i land en gang i blant bruker sitt høyeste tempo for å fange byttedyr. Den
Atollic TrueStudio-Switch på LED-en ved å trykke på trykknappen ved bruk av STM32L100: 4 trinn

Atollic TrueStudio-Switch på LED-en ved å trykke på trykknappen ved bruk av STM32L100: I denne opplæringen til STM32 skal jeg fortelle deg hvordan du leser en GPIO-pin av STM32L100, så her skal jeg lage en ombord LED-glød av bare trykke på trykknappen
Minimalistisk IoT -klokke (ved bruk av ESP8266, Adafruit.io, IFTTT og Arduino IDE): 10 trinn (med bilder)

Minimalistisk IoT -klokke (ved hjelp av ESP8266, Adafruit.io, IFTTT og Arduino IDE): I denne opplæringen viser jeg hvordan du kan lage en minimalistisk klokke synkronisert med internett. Jeg testet den med to forskjellige ESP8266 -baserte brett: Firebeetle og NodeMCU. Mikrokontrolleren får nåværende tid fra en Google -server, og viser den på en