====== Instalación ====== Para la instalación y configuración, tenemos que estar conectados a internet. Descargamos arduino ide: https://www.arduino.cc/en/software En mi caso Linux 64 bits. Descargo el fichero arduino-1.8.19-linux64.tar.xz \\ Lo descomprimimos: tar -xf arduino-1.8.19-linux64.tar.xz Lo ejecutamos: cd arduino-1.8.19/ ./arduino ====== Configuración ESP32 ====== Tenemos que descargas los plugins de ESP32. Web oficial: https://docs.espressif.com/projects/arduino-esp32 Vamos a **Getting started** {{:tecnologia:iot:esp32_16.png|}} y luego **First Steps > How to install > Installing using Arduino IDE** y copiamos la URL de **Stable release link** {{:tecnologia:iot:esp32_11.png|}} La url es: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json Ahora vamos a Arduino IDE, y en File > Preferences: {{:tecnologia:iot:esp32_13.png|}} Copiamos la URL de antes en **Additional Boards Manager URLs** y pulsamos OK: {{:tecnologia:iot:esp32_14.png|}} Tenemos que añadir el tipo de placa ESP32. Vamos a Tools > Board > Boards Manager {{:tecnologia:iot:esp32_06.png|}} Buscamos **esp32** y pulsamos install: {{:tecnologia:iot:esp32_07.png|}} En mi caso es una de AZ-Delivery {{:tecnologia:iot:esp32_09.png|}} Seleccionamos la placa en **Tools > Board > ESP32 Arduino > ESP32 DEV Module ** (puede que dependiendo veriones etc... los nombres puedan cambiar) {{:tecnologia:iot:esp32_15.png|}} Conectamos la placa con el cable USB y seleccionamos el puerto: {{:tecnologia:iot:esp32_17.png|}} Copiamos este código que lo único que hace es escribir "Hola EKO" internamente en el "Serial Monitor": void setup() { Serial.begin(115200); } void loop() { Serial.println("Hola EKO"); delay(2000); } Y pulsamos el botón upload para subir el código, puede que nos pida grabar el fichero, porque siempre que hacemos upload, lo graba. {{:tecnologia:iot:esp32_02.png|}} Esto compila el código y lo sube a la placa por el cable USB. En la parte de abajo apareceran unas letras naranjas con un % e indica que lo ha compilado y subido todo: {{:tecnologia:iot:esp32_03.png|}} Para ver la salida, pulsamos el botón "Serial Monitor" {{:tecnologia:iot:esp32_04.png|}} Nos abre una pantalla de comunicación entre nuestro ordenador y la placa ESP32. Puede que salgan escriba **⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮** tenemos que seleccionar la velocidad de conexión a **115200 baud** {{:tecnologia:iot:esp32_21.png|}} Ahora nos irá escribiendo el texto que hemos puesto "Hola EKO" (podemos marcar la casilla **Show timestamp** si queremos ver la fecha) {{:tecnologia:iot:esp32_20.png|}} Arduino ejecuta constantemente lo que pongamos en "void loop". En este caso escribe "Hola EKO" y luego hace una pausa de 2000 milisegundos (2 segundos) y vuelve a empezar. ====== Conexión WIFI ====== Conexión con contraseña. Si es una red abierta ponemos NULL (lo indico mas abajo): #include const char* ssid = "mi_red_wifi"; const char* password = "mi_contraseña_wifi"; void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); WiFi.begin(ssid, password); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); } void loop() { } Si la red es abierta ponemos estas líneas. NULL va sin comillas: const char* ssid = "mi_red_wifi_abierta"; const char* password = NULL; Esto nos escribe que se conecta y que IP tiene: 10:12:01.294 -> Conectando a mi_red_wifi_abierta..... 10:12:03.816 -> 10:12:03.816 -> Conectado correctamente 10:12:03.816 -> IP: 192.168.1.97 Una vez conectado ejecuta la void loop, que en este caso no hay nada. ====== Conexión con IP fija ====== Para poder administrar mejor los dispositivos, les pondremos ip fija. \\ En mi caso la red es la clásica 192.168.1.1/24 pero puede cambiar (**OJO QUE LAS IP VAN CON COMAS Y NO CON PUNTOS**) #include const char* ssid = "mi_red_wifi"; const char* password = "mi_contraseña_wifi"; IPAddress ip(192,168,1,69); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); IPAddress dns(8,8,8,8); void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet, dns); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); } void loop() { } Vemos que ahora tiene la ip que le hemos puesto: 10:23:30.083 -> Conectando a mi_red_wifi. 10:23:30.581 -> 10:23:30.581 -> Conectado correctamente 10:23:30.614 -> IP: 192.168.1.69 ====== OTA ====== Para poder administrarlo remotamente sin necesidad de cable, instalamos OTA. Para instalar las bibliotecas (que no librerías) se puede hacer con el manager como las placas (board) pero es mas fácil bajando el código en el directorio que toca. Nombre: ESPAsyncWebServer \\ Repositorio: https://github.com/me-no-dev/ESPAsyncWebServer https://github.com/ayushsharma82/AsyncElegantOTA Vamos al directorio donde tenemos Arduino IDE y lo descargamos. cd arduino-1.8.19/libraries arduino-1.8.19/libraries$ git clone https://github.com/me-no-dev/ESPAsyncWebServer Cloning into 'ESPAsyncWebServer'... remote: Enumerating objects: 1515, done. remote: Counting objects: 100% (13/13), done. remote: Compressing objects: 100% (11/11), done. remote: Total 1515 (delta 2), reused 7 (delta 1), pack-reused 1502 Receiving objects: 100% (1515/1515), 867.67 KiB | 604.00 KiB/s, done. Resolving deltas: 100% (981/981), done. git clone https://github.com/me-no-dev/AsyncTCP/ git clone https://github.com/ayushsharma82/AsyncElegantOTA Copiamos el siguiente código: #include #include #include const char* ssid = "mi_red_wifi"; const char* password = "mi_contraseña_wifi"; IPAddress ip(192,168,1,69); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); IPAddress dns(8,8,8,8); AsyncWebServer server(80); void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet, dns); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "V1.0 Primer OTA"); }); AsyncElegantOTA.begin(&server); // Start AsyncElegantOTA server.begin(); Serial.println("HTTP server started"); delay(1000); } void loop() { } Si accedemos desde un navegador a la ip que hemos puesto (192.168.1.69) veremos el texto que hemos definido en el código: {{:tecnologia:iot:esp32_22.png|}} Ahora ya podemos desconectar la placa ESP32 del ordenador y conectar a una powerbank o un cargador, porque podemos acceder por la IP. Si queremos subir código remotamente accedemos a la IP seguido de /update, en este caso: http://192.168.1.69/update {{:tecnologia:iot:esp32_23.png|}} Primero tenemos que compilar el código, por ejemplo cambiamos el texto de la línea 37 y ponemos V2.0: server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "V2.0 Prueba de subir codigo remotamente"); }); Compilamos el código en un fichero, vamos a sketch > Export compiled binary {{:tecnologia:iot:esp32_24.png|}} Esto nos crea un fichero .ino en el mismo directorio que estemos grabando nuestro código. Ahora vamos a la web del update del dispositivo y subimos el fichero pulsando en browse: Seleccionamos el fichero .ino y empieza a subirlo: {{:tecnologia:iot:esp32_26.png|}} Cuando acaba indica **OTA Success ** Ahora si vamos a la URL del dispositivo veremos que el texto ha cambiado: http://192.168.1.69/ V2.0 Prueba de subir codigo remotamente