Sisällysluettelo:

Sää -verkkosovellus käyttämällä Esp8266: 7 vaihetta
Sää -verkkosovellus käyttämällä Esp8266: 7 vaihetta

Video: Sää -verkkosovellus käyttämällä Esp8266: 7 vaihetta

Video: Sää -verkkosovellus käyttämällä Esp8266: 7 vaihetta
Video: Poliisi niputtaa laitosjonnen 2024, Marraskuu
Anonim
Sääsovellus Esp8266: n avulla
Sääsovellus Esp8266: n avulla

SHT 31 on Sensirionin valmistama lämpötila- ja kosteusanturi. SHT31 tarjoaa korkean tarkkuuden noin ± 2% RH. Sen kosteusalue on 0-100% ja lämpötila -alue -40-125 ° C. Se on paljon luotettavampi ja nopeampi, kun anturin vasteaika on 8 sekuntia. Sen toiminnallisuus sisältää parannetun signaalinkäsittelyn ja I2C -yhteensopivuuden. Siinä on erilaisia toimintatapoja, mikä tekee siitä energiatehokkaan.

Tässä opetusohjelmassa olemme liittäneet SHT 31: n Adafruit Huzzah -levyyn. Lämpötila- ja kosteusarvojen lukemiseen olemme käyttäneet ESP8266 I2C -suojaa. Tämä sovitin tuo kaikki nastat käyttäjän saataville ja tarjoaa käyttäjäystävällisen I2C-ympäristön.

Vaihe 1: Laitteisto vaaditaan

Laitteisto vaaditaan
Laitteisto vaaditaan
Laitteisto vaaditaan
Laitteisto vaaditaan
Laitteisto vaaditaan
Laitteisto vaaditaan

Tämän tehtävän suorittamiseen käytetyt laitteistot:

1. SHT31

2. Adafruit Huzzah ESP8266

3. ESP8266 I2C -sovitin

4. I2C -kaapeli

Vaihe 2: Laitteistoyhteydet

Laitteiston liitännät
Laitteiston liitännät
Laitteiston liitännät
Laitteiston liitännät

Tämä vaihe sisältää laitteiston kytkentäoppaan. Tässä osassa selitetään periaatteessa anturin ja ESP8266: n väliset johdotusliitännät. Liitännät ovat seuraavat.

  1. SHT31 toimii yli I2C. Yllä oleva kuva osoittaa yhteyden ESP8266: n ja SHT31 -moduulin välillä. Käytämme siihen I2C -kaapelia, joko joko 4 - F -hyppyjohtimia.
  2. toista johdinta käytetään Vcc: lle, toista johtoa GND: lle ja kaksi muuta johdolle SDA: lle ja SCL: lle.
  3. I2C -sovittimen mukaan ESP8266 -kortin pin2 ja nasta 14 käytetään SDA: na ja SCL: nä

Vaihe 3: Tehtävien ajoituksen koodi

Tässä opetusohjelmassa suoritamme kolme toimintoa

  • Lue SHT11 -tiedot I2C -protokollaa käyttäen
  • isännöi verkkopalvelinta ja lähetä anturin lukema verkkosivulle
  • lähetä anturin lukemat ThingSpeak -sovellusliittymään

