Obsah:

Pomocí 4 pinů ESP8266-01: 3 kroky
Pomocí 4 pinů ESP8266-01: 3 kroky

Video: Pomocí 4 pinů ESP8266-01: 3 kroky

Video: Pomocí 4 pinů ESP8266-01: 3 kroky
Video: Jak vyrobit 4kanálové Wi-Fi relé ESP8266 ESP01 | ESP01 Domácí automatizace | RemoteXY | FLProg 2024, Červenec
Anonim
Pomocí 4 pinů ESP8266-01
Pomocí 4 pinů ESP8266-01
Pomocí 4 pinů ESP8266-01
Pomocí 4 pinů ESP8266-01
Pomocí 4 pinů ESP8266-01
Pomocí 4 pinů ESP8266-01

Poznámka: Tento projekt je v podstatě rozšířením dřívějších instrukcí, které používaly pouze 2 piny. Omezený počet (4) pinů GPIO na ESP8266-01 se může jevit jako překážka pro jakoukoli seriózní aplikaci. Přesto, pokud použijete piny v chytrým způsobem je velmi dobře možné udělat hodně pouze s těmi 4 piny. V některých mých nedávných instrukcích jsem ukázal použití DHT11 a DS18B20, OLED, RTC a BMP180 s ESP8266-01. V tomto pokynu jsem se rozhodl použít 4 senzory a displej a zároveň nahrát získaná data na Thingspeak. Ve skutečnosti se rozšiřuje o projekt monitorování atmosféry v mém kurníku a kolem něj. Ano, můžete tomu říkat meteorologická stanice, ale to je jen pro ilustraci použití 4 pinů, můžete snadno vytvořit něco jiného tímto způsobem. Budu používat 2 piny pro I2C (BMP180 a OLED) 1 pin pro 2 DS18B20 senzory přes Protokol OneWire 1 pin pro DHT11 Ačkoli ESP8266-01 nyní používá všechny své piny, stále mohu přidat další senzory (nebo akční členy) prostřednictvím protokolu OneWire a/nebo prostřednictvím protokolu I2C. Co tedy potřebujeme: BOM

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

a samozřejmě prkénko na krájení, 3,3 V napájecí zdroj a několik vodičů na prkénko a účet Thingspeak

Jen pár poznámek k kusovníku:

  • Je zřejmé, že projekt je o využití omezených pinů ESP8266-01, ale pokud si je stále potřebujete koupit, můžete zvážit ESP8266-12, který má více pinů
  • DHT11A levné univerzální čidlo vlhkosti a teploty. Není to příliš přesné, ale bude to stačit. Pokud si stále potřebujete koupit jeden, můžete se rozhodnout pro DHT22, který je údajně přesnější, ale můžete se také rozhodnout pro AMS2321. To je druh DHT22, který je vhodný pro I2C, čímž uvolňuje další pin
  • BMP180 měří teplotu a tlak vzduchu. Jedná se o nástupce BMP085, ale také nyní má několik samotných nástupců. Existuje (levnější) BMP280, ale můžete se také rozhodnout pro BME280, který měří teplotu, tlak vzduchu A vlhkost. Tímto způsobem můžete ušetřit na senzoru DHT/AMS
  • OLEDI to právě použil, takže jsem rychle viděl, zda jsou čidla přečtena, ale stejně dobře to můžete zkontrolovat na Thingspeak. OLED je na tisk všech načtených hodnot příliš malý

Krok 1: Okruh

Okruh
Okruh

4 piny ESP8266 nejsou na desce plošných spojů označeny a většina obrázků pouze jasně uvádí GPIO0 a GPIO2. ESP826-01 však má aa GPIO1 pin (Tx pin) a GPIO3 pin (Rx pin). I bude tyto kolíky používat následovně

  • GPIO0 -> pin SDA portu I2C
  • GPIO1 -> DHT11
  • GPIO2-> SCL pin portu I2C
  • GPIO3-> OneWire Bus

Protože moje I2C moduly již mají pull up rezistory, nebudu tam přidávat žádné I2C pullup rezistory. DS18B20 stále potřebuje pull up odpor, pro který jsem použil 4k7, ale to opravdu není tak kritické, 10k je také dobré. DHT11 údajně také potřebuje pull-up odpor, ale zjistil jsem, že funguje i bez něj. přidání odporu 4k7 nezměnilo žádné hodnoty, takže jsem to vynechal. Mnoho ze 3 pinových modulů DHT11 již má na modulu připájeno 10 k. Právě jsem si uvědomil, že jsem nevykreslil připojení pro OLED. Je to proto, že jsem to připojil pouze pro rychlou kontrolu, ale pokud byste to chtěli přidat, je to jen otázka připojení SDA k SDA a SCL k SCL … a samozřejmě uzemnění a kolíky Vcc k jejich protějškům

Krok 2: Program

