Tabla de contenido:

Usando los 4 pines del ESP8266-01: 3 pasos
Usando los 4 pines del ESP8266-01: 3 pasos

Video: Usando los 4 pines del ESP8266-01: 3 pasos

Video: Usando los 4 pines del ESP8266-01: 3 pasos
Video: ESP8266 (ESP-01) Todo lo que tienes que saber | Programar con el Arduino IDE 2024, Noviembre
Anonim
Usando los 4 pines del ESP8266-01
Usando los 4 pines del ESP8266-01
Usando los 4 pines del ESP8266-01
Usando los 4 pines del ESP8266-01
Usando los 4 pines del ESP8266-01
Usando los 4 pines del ESP8266-01

Nota: Este proyecto es básicamente una extensión de un instructable anterior que solo usaba 2 pines. El número limitado (4) de pines GPIO en el ESP8266-01 puede parecer un obstáculo, para cualquier aplicación seria. Sin embargo, si uno usa los pines en De una manera inteligente, es muy posible hacer mucho con solo esos 4 pines. En algunos de mis instructables recientes, he mostrado el uso de un DHT11, un DS18B20, un OLED, un RTC y un BMP180 con el ESP8266-01. En este instructable, me propuse usar 4 sensores y una pantalla, al mismo tiempo que cargaba los datos adquiridos en Thingspeak. De hecho, se está expandiendo en un proyecto de monitoreo de la atmósfera dentro y alrededor de mi gallinero. Sí, podría llamar a esto una estación meteorológica, pero es solo para ilustrar el uso de los 4 pines, podría hacer otra cosa fácilmente de esta manera Usaré 2 pines para I2C (BMP180 y OLED) 1 pin para 2 sensores DS18B20 a través del Protocolo OneWire 1 pin para el DHT11 Aunque el ESP8266-01 ahora tiene todos sus pines usados, todavía puedo agregar más sensores (o actuadores) a través del protocolo OneWire y / o mediante el protocolo I2C.

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

y, por supuesto, una placa de pruebas, una fuente de alimentación de 3,3 V y algunos cables de placa de pruebas y una cuenta de Thingspeak

Solo algunas observaciones sobre la lista de materiales:

  • ESP8266-01 Obviamente, el proyecto se trata de utilizar los pines limitados del ESP8266-01, pero si aún necesita comprar uno, podría considerar un ESP8266-12 que tenga más pines.
  • DHT11A sensor de temperatura y humedad para todo uso económico. No es muy preciso, pero servirá. Si aún necesita comprar uno, puede optar por el DHT22 que supuestamente es más preciso, pero también puede optar por el AMS2321. Ese es un tipo de DHT22 que es adecuado para I2C, liberando así otro pin
  • BMP180 mide la temperatura y la presión del aire. Es el sucesor del BMP085, pero ahora también tiene algunos sucesores. Existe el BMP280 (más barato), pero también puede optar por el BME280 que mide la temperatura, la presión del aire y la humedad. De esa manera puede ahorrar en el sensor DHT / AMS
  • OLEDI acaba de usar eso para que pueda ver rápidamente si se leyeron los sensores, pero también podría verificarlo en Thingspeak. El OLED es demasiado pequeño de todos modos para imprimir todos los valores leídos

Paso 1: el circuito

El circuito
El circuito

Los 4 pines del ESP8266 no están indicados como tales en el PCB, y la mayoría de las imágenes solo indican claramente GPIO0 y GPIO2. Sin embargo, el ESP826-01 tiene un pin GPIO1 (el pin Tx) y un pin GPIO3 (el pin Rx).i usará esos pines de la siguiente manera

  • GPIO0 -> pin SDA del puerto I2C
  • GPIO1 -> DHT11
  • GPIO2-> Pin SCL del puerto I2C
  • GPIO3-> Bus OneWire

Como mis módulos I2C ya tienen resistencias pull up, no agregaré resistencias pullup I2C allí. El DS18B20 todavía necesita una resistencia pull up para la que usé un 4k7, pero realmente no es tan crítico, un 10k también es bueno. El DHT11 supuestamente también necesita una resistencia pull-up, pero descubrí que también funciona sin una. agregar una resistencia de 4k7 no cambió ninguna de las lecturas, así que lo dejé fuera. Muchos de los módulos DHT11 de 3 pines ya tienen un 10 k soldado en el módulo. Me acabo de dar cuenta de que no dibujé las conexiones para el OLED. Eso es porque solo lo conecté para una verificación rápida, pero si desea agregarlo, es solo una cuestión de conectar SDA a SDA y SCL a SCL … y, por supuesto, los pines de tierra y Vcc a sus contrapartes.

Paso 2: el programa

El programa es bastante sencillo. Primero configura las bibliotecas y los sensores, conecta el DHT11 al pin 1 (Tx) y el bus OnWire para el DS18B20 al pin 3 (Rx). Para utilizar más de 1 sensor DS18B20 en el bus OneWire, debe conocer su "dirección única". Si no lo tiene, entonces necesita un programa para leer esas direcciones. Haz eso en un arduino para mayor facilidad. En el programa, todavía tienes que proporcionar tus credenciales de WiFi, así como la API de escritura para tu canal Thingspeak.

/*

Campo 1 temperatura de descanso (DHT11) Campo 2 humedad de descanso (DHT11) campo 3 Temperatura de la cooperativa (DS18B20) campo 4 temperatura del suelo (DS18B20) campo 5 Presión de aire (bmp180) campo 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" Pantalla 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 * contraseña = "YourPassword"; const char * host = "api.thingspeak.com"; const char * writeAPIKey = "W367812985"; // usa TU writeApi // DHT11 cosas float temperature_buiten; flotar temperature_buiten2; DHT dht (DHTPIN, DHTTYPE, 15); // DS18b20 cosas OneWire oneWire (ONE_WIRE_BUS); // instancia oneWire para comunicarse con cualquier dispositivo OneWire Sensores de temperatura Dallas (& oneWire); // Pasar la dirección de nuestra instancia oneWire a temperatura Dallas. DeviceAddress Probe01 = {0x28, 0x0F, 0x2A, 0x28, 0x00, 0x00, 0x80, 0x9F}; DeviceAddress Probe02 = {0x28, 0x10, 0xA4, 0x57, 0x04, 0x00, 0x00, 0xA9}; // bmp180 cosas Adafruit_BMP085 bmp; void setup () {// I2C stuff Wire.pins (0, 2); Wire.begin (0, 2); // Inicializar sensores // dht 11 cosas dht.begin (); // ds18b20 rellena los sensores. Sensores.setResolution (Probe02, 10); // bmp180 cosas if (! bmp.begin ()) {// Serial.println ("No BMP180 / BMP085"); // while (1) {}} // cosas OLED display.init (); display.flipScreenVertically (); display.setFont (ArialMT_Plain_10); retraso (1000); // Conectarse a la red WiFi WiFi.begin (ssid, contraseña); while (WiFi.status ()! = WL_CONNECTED) {retraso (500); }} bucle vacío () {// ds18b20stuff ------------------- sensores.requestTemperatures (); // Envía el comando para obtener las temperaturas temperature_buiten = sensores.getTempC (Probe01); // temperature_buiten2 = sensores.getTempC (Probe02); // // dht11 cosas ---------------- ---- humedad de flotación = dht.readHumidity (); temperatura de flotación = dht.readTemperature (); if (isnan (humedad) || isnan (temperatura)) {retorno; } // cosas bmp ------------------------- String t = String (bmp.readTemperature ()); Cadena p = Cadena (bmp.readPressure ()); // Material OLED -------------------------- display.clear (); display.drawString (0, 10, p); // presión bmp display.drawString (0, 24, String (temperature_buiten)); // ds18b20 display.drawString (0, 38, String (humedad)); // dht11 display.monitor(); // hacer conexiones TCP cliente WiFiClient; const int httpPort = 80; if (! client.connect (host, httpPort)) {return; } String url = "/ update? Key ="; url + = writeAPIKey; url + = "& campo1 ="; url + = String (temperatura); // posada (DHT1) url + = "& field2 ="; url + = String (humedad); // posada (DHT11) url + = "& field3 ="; url + = String (temperature_buiten); // temperatura de la cooperativa (DS18B20 nr 1) url + = "& field4 ="; url + = String (temperature_buiten2); // temperatura del suelo (DS18B29 nr 2) url + = "& field5 ="; url + = String (bmp.readTemperature ()); Temperatura exterior (BMP180) url + = "& field6 ="; url + = String (bmp.readPressure ()); // Presión de aire (BMP180) url + = "\ r / n"; // Enviar solicitud al servidor client.print (String ("GET") + url + "HTTP / 1.1 / r / n" + "Host:" + host + "\ r / n" + "Conexión: close / r / n / r / n "); retraso (1000); }

……..

Paso 3: más

Actualmente este programa solo monitorea, pero ¿qué es lo que le impide agregar un sensor de luz BH1750 I2C para medir si es de noche o de mañana o un RTC para saber la hora del día y abrir y cerrar la puerta del gallinero automáticamente con la ayuda de una tarjeta de expansión de E / S PCF8574 I2C, o como ya está en el jardín, agregue un convertidor PCF8591 o ADS1115 AD para medir la humedad del suelo y activar una bomba cuando sea necesario. O tal vez encender el calentador del depósito de agua cuando la temperatura desciende por debajo de cero si hay un chip I2 C para él, el ESP8266 probablemente pueda usarlo.

Sin embargo, una nota importante: el programa funciona bien, pero si agrega otros sensores a Rx o Tx, especialmente si los convierte en salidas, los pines pueden recordar de repente que no son realmente pines GPIO. Es mejor decirle a los pines desde el principio que ahora son pines GPIO, se hace poniendo las siguientes declaraciones en la configuración:

pinMode (1, FUNCIÓN_3);

pinMode (3, FUNCIÓN_3);

Recomendado: