Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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 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
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.
- 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.
- en tråd används för Vcc, den andra ledningen för GND och andra två till SDA respektive SCL.
- 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
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
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