Para la configuración inicial de los dispositivos requiere una aplicación en un dispositivo tablet o móvil para configurar la conexión a la red WiFi con los datos de SSID y Password.
El concepto presentado por espressif con documentación actualizada al 2018.06.08 se encuentra en:
https://www.espressif.com/en/products/software/esp-touch/overview
La implementación de la aplicación que se usó para probar el ejercicio se encuentra en Google Play. Revisar el desarro de la aplicación realizará como otro tema.
https://play.google.com/store/apps/details?id=com.cmmakerclub.iot.esptouch
El procedimiento de conexión tiene dos partes:
- Modo configuración de WiFi, usando la aplición SmartConfig
- Modo normal de conexión WiFi, con los datos WiFi ya configurados
Para seleccionar los modos se usa una botonera «Configuración» en un pin digital disponible con funcion y circuito semejante a RESET, en el ejemplo se usa GPIO14.
Modo configuración de WiFi
Para iniciar el modo configuración de la red se deben usar las botoneras «Configuración» y «RESET» con la secuencia:
1. pulsar Botonena GPIO14 y mantener pulsada
2. Luego pulsar y soltar reset
3. Mantener pulsado GPIO14 por 5 segundos después y soltar
4. Usar el móvil/tableta con la aplicación SmartConfig para configurar
5. Escribir SSID y password en móvil/tablet y «confirmar»
6. Esperar confirmación y estará conectado.
Modo normal de conexión WiFi
Es el modo predeterminado de operación, no requiere presionar el botón de «Configuración». Arranca con los valores almacenados de SSID y PASSWORD.
Monitor Serial
Los resultados del proceso de configuración y conexión a WiFi se muestran a continuación. Para fines de muestra, se ha demorado la activación con el móvil/tablet, note que la conexión a WiFI se realiza casi inmediatamente (tres puntos …)
....ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) ets Jun 8 2016 00:22:57 rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1100 load:0x40078000,len:10088 load:0x40080400,len:6380 entry 0x400806a4 configurando WiFi Esperando conexión SmartConfig móvil/tablet ........................................ Esperando conexión SmartConfig móvil/tablet ............... Finalizado SmartConfig. Conectando a WiFi ... WiFi conectado , Dirección IP: iotirni19 , 192.168.10.102 conectado a: iotirni19 , 192.168.10.102 , -56 conectado a: iotirni19 , 192.168.10.102 , -53 conectado a: iotirni19 , 192.168.10.102 , -54 conectado a: iotirni19 , 192.168.10.102 , -55 conectado a: iotirni19 , 192.168.10.102 , -55 conectado a: iotirni19 , 192.168.10.102 , -55
Instrucciones Arduino
Las instrucciones se han dividido por bloques: configura_wifi() y conecta_wifi(). En ambas funciones se presentan mensajes y parpadeos de led.
Configura_wifi() espera a que se obtenga un valor afirmativo para WiFi.smartConfigDone() y finalizar.
Conecta_wifi() es muy semejante a la función inicia_wifi() usada en los primeros ejemplos que usaba variables para SSID y Password()
/* ESP32 Smart Config de Espressif modificado a partir de: https://www.espressif.com/en/products/software/esp-touch/overview Usa el GPIO14 en estado LOW para entrar en modo configuración. Usar BOTONERA "CONFIGURACION" en pin14, con pullup (HIGH) Para configurar: 1. pulsar Botonena GPIO14 y mantener pulsada 2. Luego pulsar y soltar reset 3. Mantener pulsado GPIO14 por 5 segundos después y soltar 4. Usar el móvil/tableta con la aplicación SmartConfig para configurar 5. Escribir SSID y password en móvil/tablet y "confirmar" 6. Esperar confirmación y estará conectado. */ #include <WiFi.h> // PIN configuración const PROGMEM uint8_t CONFIG_pin = 14; // LED monitor interno //ESP01-pin=1, ESP07-pin=2; ESP32-pin=5 const PROGMEM uint8_t LED_pin = 5; void setup() { Serial.begin(115200); // PIN configuración pinMode(CONFIG_pin, INPUT); // LED monitor pinMode(LED_pin, OUTPUT); // Revisa si entra a modo configuración if (digitalRead(CONFIG_pin)==LOW){ Serial.println("configurando WiFi"); // configura con SmartConfig configura_wifi(); } // Modo conexión a Router conecta_wifi(); } void loop() { // Ejemplo de tarea a realizar. Serial.println("conectado a:"); Serial.print(WiFi.SSID()); Serial.print(" , "); Serial.print(WiFi.localIP()); Serial.print(" , "); Serial.println(WiFi.RSSI()); // LED interno enciende en LOW digitalWrite(LED_pin, HIGH); delay(100); digitalWrite(LED_pin, LOW); delay(100); digitalWrite(LED_pin, HIGH); delay(100); digitalWrite(LED_pin, LOW); delay(250); // termina ejemplo delay(1000); } void configura_wifi(){ // inicia en modo estación WiFi.mode(WIFI_AP_STA); WiFi.beginSmartConfig(); int cuenta = 0; // Espera por un paquete Smartconfig del móvil/tablet Serial.println("Esperando conexión SmartConfig móvil/tablet"); while (!WiFi.smartConfigDone()) { delay(500); Serial.print("."); cuenta = cuenta+1; if (cuenta>=40){ Serial.println("\n Esperando conexión SmartConfig móvil/tablet"); cuenta = 0;} // LED interno enciende en LOW digitalWrite(LED_pin, HIGH); delay(50); digitalWrite(LED_pin, LOW); delay(50); } Serial.println("\n Finalizado SmartConfig."); } void conecta_wifi() { // conexion WiFi Serial.println("\n Conectando a WiFi"); WiFi.begin();//ssid, password); int cuenta = 0; while (WiFi.status() != WL_CONNECTED){ Serial.print("."); cuenta = cuenta+1; if (cuenta>=40){ Serial.println(); cuenta = 0;} // LED interno enciende en LOW digitalWrite(LED_pin, LOW); delay(250); digitalWrite(LED_pin, HIGH); delay(250); } Serial.print("\n WiFi conectado , Dirección IP: "); Serial.print(WiFi.SSID()); Serial.print(" , "); Serial.println(WiFi.localIP()); delay(10); }
Por desarrollar:
Personalizar la aplicación del móvil/tableta a partir del código básico de espressif.
Referencias:
https://www.espressif.com/en/products/software/esp-touch/overview
https://www.espressif.com/sites/default/files/documentation/esp-touch_user_guide_en.pdf