En este tutorial veremos como hacer una estación meteorológica con esp32 y pantalla de tinta electrónica. Analizaremos el código fuente, así como también veremos las conexiones de los componentes electrónicos, finalmente probaremos el proyecto con su funcionamiento. Se incluye el circuito impreso totalmente gratis.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Circuito
Caracteristicas del módulo ESP32-T
Conectividad
El módulo ESP32 dispone de todas las variantes del WiFi:
- 802.11 b/g/n/e/i/n
- Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management
Esta versión nueva incluye la conectividad mediante Bluethoot de bajo consumo
- Bluetooth v4.2 BR/EDR and BLE
- BLE Beacon
Además, puede comunicarse mediante los protocoles SPI, I2C, UART, MAC Ethernet, Host SD
Prestaciones del microcontrolador
La CPU está formado por un SoC modelo Tensilica LX6 con las siguientes características y memoria
- Doble núcleo de 32 bits con velocidad de 160MHz
- Memoria ROM de 448 kBytes
- Memoria SRAM de 520kBytes
Dispne de 48 Pines
- 18 ADC de 12 bits
- 2 DAC de 8 bits
- 10 pines sensores de contacto
- 16 PWM
- 20 Entradas/salidas digitales
Alimentación y modos de consumo
Para un correcto funcionamiento del ESP32 es necesario subministrar un voltaje de entre 2,8V y 3,6V. La energía que consume depende del modo de funcionamiento. Contiene un modo, el Ultra Low Power Solution (ULP), en que se continúan realizando tareas básicas (ADC, RTC…) en el modo Sleep.
Sensor de temperatura y humedad DHT11
Este módulo consta de un sensor digital de humedad y temperatura DHT11 y una resistencia de 1 kΩ. El DHT11 utiliza un termistor interno y un sensor de humedad capacitivo para determinar las condiciones ambientales, un chip interno es responsable de convertir las lecturas a una señal digital en serie.
Tensión de funcionamiento | 3.3V a 5.5V |
Rango de medición de humedad | 20% a 90% HR |
Precisión de medición de humedad | ± 5% HR |
Resolución de medición de humedad | 1% HR |
Rango de medición de temperatura | 0ºC a 50ºC [32ºF a 122ºF] |
Precisión de medición de temperatura | ± 2ºC |
Resolución de medición de temperatura | 1ºC |
Rango de transmisión de señal | 20m |
Pantalla de tinta electrónica 4.3 Inch E-Paper 800×600
Visión general
Este es un módulo de pantalla E-Ink de interfaz serial, 4.3 pulgadas, resolución 800 × 600, con bibliotecas de fuentes integradas, consumo de energía ultra bajo.
No tiene que saber nada sobre los complejos detalles subyacentes de e-Paper, ni los algoritmos específicos de visualización de gráficos, textos e imágenes. Todo lo que necesita es la interfaz serial, y todo lo que importa es su creatividad.
Caracteristicas
- Fácil de usar, muestra cualquier contenido a través de una interfaz serial, incluyendo gráficos geométricos, textos e imágenes
- Bibliotecas de fuentes incrustadas, admite fuentes chinas GBK de 32, 48 y 64 puntos y fuentes en inglés
- El NandFlash incorporado de 128MB, permite que los datos de fuente / imagen se almacenen en una tarjeta TF externa o en el NandFlash interno
- Visualización de 4 niveles de grises, resolución 800 × 600
- Velocidad en baudios de la interfaz serie ajustable, 115200 por defecto cuando se enciende
- Alimentado desde 3.3V a 5V, compatible con nivel lógico.
- Consumo de energía ultra bajo, corriente de reposo inferior a 5 mA
- Viene con software de computadora host, controlelo directamente en su computadora
Aplicaciones
- libro electrónico
- Centro comercial POS
- Etiqueta de precio
- Instrumento de la industria
Definiciones de Pin
- VCC: 3.3V ~ 5.5V
- GND: GND
- DOUT: salida de datos en serie
- DIN: datos serie en
- WAKE_UP: despertador externo
- RST: reset externo
Más información de esta pantalla en http://rogerbit.com/wprb/2019/01/tutorial-pantalla-de-tinta-electronica-de-4-3-pulgadas-por-dfrobot/
Código Fuente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
// Canal de youtube http://www.youtube.com/user/carlosvolt?sub_confirmation=1 //Tik-Tok https://www.tiktok.com/@carlosvolt //https://www.instagram.com/carlosvolt_electronic_robotic #include <WiFi.h> #include <Wire.h> #include <NTPClient.h> #include "DHT.h" #include <epd.h>//Librería para el control del display // Descomenta le linea dependiendo del sensor que vallas a usar #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 //#define DHTTYPE DHT22 // DHT 22 #define DHTPin 23 //PIin del sensor DHT; DHT dht(DHTPin, DHTTYPE); float t; float h; char temp[32]; char hume[32]; String ip; String hora; const void * dir_ip; const void * horaUTC; int periodo = 10000; unsigned long Tiempo = 0; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP); const char* ssid = "Tu_red_Wifi"; const char* password = "Tu_Clave_Wifi"; WiFiServer server(80); void setup() { Serial.begin(115200); dht.begin();//Inicializar el sensor DHT Serial.print("Conectando a la red WiFi"); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Conectado con éxito a la red WiFi."); Serial.println("La dirección IP es: "); Serial.println(WiFi.localIP()); server.begin(); Serial.println("Servidor iniciado"); timeClient.begin();//Inicializa servidor NTP //Inicializamos el el display epd_init(); epd_wakeup(); epd_set_memory(MEM_NAND); delay(2000); } void loop() { timeClient.update();//Obtenemos la hora actulizada h = dht.readHumidity();//Lectura de la humedad t = dht.readTemperature();//Lectura de la temperatura //Adactamos los datos de temperatura y humedad, direción ip y hora UTC para mostrarlo en el display dtostrf(t, 8, 2, temp); dtostrf(h, 8, 2, hume); ip = String() + WiFi.localIP()[0] + "." + WiFi.localIP()[1] + "." + WiFi.localIP()[2] + "." + WiFi.localIP()[3]; hora = timeClient.getFormattedTime(); dir_ip = ip.c_str(); horaUTC = hora.c_str(); //////Se cumple esta condición cada 10 segundos if(millis() > Tiempo + periodo){ Tiempo = millis(); textoDisplay();//Llamamos a la función para mostrar datos en el display } WiFiClient client = server.available(); if (client)//Si se cumple la condición, mostramos dotos en el webserver { Serial.println("Cliente web conectado "); String request = client.readStringUntil('\r'); client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); client.println("</style></head><body><h1>Servidor Web con esp32 y display E-Paper</h1>"); client.println("<h2>Tipo de sensor DHT11</h2>"); client.println("<h2>www.rogerbit.com</h2>"); client.println("<table><tr><th>Valores Leidos</th><th>VALUE</th></tr>"); client.println("<tr><td>Temp. Celsius</td><td><span class=\"sensor\">"); client.println(t); client.println(" *C</span></td></tr>"); client.println("<tr><td>Humedad</td><td><span class=\"sensor\">"); client.println(h); client.println(" %</span></td></tr>"); client.println("<tr><td>Ultima actualizacion Hora UTC</td><td><span class=\"sensor\">"); client.println(hora); client.println("</span></td></tr>"); client.println("</body></html>"); client.stop(); client.println(); Serial.println("Client disconnected."); Serial.println(""); } } void textoDisplay(void) { ////Estación meteorológica epd_set_ch_font(GBK64); epd_set_en_font(ASCII64); epd_disp_string("ESTACION-METEOROLAGICA", 0, 10); ////Temperatura epd_set_ch_font(GBK64); epd_set_en_font(ASCII64); epd_disp_string("Temperatura: ", 0, 80); epd_disp_string(temp, 350, 80); epd_disp_string("Grados C", 510, 80); ////Humedad epd_set_ch_font(GBK64); epd_set_en_font(ASCII64); epd_disp_string("Humedad: ", 0, 150); epd_disp_string(hume, 350, 150); epd_disp_string("Porciento", 510, 150); ////Hora UTC epd_set_ch_font(GBK64); epd_set_en_font(ASCII64); epd_disp_string("Hora UTC:", 0, 240); epd_disp_string(horaUTC, 350, 240); ////Dirección IP epd_set_ch_font(GBK64); epd_set_en_font(ASCII64); epd_disp_string("Direccion IP: ", 0, 310); epd_disp_string(dir_ip, 350, 310); epd_udpate(); } |
SUSCRIBETE A NUESTROS BOLETINES, RECIBE EN TU CORREO LAS NOTICIAS MÁS DESTACADAS, SÓLO INGRESANDO TU CORREO ELECTRÓNICO
[wysija_form id=”1″]
VIDEO RECOMENDADO