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