Inhoudsopgave:

Weerwebapp met Esp8266: 7 stappen
Weerwebapp met Esp8266: 7 stappen

Video: Weerwebapp met Esp8266: 7 stappen

Video: Weerwebapp met Esp8266: 7 stappen
Video: DIY Cloud Weather Station with ESP32/ESP8266 (MySQL Database and PHP) 2024, Mei
Anonim
Weer-webapp met Esp8266
Weer-webapp met Esp8266

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 vereist
Hardware vereist
Hardware vereist
Hardware vereist
Hardware vereist
Hardware vereist

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

Hardware-verbindingen
Hardware-verbindingen
Hardware-verbindingen
Hardware-verbindingen

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.

  1. 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.
  2. één draad wordt gebruikt voor Vcc, de tweede draad voor GND en andere twee voor respectievelijk SDA en SCL.
  3. 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

Code voor het hosten van een webserver
Code voor het hosten van een webserver
Code voor het hosten van een webserver
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

Code voor het posten van gegevens naar Thing Speak
Code voor het posten van gegevens naar Thing Speak
Code voor het posten van gegevens naar Thing Speak
Code voor het posten van gegevens naar Thing Speak
Code voor het posten van gegevens naar Thing Speak
Code voor het posten van gegevens naar Thing Speak
Code voor het posten van gegevens naar Thing Speak
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: