Taula de continguts:

Ús dels 4 pins de l’ESP8266-01: 3 passos
Ús dels 4 pins de l’ESP8266-01: 3 passos

Vídeo: Ús dels 4 pins de l’ESP8266-01: 3 passos

Vídeo: Ús dels 4 pins de l’ESP8266-01: 3 passos
Vídeo: Умный дом с использованием реле Tasmota ESP8266 NodeMCU, управляемого Alexa | Проект Интернета вещей 2021 2024, Juliol
Anonim
Utilització dels 4 pins de l’ESP8266-01
Utilització dels 4 pins de l’ESP8266-01
Utilització dels 4 pins de l’ESP8266-01
Utilització dels 4 pins de l’ESP8266-01
Utilització dels 4 pins de l’ESP8266-01
Utilització dels 4 pins de l’ESP8266-01

Nota: aquest projecte és bàsicament una extensió d’un instructable anterior que només feia servir 2 pins. El nombre limitat (4) de pins GPIO a l’ESP8266-01 pot semblar un obstacle per a qualsevol aplicació seriosa. d'una manera intel·ligent, és molt possible fer molt només amb aquests 4 pins. En alguns dels meus instructables recents, he demostrat l'ús d'un DHT11, un DS18B20, un OLED, un RTC i un BMP180 amb l'ESP8266-01. En aquest instructiu em vaig proposar utilitzar 4 sensors i una pantalla, mentre també pujava les dades adquirides a Thingspeak. De fet, s’està ampliant en un projecte de control de l’atmosfera al meu galliner i al voltant. Sí, es podria anomenar estació meteorològica, però és només per il·lustrar l’ús dels 4 pins, fàcilment podríeu fer una altra cosa. Utilitzaré 2 pins per a I2C (BMP180 i OLED) 1 pin per a 2 sensors DS18B20 mitjançant Protocol OneWire 1 pin per al DHT11 Tot i que l’ESP8266-01 ja té tots els pins utilitzats, encara puc afegir més sensors (o actuadors) a través del protocol OneWire i / o mitjançant el protocol I2C. Per tant, què necessitem?

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

i, per descomptat, una placa de configuració, una font d'alimentació de 3,3 V i alguns cables de la placa de configuració i un compte de Thingspeak

Només algunes observacions sobre la llista de materials:

  • 8bviament, el projecte tracta d’utilitzar els pins limitats de l’ESP8266-01, però si encara n’heu de comprar un, podríeu considerar un ESP8266-12 que tingui més pins
  • DHT11A sensor d'humitat i temperatura per a tots els usos barat. No és molt precís, però sí. Si encara necessiteu comprar-ne un, podeu optar pel DHT22 que suposadament és més precís, però també podeu optar per l’AMS2321. Es tracta d’una mena de DHT22 adequat per a I2C, alliberant així un altre pin
  • BMP180 mesura la temperatura i la pressió d’aire. És el successor del BMP085, però ara també té alguns propis suvessors. Hi ha el BMP280 (més barat), però també podeu optar pel BME280 que mesura la temperatura, la pressió de l’aire I la humitat. D’aquesta manera podeu estalviar al sensor DHT / AMS
  • OLEDI ho va fer servir per poder veure ràpidament si es llegien els sensors, però també ho podríeu comprovar a Thingspeak. El OLED és massa petit de totes maneres per imprimir tots els valors llegits

Pas 1: el circuit

El Circuit
El Circuit

Els 4 pins de l’ESP8266 no s’indiquen com a tals al PCB i la majoria de les imatges només indiquen clarament GPIO0 i GPIO2. Tanmateix, l’ESP826-01 té un pin GPIO1 (el pin Tx) i un pin GPIO3 (el pin Rx).i utilitzarà aquests pins de la següent manera

  • GPIO0 -> Pin SDA del port I2C
  • GPIO1 -> DHT11
  • GPIO2-> PIN SCL del port I2C
  • GPIO3-> Bus OneWire

Com que els meus mòduls I2C ja tenen resistències de tracció, no hi afegiré cap resistència de tracció I2C. El DS18B20 encara necessita una resistència pull up per a la qual he utilitzat un 4k7, però realment no és tan crític, un 10k també és bo. El DHT11 suposadament també necessita una resistència de tracció, però he trobat que funcionava també sense una. afegir una resistència 4k7 no va canviar cap de les lectures, així que ho vaig deixar de banda. Molts dels mòduls DHT11 de 3 pins ja tenen una soldadura de 10 k al mòdul. Acabo d’adonar-me que no dibuixo les connexions de l’OLED. Això es deu al fet que només l'he connectat per fer una comprovació ràpida, però si voleu afegir-lo, només es tracta de connectar SDA a SDA i SCL a SCL … i, per descomptat, els pins de terra i Vcc als seus homòlegs.

Pas 2: el programa

El programa és bastant senzill. Primer, configura les biblioteques i els sensors: connecta el DHT11 al pin 1 (Tx) i el bus OnWire per al DS18B20 al pin 3 (Rx). Per utilitzar més d'un sensor DS18B20 al bus OneWire, heu de conèixer la seva "adreça única". Si no en teniu, necessiteu un programa per llegir aquestes adreces. Feu-ho amb un arduino per facilitar-lo. Al programa, heu de proporcionar les vostres credencials WiFi, així com l’API d’escriptura per al vostre canal Thingspeak.

/*

Camp de temperatura 1 camp (DHT11) Camp de temperatura 2 humitat (DHT11) camp 3 Temperatura cooperativa (DS18B20) camp 4 temperatura del sòl (DS18B20) camp 5 Pressió d'aire (bmp180) camp 6 Temperatura exterior (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 = "La vostra contrasenya"; const char * host = "api.thingspeak.com"; const char * writeAPIKey = "W367812985"; // utilitzeu el vostre writeApi // Material DHT11 float temperature_buiten; temperatura del flotador_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // coses de DS18b20 OneWire oneWire (ONE_WIRE_BUS); // Instància oneWire per comunicar-se amb qualsevol dispositiu OneWire Sensors de temperatura Dallas (& oneWire); // Passa l'adreça de la nostra instància oneWire a Dallas Temperature. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // coses bmp180 Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Inicialitzar sensors // dht 11 stuff dht.begin (); // ds18b20 stuff sensors.begin (); // ds18b20 // estableix la resolució a 10 bits (pot ser de 9 a 12 bits.. inferior és més ràpid) sensors.setResolution (Probe01, 10); sensors.setResolution (Sonda02, 10); // coses de bmp180 if (! bmp.begin ()) {// Serial.println ("No BMP180 / BMP085"); // while (1) {}} // OLED stuff display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); retard (1000); // Connectar-se a la xarxa WiFi WiFi.begin (ssid, contrasenya); while (WiFi.status ()! = WL_CONNECTED) {demora (500); }} void loop () {// ds18b20stuff ------------------- sensors.requestTemperatures (); // Envieu l’ordre per obtenir temperatures temperature_buiten = sensors.getTempC (Probe01); // temperature_buiten2 = sensors.getTempC (Probe02); // // dht11 stuff ---------------- ---- humitat flotant = dht.readHumidity (); temperatura flotant = dht.readTemperature (); if (isnan (humitat) || isnan (temperatura)) {retorn; } // coses bmp ------------------------- Cadena t = Cadena (bmp.readTemperature ()); Cadena p = Cadena (bmp.readPressure ()); // Coses OLED -------------------------- display.clear (); display.drawString (0, 10, p); // pressió bmp display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (humitat)); // dht11 display.display (); // fer connexions TCP client WiFiClient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/ update? Key ="; url + = writeAPIKey; url + = "& camp1 ="; url + = String (temperature); // roost (DHT1) url + = "& field2 ="; url + = Cadena (humitat); // roost (DHT11) url + = "& field3 ="; url + = String (temperature_buiten); // coop temperature (DS18B20 nr 1) url + = "& field4 ="; url + = String (temperature_buiten2); // temperatura del sòl (DS18B29 nr 2) url + = "& field5 ="; url + = String (bmp.readTemperature ()); Temperatura exterior (BMP180) url + = "& field6 ="; url + = String (bmp.readPressure ()); // Airpressure (BMP180) url + = "\ r / n"; // Enviar sol·licitud al servidor client.print (Cadena ("GET") + url + "HTTP / 1.1 / r / n" + "Amfitrió:" + amfitrió + "\ r / n" + "Connexió: tancar / r / n / r / n "); retard (1000); }

……..

Pas 3: més

Actualment aquest programa només supervisa, però el que és el que impedeix afegir un sensor de llum BH1750 I2C per mesurar si és de nit o de matí o un RTC per saber l’hora del dia i per obrir i tancar la porta de la cooperativa automàticament amb ajuda de una targeta d’expansió E / S PCF8574 I2C, o com ja està al jardí, afegiu un convertidor PCF8591 o ADS1115 AD per mesurar la humitat del sòl i activar una bomba quan sigui necessari. O potser enceneu l’escalfador de la pica quan la temperatura caigui per sota de zero si hi ha un xip I2 C per a això, probablement l’ES8266 el pugui utilitzar.

Una nota important: el programa està funcionant bé, però si afegiu altres sensors a Rx o Tx, especialment si els convertiu en sortides, els pins poden recordar de sobte que no són pins GPIO. És millor dir als pins des del principi que ara són pins GPIO, i ho fa posant les següents afirmacions a la configuració:

pinMode (1, FUNCTION_3);

pinMode (3, FUNCTION_3);

Recomanat: