En esta lección se presentan programas para el NODE MCU ESP32 y como interactuar con el sistema de IoT.
1 | /* Este programa es un derivado de |
2 | ESP8266 Blink by Simon Peter */ |
3 | |
4 | /** Función que se invoca una sola |
5 | vez al inicio del programa. */ |
6 | void setup() { |
7 | /* Todas las placas compatibles |
8 | con Arduino incluyen un led |
9 | de prueba ligado a un pin |
10 | cuyo número está definido por |
11 | la constante LED_BUILTIN. |
12 | Inicializa el pin para |
13 | LED_BUILTIN como salida. */ |
14 | pinMode(LED_BUILTIN, OUTPUT); |
15 | } |
16 | |
17 | /* Función que se invoca |
18 | repetidamente mientras el |
19 | programa esté activo. */ |
20 | void loop() { |
21 | /* Enciende el LED_BUILTIN (HIGH |
22 | es el nivel de voltaje). */ |
23 | digitalWrite(LED_BUILTIN, HIGH); |
24 | delay(1000); // Espera 1 segundo |
25 | /* Apaga el LED_BUILTIN haciendo |
26 | que el nivel de voltaje sea |
27 | LOW. */ |
28 | digitalWrite(LED_BUILTIN, LOW); |
29 | delay(1000); |
30 | } |
31 |
1 | /* Este es un derivado de Button |
2 | por DojoDave y Tom Igoe */ |
3 | |
4 | /* Pin para el botón. */ |
5 | const int BOTON = 0; |
6 | |
7 | int estadoDelBoton = 0; |
8 | |
9 | void setup() { |
10 | /* Inicializa el pin para |
11 | LED_BUILTIN como salida. */ |
12 | pinMode(LED_BUILTIN, OUTPUT); |
13 | /* Initializa el pin para |
14 | BOTON como entrada. */ |
15 | pinMode(BOTON, INPUT); |
16 | } |
17 | |
18 | void loop() { |
19 | estadoDelBoton = |
20 | digitalRead(BOTON); |
21 | /* Checa si el botón está |
22 | presionado. Esto es, si |
23 | estadoDelBotón es LOW. */ |
24 | if (estadoDelBoton == LOW) { |
25 | // Enciende el LED_BUILTIN. |
26 | digitalWrite(LED_BUILTIN, HIGH); |
27 | } else { |
28 | // Apaga el LED_BUILTIN. |
29 | digitalWrite(LED_BUILTIN, LOW); |
30 | } |
31 | } |
32 |
En el siguiente código, sustituye la configuración por los datos de tu red WiFi.
La URL y el puerto deben coincidir con tu dervidor de MQTT. Si usas test.mosquitto.org, conserva los valores mostrados más adelante.
Para monitorear su funcionamiento, debes hacer clic en el botón de
arriba a la derecha en la ventana de Arduino, que tiene una lupa y
tiene el mensaje flotante que dice Monitor Serie.
Debes ajustar los baudios a la misma velocidad que en el código,
donde dice
Serial.begin(115200);
que en este caso es 115200 baudios. Si no se ven los mensajes,
baja la velocidad tanto en el código, como en el monitor.
Ve como configurar y ejecutar este ejemplo. No hagas caso a la parte de los certificados,
1 | #include "EspMQTTClient.h" |
2 | |
3 | const char *const SSID = |
4 | "Galaxy A723C85"; |
5 | const char *const PASS = |
6 | "bdoi1764"; |
7 | const char *const URL = |
8 | "test.mosquitto.org"; |
9 | const uint16_t PUERTO = |
10 | 1883; |
11 | const char *const CLIENT_ID = |
12 | "gilpgdmIoT-esp32-1"; |
13 | const char *const TOPICO_FOCO = |
14 | "gilpgdm/IoT/foco"; |
15 | |
16 | EspMQTTClient cliente( |
17 | SSID, |
18 | PASS, |
19 | URL, |
20 | 0, // Usuario opcional |
21 | 0, // Contraseña opcional |
22 | CLIENT_ID, |
23 | PUERTO); |
24 | const int BOTON = 0; |
25 | bool presionado = false; |
26 | String valor = "0"; |
27 | |
28 | void recibeMensaje( |
29 | const String &payload) |
30 | { |
31 | valor = payload; |
32 | digitalWrite(LED_BUILTIN, |
33 | valor == "1" |
34 | ? HIGH |
35 | : LOW); |
36 | } |
37 | |
38 | void enviaMensajeMqtt( |
39 | String valorAEnviar, |
40 | String topico) |
41 | { |
42 | cliente.publish(topico, |
43 | valorAEnviar); |
44 | } |
45 | |
46 | void onConnectionEstablished() |
47 | { |
48 | cliente.subscribe( |
49 | TOPICO_FOCO, recibeMensaje); |
50 | enviaMensajeMqtt( |
51 | valor, TOPICO_FOCO); |
52 | } |
53 | |
54 | void setup() |
55 | { |
56 | Serial.begin(115200); |
57 | pinMode(BOTON, INPUT); |
58 | pinMode(LED_BUILTIN, OUTPUT); |
59 | // Funcionalidades opcionaes |
60 | // Mensajes para depurar conexión |
61 | cliente.enableDebuggingMessages(); |
62 | cliente.enableHTTPWebUpdater(); |
63 | // Actualizaciones |
64 | // OTA (Over The Air) |
65 | cliente.enableOTA(); |
66 | // Mensaje de última voluntad. |
67 | cliente.enableLastWillMessage( |
68 | "gilpgdm/IoT/lastwill", |
69 | "Adios"); |
70 | } |
71 | |
72 | void loop() |
73 | { |
74 | cliente.loop(); |
75 | if (cliente.isConnected()) |
76 | { |
77 | bool actual = |
78 | digitalRead(BOTON); |
79 | if (!presionado && |
80 | actual == LOW) |
81 | { |
82 | enviaMensajeMqtt( |
83 | valor == "1" ? "0" : "1", |
84 | TOPICO_FOCO); |
85 | } |
86 | presionado = (actual == LOW); |
87 | } |
88 | } |
89 |
En esta lección se presentaron los siguientes archivos:
Blinkt.ino
Button.ino
Dispositivo.ino