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, Srpanj
Anonim
Pomoću 4 pina ESP8266-01
Pomoću 4 pina ESP8266-01
Pomoću 4 pina ESP8266-01
Pomoću 4 pina ESP8266-01
Pomoću 4 pina ESP8266-01
Pomoću 4 pina ESP8266-01

Napomena: Ovaj projekt je u osnovi proširenje ranijeg instrukta koji je koristio samo 2 pina. Ograničeni broj (4) GPIO pinova na ESP8266-01 može se činiti kao prepreka za bilo koju ozbiljnu primjenu. Ipak, ako se pinovi koriste u pametan način da je vrlo dobro moguće učiniti mnogo samo s ta 4 pina. U nekim od mojih nedavnih uputa pokazao sam upotrebu DHT11, DS18B20, OLED, RTC i BMP180 s ESP8266-01. U ovom uputstvu namjeravao sam koristiti 4 senzora i zaslon, a također sam prenio 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 igle, još uvijek mogu dodati više senzora (ili pokretača) putem OneWire protokola i/ili putem I2C protokola. Dakle, što nam je potrebno: BOM

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

i, naravno, matičnu ploču, naponsko 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 ga ipak morate kupiti, razmislite o ESP8266-12 koji ima više pinova
  • DHT11A jeftin višenamjenski osjetnik vlage i temperature. Nije baš točan, ali bit će. Ako ga ipak trebate kupiti, mogli biste se odlučiti za DHT22 koji je navodno točniji, 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 mjeri temperaturu i zračni tlak. Nasljednik je BMP085, ali i sada ima neke suvesore. Postoji (jeftiniji) BMP280, ali možete se odlučiti i za BME280 koji mjeri temperaturu, tlak 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 to biste mogli provjeriti i na Thingspeaku. OLED je ionako premalen za ispis svih pročitanih vrijednosti

Korak 1: Krug

Krug
Krug

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 priključka
  • GPIO1 -> DHT11
  • GPIO2-> SCL pin I2C porta
  • GPIO3-> OneWire sabirnica

Kako moji I2C moduli već imaju pull up otpornike, neću dodati nikakve I2C pullup otpornike. DS18B20 još uvijek treba otpornik na izvlačenje za koji sam koristio 4k7, ali stvarno nije toliko kritičan, 10k je također dobar. DHT11 navodno također treba 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 se radi o povezivanju SDA na SDA i SCL na SCL … i naravno uzemljenje i Vcc pinove na svoje kolege

Korak 2: Program

Program je prilično jednostavan. Prvo postavlja knjižnice i senzore. Priključuje DHT11 na pin 1 (Tx) i sabirnicu OnWire 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 lakšeg pristupa. 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 Zračni tlak (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 zaslon (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); // Prenesite adresu naše oneWire instance na Dallas Temperature. Sonda za adresiranje uređaja01 = {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 stuff Wire.pins (0, 2); Wire.begin (0, 2); // Inicijalizacija senzora // dht 11 stuff dht.begin (); // ds18b20 sensors.begin (); // ds18b20 // postavite 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); // Spajanje na WiFi mrežu WiFi.begin (ssid, lozinka); while (WiFi.status ()! = WL_CONNECTED) {odgoda (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 (vlaga) || isnan (temperatura)) {povratak; } // bmp stvari ------------------------- String t = String (bmp.readTemperature ()); Niz p = Niz (bmp.readPressure ()); // OLED stvari -------------------------- display.clear (); display.drawString (0, 10, p); // bmp prikaz tlaka.drawString (0, 24, niz (temperature_buiten)); // ds18b20 display.drawString (0, 38, niz (vlažnost)); // prikaz dht11.prikaz(); // uspostavljanje TCP veza WiFiClient klijent; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } Niz url = "/ažuriraj? Ključ ="; url += writeAPIKey; url += "& polje1 ="; url += String (temperatura); // roost (DHT1) url += "& field2 ="; url += String (vlažnost); // roost (DHT11) url += "& field3 ="; url += String (temperature_buiten); // temperatura spremišta (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 tlak (BMP180) url += "\ r / n"; // Slanje zahtjeva poslužitelju 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 vas sprječava 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čiti grijač vodenog bazena kada temperatura padne ispod nule, ako za njega postoji I2 C čip, ESP8266 ga vjerojatno može koristiti.

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

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Preporučeni: