Innehållsförteckning:

Väderwebbapp med Esp8266: 7 steg
Väderwebbapp med Esp8266: 7 steg

Video: Väderwebbapp med Esp8266: 7 steg

Video: Väderwebbapp med Esp8266: 7 steg
Video: Как спрятать данные в ячейках Excel? 2024, November
Anonim
Väderwebbapp med Esp8266
Väderwebbapp med Esp8266

SHT 31 är en temperatur- och luftfuktighetssensorer gjorda av Sensirion. SHT31 ger en hög noggrannhet kring ± 2% RF. Dess luftfuktighetsintervall är mellan 0 till 100% och temperaturintervallet är mellan -40 till 125 ° C. Det är mycket mer tillförlitligt och snabbt med 8 sekunder sensorresponstid. Dess funktioner inkluderar förbättrad signalbehandling och I2C -kompatibilitet. Den har olika driftsätt som gör den energieffektiv.

I denna handledning har vi anslutit SHT 31 till Adafruit Huzzah -bräda. För avläsning av temperatur- och luftfuktighetsvärden har vi använt ESP8266 I2C -skärm. Denna adapter gör alla stift tillgängliga för användaren och erbjuder användarvänlig I2C-miljö.

Steg 1: Hårdvara krävs

Hårdvara krävs
Hårdvara krävs
Hårdvara krävs
Hårdvara krävs
Hårdvara krävs
Hårdvara krävs

Hårdvara som används för att slutföra denna uppgift:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C -adapter

4. I2C -kabel

Steg 2: Hårdvaruanslutningar

Hårdvaruanslutningar
Hårdvaruanslutningar
Hårdvaruanslutningar
Hårdvaruanslutningar

Detta steg inkluderar guiden för maskinvaruanslutning. Detta avsnitt förklarar i princip de anslutningar som krävs mellan sensorn och ESP8266. Anslutningarna är följande.

  1. SHT31 fungerar över I2C. Bilden ovan visar kopplingen mellan ESP8266 och SHT31 -modulen. Vi använder I2C -kabel för det antingen kan vi använda 4 F till F bygelkablar.
  2. en tråd används för Vcc, den andra ledningen för GND och andra två till SDA respektive SCL.
  3. Enligt I2C -adaptern används pin2 och pin 14 på ett ESP8266 -kort som SDA respektive SCL

Steg 3: Kod för uppgiftsplanering

I denna handledning utför vi tre operationer

  • Läs data från SHT11 med I2C -protokoll
  • värd för webbservern och publicera sensoravläsningen på webbsidan
  • posta sensoravläsningarna till ThingSpeak API

För att uppnå detta använder vi TaskScheduler -biblioteket. Vi har planerat tre olika uppgifter som avser tre olika kontrolloperationer. detta görs enligt följande

  • Uppgift 1 är för avläsning av sensorvärdet, den här uppgiften körs i 1 sekund tills den når timeout på 10 sekunder.
  • När uppgift 1 når sin timeout är uppgift 2 aktiverad och uppgift 1 inaktiverad.
  • Vi ansluter till AP i denna återuppringning, Två booleska variabler tas för att ta hand om växlingen mellan STA och AP
  • I uppgift 2 är vi värd för en webbserver på 192.168.1.4. Denna uppgift körs var 5: e sekund tills den når sin timeout som är 50 sekunder
  • När uppgift 2 når timeout är uppgift 3 aktiverad och uppgift 2 inaktiverad.
  • Vi ansluter till STA (lokal IP) i denna återuppringning
  • I uppgift 3 lägger vi ut sensoravläsningen till molnet ThingSpeak API
  • Uppgift 3 körs var femte sekund tills den nått sin timeout, dvs 50 sek
  • När uppgiften 3 når sin timeout aktiveras uppgift 1 igen och uppgift 3 inaktiveras.
  • När ingen återuppringning görs eller enheten är inaktiv går den till Light Sleep och sparar därmed ström.

Schemaläggare ts;

// Uppgifter för i2c, hosting webbserver och inlägg på thingspeak

Uppgift tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDisable); Uppgift tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Task tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // timeout för uppgifter tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // aktivera I2C -uppgift tI2C.enable ();

Steg 4: Kod för avläsning av temperatur- och luftfuktighetsvärden

Vi använder Wire.h -biblioteket för att läsa temperatur- och luftfuktighetsvärden. Detta bibliotek underlättar i2c -kommunikation mellan sensorn och masterenheten. 0x44 är I2C -adressen för SHT31.

SHT31 fungerar på ett annat sätt. Du kan hänvisa till databladet för det.

Vi använder 0x2C och 0x06 som MSB respektive LSB för enkelskott.

// I2C uppgift återuppringning ogiltig uppgiftI2CCallback ()

{Serial.println ("taskI2CStarted"); osignerad int root [6]; // börja överföra från 0x44; Wire.beginTransmission (Addr); // för ett skott överföring med hög repeterbarhet använder vi 0x2C (MSB) och 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // avsluta överföring Wire.endTransmission (); // begär byte från 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); if (Wire.available () == 6) {// data [0] och data [1] innehåller 16 bitars temperatur. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] innehåller 8 bitar CRC root [2] = Wire.read (); // data [3] och data [4] innehåller 16 bitar av fuktrot [3] = Wire.read (); root [4] = Wire.read (); // data [5] består av 8 bitars CRC root [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // skift MSB med 8 bitar lägg till LSB float cTemp = -45,0 + (175,0 * temp /65535,0); float fTemp = (cTemp * 1.8) + 32.0; // skift MSB med 8 bitar lägg till LSB till den dividera med full upplösning och * 100 för procentuell luftfuktighet = (100,0 * ((root [3] * 256,0) + root [4])) /65535,0;

tempC = cTemp;

tempF = fTemp; fuktig = fuktighet; Serial.print ("Temperatur i C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Temperatur i F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Luftfuktighet: / t"); Serial.println (Sträng (fuktighet, 1)); }

Steg 5: Kod för värd för en webbserver

Kod för värd för en webbserver
Kod för värd för en webbserver
Kod för värd för en webbserver
Kod för värd för en webbserver

Vi har en webbserver från vår enhet på en statisk IP.

  • ESP8266WebServer -biblioteket används för att vara värd för webbservern
  • Först måste vi deklarera IP -adress, Gateway och nätmask för att skapa vår statiska IP
  • Ange nu ssid och lösenord för din åtkomstpunkt.
  • anslut till åtkomstpunkten från valfri STA -enhet
  • värd för servern på port 80 som är en standardport för internetkommunikationsprotokoll, Hypertext Transfer Protocol (HTTP)
  • ange 192.168.1.4 i din webbläsare för introwebbsida och 192.168.1.4/Värde för sensorläsning av webbsida

// statisk Ip för AP

IPAddress ap_local_IP (192, 168, 1, 4);

IPAddress ap_gateway (192, 168, 1, 254);

IPAddress ap_subnet (255, 255, 255, 0); // ssid och AP för lokal WiFi i STA -läge

const char WiFissid = "*********";

const char WiFipass = "*********";

// ssid och passera för AP

const char APssid = "********";

const char APpass = "********";

ESP8266WebServer -server (80);

ogiltig installation {

server.on ("/", onHandleDataRoot);

server.on ("/Value", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("taskAP startad");

server.handleClient ();

}

void onHandleDataRoot () {server.send (200, "text/html", PAGE1); }

void onHandleDataFeed () {

server.send (200, "text/html", PAGE2); }

void onHandleNotFound () {

String message = "Filen hittades inte / n / n";

meddelande += "URI:";

meddelande += server.uri ();

meddelande += "\ nMetod:";

meddelande += (server.method () == HTTP_GET)? "GET": "POST";

meddelande += "\ nArgument:";

meddelande += server.args ();

meddelande += "\ n";

server.send (404, "text/vanlig", meddelande);}

void reconnectAPWiFi () {

WiFi.mode (WIFI_AP_STA);

fördröjning (100);

WiFi. Koppla bort ();

boolsk status = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

om (status == true) {

Serial.print ("Inställning av mjuk-AP …");

booleskt ap = WiFi.softAP (APssid, APpass);

om (ap == true) {

Serial.print ("ansluten till: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Steg 6: Kod för att posta data till Thing Speak

Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak
Kod för att posta data till Thing Speak

Här publicerar vi sensoravläsningarna till Thing Speak. följande steg behövs för att slutföra denna uppgift-

  • Skapa ditt konto i ting tala
  • Skapa kanaler och fält för att lagra din sensordata
  • vi kan hämta och posta data från ESP till thingSpeak och vice versa med hjälp av GET- och POST-förfrågningar till API: et.
  • vi kan skicka våra data till ThingSpeak enligt följande

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += Sträng (fuktig); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /uppdatera HTTP /1.1 / n"); wifiClient.print ("Värd: api.thingspeak.com / n"); wifiClient.print ("Anslutning: stäng / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Innehållslängd:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Steg 7: Övergripande kod

Den övergripande koden är tillgänglig i mitt github -arkiv

Poäng:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Schemaläggaren
  • SHT 31
  • I2C -skanning
  • HIH6130 instruerbar handledning
  • Tråd Arduino
  • NCD.io

Rekommenderad: