Sommario:

Utilizzo dei 4 pin di ESP8266-01: 3 passaggi
Utilizzo dei 4 pin di ESP8266-01: 3 passaggi

Video: Utilizzo dei 4 pin di ESP8266-01: 3 passaggi

Video: Utilizzo dei 4 pin di ESP8266-01: 3 passaggi
Video: Как запрограммировать модуль реле Wi-Fi ESP8266 ESP-01 2024, Giugno
Anonim
Utilizzo dei 4 pin dell'ESP8266-01
Utilizzo dei 4 pin dell'ESP8266-01
Utilizzo dei 4 pin dell'ESP8266-01
Utilizzo dei 4 pin dell'ESP8266-01
Utilizzo dei 4 pin dell'ESP8266-01
Utilizzo dei 4 pin dell'ESP8266-01

Nota: questo progetto è fondamentalmente un'estensione di una precedente istruzione che utilizzava solo 2 pin. Il numero limitato (4) di pin GPIO su ESP8266-01 può sembrare un ostacolo, per qualsiasi applicazione seria. Tuttavia, se si utilizzano i pin in un modo intelligente è molto ben possibile fare molto con solo quei 4 pin. In alcuni dei miei recenti istruttori, ho mostrato l'uso di un DHT11, un DS18B20, un OLED, un RTC e un BMP180 con ESP8266-01. In questo tutorial ho deciso di utilizzare 4 sensori e un display, caricando anche i dati acquisiti su Thingspeak. In realtà si sta espandendo su un progetto di monitoraggio dell'atmosfera dentro e intorno al mio pollaio. Sì, potresti chiamarla stazione meteorologica, ma è solo per illustrare l'uso dei 4 pin, potresti facilmente fare qualcos'altro in questo modo Userò 2 pin per I2C (BMP180 e OLED) 1 pin per 2 sensori DS18B20 tramite il Pin del protocollo OneWire1 per il DHT11Anche se l'ESP8266-01 ha ora tutti i suoi pin utilizzati, posso ancora aggiungere più sensori (o attuatori) tramite il protocollo OneWire e/o tramite il protocollo I2C. Quindi, di cosa abbiamo bisogno:BOM

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

e ovviamente una breadboard, un alimentatore da 3,3 V e alcuni cavi per breadboard e un account Thingspeak

Solo alcune osservazioni sulla distinta base:

  • ESP8266-01Ovviamente il progetto riguarda l'utilizzo dei pin limitati dell'ESP8266-01, ma se hai ancora bisogno di acquistarne uno, potresti prendere in considerazione un ESP8266-12 con più pin
  • DHT11A sensore di umidità e temperatura per tutti gli usi economico. Non è estremamente preciso, ma lo farà. Se hai ancora bisogno di acquistarne uno, potresti optare per il DHT22 che è presumibilmente più preciso, ma potresti anche optare per l'AMS2321. Quella è una sorta di DHT22 che va bene per I2C, liberando così un altro pin
  • BMP180 misura la temperatura e la pressione dell'aria. È il successore del BMP085, ma ora ha anche alcuni successori. C'è il (più economico) BMP280, ma potresti anche optare per il BME280 che misura la temperatura, la pressione dell'aria E l'umidità. In questo modo puoi risparmiare sul sensore DHT/AMS
  • OLEDI l'ha appena usato così ho potuto vedere rapidamente se i sensori sono stati letti, ma potresti anche controllarlo su Thingspeak. L'OLED è comunque troppo piccolo per stampare tutti i valori letti

Passaggio 1: il circuito

Il circuito
Il circuito

I 4 pin dell'ESP8266 non sono indicati come tali sul PCB e la maggior parte delle immagini indica chiaramente solo GPIO0 e GPIO2. Tuttavia, ESP826-01 ha un pin GPIO1 (il pin Tx) e un pin GPIO3 (il pin Rx).i utilizzerà quei pin come segue

  • GPIO0 -> Pin SDA della porta I2C
  • GPIO1 -> DHT11
  • GPIO2-> pin SCL della porta I2C
  • GPIO3-> Bus OneWire

Poiché i miei moduli I2C hanno già resistori di pull-up, non aggiungerò alcun resistore di pull-up I2C lì. Il DS18B20 ha ancora bisogno di un resistore di pull-up per il quale ho usato un 4k7, ma non è così critico, va bene anche un 10k. Il DHT11 presumibilmente ha bisogno anche di un resistore di pull-up, ma ho scoperto che funziona anche senza. l'aggiunta di un resistore 4k7 non ha modificato nessuna delle letture, quindi l'ho omesso. Molti dei moduli DHT11 a 3 pin hanno già un 10 k saldato sul modulo. Mi sono appena reso conto che non ho disegnato le connessioni per l'OLED. Questo perché l'ho collegato solo per un rapido controllo, ma se volessi aggiungerlo, è solo questione di collegare SDA a SDA e SCL a SCL … e ovviamente i pin di terra e Vcc alle loro controparti

Passaggio 2: il programma

Il programma è abbastanza semplice. Per prima cosa configura le librerie ei sensori. Collega il DHT11 al pin 1 (Tx) e il bus OnWire per il DS18B20 al pin 3 (Rx). Per utilizzare più di 1 sensore DS18B20 sul bus OneWire, è necessario conoscere il loro "indirizzo univoco". Se non lo possiedi, allora hai bisogno di un programma per leggere quegli indirizzi. Fallo su un arduino per facilità. Nel programma devi ancora fornire le tue credenziali WiFi e l'API di scrittura per il tuo canale Thingspeak

/*

Campo 1 posatoio temperatura (DHT11) Campo 2 posatoio umidità (DHT11) campo 3 Temperatura Coop (DS18B20) campo 4 temperatura suolo (DS18B20) campo 5 Pressione atmosferica (bmp180) campo 6 Temperatura esterna (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" Display 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 = "Password"; const char* host = "api.thingspeak.com"; const char* writeAPIKey = "W367812985"; //use YOUR writeApi //DHT11 stuff float temperature_buiten; float temperature_buiten2; DHT dht(DHTPIN, DHTTYPE, 15); //DS18b20 roba OneWire oneWire(ONE_WIRE_BUS); //Istanza oneWire per comunicare con qualsiasi dispositivo OneWire Sensori DallasTemperature(&oneWire);// Passa l'indirizzo della nostra istanza oneWire a Dallas Temperature. DeviceAddress Probe01 = { 0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02={0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 roba Adafruit_BMP085 bmp; void setup() { //cose I2C Wire.pins(0, 2); Wire.begin(0, 2); // Inizializza i sensori //dht 11 stuff dht.begin(); //ds18b20 stuff sensor.begin();//ds18b20 // imposta la risoluzione a 10 bit (può essere da 9 a 12 bit.. inferiore è più veloce) sensor.setResolution(Probe01, 10); sensori.setResolution(Probe02, 10); //bmp180 cose if (!bmp.begin()) { // Serial.println("No BMP180 / BMP085"); // while (1) {} } //cose OLED display.init(); display.flipScreenVerticalmente(); display.setFont(ArialMT_Plain_10); ritardo(1000); // Connettiti alla rete WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { ritardo(500); } } void loop() { //ds18b20stuff-----sensors.requestTemperatures(); // Invia il comando per ottenere le temperature temperature_buiten = sensor.getTempC(Probe01); // temperature_buiten2 = sensor.getTempC(Probe02); // // dht11 stuff---------------- ---- float umidità = dht.readHumidity(); float temperatura = dht.readTemperature(); if (isnan(umidità) || isnan(temperatura)) { return; } //cose bmp----------- String t= String(bmp.readTemperature()); String p=String(bmp.readPressure()); //Roba OLED ------------ display.clear(); display.drawString(0, 10, p);//bmp pressure display.drawString(0, 24, String(temperature_buiten));//ds18b20 display.drawString(0, 38, String(humidity));//dht11 display. Schermo(); // effettua connessioni TCP client WiFiClient; const int httpPort = 80; if (!client.connect(host, httpPort)) { return; } String url = "/update?key="; url += writeAPIKey; url += "&field1="; url += String(temperatura);// posatoio (DHT1) url += "&field2="; url += String(umidità);// posatoio (DHT11) url += "&field3="; url += String(temperature_buiten);//temperatura coop (DS18B20 nr 1) url += "&field4="; url += String(temperature_buiten2); //temperatura del suolo (DS18B29 nr 2) url +="&field5="; url +=String(bmp.readTemperature());Temperatura esterna (BMP180) url +="&field6="; url +=String(bmp.readPressure());// Pressione dell'aria (BMP180) url += "\r\n"; // Invia la richiesta al server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r \n\r\n"); ritardo(1000); }

……..

Passaggio 3: altro

Attualmente questo programma controlla solo, ma cosa ti impedisce di aggiungere un sensore di luce BH1750 I2C per misurare se è sera o mattina o un RTC per conoscere l'ora del giorno e per aprire e chiudere automaticamente la porta della cooperativa con l'aiuto di una scheda di espansione I/O PCF8574 I2C, oppure poiché è già in giardino, aggiungere un convertitore PCF8591 o ADS1115 AD per misurare l'umidità del suolo e attivare una pompa quando necessario. O forse accendendo il riscaldatore del bacino dell'acqua quando la temperatura scende sotto lo zerose c'è un chip I2 C per questo, l'ESP8266 può probabilmente usarlo.

Una nota importante però: il programma così com'è funziona bene, ma se aggiungi altri sensori a Rx o Tx, specialmente se li trasformi in uscite, i pin potrebbero improvvisamente ricordare che non sono realmente pin GPIO. È meglio dire ai pin dall'inizio che ora sono pin GPIO. Uno lo fa inserendo le seguenti istruzioni nella configurazione:

pinMode(1, FUNCTION_3);

pinMode(3, FUNZIONE_3);

Consigliato: