Cuprins:

Utilizarea celor 4 pini ai ESP8266-01: 3 pași
Utilizarea celor 4 pini ai ESP8266-01: 3 pași

Video: Utilizarea celor 4 pini ai ESP8266-01: 3 pași

Video: Utilizarea celor 4 pini ai ESP8266-01: 3 pași
Video: Cum să faci un releu Wi-Fi ESP8266 ESP-01 cu 2 canale | ESP-01 Home Automation | RemoteXY | FLProg 2024, Iulie
Anonim
Utilizarea celor 4 pini ai ESP8266-01
Utilizarea celor 4 pini ai ESP8266-01
Utilizarea celor 4 pini ai ESP8266-01
Utilizarea celor 4 pini ai ESP8266-01
Utilizarea celor 4 pini ai ESP8266-01
Utilizarea celor 4 pini ai ESP8266-01

Notă: Acest proiect este în esență o extensie a unei versiuni anterioare, care utilizează doar 2 pini. Numărul limitat (4) de pini GPIO pe ESP8266-01 poate părea un obstacol pentru orice aplicație serioasă. într-un mod inteligent, este foarte bine posibil să faci multe lucruri doar cu acei 4 pini. În unele dintre instructajele mele recente, am arătat utilizarea unui DHT11, un DS18B20, un OLED, un RTC și un BMP180 cu ESP8266-01. În acest instructiv, mi-am propus să folosesc 4 senzori și un afișaj, încărcând în același timp datele achiziționate pe Thingspeak. De fapt, se extinde într-un proiect de monitorizare a atmosferei din și în jurul cocinierei mele. Da, ați putea numi asta o vreme, dar este doar pentru a ilustra utilizarea celor 4 pini, puteți face cu ușurință altceva în acest fel. Voi folosi 2 pini pentru I2C (BMP180 și OLED) 1 pin pentru 2 senzori DS18B20 prin intermediul Protocol OneWire 1 pin pentru DHT11 Deși ESP8266-01 are acum toți pinii folosiți, tot pot adăuga mai mulți senzori (sau actuatori) prin protocolul OneWire și / sau prin protocolul I2C. Deci, de ce avem nevoie: BOM

  • ESP8266-01
  • 2x DS18B20
  • 1x DHT11
  • 1x BMP180
  • OLED (opțional)

și, bineînțeles, o placă de măsurare, o sursă de alimentare de 3,3 V și câteva fire de placă de măsurare și un cont Thingspeak

Doar câteva observații cu privire la BOM:

  • ESP8266-01 În mod evident, proiectul este despre utilizarea pinilor limitați ai ESP8266-01, dar dacă totuși trebuie să cumpărați unul, ați putea lua în considerare un ESP8266-12 care are mai mulți pini
  • DHT11A senzor de umiditate și temperatură pentru toate scopurile, ieftin. Nu este extrem de precisă, dar o va face. Dacă totuși trebuie să cumpărați unul, puteți opta pentru DHT22 care este presupus a fi mai precis, dar ați putea opta și pentru AMS2321. Acesta este un fel de DHT22 care este potrivit pentru I2C, eliberând astfel un alt pin
  • BMP180 măsoară temperatura și presiunea aerului. Este succesorul BMP085, dar are și acum câțiva suvenitori. Există BMP280 (mai ieftin), dar ați putea opta și pentru BME280 care măsoară temperatura, presiunea aerului ȘI umiditatea. În acest fel puteți economisi pe senzorul DHT / AMS
  • OLEDI tocmai l-a folosit, așa că am putut vedea rapid dacă senzorii au fost citiți, dar la fel de bine l-ați putea verifica pe Thingspeak. OLED-ul este oricum prea mic pentru a imprima toate valorile citite

Pasul 1: Circuitul

Circuitul
Circuitul

Cei 4 pini ai ESP8266 nu sunt indicați ca atare pe PCB și majoritatea imaginilor indică în mod clar GPIO0 și GPIO2. Cu toate acestea, ESP826-01 are un pin GPIO1 (pinul Tx) și un pin GPIO3 (pinul Rx).i va folosi acei pini după cum urmează

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

Deoarece modulele mele I2C au deja rezistențe pull up, nu voi adăuga acolo niciun rezistență pullup I2C. DS18B20 are încă nevoie de un rezistor pull up pentru care am folosit un 4k7, dar nu este chiar atât de critic, un 10k este, de asemenea, bun. Se presupune că DHT11 are nevoie și de un rezistor pull-up, dar am găsit că funcționează și fără unul. adăugarea unui rezistor 4k7 nu a modificat niciuna dintre citiri, așa că am lăsat-o. Multe dintre modulele DHT11 cu 3 pini au deja 10 k lipite pe modul. Tocmai mi-am dat seama că nu am trasat conexiunile pentru OLED. Asta pentru că l-am conectat doar pentru o verificare rapidă, dar dacă doriți să-l adăugați, este doar o chestiune de conectare SDA la SDA și SCL la SCL … și, desigur, pământul și pinii Vcc la omologii lor

Pasul 2: Programul

Programul este destul de simplu. Mai întâi configurează bibliotecile și senzorii. Atasează DHT11 la pinul 1 (Tx) și magistrala OnWire pentru DS18B20 la pinul 3 (Rx). Pentru a utiliza mai mult de 1 senzor DS18B20 pe magistrala OneWire, trebuie să le cunoașteți „adresa unică”. Dacă nu aveți acest lucru, atunci aveți nevoie de un program pentru a citi acele adrese. Faceți asta pe un arduino pentru ușurință. În program trebuie totuși să furnizați acreditările WiFi, precum și API-ul de scriere pentru canalul dvs. Thingspeak

/*

Câmpul 1 temp roost (DHT11) Câmpul 2 umiditate roost (DHT11) câmpul 3 Coop temperature (DS18B20) câmpul 4 temperatura solului (DS18B20) câmpul 5 Presiunea aerului (bmp180) câmpul 6 Temperatura exterioară (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" Afișaj 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 = "Parola Dvs."; const char * host = "api.thingspeak.com"; const char * writeAPIKey = "W367812985"; // folosiți-vă writeApi // chestii DHT11 float temperature_buiten; float temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // chestii DS18b20 OneWire oneWire (ONE_WIRE_BUS); // Instanță oneWire pentru a comunica cu orice dispozitiv OneWire Senzori DallasTemperature (& oneWire); // Treceți adresa instanței oneWire la Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 chestii Adafruit_BMP085 bmp; void setup () {// chestii I2C Wire.pins (0, 2); Wire.begin (0, 2); // Inițializați senzorii // dht 11 chestii dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // setează rezoluția la 10 biți (poate fi de la 9 la 12 biți.. mai jos este mai rapid) sensors.setResolution (Probe01, 10); sensors.setResolution (Probe02, 10); // chestii bmp180 if (! bmp.begin ()) {// Serial.println („Nu BMP180 / BMP085”); // while (1) {}} // OLED stuff display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); întârziere (1000); // Conectați-vă la rețeaua WiFi WiFi.begin (ssid, parolă); while (WiFi.status ()! = WL_CONNECTED) {întârziere (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // Trimiteți comanda pentru a obține temperaturi temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 chestii ---------------- ---- umiditate plutitoare = dht.readHumidity (); float temperature = dht.readTemperature (); if (isnan (umiditate) || isnan (temperatura)) {return; } // chestii bmp ------------------------- String t = String (bmp.readTemperature ()); String p = String (bmp.readPressure ()); // chestii OLED -------------------------- display.clear (); display.drawString (0, 10, p); // presiunea bmp display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (umiditate)); // dht11 display.afişa(); // face conexiuni TCP client WiFiClient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/ update? Key ="; url + = writeAPIKey; url + = "& câmp1 ="; url + = String (temperature); // roost (DHT1) url + = "& field2 ="; url + = String (umiditate); // roost (DHT11) url + = "& field3 ="; url + = String (temperature_buiten); // coop temperature (DS18B20 nr 1) url + = "& field4 ="; url + = String (temperature_buiten2); // temperatura solului (DS18B29 nr 2) url + = "& field5 ="; url + = String (bmp.readTemperature ()); Temperatura exterioară (BMP180) url + = "& field6 ="; url + = String (bmp.readPressure ()); // Airpressure (BMP180) url + = "\ r / n"; // Trimiteți cererea către serverul client.print (Șir ("GET") + url + "HTTP / 1.1 / r / n" + "Gazdă:" + gazdă + "\ r / n" + "Conexiune: închidere / r / n / r / n "); întârziere (1000); }

……..

Pasul 3: Mai multe

În prezent, acest program monitorizează doar, dar ce vă poate împiedica să adăugați un senzor de lumină BH1750 I2C pentru a măsura dacă este seară sau dimineață sau un RTC pentru a cunoaște ora din zi și pentru a deschide și închide ușa coopului automat cu ajutorul un card de expansiune PCF8574 I2C I / O sau, deoarece este deja în grădină, adăugați un convertor PCF8591 sau ADS1115 AD pentru a măsura umiditatea solului și a activa o pompă atunci când este necesar. Sau poate porniți încălzitorul bazinului de apă atunci când temperatura scade sub zero dacă există un cip I2 C pentru acesta, ESP8266 îl poate folosi probabil.

O notă importantă însă: Programul în starea de lucru funcționează bine, dar dacă adăugați alți senzori la Rx sau Tx, mai ales dacă le transformați în ieșiri, pinii pot aminti brusc că nu sunt cu adevărat pini GPIO. Este mai bine să le spuneți pinilor de la început că acum sunt ace GPIO.

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Recomandat: