Material necesario
- Sensor de humedad y temperatura DHT22.
- Microcontrolador ESP32 con alimentación por cable Ethernet (PoE).
- Cable USB-B Micro USB (No confundir con un cable Mini USB).
- Ordenador con puerto USB y sistema operativo Linux.
Avisos de seguridad
- Muchas plaquitas de ESP32 no tienen aislamiento alguno entre la toma micro USB y el enchufe para Ethernet, aunque este último funcione a mayor voltaje que nuestro ordenador. No se deben conectar nunca al mismo tiempo el micro USB y el cable Ethernet al ESP32, ya que podemos dañar seriamente nuestro ordenador.
- Vamos a trabajar con componentes electrónicos con partes conductoras sin aislamiento alguno, debemos desconectar el USB del puerto del ordenador antes de tocar nada cercano al ESP32 o nos llevaremos un calambrazo.
Preparación del entorno de desarrollo y el sistema operativo
Empecemos poniendo a punto nuestro ordenador. Si no lo tenemos ya, debemos descargar el programa Arduino IDE, que nos servirá como entorno de desarrollo para el código que inyectemos en nuestros microcontroladores.
Cuando ya tengamos instalado el IDE, instalamos el Board Manager para el ESP32 así:
-
Vamos a File > Preferences
-
En el campo Additional Board Manager URLs pegamos:
https://dl.espressif.com/dl/package_esp32_index.json
-
Aceptamos en OK
-
Vamos a Tools > Board > Boards Manager
-
Y buscamos esp32 en el cuadrito de búsqueda. Instalamos el pack creado por Espressif Systems.
Entonces debemos permitir el acceso del IDE a los puertos USB usando la consola:
sudo usermod -a -G dialout <nombre_de_usuario>
Acabamos la puesta a punto del IDE descargando las librerías necesarias para nuestro código:
- Vamos a Tools > Manage Libraries
- Y buscamos las siguientes librerías en el cuadrito de búsqueda:
- Ethernet
- PubSubClient (Permite usar el protocolo MQTT para transmitir datos)
- AM2303-Sensor (Permite usar el sensor DHT22)
Conectando el ESP32 al sensor DHT22
Usando los cables que vienen con el DHT22 y el conector dorsal de la placa del ESP32:
-
Conectamos el cable que viene del pie marcado con un + al pin del ESP32 que corresponde a 3.3V
-
Conectamos el cable del pie de en medio del DHT22 al pin número 4 (DGIO4)
-
Conectamos el cable que viene del pie marcado con un - al pin del ESP32 que corresponde a GND
Usando este diagrama como guía:
La instalación deberá quedar parecida a esta:
Inyección del código
Conectamos el cable Micro-USB a un puerto del ordenador y luego, con cuidado, al pequeño puerto lateral micro USB del ESP32. Un par de LEDs se encenderán en la plaquita si la conexión se da con éxito. No se debe conectar nunca el cable Ethernet mientras tengamos conectado el ESP32 al ordenador.
Abrimos el IDE y vamos a:
Tools > Board > ESP32 Dev Module
Tools > Port > seleccionar un puerto como ahora el ttyUSB0
Copiamos el código que sigue en la pantalla del IDE:
#include <ETH.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <WiFi.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char* mqtt_server = "84.78.232.19";
const int mqtt_port = 1883;
const char* mqtt_topic = "dryer/dht22";
WiFiClient ethClient;
PubSubClient client(ethClient);
void WiFiEvent(WiFiEvent_t event) {
switch (event) {
case ARDUINO_EVENT_ETH_START:
ETH.setHostname("esp32-poe");
break;
default:
break;
}
}
void reconnect() {
while (!client.connected()) {
client.connect("ESP32_POE_Client");
delay(5000);
}
}
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.onEvent(WiFiEvent);
ETH.begin();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (ETH.linkUp()) {
if (!client.connected()) {
reconnect();
}
client.loop();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
return;
}
String payload = "{\"temperature\": ";
payload += t;
payload += ", \"humidity\": ";
payload += h;
payload += "}";
client.publish(mqtt_topic, payload.c_str());
}
delay(10000);
}
Arriba a la izquierda, hay un botón en forma de flecha a la derecha (Upload), pincha en él. Si hemos instalado todo correctamente, el proceso de compilación debería llegar a su fin sin dar error. Si encuentras algún texto en rojo, asegúrate de haber instalado correctamente las librerías y de haber dado acceso al puerto USB.
Al final de la compilación, el IDE te pedirá resetear el ESP32, hazlo apretando con el culo de un bolígrafo de plástico (u otro material aislante) el botón RTS/RST1 en la placa ESP32 mietras está se encuentra conectada. Generalmente se encuentra a uno de los dos lados del chip grande gris.
Esto reiniciará el hardware sin borrar nuestro programa y lo pondrá listo para enviar datos a la red de Internet.