CursosEmpresasBlogLiveConfPrecios

Conexión WiFi con ESP32

Clase 26 de 30 • Curso de IoT: Programación de Microcontroladores ESP32

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    Introducción a los microcontroladores

    Introducción a los microcontroladores

    10:48 min
  • 2
    La importancia de la industria IoT

    La importancia de la industria IoT

    16:08 min
  • 3
    Tipos de computadoras

    Tipos de computadoras

    12:50 min
  • 4
    Cómo escoger un microcontrolador

    Cómo escoger un microcontrolador

    14:59 min

Hardware

  • 5
    Características del ESP32

    Características del ESP32

    16:15 min

ESP-IDF

  • 6
    Documentación oficial del ESP-IDF

    Documentación oficial del ESP-IDF

    08:43 min
  • 7
    Instalación del ESP-IDF en Windows

    Instalación del ESP-IDF en Windows

    11:06 min
  • 8

    Instalación de ESP-IDF en macOS Ventura con M1 y Python 3.10

    03:46 min
  • 9

    Instalación de ESP-IDF en Ubuntu 22.04 con Python 3.10

    03:42 min
  • 10
    Lista de materiales

    Lista de materiales

    11:50 min
  • 11
    Proyectos con ESP-IDF

    Proyectos con ESP-IDF

    17:12 min
  • 12
    Primer proyecto

    Primer proyecto

    12:28 min

API Core

  • 13
    Hola mundo con ESP-IDF

    Hola mundo con ESP-IDF

    12:27 min
  • 14
    Sistemas Operativos en Tiempo Real

    Sistemas Operativos en Tiempo Real

    08:28 min
  • 15
    FreeRTOS con ESP32

    FreeRTOS con ESP32

    14:48 min
  • 16
    Ciclo de vida de las tareas con FreeRTOS

    Ciclo de vida de las tareas con FreeRTOS

    08:56 min
  • 17
    Almacenamiento con ESP32

    Almacenamiento con ESP32

    20:42 min

Peripherals API

  • 18
    Salida Digital con ESP32

    Salida Digital con ESP32

    14:37 min
  • 19
    Entrada Digital con ESP32

    Entrada Digital con ESP32

    13:24 min
  • 20
    Entrada Analógica con ESP32

    Entrada Analógica con ESP32

    19:44 min
  • 21
    Modulación de Ancho de Pulsos

    Modulación de Ancho de Pulsos

    09:20 min
  • 22
    Control PWM con ESP32 y LEDC

    Control PWM con ESP32 y LEDC

    19:47 min

Servidor Web

  • 23
    Redes y protocolos de Internet

    Redes y protocolos de Internet

    18:16 min
  • 24
    Redes WiFi

    Redes WiFi

    07:07 min
  • 25
    Loop de eventos

    Loop de eventos

    05:02 min
  • 26
    Conexión WiFi con ESP32

    Conexión WiFi con ESP32

    Viendo ahora
  • 27
    Servidor HTTP básico con ESP32

    Servidor HTTP básico con ESP32

    16:36 min

Smart Light

  • 28
    Dimmer LED via HTTP con ESP32

    Dimmer LED via HTTP con ESP32

    28:00 min
  • 29
    Aplicación Web con ESP32

    Aplicación Web con ESP32

    20:02 min

Despedida

  • 30
    Tu primer proyecto de IoT con ESP32

    Tu primer proyecto de IoT con ESP32

    01:23 min
Tomar examen
    jose daniel corredor zambrano

    jose daniel corredor zambrano

    student•
    hace 3 años

    La linea que se debe de agregar en CMakeList.txt, es el que se encuentra a nivel raiz del proyecto.

    set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
      Edward John Rodriguez Soto

      Edward John Rodriguez Soto

      student•
      hace 3 años

      muchas gracias...

      Freddy Alejandro Leal Gonzalez

      Freddy Alejandro Leal Gonzalez

      student•
      hace 2 años

      Gracias

    Gabriel Obregón

    Gabriel Obregón

    student•
    hace 9 meses

    Conectando nuestra tarjeta de desarrollo a una red Wi-Fi

    Requisitos previos

    Antes de comenzar, asegúrate de contar con lo siguiente:

    • Un Access Point o dispositivo de red con conexión Wi-Fi.

    • El SSID (nombre de la red) y la contraseña para acceder a la red.

    • Una tarjeta de desarrollo compatible con ESP-IDF, que ya incluye todo lo necesario para conectarse a una red Wi-Fi sin necesidad de dispositivos adicionales.

    Preparación del entorno

    Trabajaremos en Visual Studio Code. En este punto, ya deberíamos tener un proyecto creado y haber realizado la primera compilación.

    Inclusión de librerías necesarias

    1. Conexión a la red Wi-Fi

    #include "esp_wifi.h"

    Esta librería nos permitirá gestionar la conexión a la red Wi-Fi en nuestra tarjeta de desarrollo.

    2. Almacenamiento de credenciales

    #include "nvs_flash.h"

    Esta función permite la reconexión automática sin necesidad de ingresar nuevamente las credenciales.

    3. Uso de la librería protocol_examples_common.h

    Para simplificar la conexión Wi-Fi, utilizaremos una librería de ejemplo proporcionada por ESP-IDF:

    #include "protocol_examples_common.h"

    Agregar la librería al proyecto

    3.1 Incluir la librería en CMakeLists.txt

    set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)

    3.2 Explicación del código

    • set(EXTRA_COMPONENT_DIRS ...) → Define un directorio de componentes adicionales.

    • $ENV{IDF_PATH} → Ubicación donde está instalado el ESP-IDF.

    • examples/common_components/protocol_examples_common → Contiene la librería protocol_examples_common.h.

    3.3 Verificación y exploración

    Si deseas entender cómo funciona esta librería:

    1. Ve al directorio especificado.

    2. Explora el código fuente.

    Importación en nuestro código C

    #include "protocol_examples_common.h"

    Explicación del código en app_main(void)

    Código de la función app_main(void)

    void app_main(void)

    {

      nvs_flash_init();

      esp_netif_init();

      esp_event_loop_create_default();

      example_connect();

      esp_netif_ip_info_t ip_info;

      esp_netif_t* netif = NULL;

      netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");

    }

    1. Inicialización del almacenamiento no volátil (NVS)

    nvs_flash_init();

    Permite guardar el SSID y la contraseña de la red Wi-Fi.

    2. Inicialización de la interfaz de red

    esp_netif_init();

    Permite que el dispositivo maneje conexiones de red.

    3. Creación del event loop

    esp_event_loop_create_default();

    Un event loop es un sistema que maneja eventos de conexión y desconexión.

    4. Establecimiento de la conexión Wi-Fi

    example_connect();

    Facilita la conexión sin necesidad de programar manualmente los eventos de Wi-Fi.

    5. Preparación para obtener la dirección IP

    5.1 Declaración de una variable para almacenar la IP

    esp_netif_ip_info_t ip_info;

    5.2 Creación de una variable para la interfaz de red

    esp_netif_t* netif = NULL;

    5.3 Obtener la interfaz de red Wi-Fi

    netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");

    Accede a la interfaz de red en modo estación.

    Verificación de la conexión Wi-Fi y obtención de la dirección IP

    1. Verificación de la conexión

    if (netif == NULL) {

        printf("No hay interfaz\n");

    } else {

        esp_netif_get_ip_info(netif, &ip_info);

        printf("IP: %d.%d.%d.%d\n", IP2STR(&ip_info.ip));

    }

    Si netif == NULL, significa que no se obtuvo una interfaz de red. Si la conexión es exitosa, se imprime la dirección IP.

    2. Conversión de la IP a formato de texto

    IP2STR

    Convierte la estructura de IP en una cadena legible.

    Código final completo

    #include <stdio.h>

    #include "esp_wifi.h"

    #include "nvs_flash.h"

    #include "protocol_examples_common.h"

    void app_main(void)

    {

      nvs_flash_init();

      esp_netif_init();

      esp_event_loop_create_default();

      example_connect();

      esp_netif_ip_info_t ip_info;

      esp_netif_t* netif = NULL;

      netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");

      if (netif == NULL) {

        printf("No hay interfaz\n");

      } else {

        esp_netif_get_ip_info(netif, &ip_info);

        printf("IP: %d.%d.%d.%d\n", IP2STR(&ip_info.ip));

      }

    }

    🛠️ Ejemplo listo para ejecución

    📡 Configuración de la red Wi-Fi

    Ejecutamos:

    idf.py menuconfig

    Editamos el SSID y la contraseña, luego guardamos con S + Enter y salimos con Q.

    🔨 Compilación del programa

    idf.py build

    🚀 Subida del programa a la tarjeta de desarrollo

    idf.py -p COM6 flash

    (Sustituye COM6 por el puerto correcto en tu sistema).

    🔍 Verificación de la conexión en la terminal

    idf.py -p COM6 monitor

    La dirección IP se imprimirá en la terminal.

    🎉 ¡Felicidades!

    Has logrado: ✅ Configurar la red Wi-Fi en menuconfig. ✅ Compilar y cargar el programa en el ESP32. ✅ Verificar la conexión y obtener la dirección IP asignada.

    🚀 Próximos pasos:

    • Utilizar esta conexión para enviar y recibir datos desde Internet.

    • Convertir el ESP32 en un servidor local para interactuar con otros dispositivos.

    Limhi Abraham Soriano Gómez

    Limhi Abraham Soriano Gómez

    student•
    hace 2 años

    ¿En verdad existen las redes WIFI?

    ¿No estará mal empleado el termino?

    ¿No es una certificación?

      Diana Martinez

      Diana Martinez

      student•
      hace 2 años

      Son redes inalámbricas vía WiFi, no está mal, pero tampoco es una certificación.

    Julio Cardenas

    Julio Cardenas

    student•
    hace 2 años

    Muestro : IP obtenida Netmask Gateway . .

    #include <stdio.h> #include "esp_wifi.h" #include "nvs_flash.h" #include "protocol_examples_common.h" esp_netif_ip_info_t ip_info; esp_netif_t* netif = NULL; void app_main(void) { nvs_flash_init(); esp_netif_init(); esp_event_loop_create_default(); example_connect(); netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); if (netif == NULL) { printf("No hay interfaz\n"); } else { esp_netif_get_ip_info(netif, &ip_info); printf("************************************************************\n"); printf("IP : %d.%d.%d.%d\n ", IP2STR(&ip_info.ip)); printf("Net mask : %d.%d.%d.%d\n ", IP2STR(&ip_info.netmask)); printf("Gateway : %d.%d.%d.%d\n ", IP2STR(&ip_info.gw)); }; }

    . . El resultado es: .

    I (5587) example_common: Connected to example_netif_sta I (5597) example_common: - IPv4 address: 192.168.26.252, I (5597) example_common: - IPv6 address: fe80:0000:0000:0000:daa0:1dff:fe42:d550, type: ESP_IP6_ADDR_IS_LINK_LOCAL ************************************************************ IP : 192.168.26.252 Net mask : 255.255.255.0 Gateway : 192.168.26.225 I (5627) main_task: Returned from app_main() I (420797) wifi:<ba-add>idx:1 (ifx:0, a6:d0:ad:16:81:5f), tid:6, ssn:2, winSize:64

    . . Este es resultado del comando ping: .

    /Dropbox/cursos/notebooks/programacion_de_nicrocontroladores_esp32/wifi ping 192.168.26.252 PING 192.168.26.252 (192.168.26.252) 56(84) bytes of data. 64 bytes from 192.168.26.252: icmp_seq=1 ttl=255 time=714 ms 64 bytes from 192.168.26.252: icmp_seq=2 ttl=255 time=123 ms 64 bytes from 192.168.26.252: icmp_seq=3 ttl=255 time=157 ms 64 bytes from 192.168.26.252: icmp_seq=4 ttl=255 time=60.9 ms ^C --- 192.168.26.252 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 60.933/263.532/713.528/262.071 ms
    Juan Felipe Rodriguez Valencia

    Juan Felipe Rodriguez Valencia

    student•
    hace 2 años

    hola, es que tengo un problema con la conexión de la esp32, el programa compila normal, pero ya en la esp no conecta con mi punto de acceso, que podrá ser?, les dejo el código que copie del video.

    #include <stdio.h> #include "esp_wifi.h" #include "nvs_flash.h" #include "protocol_examples_common.h" void app_main(void) { nvs_flash_init(); esp_netif_init(); esp_event_loop_create_default(); example_connect(); esp_netif_ip_info_t ip_info; esp_netif_t* netif = NULL; netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); if(netif == NULL){ printf("no hay interfaz.\n"); }else{ esp_netif_get_ip_info(netif, &ip_info); printf("IP: %d.%d.%d.%d\n",IP2STR(&ip_info.ip)); } }
      Juan Felipe Rodriguez Valencia

      Juan Felipe Rodriguez Valencia

      student•
      hace 2 años

      también aclaro que añadí el directorio en el archivo Cmakelists.txt

    Felipe Ignacio Caroca Osorio

    Felipe Ignacio Caroca Osorio

    student•
    hace 3 años

    hola, tengo problemas con la línea que se agrega al cMakeList.txt, me aparece el siguiente error:

    Current directory 'C:/Espressif/frameworks/esp-idf-v5.0.1' is not buildable. Change directories to one of the example projects in 'C:/Espressif/frameworks/esp-idf-v5.0.1/examples' and try again.

    la línea que agregué es esta:

    set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)

    ya probé a invertitr los slash como para windows (\) y me sale el mismo error.

    ¿alquien tiene alguna idea de que puedo estar haciendo mal?

    gracias de antemano

      Diana Martinez

      Diana Martinez

      student•
      hace 3 años

      Pareciera que estas apuntando a la carpeta incorrecta, como dice ahí, apuntando a C:/Espressif/frameworks/esp-idf-v5.0.1, y te pide que te muevas a un ejemplo (o un proyecto válido) para poder compilar.

    Louis Frank Balser Rojas

    Louis Frank Balser Rojas

    student•
    hace 8 meses

    si estas viendo esto en el 2035 hubo háganos cambios del uso de la de los eventos y actualizaciónes

    #include <stdio.h>#include "nvs_flash.h"#include "esp_wifi.h"#include "esp_event.h"#include "esp_log.h"#include "esp_netif.h"#include "driver/gpio.h"#include "freertos/FreeRTOS.h"#include "freertos/task.h" #define LED_GPIO GPIO_NUM_4 // Conector 4 static const char *TAG = "wifi_led";static TaskHandle_t led_task_handle = NULL;static bool wifi_connected = false; // Tarea para hacer parpadear el LED mientras se conectavoid led_blink_task(void *pvParameter) { while (!wifi_connected) { gpio_set_level(LED_GPIO, 1); vTaskDelay(pdMS_TO_TICKS(300)); gpio_set_level(LED_GPIO, 0); vTaskDelay(pdMS_TO_TICKS(300)); } vTaskDelete(NULL); // Tarea termina cuando ya hay conexión} // Manejador de eventosstatic void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data){ if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { ESP_LOGI(TAG, "Desconectado. Reintentando..."); wifi_connected = false; esp_wifi_connect(); // Reiniciar tarea de parpadeo si es necesario if (led_task_handle == NULL) { xTaskCreate(led_blink_task, "led_blink_task", 2048, NULL, 5, &led_task_handle); } } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; ESP_LOGI(TAG, "Conectado con IP: " IPSTR, IP2STR(&event->ip_info.ip)); wifi_connected = true; // Encender LED fijo gpio_set_level(LED_GPIO, 1); // Eliminar tarea de parpadeo si sigue corriendo if (led_task_handle != NULL) { vTaskDelete(led_task_handle); led_task_handle = NULL; } }} void app_main(void){ // Inicializar NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); // Inicializar red y eventos ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); // Configurar GPIO del LED gpio_config_t io_conf = { .pin_bit_mask = (1ULL << LED_GPIO), .mode = GPIO_MODE_OUTPUT, .pull_up_en = 0, .pull_down_en = 0, .intr_type = GPIO_INTR_DISABLE }; gpio_config(&io_conf); gpio_set_level(LED_GPIO, 0); // Apagar inicialmente // Crear interfaz Wi-Fi STA esp_netif_create_default_wifi_sta(); // Configurar Wi-Fi wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); wifi_config_t wifi_config = { .sta = { .ssid = WIFI_SSID, .password = WIFI_PASS, }, }; // Registrar eventos ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL)); // Configurar Wi-Fi como estación ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); ESP_ERROR_CHECK(esp_wifi_start()); ESP_LOGI(TAG, "Wi-Fi inicializado. Conectando a %s...", WIFI_SSID); // Iniciar tarea de parpadeo xTaskCreate(led_blink_task, "led_blink_task", 2048, NULL, 5, &led_task_handle);}

    Alejandro DUARTE OLMOS

    Alejandro DUARTE OLMOS

    student•
    hace 3 años

    Hola, estoy haciendo un proyecto usando el ESP32 y PN532. La idea es que se prenda cuatro motores cuando pasa la tarjeta por el sensor o por medio de wifi, para el caso de wifi lo estoy haciendo conectando el celular a la red que se crea desde el ESP. Los motores deben dejar de vibrar cuando contador es igual a 20 o por medio de un botón (usando una interrupción). Tengo dos dudas la primera es que cuando se cumple alguna de las dos condiciones antes mencionadas me sale un error al usar este comando nfc.startPassiveTargetIDDetection(PN532_MIFARE_ISO14443A) pero si no lo uso el sensor lee la tarjeta la primera vez y no la vuelve a leer. La segunda es que cuando integro la parte de wifi con la parte donde uso el PN532 no carga la interfaz creada (solo lo hace mientras la variable LeeTarjeta es verdadera) ¿Cómo puedo solucionarlo?

    //Declaración de Librerías #include <Wire.h> #include <SPI.h> //Librería para comunicación SPI serial parallel interface #include <WiFi.h> // Libreria Wifi #include <UNIT_PN532.h> //Librería Modificada ya que la tasa de bits que viene predefinida //en la librería de Adafruit es demasiado rápida para el ESP32 por lo cual se debe modificar este dato para poder utilizarlo con esta placa //Conexiones SPI del ESP32 #define PN532_SCK (18) #define PN532_MOSI (23) #define PN532_SS (5) #define PN532_MISO (19) #define motor1 (33) #define motor2 (32) #define motor3 (25) #define motor4 (26) #define boton1 (2) // variables a usar uint8_t DatoRecibido[4]; //Para almacenar los datos int contador=0; int boton_restart=0; void IRAM_ATTR onTimer(); boolean LeeTarjeta=false; //Variable para almacenar la detección de una tarjeta UNIT_PN532 nfc(PN532_SS);// Línea enfocada para la comunicación por SPI hw_timer_t * timer = NULL; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Búfer para almacenar el UID devuelto uint8_t LongitudUID; //Variable para almacenar la longitud del UID de la tarjeta const char* ssid = "Faja-Punto-Acceso"; const char* password = "123456789"; // Set web server port number to 80 WiFiServer server(80); // Variable to store the HTTP request String header; // Auxiliar variables to store the current output state String outputMotores1 = "off"; String outputMotores2 = "off"; void setup() { Serial.begin(115200); //Inicio de puerto Serial a 115200 baudios // Connect to Wi-Fi network with SSID and password Serial.print("Setting AP (Access Point)…"); // Remove the password parameter, if you want the AP (Access Point) to be open WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); server.begin(); nfc.begin(); //Comienza la comunicación del PN532 uint32_t versiondata = nfc.getFirmwareVersion();//Obtiene información de la placa if (! versiondata) { //Si no se encuentra comunicación con la placa ---> Serial.print("No se encontró la placa PN53x"); while (1); // Detener } //Establezca el número máximo de reintentos para leer de una tarjeta. //Esto evita que tengamos que esperar eternamente por una tarjeta, //que es el comportamiento predeterminado del PN532. nfc.setPassiveActivationRetries(0xFF); nfc.SAMConfig(); //Configura la placa para realizar la lectura // Serial.println("Esperando una tarjeta ISO14443A ..."); pinMode(motor1, OUTPUT); // Se configuran los pines como salidas pinMode(motor2, OUTPUT); pinMode(motor3, OUTPUT); pinMode(motor4, OUTPUT); pinMode(boton1, INPUT_PULLDOWN); attachInterrupt(boton1,isr_boton,RISING); } void loop() { Serial.println("loop"); //Recepción y detección de los datos de la tarjeta y almacenamiento en la variable "LeeTarjeta" LeeTarjeta = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &LongitudUID); WiFiClient client = server.available(); // Listen for incoming clients //Se detecto un tarjeta RFID if (LeeTarjeta) { timer = timerBegin(0, 80, true); // timer 0, MWDT clock periodo = 12.5 ns * TIMGn_Tx_WDT_CLK_PRESCALE -> 12.5 ns * 80 -> 1000 ns = 1 us, countUp--> conteo ascendente timerAttachInterrupt(timer, &onTimer, true); // edge (not level) triggered timerAlarmWrite(timer, 1000000, true); // 1000000 * 1 us = 1 s, autoreload true timerAlarmEnable(timer); // enable } //Si no se detecta tarjeta else { Serial.print(PN532_SCK); Serial.println("Se agotó el tiempo de espera de una tarjeta"); } vTaskDelay(portMAX_DELAY); // wait as much as posible ... //wifi if (client) { // If a new client connects, Serial.println("New Client."); // print a message out in the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor header += c; if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // turns the GPIOs on and off if (header.indexOf("GET /26/on") >= 0) { Serial.println("GPIO 26 on"); outputMotores1 = "on"; digitalWrite(motor1, HIGH); digitalWrite(motor2, HIGH); digitalWrite(motor3, HIGH); digitalWrite(motor4, HIGH); } else if (header.indexOf("GET /26/off") >= 0) { Serial.println("GPIO 26 off"); outputMotores1 = "off"; digitalWrite(motor1, LOW); digitalWrite(motor2, LOW); digitalWrite(motor3, LOW); digitalWrite(motor4, LOW); } else if (header.indexOf("GET /27/on") >= 0) { digitalWrite(motor1, HIGH); digitalWrite(motor2, HIGH); digitalWrite(motor3, HIGH); digitalWrite(motor4, HIGH); outputMotores2 = "on"; delay(100); digitalWrite(motor1, LOW); digitalWrite(motor2, LOW); digitalWrite(motor3, LOW); digitalWrite(motor4, LOW); outputMotores2 = "off"; } // Display the HTML web page client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS to style the on/off buttons // Feel free to change the background-color and font-size attributes to fit your preferences client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #FF689D; border: none; color: white; padding: 16px 40px;"); client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: #555555;}</style></head>"); // Web Page Heading client.println("<body><h2>Adiestramiento perros</h2>"); // Display current state, and ON/OFF buttons for GPIO 26 client.println("<p>vibracion continua - State " + outputMotores1 + "</p>"); // If the output26State is off, it displays the ON button if (outputMotores1=="off") { client.println("<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>"); } else { client.println("<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>"); } // Display current state, and ON/OFF buttons for GPIO 27 client.println("<p>pulso - State " + outputMotores2 + "</p>"); // If the output27State is off, it displays the ON button if (outputMotores2=="off") { client.println("<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>"); } else { client.println("<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>"); } client.println("</body></html>"); // The HTTP response ends with another blank line client.println(); // Break out of the while loop break; } else { // if you got a newline, then clear currentLine currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } } } // Clear the header variable header = ""; // Close the connection client.stop(); Serial.println("Client disconnected."); Serial.println(""); } } void isr_boton(){ boton_restart=1; } void IRAM_ATTR onTimer(){ // interrupción del timer cuando se c digitalWrite(motor1,!digitalRead(motor1)); // cambio de estado de los leds digitalWrite(motor2,!digitalRead(motor2)); digitalWrite(motor3,!digitalRead(motor3)); digitalWrite(motor4,!digitalRead(motor4)); contador++; if (contador==20||boton_restart==1){ digitalWrite(motor1,LOW); // cambio de estado de los leds digitalWrite(motor2,LOW); digitalWrite(motor3,LOW); digitalWrite(motor4,LOW); contador=0; timerDetachInterrupt(timer); nfc.startPassiveTargetIDDetection(PN532_MIFARE_ISO14443A); Serial.print("fin"); } }

    Y est es el error que sale

    Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. Core 1 register dump: PC : 0x40086192 PS : 0x00050531 A0 : 0x800d2fbb A1 : 0x3ffc0260 A2 : 0x00000044 A3 : 0x00018044 A4 : 0x000637ff A5 : 0x3ffc0240 A6 : 0x000000ff A7 : 0x00000001 A8 : 0x000000ff A9 : 0x4008cc38 A10 : 0x00000003 A11 : 0x00060a23 A12 : 0x80081b98 A13 : 0x3ffc0220 A14 : 0x3ffc17b4 A15 : 0x00000000 SAR : 0x0000001b EXCCAUSE: 0x0000001c EXCVADDR: 0x800d2fc7 LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xfffffffe Core 1 was running in ISR context: EPC1 : 0x40086192 EPC2 : 0x00000000 EPC3 : 0x00000000 EPC4 : 0x40084a80 ELF file SHA256: 0000000000000000 Backtrace: 0x40086192:0x3ffc0260 0x400d2fb8:0x3ffbc6d0 0x400e74e3:0x3ffbc6f0 0x4008bcd5:0x3ffbc710 0x4008a52e:0x3ffbc730 Rebooting... ets Jul 29 2019 12:21:46 rst:0xc (SW_CPU_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:1044 load:0x40078000,len:10124 load:0x40080400,len:5856 entry 0x400806a8 Setting AP (Access Point)…AP IP address: 192.168.4.1
      Diana Martinez

      Diana Martinez

      student•
      hace 3 años

      Hola, la verdad no creo poder ayudarte, estás usando Arduino y este curso es de IDF, pero no por otra cosa sino porque no he realizado nada similar a lo que estás haciendo con el PN532, y la lógica del IDF y el Arduino IDE son muy distintas, pues mientras en el IDF usamos FreeRTOS y creamos tareas manualmente, el Arduino IDE abstrae todo esto.

      A mi me da la impresión de que probablemente esa instrucción está bloqueando la tarea y lanzando un kernel panic o algo así, pero no podría decirte cómo corregirlo porque en a lo que veo en tu código de Arduino, no administras las tareas de FreeRTOS manualmente.

      Creo que sería mejor que busques en un foro especializado donde se trabaje con Arduino.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads