Innehållsförteckning:

Använda de fyra stiften i ESP8266-01: 3 steg
Använda de fyra stiften i ESP8266-01: 3 steg

Video: Använda de fyra stiften i ESP8266-01: 3 steg

Video: Använda de fyra stiften i ESP8266-01: 3 steg
Video: Как сделать 4-канальное реле Wi-Fi ESP8266 ESP01 | ESP01 Домашняя автоматизация | УдаленныйXY 2024, Juli
Anonim
Använda de fyra stiften i ESP8266-01
Använda de fyra stiften i ESP8266-01
Använda de fyra stiften i ESP8266-01
Använda de fyra stiften i ESP8266-01
Använda de fyra stiften i ESP8266-01
Använda de fyra stiften i ESP8266-01

Obs: Detta projekt är i princip en förlängning av en tidigare instruerbar som bara använde 2 stift. Det begränsade antalet (4) GPIO-stift på ESP8266-01 kan verka som ett hinder för alla seriösa applikationer. Men om man använder stiften i på ett smart sätt är det mycket möjligt att göra mycket med bara de 4 stiften. I några av mina senaste instruktioner har jag visat användningen av en DHT11 en DS18B20, en OLED, en RTC och en BMP180 med ESP8266-01. I denna instruerbara jag bestämde mig för att använda 4 sensorer och en display, samtidigt som jag laddade upp den inhämtade data till Thingspeak. Det expanderar faktiskt på ett projekt för att övervaka atmosfären i och runt mitt hönshus. Ja, du kan kalla detta en väderstation, men det är bara för att illustrera användningen av de 4 stiften, du kan enkelt göra något annat på det här sättet. Jag kommer att använda 2 stift för I2C (BMP180 och OLED) 1 stift för 2 DS18B20 -sensorer via OneWire-protokoll1-stift för DHT11 Även om ESP8266-01 nu har alla sina stift använda kan jag fortfarande lägga till fler sensorer (eller ställdon) via OneWire-protokollet och/eller via I2C-protokollet. Så vad behöver vi: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (tillval)

och självklart en brödbräda, en 3,3 V nätaggregat och några brödbrädetrådar och ett Thingspeak -konto

Bara några kommentarer om BOM:

  • ESP8266-01 Uppenbarligen handlar projektet om att använda de begränsade stiften på ESP8266-01, men om du fortfarande behöver köpa en kan du överväga en ESP8266-12 som har fler stift
  • DHT11A billig luftfuktighets- och temperaturgivare för alla ändamål. Det är inte oerhört korrekt men det kommer att göra. Om du fortfarande behöver köpa en kan du välja DHT22 som förmodligen är mer exakt, men du kan också välja AMS2321. Det är ett slags DHT22 som är lämpligt för I2C, vilket frigör ytterligare en stift
  • BMP180 mäter temperatur och lufttryck. Det är efterföljaren till BMP085, men det har också nu några efterföljare själv. Det finns (billigare) BMP280, men du kan också välja BME280 som mäter temperatur, lufttryck OCH luftfuktighet. På så sätt kan du spara på DHT/AMS -sensorn
  • OLEDI använde det precis så att jag snabbt kunde se om sensorerna var lästa, men du kan lika gärna kontrollera det på Thingspeak. OLED är ändå för liten för att skriva ut alla läsvärden

Steg 1: Kretsen

Kretsen
Kretsen

De fyra stiften på ESP8266 indikeras inte som sådana på kretskortet, och de flesta bilder anger tydligt GPIO0 och GPIO2. ESP826-01 har dock ett GPIO1-stift (Tx-stiftet) och ett GPIO3-stift (Rx-stiftet). kommer att använda dessa stift enligt följande

  • GPIO0 -> SDA -stift på I2C -porten
  • GPIO1 -> DHT11
  • GPIO2-> SCL-stift på I2C-porten
  • GPIO3-> OneWire-buss

Eftersom mina I2C -moduler redan har pull -up -motstånd kommer jag inte att lägga till några I2C -pullup -motstånd där. DS18B20 behöver fortfarande ett uppdragningsmotstånd som jag använde en 4k7 för, men det är verkligen inte så kritiskt, en 10k är också bra. DHT11 behöver förmodligen också ett pull-up-motstånd men jag tyckte att det fungerade utan ett också. lägga till ett 4k7 motstånd ändrade inte någon av avläsningarna, så jag lämnade det utanför. Många av de 3 -stifts DHT11 -modulerna har redan 10 k lödts på modulen. Jag insåg precis att jag inte ritade anslutningarna för OLED. Det beror på att jag bara kopplade in den för en snabb kontroll, men om du vill lägga till det är det bara att ansluta SDA till SDA och SCL till SCL … och naturligtvis marken och Vcc -stiften till sina motsvarigheter

Steg 2: Programmet

Programmet är ganska enkelt. Först sätter den upp biblioteken och sensorerna. Den fäster DHT11 till stift 1 (Tx) och OnWire -bussen för DS18B20 till stift 3 (Rx). För att kunna använda mer än 1 DS18B20 -sensor på OneWire -bussen måste du veta deras 'unika adress'. Om du inte har det behöver du ett program för att läsa dessa adresser. Gör det på en arduino för enkelhet. I programmet måste du fortfarande tillhandahålla dina WiFi -referenser samt skriva API för din Thingspeak -kanal

/*

Fält 1 temp roost (DHT11) Fält 2 fuktighet roost (DHT11) fält 3 Coop temperatur (DS18B20) fält 4 jordtemperatur (DS18B20) fält 5 Lufttryck (bmp180) fält 6 Utetemperatur (bmp180) * */ #include #include // https://www.pjrc.com/teensy/td_libs_OneWire.html #include // https://milesburton.com/Main_Page?title=Dallas_Tem… #include #include #include "SSD1306.h" SSD1306 display (0x3c, 0, 2); #define DHTPIN 1 // GPIO1 (Tx) #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 // GPIO3 = Rx const char* ssid = "YourSSID"; const char* password = "YourPassword"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // använd DIN writeApi // DHT11 stuff float temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 grejer OneWire oneWire (ONE_WIRE_BUS); // oneWire -instans för att kommunicera med alla OneWire -enheter DallasTemperature -sensorer (& oneWire); // Passera adressen till vår oneWire -instans till Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 grejer Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Initiera sensorer // dht 11 stuff dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // ställ in upplösningen till 10 bitar (kan vara 9 till 12 bitar.. lägre är snabbare) sensors.setResolution (Probe01, 10); sensorer.setResolution (Probe02, 10); // bmp180 stuff if (! bmp.begin ()) {// Serial.println ("No BMP180 /BMP085"); // while (1) {}} // OLED stuff display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); fördröjning (1000); // Anslut till WiFi -nätverk WiFi.begin (ssid, lösenord); medan (WiFi.status ()! = WL_CONNECTED) {fördröjning (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // Skicka kommandot för att få temperaturer temperatur_buiten = sensorer.getTempC (Probe01); // temperatur_buiten2 = sensorer.getTempC (Probe02); // // dht11 grejer ---------------- ---- flottörfuktighet = dht.readHumidity (); flottörtemperatur = dht.readTemperature (); if (isnan (fuktighet) || isnan (temperatur)) {retur; } // bmp stuff ------------------------- Sträng t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // OLED-grejer -------------------------- display.clear (); display.drawString (0, 10, p); // bmp tryck display.drawString (0, 24, String (temperatur_buiten)); // ds18b20 display.drawString (0, 38, String (fuktighet)); // dht11 display.visa(); // göra TCP -anslutningar WiFiClient -klient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/update? Key ="; url += writeAPIKey; url += "& field1 ="; url += String (temperatur); // roost (DHT1) url += "& field2 ="; url += String (fuktighet); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // coop temperature (DS18B20 nr 1) url += "& field4 ="; url += String (temperatur_buiten2); // jordtemperatur (DS18B29 nr 2) url += "& field5 ="; url += String (bmp.readTemperature ()); Utetemperatur (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Lufttryck (BMP180) url += "\ r / n"; // Skicka förfrågan till servern client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Connection: close / r / n / r / n "); fördröjning (1000); }

……..

Steg 3: Mer

För närvarande övervakar detta program bara, men vad hindrar dig från att lägga till en BH1750 I2C -ljussensor för att mäta om det är kväll eller morgon eller en RTC för att veta tid på dagen och att öppna och stänga dörren till coop automatiskt med hjälp av ett PCF8574 I2C I/O -expansionskort, eller som det redan finns i trädgården, lägg till en PCF8591 eller ADS1115 AD -omvandlare för att mäta jordfuktighet och aktivera en pump vid behov. Eller kanske slå på vattenbassängvärmaren när temperaturen sjunker under noll om det finns ett I2 C -chip för det, kan ESP8266 förmodligen använda det.

En viktig anmärkning dock: Programmet som det fungerar fungerar bra, men om du lägger till andra sensorer till Rx eller Tx, särskilt om du gör dem till utgångar, kan stiften plötsligt komma ihåg att de inte riktigt är GPIO -stift. Det är bättre att berätta för stiften från början att de nu är GPIO -stift. En gör det genom att sätta följande uttalanden i installationen:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Rekommenderad: