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








