INHOUDSOPGAWE:

Gebruik die 4 penne van die ESP8266-01: 3 stappe
Gebruik die 4 penne van die ESP8266-01: 3 stappe

Video: Gebruik die 4 penne van die ESP8266-01: 3 stappe

Video: Gebruik die 4 penne van die ESP8266-01: 3 stappe
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, November
Anonim
Gebruik die 4 penne van die ESP8266-01
Gebruik die 4 penne van die ESP8266-01
Gebruik die 4 penne van die ESP8266-01
Gebruik die 4 penne van die ESP8266-01
Gebruik die 4 penne van die ESP8266-01
Gebruik die 4 penne van die ESP8266-01

Opmerking: hierdie projek is basies 'n uitbreiding van 'n vorige instruksie wat slegs 2 penne gebruik het. Die beperkte aantal (4) GPIO-penne op die ESP8266-01 kan vir enige ernstige toepassing 'n hindernis wees, maar as u die penne in op 'n slim manier is dit baie moontlik om baie te doen met slegs die 4 penne. In sommige van my onlangse instruksies het ek die gebruik van 'n DHT11, 'n DS18B20, 'n OLED, 'n RTC en 'n BMP180 met die ESP8266-01 getoon. In hierdie instruksies het ek my voorgeneem om 4 sensors en 'n skerm te gebruik, terwyl ek ook die verkrygde data na Thingspeak oplaai. Dit brei eintlik uit oor 'n projek om die atmosfeer in en om my hoenderhok te monitor. Ja, u kan dit 'n weerstasie noem, maar dit is slegs om die gebruik van die 4 penne te illustreer, u kan maklik iets anders maak. Ek gebruik 2 penne vir I2C (BMP180 en OLED) 1 pen vir 2 DS18B20 sensors via die OneWire-protokol1-pen vir die DHT11 Alhoewel die ESP8266-01 nou al sy penne gebruik het, kan ek steeds meer sensors (of aandrywers) byvoeg deur die OneWire-protokol en/of via die I2C-protokol. So, wat het ons nodig: BOM

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

en natuurlik 'n broodbord, 'n 3.3 V PSU en 'n paar broodborddrade en 'n Thingspeak -rekening

Net 'n paar opmerkings oor die BOM:

  • ESP8266-01 Uiteraard gaan die projek daaroor om die beperkte penne van die ESP8266-01 te gebruik, maar as u nog steeds een moet koop, kan u 'n ESP8266-12 oorweeg met meer penne
  • DHT11A goedkoop universele humiditeits- en temperatuursensor. Dit is nie baie akkuraat nie, maar dit sal wel gebeur. As u nog steeds een moet koop, kan u kies vir die DHT22 wat vermoedelik meer akkuraat is, maar u kan ook kies vir die AMS2321. Dit is 'n soort DHT22 wat geskik is vir I2C, en sodoende nog 'n pen losmaak
  • BMP180 meet temperatuur en lugdruk. Dit is die opvolger van die BMP085, maar het ook nou self 'n paar suvessors. Daar is die (goedkoper) BMP280, maar u kan ook kies vir die BME280 wat temperatuur, lugdruk en humiditeit meet. Op hierdie manier kan u bespaar op die DHT/AMS -sensor
  • OLEDI het dit net gebruik, sodat ek vinnig kon sien of die sensors gelees is, maar u kan dit net sowel op Thingspeak nagaan. Die OLED is in elk geval te klein om al die leeswaardes af te druk

Stap 1: Die stroombaan

Die stroombaan
Die stroombaan

Die 4 penne van die ESP8266 word nie as sodanig op die PCB aangedui nie, en die meeste beelde dui slegs duidelik GPIO0 en GPIO2 aan. Die ESP826-01 het egter 'n GPIO1-pen (die Tx-pen) en 'n GPIO3-pen (die Rx-pen). sal die penne soos volg gebruik

  • GPIO0 -> SDA -pen van die I2C -poort
  • GPIO1 -> DHT11
  • GPIO2-> SCL-pen van die I2C-poort
  • GPIO3-> OneWire-bus

Aangesien my I2C -modules reeds optrekweerstands het, sal ek geen I2C -weerstandsweerstands daar byvoeg nie. Die DS18B20 benodig nog 'n optrekweerstand waarvoor ek 'n 4k7 gebruik het, maar dit is regtig nie so krities nie; 'n 10k is ook goed. Die DHT11 het vermoedelik ook 'n optrekweerstand nodig, maar ek het gevind dat dit ook sonder een werk. Die toevoeging van 'n 4k7 -weerstand het niks van die lesings verander nie, so ek het dit uitgelaat. Baie van die 3 -pins DHT11 -modules het reeds 'n 10 k soldeer op die module. Ek het net besef dat ek nie die verbindings vir die OLED getrek het nie. Dit is omdat ek dit net vir 'n vinnige ondersoek aangeskakel het, maar as u dit wil byvoeg, is dit net 'n kwessie om SDA aan SDA en SCL aan SCL te koppel … en natuurlik die grond en Vcc -penne aan hul eweknieë

Stap 2: Die program

Die program is redelik eenvoudig. Eerstens stel dit die biblioteke en die sensors in. Dit koppel die DHT11 aan pen 1 (Tx) en die OnWire -bus vir die DS18B20 aan pen 3 (Rx). Om meer as 1 DS18B20 -sensor op die OneWire -bus te gebruik, moet u hul 'unieke adres' ken. As u dit nie het nie, benodig u 'n program om die adresse te lees. Doen dit maklik op 'n arduino. In die program moet u nog u WiFi -inskrywings sowel as die skryf -API vir u Thingspeak -kanaal verskaf

/*

Veld 1 tempokost (DHT11) Veld 2 humiditeitstaak (DHT11) veld 3 Koeltemperatuur (DS18B20) veld 4 grondtemperatuur (DS18B20) veld 5 Lugdruk (bmp180) veld 6 Buitentemperatuur (bmp180) * */ #sluit in #sluit in // 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"; // gebruik jou writeApi // DHT11 stuff float temperature_buiten; vlot temperatuur_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 stuff OneWire oneWire (ONE_WIRE_BUS); // oneWire -instansie om te kommunikeer met enige OneWire -toestelle DallasTemperature sensors (& oneWire); // Gee adres van ons oneWire -instansie aan Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 goed Adafruit_BMP085 bmp; ongeldige opstelling () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Initialiseer sensors // dht 11 dinge dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // stel die resolusie op 10 bit (kan 9 tot 12 bits wees. laer is vinniger) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // bmp180 stuff if (! bmp.begin ()) {// Serial.println ("No BMP180 /BMP085"); // terwyl (1) {}} // OLED -dinge display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); vertraging (1000); // Koppel aan WiFi -netwerk WiFi.begin (ssid, wagwoord); terwyl (WiFi.status ()! = WL_CONNECTED) {vertraging (500); }} leemte lus () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // Stuur die opdrag om temperature temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 goed te kry ---------------- ---- float humiditeit = dht.readHumidity (); vlottemperatuur = dht.readTemperature (); as (isnan (humiditeit) || isnan (temperatuur)) {terugkeer; } // bmp stuff ------------------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // OLED-goed -------------------------- display.clear (); display.drawString (0, 10, p); // bmp druk display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (humiditeit)); // dht11 vertoning.display (); // maak TCP -verbindings WiFiClient -kliënt; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/update? Key ="; url += writeAPIKey; url += "& field1 ="; url += String (temperatuur); // roost (DHT1) url += "& field2 ="; url += String (humiditeit); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // kooptemperatuur (DS18B20 nr 1) url += "& field4 ="; url += String (temperatuur_buiten2); // grondtemperatuur (DS18B29 nr 2) url += "& field5 ="; url += String (bmp.readTemperature ()); Buite temperatuur (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Lugdruk (BMP180) url += "\ r / n"; // Stuur versoek na die bediener client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Connection: close / r / n / r / n "); vertraging (1000); }

……..

Stap 3: Meer

Tans monitor hierdie program slegs, maar wat kan u verhinder om 'n BH1750 I2C -lagsensor by te voeg om te meet of dit aand of oggend is of 'n RTC om die tyd van die dag te weet en om die deur van die hok outomaties oop en toe te maak met behulp van 'n PCF8574 I2C I/O -uitbreidingskaart, of soos dit reeds in die tuin is, voeg 'n PCF8591- of ADS1115 AD -omskakelaar by om die humiditeit van die grond te meet en aktiveer 'n pomp indien nodig. Of miskien skakel die waterverwarmer aan as die temperatuur onder nul val, as daar 'n I2 C -chip is, kan die ESP8266 dit waarskynlik gebruik.

'N Belangrike opmerking: die program werk goed, maar as u ander sensors by Rx of Tx voeg, veral as u dit in uitsette maak, kan die penne skielik onthou dat dit nie regtig GPIO -penne is nie. Dit is beter om van die begin af aan die penne te vertel dat dit nou GPIO -penne is. Een doen dit deur die volgende stellings in die opstelling te plaas:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Aanbeveel: