Sommario:
Video: Utilizzo dei 4 pin di ESP8266-01: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
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
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:
Utilizzo separato dei chip a nastro LED: 4 passaggi
Utilizzo separato dei chip a nastro LED: mentre sperimentavo un altro progetto, ho finito per tagliare una lunghezza di nastro LED tra le linee di taglio previste per adattarlo al progetto in questione (non preoccuparti, lo rivelerò quando è finito). Il pezzo non ha funzionato dopo questo taglio in quanto sev
Utilizzo dei moduli orologio in tempo reale DS1307 e DS3231 con Arduino: 3 passaggi
Utilizzo dei moduli di clock in tempo reale DS1307 e DS3231 con Arduino: continuiamo a ricevere richieste su come utilizzare i moduli di clock in tempo reale DS1307 e DS3231 con Arduino da varie fonti, quindi questo è il primo di un tutorial in due parti su come utilizzarli. Per questo tutorial su Arduino abbiamo a disposizione due moduli di clock in tempo reale
Utilizzo dei tastierini numerici con Arduino: 4 passaggi
Utilizzo dei tastierini numerici con Arduino: i tastierini numerici possono fornire una semplice alternativa per l'utente finale per varie interfacce per i tuoi progetti. Oppure, se hai bisogno di molti pulsanti, possono farti risparmiare molto tempo per quanto riguarda la costruzione. Passeremo attraverso il loro collegamento, usando Arduino l
Utilizzo dei vecchi moduli VFD Noritake Itron: 7 passaggi
Utilizzo dei vecchi moduli VFD Noritake Itron: di tanto in tanto ti imbatti in parti interessanti su ebay, da amici o semplicemente rovistando nei negozi di seconda mano. Un esempio di questo è stato un enorme display fluorescente sotto vuoto Noritake Itron 40 x 2 caratteri del 1994 (o prima) che è stato trasmesso
ESP8266 Utilizzo dei pin GPIO0/GPIO2/GPIO15: 4 passaggi
ESP8266 Utilizzo dei pin GPIO0/GPIO2/GPIO15: aggiornamento 1 luglio 2018 - Aggiunta nota sulla riprogrammazione quando GPIO0 è un outputQuesta è una nota molto breve su come utilizzare i pin GPIO0 / GPIO2 e GPIO15 sul modulo ESP8266.Aggiornamento: controlla anche out Come utilizzare i pin ESP8266-01IntroduzioneESP8266 è un basso