Kazalo:

Uporaba 4 zatičev ESP8266-01: 3 koraki
Uporaba 4 zatičev ESP8266-01: 3 koraki

Video: Uporaba 4 zatičev ESP8266-01: 3 koraki

Video: Uporaba 4 zatičev ESP8266-01: 3 koraki
Video: Как сделать 4-канальное реле Wi-Fi ESP8266 ESP01 | ESP01 Домашняя автоматизация | УдаленныйXY 2024, Julij
Anonim
Uporaba 4 zatičev ESP8266-01
Uporaba 4 zatičev ESP8266-01
Uporaba 4 zatičev ESP8266-01
Uporaba 4 zatičev ESP8266-01
Uporaba 4 zatičev ESP8266-01
Uporaba 4 zatičev ESP8266-01

Opomba: Ta projekt je v bistvu podaljšek prejšnjega navodila, ki je uporabljalo samo 2 zatiča. Omejeno število (4) zatičev GPIO na ESP8266-01 se lahko zdi ovira za vsako resno uporabo. Pameten način, da je zelo dobro mogoče narediti samo s temi štirimi zatiči. V nekaterih mojih nedavnih navodilih sem prikazal uporabo DHT11, DS18B20, OLED, RTC in BMP180 z ESP8266-01. V tem navodilu sem se odločil za uporabo 4 senzorjev in zaslona, hkrati pa naložil pridobljene podatke v Thingspeak. Pravzaprav se širi na projekt spremljanja ozračja v mojem kurniku in okoli njega. Da, temu bi lahko rekli vremenska postaja, a zgolj za ponazoritev uporabe 4 zatičev, na ta način bi lahko preprosto naredili kaj drugega. Uporabil bom 2 zatiča za I2C (BMP180 in OLED) 1 za 2 senzorja DS18B20 prek OneWire protokol 1 pin za DHT11 Čeprav imajo ESP8266-01 zdaj uporabljeni vsi zatiči, lahko še vedno dodam več senzorjev (ali aktuatorjev) prek protokola OneWire in/ali prek protokola I2C. Torej, kaj potrebujemo: BOM

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

in seveda načrt, 3,3 V napajalnik in nekaj žic za plošče ter račun Thingspeak

Nekaj pripomb v zvezi s specifikacijo:

  • ESP8266-01 Očitno gre pri projektu za uporabo omejenih zatičev ESP8266-01, če pa ga boste še vedno morali kupiti, razmislite o ESP8266-12, ki ima več zatičev
  • DHT11A poceni vsestranski senzor vlažnosti in temperature. Ni zelo natančen, vendar bo uspel. Če ga morate še kupiti, se lahko odločite za DHT22, ki je menda natančnejši, lahko pa se odločite tudi za AMS2321. To je nekakšen DHT22, ki je primeren za I2C in tako osvobodi še en pin
  • BMP180 meri temperaturo in zračni tlak. Je naslednik BMP085, zdaj pa ima tudi nekaj suvessorjev. Obstaja (cenejši) BMP280, lahko pa se odločite tudi za BME280, ki meri temperaturo, zračni tlak IN vlažnost. Tako lahko prihranite pri senzorju DHT/AMS
  • OLEDI je to ravnokar uporabil, da sem lahko hitro videl, ali so senzorji prebrani, vendar bi to lahko preverili tudi na Thingspeaku. OLED je vseeno premajhen za tiskanje vseh prebranih vrednosti

1. korak: vezje

Vezje
Vezje

Štiri zatiči ESP8266 kot taki niso označeni na tiskanem vezju, večina slik pa jasno prikazuje le GPIO0 in GPIO2. Vendar ima ESP826-01 aa GPIO1 (Tx pin) in GPIO3 pin (Rx pin).i bo te zatiče uporabljal na naslednji način

  • GPIO0 -> SDA pin I2C vrat
  • GPIO1 -> DHT11
  • GPIO2-> SCL pin vrat I2C
  • GPIO3-> vodilo OneWire

Ker imajo moji moduli I2C že vlečne upore, ne bom dodal nobenih uporovnih uporov I2C. DS18B20 še vedno potrebuje vlečni upor, za katerega sem uporabil 4k7, vendar res ni tako kritičen, 10k je tudi dober. DHT11 naj bi potreboval tudi vlečni upor, vendar sem ugotovil, da deluje tudi brez njega. dodajanje upora 4k7 ni spremenilo nobenih odčitkov, zato sem ga izpustil. Mnogi od 3 -polnih modulov DHT11 že imajo spajkanih 10 k na modul. Pravkar sem spoznal, da nisem potegnil povezav za OLED. To je zato, ker sem ga priklopil samo na hitro preverjanje, če pa ga želite dodati, gre le za povezavo SDA na SDA in SCL na SCL … in seveda na ozemljitvene in Vcc zatiče na njihove kolege

2. korak: Program

Program je precej enostaven. Najprej nastavi knjižnice in senzorje. DHT11 pritrdi na pin 1 (Tx) in vodilo OnWire za DS18B20 na pin 3 (Rx). Če želite uporabiti več kot 1 senzor DS18B20 na vodilu OneWire, morate poznati njihov "edinstven naslov". Če tega nimate, potrebujete program za branje teh naslovov. To naredite na arduinu za lažje. V programu morate še vedno navesti svoje poverilnice WiFi in API za pisanje za vaš kanal Thingspeak

/*

Polje 1 Temp Roost (DHT11) Field 2 Roost vlažnosti (DHT11) field 3 Temperatura kokoši (DS18B20) polje 4 temperatura tal (DS18B20) polje 5 Zračni tlak (bmp180) polje 6 Zunanja temperatura (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" Zaslon 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* password = "Vaša geslo"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // uporabite VAŠE writeApi // DHT11 material float temperature_buiten; temperatura plovca_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // stvari DS18b20 OneWire oneWire (ONE_WIRE_BUS); // primerek oneWire za komunikacijo s katero koli napravo OneWire Senzorji temperature DallasTemperature (& oneWire); // Prenesite naslov našega primerka oneWire v temperaturo Dallas. Sonda DeviceAddress 01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; Sonda DeviceAddress 02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 stvari Adafruit_BMP085 bmp; void setup () {// I2C stvari Wire.pins (0, 2); Wire.begin (0, 2); // Inicializirajte senzorje // dht 11 stuff dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // nastavite ločljivost na 10 bitov (lahko 9 do 12 bitov.. nižje je hitreje) sensors.setResolution (Probe01, 10); sensors.setResolution (Sonda02, 10); // bmp180 stvari if (! bmp.begin ()) {// Serial.println ("št. BMP180 /BMP085"); // while (1) {}} // OLED stvari display.init (); display.flipScreenVertical (); display.setFont (ArialMT_Plain_10); zamuda (1000); // Povežite se z omrežjem WiFi WiFi.begin (ssid, geslo); while (WiFi.status ()! = WL_CONNECTED) {zamuda (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // pošljite ukaz, da dobite temperature temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 stvari ---------------- ---- plavajoča vlažnost = dht.readHumidity (); plavajoča temperatura = dht.readTemperature (); if (isnan (vlažnost) || isnan (temperatura)) {return; } // bmp stvari ------------------------- Niz t = Niz (bmp.readTemperature ()); Niz p = niz (bmp.readPressure ()); // OLED stvari -------------------------- display.clear (); display.drawString (0, 10, p); // bmp prikaz pritiska.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (vlažnost)); // zaslon dht11.display (); // vzpostavimo povezave TCP odjemalca WiFiClient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } Niz url = "/update? Key ="; url += writeAPIKey; url += "& polje1 ="; url += niz (temperatura); // roost (DHT1) url += "& field2 ="; url += niz (vlažnost); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // temperatura kozarca (DS18B20 nr 1) url += "& field4 ="; url += niz (temperaturni_buiten2); // temperatura tal (DS18B29 nr 2) url += "& field5 ="; url += niz (bmp.readTemperature ()); Zunanja temperatura (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Zračni tlak (BMP180) url += "\ r / n"; // Pošlji zahtevo strežniku client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Povezava: zaprite / r / n / r / n "); zamuda (1000); }

……..

3. korak: Več

Trenutno ta program samo spremlja, kaj pa vas ustavi pri dodajanju svetlobnega senzorja BH1750 I2C za merjenje, ali je večer ali jutro ali RTC, da pozna čas dneva ter samodejno odpre in zapre vrata kaveza razširitveno kartico PCF8574 I2C I/O ali, kot je že na vrtu, dodajte pretvornik PCF8591 ali ADS1115 AD za merjenje vlažnosti tal in po potrebi aktivirajte črpalko. Ali pa morda vklopite grelnik bazena, ko temperatura pade pod ničlo, če zanj obstaja čip I2 C, ga lahko ESP8266 verjetno uporabi.

Pomembna opomba: Program v takšnem stanju deluje dobro, če pa v Rx ali Tx dodate druge senzorje, še posebej, če jih pretvorite v izhode, se lahko nožice nenadoma spomnijo, da v resnici niso zatiči GPIO. Bolje je že od začetka povedati, da so zdaj zatiči GPIO. To storite tako, da v nastavitve vnesete naslednje izjave:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Priporočena: