Inhoudsopgave:
- Stap 1: Benodigde hardware
- Stap 2: Hardwareverbindingen
- Stap 3: Code voor taakplanning
- Stap 4: Code voor het lezen van temperatuur- en vochtigheidswaarden
- Stap 5: Code voor het hosten van een webserver
- Stap 6: Code voor het posten van gegevens naar Thing Speak
- Stap 7: Algemene code
Video: Weerwebapp met Esp8266: 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
SHT 31 is een temperatuur- en vochtigheidssensor gemaakt door Sensirion. De SHT31 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. De functionaliteit omvat verbeterde signaalverwerking en I2C-compatibiliteit. Het heeft verschillende werkingsmodi waardoor het energiezuinig is.
In deze tutorial hebben we de SHT 31 gekoppeld aan het Adafruit Huzzah-bord. Voor het lezen van temperatuur- en vochtigheidswaarden hebben we ESP8266 I2C-schild gebruikt. Deze adapter maakt alle pinnen toegankelijk voor de gebruiker en biedt een gebruiksvriendelijke I2C-omgeving.
Stap 1: Benodigde hardware
Hardware die wordt gebruikt om deze taak te voltooien:
1. SHT31
2. Adafruit Huzzah ESP8266
3. ESP8266 I2C-adapter
4. I2C-kabel
Stap 2: Hardwareverbindingen
Deze stap omvat de handleiding voor het aansluiten van hardware. In dit gedeelte worden in principe de bedradingsverbindingen tussen de sensor en de ESP8266 uitgelegd. De aansluitingen zijn als volgt.
- De SHT31 werkt via I2C. De bovenstaande afbeelding toont de verbinding tussen ESP8266 en SHT31-module. We gebruiken hiervoor een I2C-kabel of we kunnen 4 F-naar-F-jumpers gebruiken.
- één draad wordt gebruikt voor Vcc, de tweede draad voor GND en andere twee voor respectievelijk SDA en SCL.
- Volgens de I2C-adapter worden pin2 en pin 14 van een ESP8266-bord respectievelijk als SDA en SCL gebruikt
Stap 3: Code voor taakplanning
In deze tutorial voeren we drie bewerkingen uit:
- Lees de gegevens van SHT11 met behulp van het I2C-protocol
- host de webserver en plaats de sensormeting op de webpagina
- post de sensormetingen naar de ThingSpeak API
Om dit te bereiken gebruiken we de TaskScheduler-bibliotheek. We hebben drie verschillende taken gepland die verwijzen naar drie 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 Taak1 zijn time-out bereikt, is Taak 2 ingeschakeld en Taak1 uitgeschakeld.
- We maken verbinding met AP in deze callback. Er worden twee booleaanse variabelen gebruikt om te zorgen voor het schakelen tussen STA en AP
- In Taak 2 hosten we een webserver op 192.168.1.4. Deze taak wordt elke 5 seconden uitgevoerd totdat de time-out is bereikt die 50 seconden is
- Wanneer Taak 2 de time-out bereikt, is Taak 3 ingeschakeld en Taak 2 uitgeschakeld.
- We maken verbinding met STA (lokaal IP) in deze callback
- In Taak 3 plaatsen we de sensoruitlezing naar de cloud ThingSpeak API
- Taak 3 wordt elke vijf seconden uitgevoerd totdat de time-out is bereikt, d.w.z. 50 sec
- Wanneer Task3 zijn time-out bereikt, wordt Taak 1 weer ingeschakeld en Taak 3 uitgeschakeld.
- Wanneer er niet wordt teruggebeld of het apparaat inactief is, gaat het naar de lichte slaapstand, waardoor energie wordt bespaard.
Planner ts;
// Taken voor i2c, webserver hosten en posten op thingspeak
Taak tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCallback, &ts, false, NULL, &taskI2CDisable); Taak tAP(5*TASK_SECOND, TASK_FOREVER, &taskAPCallback, &ts, false, NULL, &taskAPDisable); Taak tWiFi (5* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable); //time-out voor taken tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout(50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // schakel I2C-taak tI2C.enable in ();
Stap 4: Code voor het lezen van temperatuur- en vochtigheidswaarden
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 SHT31.
SHT31 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.
// I2C taak terugbellen ongeldige taakI2CCallback()
{ Serial.println("taskI2CStarted"); niet-ondertekende int root[6]; // begin met verzenden vanaf 0x44; Wire.beginTransmission (Addr); // voor transmissie in één keer met hoge herhaalbaarheid gebruiken we 0x2C(MSB) en 0x06(LSB) Wire.write(0x2C); Draad.schrijven (0x06); // beëindig transmissie Wire.endTransmission (); // verzoek bytes van 0x44 Wire.beginTransmission (Addr); Wire.endTransmission(); Wire.requestFrom(Addr, 6); if(Wire.available() == 6){ //data[0] en data[1] bevat 16 bit temperatuur. root[0] = Wire.read(); root[1] =Draad.lezen(); //data[2] bevat 8 bit CRC root [2] = Wire.read(); //data[3] en data[4] bevatten 16 bit vochtigheid root [3] = Wire.read(); root[4] = Wire.read(); //data[5] bestaat uit 8 bit CRC root [5] = Wire.read(); } int temp = (root[0] * 256) + root[1]; // MSB met 8 bits verschuiven, LSB float toevoegen cTemp = -45,0 + (175,0 * temp / 65535.0); float fTemp = (cTemp * 1.8) + 32,0; // verschuif de MSB met 8 bits voeg LSB eraan toe gedeeld door volledige resolutie en * 100 voor percentage zwevende vochtigheid = (100.0 * ((root [3] * 256,0) + root [4])) / 65535.0;
tempC = cTemp;
tempF = fTemp; vochtig = vochtigheid; Serial.print("Temperatuur in C:\t"); Serial.println(String(cTemp, 1)); Serial.print("Temperatuur in F:\t"); Serial.println(String(fTemp, 1)); Serial.print("Vochtigheid:\t "); Serial.println (String (vochtigheid, 1)); }
Stap 5: Code voor het hosten van een webserver
We hebben een webserver vanaf ons apparaat gehost op een statisch IP-adres.
- ESP8266WebServer-bibliotheek wordt gebruikt om de webserver te hosten
- Eerst moeten we het IP-adres, de gateway en het subnetmasker opgeven om ons statische IP-adres te maken
- Verklaar nu ssid en wachtwoord voor uw toegangspunt.
- verbinding maken met het toegangspunt vanaf elk STA-apparaat
- host de server op poort 80, een standaardpoort voor internetcommunicatieprotocol, Hypertext Transfer Protocol (HTTP)
- voer 192.168.1.4 in uw webbrowser in voor de introductie-webpagina en 192.168.1.4/Value voor de webpagina voor het lezen van sensoren
// statische IP voor AP
IPA-adres ap_local_IP(192, 168, 1, 4);
IPA-adres ap_gateway(192, 168, 1, 254);
IPAddress ap_subnet(255, 255, 255, 0);//ssid en AP voor lokale wifi in STA-modus
const char WiFissid = "*********";
const char WiFipass = "*********";
//ssid en pass voor AP
const char APssid = "********";
const char APpass = "********";
ESP8266WebServer-server (80);
ongeldige setup{
server.on("/", onHandleDataRoot);
server.on("/Value", onHandleDataFeed);
server.onNotFound(onHandleNotFound);
}
ongeldige taakAPCallback(){
Serial.println("taakAP gestart");
server.handleClient();
}
void onHandleDataRoot(){ server.send(200, "text/html", PAGE1); }
ongeldig opHandleDataFeed(){
server.send(200, "tekst/html", PAGINA2); }
ongeldig opHandleNotFound(){
String bericht = "Bestand niet gevonden\n\n";
bericht += "URI: ";
bericht += server.uri();
bericht += "\nMethode: ";
bericht += (server.methode() ==
bericht += "\nArgumenten: ";
bericht += server.args();
bericht += "\n";
server.send(404, "tekst/gewoon", bericht);}
ongeldig opnieuw verbindenAPWiFi(){
WiFi.mode (WIFI_AP_STA);
vertraging (100);
WiFi.verbinding verbreken();
booleaanse status = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
if(status ==waar){
Serial.print ("Soft-AP instellen … ");
boolean ap = WiFi.softAP(APssid, APpass);
if(ap==true){
Serial.print("verbonden met:\t");
//IPAdres mijnIP = WiFi.softAPIP();
Seriële.println(WiFi.softAPIP());
}
server.begin();
}
}
Stap 6: Code voor het posten van gegevens naar Thing Speak
Hier plaatsen we de sensormetingen op Thing Speak. de volgende stappen zijn nodig om deze taak te voltooien-
- Maak je account aan in ding speak
- Maak kanalen en velden om uw sensorgegevens op te slaan
- we kunnen de gegevens van ESP naar thingSpeak krijgen en posten en vice versa met behulp van GET- en POST-verzoeken naar de api.
- we kunnen onze gegevens als volgt op ThingSpeak plaatsen:
ongeldige taakWiFiCallback(){
WiFiClient wifiClient; if(wifiClient.connect(hostId, 80)){ String postStr = apiKey; postStr +="&field1="; postStr += String (vochtig); postStr +="&field2="; postStr += String (tempC); postStr +="&field3="; postStr += String (tempF); postStr += "\r\n\r\n"; wifiClient.print("POST /update HTTP/1.1\n"); wifiClient.print("Host: api.thingspeak.com\n"); wifiClient.print("Verbinding: sluiten\n"); wifiClient.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); wifiClient.print("Content-Type: application/x-www-form-urlencoded\n"); wifiClient.print("Inhoudslengte: "); wifiClient.print(postStr.length()); wifiClient.print("\n\n"); wifiClient.print(postStr); } wifiClient.stop(); }
Stap 7: Algemene code
De algemene code is beschikbaar in mijn github-repository
Credits:
- Arduino JSON: ArduinoJson
- ESP826Webserver
- Taakplanner
- SHT 31
- I2C-scan
- HIH6130 instructables-tutorial
- Draad Arduino
- NCD.io
Aanbevolen:
Digitale klok met netwerktijd met behulp van de ESP8266: 4 stappen (met afbeeldingen)
Digitale netwerkklok met de ESP8266: we leren hoe we een schattige kleine digitale klok kunnen bouwen die communiceert met NTP-servers en de netwerk- of internettijd weergeeft. We gebruiken de WeMos D1 mini om verbinding te maken met een wifi-netwerk, de NTP-tijd te verkrijgen en deze weer te geven op een OLED-module. De video hierboven
DIY slimme weegschaal met wekker (met wifi, ESP8266, Arduino IDE en Adafruit.io): 10 stappen (met afbeeldingen)
DIY Slimme Weegschaal Met Wekker (met Wi-Fi, ESP8266, Arduino IDE en Adafruit.io): In mijn vorige project ontwikkelde ik een slimme weegschaal met Wi-Fi. Het kan het gewicht van de gebruiker meten, het lokaal weergeven en naar de cloud sturen. U kunt hier meer informatie over krijgen op onderstaande link: https://www.instructables.com/id/Wi-Fi-Smart-Scale-wi
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
Beginnersgids voor ESP8266 en tweeten met ESP8266: 17 stappen (met afbeeldingen)
Beginnersgids voor ESP8266 en tweeten met ESP8266: ik leerde over Arduino 2 jaar geleden. Dus begon ik te spelen met eenvoudige dingen zoals LED's, knoppen, motoren enz. Toen dacht ik dat het niet cool zou zijn om verbinding te maken om dingen te doen zoals het weergeven van de het weer van de dag, aandelenkoersen, treintijden op een LCD-scherm. Ik