Tämän saavuttamiseksi käytämme TaskScheduler -kirjastoa. Olemme suunnitelleet kolme eri tehtävää, jotka viittaavat kolmeen erilaiseen ohjaustoimintoon. tämä tehdään seuraavasti

  • Tehtävä 1 on anturin arvon lukemiseen, tämä tehtävä kestää 1 sekunnin, kunnes se saavuttaa 10 sekunnin aikakatkaisun.
  • Kun tehtävä 1 saavuttaa aikakatkaisunsa, tehtävä 2 on käytössä ja tehtävä 1 on poistettu käytöstä.
  • Yhdistämme AP: hen tässä takaisinsoitossa. Kaksi boolen muuttujaa otetaan huomioon STA: n ja AP: n välillä vaihtamisen varmistamiseksi
  • Tehtävässä 2 isännöimme verkkopalvelinta osoitteessa 192.168.1.4. Tämä tehtävä suoritetaan joka 5 sekunti, kunnes se saavuttaa aikakatkaisunsa, joka on 50 sekuntia
  • Kun tehtävä 2 saavuttaa aikakatkaisun, tehtävä 3 on käytössä ja tehtävä 2 on poistettu käytöstä.
  • Yhdistämme STA: han (paikallinen IP) tässä takaisinsoitossa
  • Tehtävässä 3 lähetämme anturin lukeman ThingSpeak -sovellusliittymään
  • Tehtävä 3 suoritetaan joka viides sekunti, kunnes se saavuttaa aikakatkaisunsa eli 50 sekuntia
  • Kun Task3 saavuttaa aikakatkaisunsa, tehtävä 1 otetaan uudelleen käyttöön ja tehtävä 3 on poistettu käytöstä.
  • Kun takaisinsoittoa ei soiteta tai laite on käyttämättömänä, se siirtyy Light Sleep -tilaan, mikä säästää virtaa.

Ajastin ts;

// Tehtävät i2c: lle, web -palvelimen isännöinti ja postitus asioille

Tehtävä tI2C (1 * TASK_SECOND, TASK_FOREVER ja & taskI2CCallback, & ts, false, NULL ja taskI2CDisable); Tehtävä tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL ja taskAPDisable); Tehtävä tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL ja & taskWiFiDisable); // tehtävien aikakatkaisu tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // ota käyttöön I2C -tehtävä tI2C.enable ();

Vaihe 4: Lämpötila- ja kosteusarvojen lukemiskoodi

Käytämme Wire.h -kirjastoa lämpötila- ja kosteusarvojen lukemiseen. Tämä kirjasto helpottaa i2c -tiedonsiirtoa anturin ja päälaitteen välillä. 0x44 on SHT31: n I2C -osoite.

SHT31 toimii eri toimintatilassa. Voit viitata siihen tietolomakkeeseen.

Käytämme 0x2C: tä ja 0x06 MSB: nä ja LSB: nä vastaavasti yhden laukauksen toiminnassa.

// I2C -tehtävän takaisinsoitto tyhjä tehtäväI2CCallback ()

{Serial.println ("taskI2CStarted"); unsigned int root [6]; // aloita lähetys 0x44; Wire.beginTransmission (Addr); // yhden laukauksen lähetyksessä, jolla on suuri toistettavuus, käytämme 0x2C (MSB) ja 0x06 (LSB) Wire.write (0x2C); Wire.write (0x06); // lopeta lähetys Wire.endTransmission (); // pyydä tavuja 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6); jos (Wire.available () == 6) {// data [0] ja data [1] sisältävät 16 bittiä lämpötilaa. root [0] = Wire.read (); root [1] = Wire.read (); // data [2] sisältää 8 bittiä CRC -juuria [2] = Wire.read (); // data [3] ja data [4] sisältävät 16 bittiä kosteusjuuria [3] = Wire.read (); root [4] = Wire.read (); // data [5] koostuu 8 -bittisestä CRC -juurista [5] = Wire.read (); } int temp = (root [0] * 256) + root [1]; // siirtää MSB: tä 8 bitillä lisää LSB float cTemp = -45,0 + (175,0 * temp /65535,0); kelluva fTemp = (cTemp * 1,8) + 32,0; // siirrä MSB: tä 8 bitillä, lisää siihen LSB jakautuu täyteen resoluutioon ja * 100 prosenttiin kelluvasta kosteudesta = (100,0 * ((juuri [3] * 256,0) + juuri [4])) /65535.0;

tempC = cTemp;

tempF = fTemp; kostea = kosteus; Serial.print ("Lämpötila C: / t"); Serial.println (Jono (cTemp, 1)); Serial.print ("Lämpötila F: / t"); Sarja.println (Jono (fTemp, 1)); Serial.print ("Kosteus: / t"); Serial.println (Jono (kosteus, 1)); }