Program je celkem přímočarý. Nejprve nastaví knihovny a senzory. Připojí DHT11 na pin 1 (Tx) a sběrnici OnWire pro DS18B20 na pin 3 (Rx). Abyste mohli na sběrnici OneWire použít více než 1 senzor DS18B20, musíte znát jejich „jedinečnou adresu“. Pokud to nemáte, potřebujete program, který tyto adresy přečte. Udělejte to pro arduino pro snadnost. V programu stále musíte poskytnout své přihlašovací údaje WiFi a API pro zápis pro váš program Thingspeak Channel

/*

Field 1 temp roost (DHT11) Field 2 vlhkost roost (DHT11) field 3 Coop teplota (DS18B20) pole 4 teplota půdy (DS18B20) pole 5 Airpressure (bmp180) pole 6 Venkovní teplota (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" displej SSD1306 (0x3c, 0, 2); #define DHTPIN 1 // GPIO1 (Tx) #define DHTTYPE DHT11 #define ONE_WIRE_BUS 3 // GPIO3 = Rx const char* ssid = "YourSSID"; const char* heslo = "Vaše heslo"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // použijte SVŮJ writeApi // věci DHT11 float temperature_buiten; plovoucí teplota_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 věci OneWire oneWire (ONE_WIRE_BUS); // instance oneWire pro komunikaci s jakýmkoli zařízením OneWire senzory DallasTemperature (& oneWire); // předání adresy naší instance oneWire do Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; Sonda DeviceAddress02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 věci Adafruit_BMP085 bmp; void setup () {// I2C věci Wire.pins (0, 2); Wire.begin (0, 2); // Inicializace senzorů // dht 11 věcí dht.begin (); // ds18b20 věci sensor.begin (); // ds18b20 // nastavení rozlišení na 10 bitů (Může být 9 až 12 bitů.. nižší je rychlejší) sensor.setResolution (Probe01, 10); sensor.setResolution (Probe02, 10); // bmp180 věci if (! bmp.begin ()) {// Serial.println ("No BMP180 /BMP085"); // while (1) {}} // OLED věci display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); zpoždění (1000); // Připojení k WiFi síti WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {zpoždění (500); }} void loop () {// ds18b20stuff ------------------- sensor.requestTemperatures (); // Odesláním příkazu získáte teploty teplota_buiten = čidla.getTempC (Probe01); // teplota_buiten2 = čidla.getTempC (Probe02); // // věci dht11 ---------------- ---- plovoucí vlhkost = dht.readHumidity (); plovoucí teplota = dht.readTemperature (); if (isnan (vlhkost) || isnan (teplota)) {return; } // bmp věci ------------------------- String t = String (bmp.readTemperature ()); Řetězec p = Řetězec (bmp.readPressure ()); // OLED věci -------------------------- display.clear (); display.drawString (0, 10, p); // zobrazení tlaku bmp.drawString (0, 24, String (teplota_buiten)); // ds18b20 display.drawString (0, 38, String (vlhkost)); // zobrazení dht11. Zobrazit(); // připojení TCP klient WiFiClient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } Řetězec url = "/aktualizovat? Klíč ="; url += writeAPIKey; url += "& field1 ="; url += String (teplota); // roost (DHT1) url += "& field2 ="; url += String (vlhkost); // roost (DHT11) url += "& field3 ="; url += String (teplota_buiten); // teplota coopu (DS18B20 č. 1) url += "& field4 ="; url += String (teplota_buiten2); // teplota půdy (DS18B29 č. 2) url += "& field5 ="; url += String (bmp.readTemperature ()); Venkovní teplota (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Tlak vzduchu (BMP180) url += "\ r / n"; // Odeslání požadavku na server client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Připojení: zavřít / r / n / r / n "); zpoždění (1000); }

……..

Krok 3: Více

V současné době tento program pouze monitoruje, ale co vám brání v přidání světelného senzoru BH1750 I2C k měření, zda je večer nebo ráno nebo RTC, abyste věděli denní dobu a automaticky otevírali a zavírali dveře coopu pomocí rozšiřující karta I/O PCF8574 I2C, nebo protože je již na zahradě, přidejte převodník PCF8591 nebo ADS1115 AD k měření vlhkosti půdy a v případě potřeby aktivujte čerpadlo. Nebo možná zapnout ohřívač vody, když teplota klesne pod nulu, pokud je k tomu čip I2 C, může jej pravděpodobně použít ESP8266.

Důležitá poznámka: Program jako takový funguje dobře, ale pokud k Rx nebo Tx přidáte další senzory, zvláště pokud je vytvoříte do výstupů, piny si najednou mohou pamatovat, že ve skutečnosti nejsou GPIO piny. Je lepší od začátku piny říci, že jsou nyní piny GPIO. To uděláte tak, že do nastavení vložíte následující příkazy:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Doporučuje: