Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conecta tu ESP8266 a cualquier red WiFi disponible
Conecta tu ESP8266 a cualquier red WiFi disponible

Establecer un Punto de Acceso que conecte su módulo ESP8266 a cualquier red creando un firmware universal que se pueda utilizar en cualquier lugar.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

El ESP8266 es un microcontrolador desarrollado por Espressif Systems. Conocido como un Módulo WiFi, este microcontrolador tiene la capacidad de realizar actividades relacionadas con WiFi, como aplicaciones de Internet de las cosas y automatización del hogar. Varían en precio y características, hay muchos tipos de módulos ESP8266 disponibles, pero todos son increíblemente útiles para el mundo del IoT.

Independientemente de la aplicación de IoT que hayas desarrollado, al usar el ESP8266, debes establecer las credenciales de WiFi en el firmware del ESP8266 para establecer las conexiones requeridas y poder enviar datos a la nube. Esta es una forma de conectarse, pero también puedes construir tu propio punto de acceso en la placa creando un firmware universal que establecerá una conexión en cualquier red disponible simplemente presionando un botón.

Requisitos

Paso 1. Configuración de Hardware

Nota: El equipo de Ubidots realizó algunas modificaciones en la Biblioteca ConfigManager para implementar una rutina que inicia el modo AP simplemente presionando un botón de reset externo.

Dependiendo del módulo ESP8266 que elijas, es posible que debas asignar el pin de reinicio utilizando esta versión de la biblioteca. La configuración predeterminada del botón está asignada a PIN 5; si estás utilizando un NodeMCU, debes conectar el botón al pin D1.

Paso 2. Configura el Arduino IDE con tu dispositivo

Para comenzar con cualquier dispositivo ESP8266, debes instalar las placas en el Arduino IDE, sigue los pasos a continuación para poder compilar la placa.

Por favor, descarga el Arduino IDE si aún no lo tienes.

1.- Abre el Arduino IDE, selecciona Archivos -> Preferencias e ingresa http://arduino.esp8266.com/stable/package_esp8266com_index.json en el campo URLs adicionales del gestor de placas. Puedes agregar múltiples URLs, separándolas con comas.

NOTA: Si eres un usuario de Mac, ten en cuenta que Arduino y Archivo contienen diferentes funciones desplegables en comparación con los usuarios de Windows. Además, necesitarás instalar el siguiente controlador para poder cargar tu NodeMCU.

2.- Abre Gestor de Placas desde Herramientas -> Placa -> Gestor de Placas e instala la plataforma esp8266. Para encontrar el dispositivo correcto, busca ESP8266 en la barra de búsqueda.

3.- Selecciona el módulo ESP8266 que estás utilizando. En este caso, decidimos usar el NodeMCU 1.0 (Módulo ESP-12). Para seleccionar la placa, ve a:

  • Herramientas > Placa > Selecciona la placa.

Además, necesitamos poder comunicarnos con el NodeMCU, también necesitamos seleccionar el puerto COM.

  • Ve a Herramientas > Puerto > Selecciona el PUERTO apropiado para tu dispositivo.

Además, para mantener todo funcionando rápido y sin problemas, asegurémonos de que la velocidad de carga esté optimizada a 115200.

  • Ve a Herramientas > Velocidad de carga > 115200:

4.- Ve al siguiente repositorio para descargar la biblioteca ConfigManager. Para descargar la biblioteca, haz clic en el botón verde llamado "Clonar o descargar" y selecciona "Descargar ZIP".

5.- Ahora, de vuelta en el Arduino IDE, haz clic en Sketch -> Incluir biblioteca -> Agregar biblioteca .ZIP

6.- Selecciona el archivo .ZIP de ConfigManager y luego “Aceptar” o “Elegir

Si es exitoso, recibirás el mensaje a continuación en el Arduino IDE:

7.- A continuación, ve a Sketch/Programa -> Incluir biblioteca -> Gestor de bibliotecas e instala la biblioteca PubSubClient. Para encontrar la biblioteca correcta, busca PubSubClient en la barra de búsqueda.

8.- Ahora, reinicia el Arduino IDE antes de cargar.

9.- Una vez que tengas la plataforma ESP8266 y las bibliotecas requeridas instaladas, debes instalar el cargador de sistema de archivos de Arduino ESP8266. Por favor, sigue todos los pasos de instalación del repositorio y regresa a esta guía.

10.- Una vez que tu cargador esté instalado, crea un nuevo sketch para trabajar y guárdalo. El nuestro se llama AP_ESP8266:

11. A continuación, ve al directorio del sketch y crea un nuevo directorio llamado data.

12.- Una vez que se crea el directorio, descarga este archivo HTML y adjúntalo al directorio. Este archivo se utilizará en el sistema de archivos.


13. A continuación, necesitamos cargar el archivo en el sistema de archivos flash del ESP8266. Para comenzar, asegúrate de haber seleccionado un puerto de placa y de haber cerrado el Monitor Serial.

14.- Selecciona el elemento de menú Herramientas > Carga de datos del sketch ESP8266 para comenzar a cargar los archivos en el sistema de archivos flash del ESP8266.

Cuando termines, la barra de estado del IDE mostrará el mensaje Imagen SPIFFS cargada .

15.- Ahora en el Arduino IDE, pega el código a continuación. Una vez pegado, asigna el dispositivo y la etiqueta de variable que desees, además de tu TOKEN único e individual de Ubidots. Si no tienes tu TOKEN de Ubidots, consulta el siguiente artículo.

Copia y pega el código a continuación en el Arduino IDE incluyendo tus parámetros específicos de dispositivo y variable.

/***************************************** * Incluir bibliotecas ****************************************/#include <ESP8266WiFi.h>#include <ConfigManager.h>#include <PubSubClient.h>/**************************************** * Definir constantes ****************************************/namespace{  const char * AP_NAME = "Ubidots Access Point"; // Asigna el nombre de tu punto de acceso  const char * MQTT_SERVER = "industrial.api.ubidots.com";   const char * TOKEN = "....."; // Asigna tu TOKEN de Ubidots  const char * DEVICE_LABEL = "my-device"; // Asigna la etiqueta de tu dispositivo  const char * VARIABLE_LABEL = "my-variable"; // Asigna la etiqueta de tu variable  int SENSOR = A0;}char topic[150];char payload[50];String clientMac = "";unsigned char mac[6];struct Config {  char name[20];  bool enabled;  int8 hour;} config;/**************************************** * Inicializar una instancia global ****************************************/WiFiClient espClient;PubSubClient client(espClient);ConfigManager configManager;/**************************************** * Funciones auxiliares ****************************************/void callback(char* topic, byte* payload, unsigned int length){  }void reconnect() {  while (!client.connected()) {    Serial.print("Intentando conexión MQTT...");    // Intentar conectar    if (client.connect(clientMac.c_str(), TOKEN, NULL)) {      Serial.println("conectado");      break;      } else {        configManager.reset();        Serial.print("fallido, rc=");        Serial.print(client.state());        Serial.println(" intenta de nuevo en 3 segundos");        for(uint8_t Blink=0; Blink<=3; Blink++){          digitalWrite(LED, LOW);          delay(500);          digitalWrite(LED, HIGH);          delay(500);        }      }  }}String macToStr(const uint8_t* mac) {  String result;  for (int i = 0; i < 6; ++i) {    result += String(mac[i], 16);    if (i < 5)result += ':';  }  return result;}/**************************************** * Funciones principales ****************************************/void setup() {  Serial.begin(115200);  /* Declarar PINs como entrada/salida */  pinMode(SENSOR, INPUT);  pinMode(PIN_RESET, INPUT);  pinMode(LED, OUTPUT);  /* Asignar dirección MAC de WiFi como nombre de cliente MQTT */  WiFi.macAddress(mac);  clientMac += macToStr(mac);  /* Configuración del punto de acceso */  configManager.setAPName(AP_NAME);  configManager.addParameter("name", config.name, 20);  configManager.addParameter("enabled", &config.enabled);  configManager.addParameter("hour", &config.hour);  configManager.begin(config);  /* Establecer los detalles del servidor */  client.setServer(MQTT_SERVER, 1883);  client.setCallback(callback);    /* Construir la solicitud de tema */  sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL);}void loop() {    configManager.reset();  configManager.loop();        /* Reconexión del cliente MQTT */  if (!client.connected()) {      reconnect();  }    /* Lectura del sensor */  int value = analogRead(SENSOR);  /* Construir la solicitud de carga útil */  sprintf(payload, "{\"%s\": %d}", VARIABLE_LABEL, value);  /* Publicar el valor del sensor en Ubidots */   client.publish(topic, payload);  client.loop();  delay(5000);}


16.- Después de que el código contenga tus parámetros, Verifica el código dentro del Arduino IDE. Para hacer esto, en la esquina superior izquierda de nuestro Arduino IDE verás los íconos a continuación.

  • Haz clic en el ícono de "marca de verificación" para verificar cualquier código.

Una vez verificado, recibirás el mensaje a continuación en el Arduino IDE:

A continuación, carga tu código en tu NodeMCU.

  • Elige el ícono de "flecha a la derecha" al lado del ícono de marca de verificación para cargar el código

Una vez que el código esté cargado, recibirás el mensaje a continuación en el Arduino IDE:


¡Ahora tu módulo ESP8266 está listo para establecer la conexión con cualquier red disponible simplemente presionando el botón!

17.- Confirma: Abre el Monitor Serial para verificar el estado de la conexión; presiona el botón conectado a tu módulo ESP y mantén presionado durante 5 segundos hasta que veas el mensaje "Iniciando Punto de Acceso" en tu monitor serial:

18.- Ahora que se ha creado el Punto de Acceso, puedes establecer la conexión desde tu teléfono. Abre el acceso Wi-Fi y selecciona la red disponible llamada "Punto de Acceso Ubidots"

Una vez que se establezca la conexión, te redirigirá a la página a continuación. Establece tus parámetros de Wi-Fi en los campos y presiona "guardar"

19.- Para verificar si la conexión se establece correctamente, ve al Monitor Serial:

Ahora, regresa a tus cuentas de Ubidots para visualizar el dispositivo creado y los datos recibidos:

Resultado: Un Punto de Acceso que conecta tu dispositivo a cualquier red disponible sin establecer las credenciales en el firmware; haciendo así un firmware universal que puede ser utilizado en cualquier lugar.

¿Ha quedado contestada tu pregunta?