Vaihe 5: Koodi verkkopalvelimen isännöintiin

Koodi verkkopalvelimen isännöintiin
Koodi verkkopalvelimen isännöintiin
Koodi verkkopalvelimen isännöintiin
Koodi verkkopalvelimen isännöintiin

Olemme isännöineet verkkopalvelinta laitteeltamme staattisella IP -osoitteella.

  • ESP8266WebServer -kirjastoa käytetään verkkopalvelimen isännöintiin
  • Ensin meidän on ilmoitettava IP -osoite, yhdyskäytävä ja aliverkon peite staattisen IP -osoitteemme luomiseksi
  • Ilmoita nyt tukiaseman ssid ja salasana.
  • muodostaa yhteys tukiasemaan mistä tahansa STA -laitteesta
  • isännöi palvelinta portilla 80, joka on oletusportti Internet -viestintäprotokollalle, Hypertext Transfer Protocol (HTTP)
  • kirjoita selaimeesi 192.168.1.4 intro -verkkosivulle ja 192.168.1.4/Arvo sensorin lukemalle verkkosivulle

// staattinen Ip AP: lle

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

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

IPAddress ap_subnet (255, 255, 255, 0); // ssid ja AP paikallista WiFi -yhteyttä varten STA -tilassa

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

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

// ssid ja pass AP: lle

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

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

ESP8266WebServer -palvelin (80);

mitätön asennus {

server.on ("/", onHandleDataRoot);

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

server.onNotFound (onHandleNotFound);

}

void taskAPCallback () {

Serial.println ("taskAP aloitettu");

server.handleClient ();

}

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

void onHandleDataFeed () {

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

void onHandleNotFound () {

String message = "Tiedostoa ei löydy / n / n";

message += "URI:";

viesti += palvelin.uri ();

message += "\ nMenetelmä:";

viesti += (palvelin.metodi () == HTTP_GET)? "GET": "POST";

message += "\ nArgumentit:";

viesti += palvelin.args ();

viesti += "\ n";

server.send (404, "teksti/tavallinen", viesti);}

void reconnectAPWiFi () {

WiFi.mode (WIFI_AP_STA);

viive (100);

WiFi. Irrota ();

boolen tila = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

jos (status == true) {

Serial.print ("Soft-AP: n asettaminen …");

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

jos (ap == totta) {

Serial.print ("yhdistetty: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println (WiFi.softAPIP ());

}

server.begin ();

}

}

Vaihe 6: Koodi tietojen lähettämiseen Thing Speakiin

Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin
Koodi tietojen lähettämiseen Thing Speakiin

Täällä lähetämme anturin lukemat Thing Speakiin. seuraavat vaiheet ovat tarpeen tämän tehtävän suorittamiseksi-

  • Luo tilisi juttuihin
  • Luo kanavia ja kenttiä anturitietojesi tallentamiseen
  • voimme saada ja lähettää tietoja ESP: stä thingSpeakiin ja päinvastoin käyttämällä GET- ja POST-pyyntöjä apiin.
  • voimme lähettää tietomme ThingSpeakiin seuraavasti

void taskWiFiCallback () {

WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += Jono (kostea); postStr += "& field2 ="; postStr += Jono (tempC); postStr += "& field3 ="; postStr += Jono (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /päivitä HTTP /1.1 / n"); wifiClient.print ("Isäntä: api.thingspeak.com / n"); wifiClient.print ("Yhteys: sulje / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Content-Type: application/x-www-form-urlencoded / n"); wifiClient.print ("Content-Length:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }

Vaihe 7: Yleinen koodi

Yleinen koodi on saatavilla github -arkistossani

Laajuus:

  • Arduino JSON: ArduinoJson
  • ESP826WebServer
  • Tehtävien ajoitus
  • SHT 31
  • I2C -skannaus
  • HIH6130 -opetusohjelma
  • Lanka Arduino
  • NCD.io

Suositeltava: