Sadržaj:

Korištenje 4 pina ESP8266-01: 3 koraka
Korištenje 4 pina ESP8266-01: 3 koraka

Video: Korištenje 4 pina ESP8266-01: 3 koraka

Video: Korištenje 4 pina ESP8266-01: 3 koraka
Video: ESP8266 ESP01 WI-FI-UART | Программирование LDmicro-Roboremo 2024, Juli
Anonim
Koristeći 4 pina ESP8266-01
Koristeći 4 pina ESP8266-01
Koristeći 4 pina ESP8266-01
Koristeći 4 pina ESP8266-01
Koristeći 4 pina ESP8266-01
Koristeći 4 pina ESP8266-01

Napomena: Ovaj projekt je u osnovi proširenje ranije instrukcije koja je koristila samo 2 pina. Ograničeni broj (4) GPIO pinova na ESP8266-01 može izgledati kao prepreka za bilo koju ozbiljnu primjenu. Ipak, ako se pinovi koriste u pametan način na koji je vrlo moguće učiniti mnogo samo sa ta 4 pina. U nekim od mojih nedavnih instrukcija, pokazao sam upotrebu DHT11, DS18B20, OLED, RTC i BMP180 sa ESP8266-01. U ovom uputstvu sam odlučio koristiti 4 senzora i zaslon, a istovremeno sam učitao prikupljene podatke na Thingspeak. Zapravo se proširuje na projekt praćenja atmosfere u mom kokošinjcu i oko njega. Da, mogli biste ovo nazvati meteorološkom stanicom, ali samo radi ilustracije korištenja 4 pina, lako biste mogli napraviti nešto drugo na ovaj način. Koristit ću 2 pina za I2C (BMP180 i OLED) 1 pin za 2 senzora DS18B20 putem OneWire protokol 1 pin za DHT11Iako ESP8266-01 sada koristi sve svoje pinove, još uvijek mogu dodati više senzora (ili pokretača) putem OneWire protokola i/ili putem I2C protokola. Dakle, šta nam je potrebno: BOM

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

i, naravno, matičnu ploču, napajanje od 3,3 V i neke žice za matičnu ploču i Thingspeak račun

Samo neke primjedbe u vezi sa BOM -om:

  • ESP8266-01Očigledno je da se u projektu radi o korištenju ograničenih pinova ESP8266-01, ali ako i dalje trebate kupiti jedan, razmislite o ESP8266-12 koji ima više pinova
  • DHT11A jeftin univerzalni senzor vlažnosti i temperature. Nije baš precizno, ali će biti uspješno. Ako ipak trebate kupiti, mogli biste se odlučiti za DHT22 koji je navodno precizniji, ali se možete odlučiti i za AMS2321. To je vrsta DHT22 koja je pogodna za I2C, čime se oslobađa još jedan pin
  • BMP180 meri temperaturu i vazdušni pritisak. Nasljednik je BMP085, ali i sada ima neke suvesore. Postoji (jeftiniji) BMP280, ali možete se odlučiti i za BME280 koji mjeri temperaturu, pritisak zraka i vlažnost. Na taj način možete uštedjeti na DHT/AMS senzoru
  • OLEDI je to upravo upotrijebio kako bih brzo mogao vidjeti jesu li senzori očitani, ali isto ste mogli provjeriti i na Thingspeaku. OLED je ionako premalen za ispis svih pročitanih vrijednosti

Korak 1: Krug

The Circuit
The Circuit

4 pina ESP8266 nisu označena kao takva na PCB-u, a većina slika samo jasno prikazuje GPIO0 i GPIO2. Međutim, ESP826-01 ima aa GPIO1 pin (Tx pin) i GPIO3 pin (Rx pin).i će te pinove koristiti na sljedeći način

  • GPIO0 -> SDA pin I2C porta
  • GPIO1 -> DHT11
  • GPIO2-> SCL pin I2C porta
  • GPIO3-> OneWire sabirnica

Kako moji I2C moduli već imaju otpornike na podizanje, neću dodati nikakve I2C izvlačne otpornike. DS18B20 još uvijek treba otporni otpornik za koji sam koristio 4k7, ali to nije toliko kritično, 10k je također dobro. DHT11 navodno treba i pull-up otpornik, ali otkrio sam da radi i bez njega. Dodavanje otpornika 4k7 nije promijenilo niti jedno očitanje, pa sam ga izostavio. Mnogi od 3 -pinski DHT11 moduli već imaju 10 k lemljenih na modulu. Upravo sam shvatio da nisam izvukao veze za OLED. To je zato što sam ga spojio samo na brzu provjeru, ali ako ga želite dodati, samo je pitanje povezivanja SDA na SDA i SCL na SCL … i naravno uzemljenje i Vcc pinovi na njihove kolege

Korak 2: Program

Program je prilično jednostavan. Prvo postavlja biblioteke i senzore. Priključuje DHT11 na pin 1 (Tx) i OnWire sabirnicu za DS18B20 na pin 3 (Rx). Da biste koristili više od 1 senzora DS18B20 na sabirnici OneWire, morate znati njihovu 'jedinstvenu adresu'. Ako to nemate, potreban vam je program za čitanje tih adresa. Učinite to na arduinu radi jednostavnosti. U programu još uvijek morate navesti svoje WiFi vjerodajnice, kao i API za pisanje za svoj Thingspeak kanal

/*

Polje 1 temp. Naklona (DHT11) Polje 2 naklona vlažnosti (DHT11) polje 3 Temperatura kokoši (DS18B20) polje 4 Temperatura tla (DS18B20) polje 5 Vazdušni pritisak (bmp180) polje 6 Vanjska 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" SSD1306 prikaz (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 lozinka"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; // koristite VAŠE writeApi // DHT11 stvari float temperature_buiten; temperatura plovka_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 stvari OneWire oneWire (ONE_WIRE_BUS); // oneWire instanca za komunikaciju s bilo kojim OneWire uređajima DallasTemperature senzori (& oneWire); // Proslijedite adresu naše oneWire instance na Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; Sonda za adresiranje uređaja02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 stuff Adafruit_BMP085 bmp; void setup () {// I2C stvari Wire.pins (0, 2); Wire.begin (0, 2); // Inicijalizacija senzora // dht 11 stuff dht.begin (); // ds18b20 sensors.begin (); // ds18b20 // postavlja rezoluciju na 10 bita (može biti 9 do 12 bita.. niže je brže) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // bmp180 stvari if (! bmp.begin ()) {// Serial.println ("Nema BMP180 /BMP085"); // while (1) {}} // OLED stvari display.init (); display.flipScreenVertical (); display.setFont (ArialMT_Plain_10); kašnjenje (1000); // Povezivanje na WiFi mrežu WiFi.begin (ssid, lozinka); while (WiFi.status ()! = WL_CONNECTED) {kašnjenje (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // Pošaljite naredbu za dobivanje temperature temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 stvari ---------------- ---- vlažnost plovka = dht.readHumidity (); temperatura plovka = dht.readTemperature (); if (isnan (vlažnost) || isnan (temperatura)) {povratak; } // bmp stvari ------------------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // OLED stvari -------------------------- display.clear (); display.drawString (0, 10, p); // bmp pritisak display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (vlažnost)); // dht11 prikaz.display (); // uspostavljanje TCP veza WiFiClient klijent; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/update? Key ="; url += writeAPIKey; url += "& polje1 ="; url += String (temperatura); // roost (DHT1) url += "& field2 ="; url += String (vlažnost); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // temperatura komore (DS18B20 nr 1) url += "& field4 ="; url += niz (temperature_buiten2); // temperatura tla (DS18B29 nr 2) url += "& field5 ="; url += String (bmp.readTemperature ()); Vanjska temperatura (BMP180) url += "& field6 ="; url += String (bmp.readPressure ()); // Zračni pritisak (BMP180) url += "\ r / n"; // Pošaljite zahtjev serveru client.print (String ("GET") + url + "HTTP/1.1 / r / n" + "Host:" + host + "\ r / n" + "Veza: zatvori / r / n / r / n "); kašnjenje (1000); }

……..

Korak 3: Više

Trenutno ovaj program samo nadzire, ali što će vas spriječiti da dodate svjetlosni senzor BH1750 I2C za mjerenje je li večer ili jutro ili RTC da biste znali doba dana i da biste automatski otvorili i zatvorili vrata kaveza PCF8574 I2C I/O karticu za proširenje, ili kako je već u vrtu, dodajte PCF8591 ili ADS1115 AD pretvarač za mjerenje vlažnosti tla i po potrebi aktivirajte pumpu. Ili možda uključivanje grijača vodenog bazena kada temperatura padne ispod nule, ako za njega postoji I2 C čip, ESP8266 ga vjerojatno može koristiti.

Važna napomena: Program u takvom stanju funkcionira dobro, ali ako dodate druge senzore u Rx ili Tx, pogotovo ako ih pretvorite u izlaze, pinovi će se odjednom sjetiti da to zapravo nisu GPIO pinovi. Bolje je reći pinovima od početka da su sada GPIO pinovi. Jedan to čini stavljanjem sljedećih izjava u postavku:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Preporučuje se: