Las Interrupciones en el ESP32

แชร์
ฝัง
  • เผยแพร่เมื่อ 9 ส.ค. 2020
  • En este vídeo enseño cómo funcionan las interrupciones en el ESP32. Concretamente interrupciones por cambio de estado en los pines. Resultan muy útiles ya que permiten una interacción con el exterior y una alteración del flujo del programa.
    Sólo es necesario un interruptor y un par de cables para las conexiones, ya que el ESP32 incluye resistencias pull-up y pull-down en sus pines. Es importante saber que los pines 34..39 no incluyen resistencias pull-up o pull-down ya que son pines solamente de entrada, por ello no son recomendables para utilizar interrupciones sin resistencias externas.
    ----------------------------------------
    Código:
    github.com/ingeniero-yt/ESP32...
    ----------------------------------------
    Enlaces de componentes:
    -ESP32: amzn.to/33oVR0S
    -Kit de componentes básicos: amzn.to/2DzRu8f
    -Kit de sensores: amzn.to/30mcMiI
    -DHT11: amzn.to/2D5jh0L
    -Servomotores: amzn.to/2Xnjdjz
    -Protoboards: amzn.to/30nS0zn
    Estos enlaces pertenecen al programa de Afiliados de Amazon. Gracias por apoyar al canal :D
    -------------------------------
    Música:
    Loyalty Freak Music - It feels good to be alive too
    freemusicarchive.org/music/Lo...
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 40

  • @jairorodriguezpercu
    @jairorodriguezpercu 3 ปีที่แล้ว +1

    Gracias por tu ayuda compañero , has más video de esp32 explicando cosas así e importantes

  • @adrijimenezmartinez78
    @adrijimenezmartinez78 3 ปีที่แล้ว +4

    Te recomiendo que las variables donde almacenas millis(), las declares como unsigned long mejor que long solamente, enhorabuena por el vídeo. Un saludo

  • @marianomorenoperez6038
    @marianomorenoperez6038 3 ปีที่แล้ว +4

    Muchas gracias por el aporte, son unos vídeos muy claros y prácticos. Seria muy interesante uno sobre servidor Web y bases de datos.

    • @ingenieroencasa
      @ingenieroencasa  3 ปีที่แล้ว

      Me alegro de que te gusten los vídeos. Ya lo siento, pero de servidores web y bases de datos no controlo mucho.

  • @leonardomendozadelarosa1118
    @leonardomendozadelarosa1118 11 หลายเดือนก่อน

    Que buen video, explicas bn chido y das detalles que algunos otros creadores pasan por alto.
    No había entendido la función milis hasta que vi este video, Genial..!

  • @luisfernandoalvarez5500
    @luisfernandoalvarez5500 ปีที่แล้ว

    Mil gracias. Un abrazo desde Colombia

  • @MrFranco207800
    @MrFranco207800 2 ปีที่แล้ว

    hola , gracias por tu tiempo. cuanto tiempo puede tardar en mostrarse en thingspeak las lecturas dadas por los sensores desde que inicia el esp32

  • @DiegoRodriguez-xl3ut
    @DiegoRodriguez-xl3ut ปีที่แล้ว

    excelente amigo. Me sirvió de mucho tu explicacion

  • @lucianoraffagnini8347
    @lucianoraffagnini8347 3 ปีที่แล้ว

    Amigo sos un capo, excelente video

  • @jolugama
    @jolugama 3 ปีที่แล้ว +2

    Gracias por el video.

  • @darwinnicolas9739
    @darwinnicolas9739 ปีที่แล้ว

    saludos cordiales ; los pulsadores se van a poner normalmente abiertos o normalmente cerrado ?

  • @marialeliaguzmanramirez8046
    @marialeliaguzmanramirez8046 ปีที่แล้ว +1

    MUCHAS FELICIDADES!! TENDRAS EL LINK DONDE MUESTRAS TODOS TUS VIDEOS, POR FAVOR, GRACIAS

  • @xaviibanyez1496
    @xaviibanyez1496 4 หลายเดือนก่อน

    Hola.
    ¿Se puede generar la interrupción en cualquier pin?
    En los Arduino no todos valen
    Gracias.

  • @guillermocarrillo5406
    @guillermocarrillo5406 ปีที่แล้ว

    Hola amigo gracias por tu vídeo. Como podría agregar q cuando se oprima el botón número uno se imprima un mensaje cuando se suelte otro mensaje?. Con el botón dos el mismo principio pero diferentes mensajes

  • @ernestorivero9909
    @ernestorivero9909 10 หลายเดือนก่อน

    Hola mi amigo podrías indicarme como se podría hacer una interrupción por software o mejor dicho cambiar el estado de un pin sin tener que usar botones

  • @jmch1369
    @jmch1369 4 หลายเดือนก่อน

    Excelente ,Gracias ,,

  • @miguelangelrosas799
    @miguelangelrosas799 2 ปีที่แล้ว

    las interrupciones tambien funcionan en el void setup()?

  • @jul-oz6qy
    @jul-oz6qy ปีที่แล้ว

    se puede usar micros() dentro de una interrupcion?

  • @abelalbors1366
    @abelalbors1366 10 หลายเดือนก่อน

    Buenas Excelente vídeo!! Consulta cómo sería su código para subirlo a Telegram!? Si me puedes ayudar con esto

  • @keeper1855
    @keeper1855 2 ปีที่แล้ว

    Can you change GitHub diagram with correct sketch because lora cant communicate.I found problem with bad pin out with mosi and values ms in sketch?What else can be improve to work correctly?

  • @Astrea256
    @Astrea256 2 ปีที่แล้ว

    Hola soy casi neofita en estas cuestiones, sucede que había programado la placa el viernes y hoy cuando estaba guardando todo (esp32 en su protoboard y demás componentes) apreté accidentalmente el boton boot. Le hace algo malo?, la programación se ha borrado de la placa?. Ayudaaa

  • @franciscotassone1027
    @franciscotassone1027 2 ปีที่แล้ว

    Estimado, sabes como lograr leer e imprimir, mediante Serial.Print el valor del Stack Pointer del ESP32?
    Lo quiero usar para ver si al llamar a las interrupciones, se regresa al valor anterior, luego de atenderla, y no se queden anidadas, con lo cual en algún momento, puede tener un overflow.
    Con micros de los años 90 en assembler yo sabía hacerlo, pero con este pequeño mounstruo ESP32, ni idea... y no encuentro en internet nada al respecto, que sea entendible
    Mil gracias !

  • @apollodorusII
    @apollodorusII 3 ปีที่แล้ว +2

    Buen video!!!
    Una pregunta, tengo el Esp8266.
    He visto que el Esp8266 es más económico que el Esp32.
    Merece la pena???
    Que mejoras trae????

    • @ingenieroencasa
      @ingenieroencasa  3 ปีที่แล้ว +1

      Hola, el ESP32 es más potente, tiene más pines disponibles y además incorpora Bluetooth. También tiene un consumo de energía menor en el modo de Deep Sleep.
      Si mereca la pena o no depende de lo que quieras hacer con ellos, tendrás que decidir cuál es el más adecuado para tu aplicación.

  • @edgardoferoci3863
    @edgardoferoci3863 8 หลายเดือนก่อน

    Hola Buenísimo... Pero porque no funciona en un ESP8266

  • @jaaschoenlau
    @jaaschoenlau 3 ปีที่แล้ว +5

    Hola, quería proponer un par de cosas:
    1.- El método que usas no evita las múltiples interrupciones anidadas generadas por los rebotes del pulsador, sino que ignora a partir de la segunda interrupción haciendo caso únicamente a la primara. Para evitar que la rutina de interrupción se ejecute varias veces por pulsación del botón, creo que sería mejor que nada más comenzar la rutina de interrupción se desactive la interrupción (con lo que se evita que los rebotes venideros vuelvan a activar la rutina), a continuación ejecutar las instrucciones de la rutina de interrupción, seguidamente esperar unos 200 ms y finalmente volver a activar la interrupción para que se puedan volver a detectar futuras pulsaciones del botón.
    2.- Veo que una parte de la tarea de la interrupción la haces fuera de la rutina de interrupción (en el bucle main). Personalmente opino que es conceptualmente incorrecto y que todo debería ejecutarse dentro la rutina de interrupción, además, en un caso real tendrás mucho más código y así se dificulta la comprensión.
    Gracias y saludos.

    • @ingenieroencasa
      @ingenieroencasa  3 ปีที่แล้ว +2

      Hola, gracias por tus comentarios.
      Respecto al primer punto, tienes razón en lo que dices, pero mi intención es hacer el código lo más simple posible para que sea accesible a todo el mundo. Tanto a los entendidos del tema como a los principiantes.
      Y respecto al segundo punto, he encontrado en internet muchas recomendaciones sobre hacer la función ISR lo más corta y sencilla posible y destinar mayor computación al loop principal. Te comparto este link a modo de ejemplo: electronics.stackexchange.com/questions/469121/why-should-interrupts-be-short-in-a-well-configured-system
      ¡Saludos!

    • @einarpoisot9507
      @einarpoisot9507 ปีที่แล้ว

      @@ingenieroencasa Tiene algún ejemplo de la forma que dice Ángel Moyano? Algo raro es que no conseguí que me funcione cuando se suelta el pulsador, que era que quería, de hecho, los flancos de subida dieron mucho problema, preferí que fuera con CHANGE antes que con eso, pues si sólo me funcionan al inicio, y tardo en soltar el pulsador pasa el tiempo de los millis cuando se me activó y se vuelve a activar por ello.

    • @sebastianangelini3116
      @sebastianangelini3116 ปีที่แล้ว

      Hola! Gracias por tu video, me sirvió para programar las interrupciones a la ESP32, no tenía idea como se hacía.
      Con respecto a lo que dice Angel Moyano coincido: no se debería ejecutar parte de las interrupciones en el Loop, además de la complejidad que representa para alguien que lea el código, entender que la interrupción se ejecuta en dos partes, el hecho de trabajar de esa forma hace que el micro este ocupado haciendo las tareas asignadas en el loop. Es decir, estás perdiendo tiempo de clock, y por lo tanto energía y capacidad de trabajo del micro, preguntando constantemente el estado de la variable btn1.
      Coincido en hacerlo de la forma descrita anteriormente por Angel, es una buena práctica entrar a la interrupció, desactivarla y terminar de ejecutar la interrupción para, finalmente, volver a activar la interrupción.
      Saludos!

  • @jolugama
    @jolugama 3 ปีที่แล้ว +1

    Vengo de arduino, y hay pocos videos de esp32, entonces todas las entradas son de 3v? para que usar el vin entonces, ejemplos?. podrías hacer más videos sobre esto, como poner un lcd con i2c, etc?. si conecto algo que requiera 3v y usa i2c, el i2c si se mueve a 5v, hay que hacer algo mas? ..... son muchas preguntas, muchas dudas.

    • @ingenieroencasa
      @ingenieroencasa  3 ปีที่แล้ว +1

      Hola. Correctamente, las entradas/salidas son de 3.3V. El Vin lo debes usar para alimentar cualquier cosa que necesite 5V, como la LCD que indicas. Aunque el I2C se mueva a 5V, yo he probado de utilizarlo con el ESP32 y no he tenido ningún problema (supongo que te refieres a la típica pantalla LCD 16x02 con I2C). Piensa que el adaptador I2C ya lleva resistencias pull-up de unos 4.7kOhm, en los dos pines (SCL y SDA) así que la corriente que pueda entrar por el pin del ESP32 va a ser demasiado pequeña como para afectarle. Lo que no deberías hacer es conectar 5V directamente al pin. Saludos.

    • @jolugama
      @jolugama 3 ปีที่แล้ว +1

      @@ingenieroencasa Gracias por contestar ;)

  • @nahuel3256
    @nahuel3256 2 ปีที่แล้ว

    Lo que haces en 10:25 se llama "polling". Ahora le est'as pidiendo al CPU que compruebe contantemente si los botones est'an apretados. El propósito de las "interrupts" es que no tengas que hacer "polling" y que el procesador no tenga que terminar con todas las instructions antes de efectuar las rutinas de servicio.

  • @conesth
    @conesth 2 ปีที่แล้ว +1

    Mi esp32 con atach interrump se crashea y se reinicia alguíen más le pasa? Sin embargo el mismo Código en un mega va bien

    • @omarvelasco2329
      @omarvelasco2329 2 ปีที่แล้ว

      Me pasa lo mismo en una ESP8266, has resuleto tu problema?

    • @conesth
      @conesth 2 ปีที่แล้ว

      @@omarvelasco2329 que va , al final lo e tenido que hacer con millis, devolviendo el tiempo cada 60 milisegundos y eso de momento me a funcionado bien ,también lo que hice fue poner un mega que me contaba las interrupciones , las guardaba y las enviaba atraves de pulsos de un segundo de duración , por un pin digital al esp32 eso fue lo máximo que llegue hacer

    • @cristianyamith27
      @cristianyamith27 ปีที่แล้ว

      Hola ¿Tal vez resolviste el problema? Llevo algunos días sin poder resolverlo

    • @holaapellido687
      @holaapellido687 ปีที่แล้ว

      @@cristianyamith27 no lo pide solucionar, leí que las interrupciones no puedes estar funcionando siempre , lo que hice fue utilizar millis , y tomar el valor cada X mili segundos

    • @sebastianangelini3116
      @sebastianangelini3116 ปีที่แล้ว

      Para usar interrupciones en la ESP32 es necesario que las rutinas tengan el atributo IRAM_ATTR, según la documentación de ESP32. Es decir que cuando declares la función de interrupción le tenes que agregar adelante IRAM_ATTR.
      Por ejemplo:
      void IRAM_ATTR isrUp()
      {
      detachInterrupt(UP);//desactivo interrupción del pin UP
      static uint32_t lastMillis = 0;
      if (millis() - lastMillis > 800)
      {
      lastMillis = millis();
      contUpDown++;
      Serial.println("Interrupción UP");
      Serial.println(contUpDown);
      }
      attachInterrupt(UP, isrUp, FALLING);//activo interrupción del pin UP
      }
      Es un ejemplo que hice para detectar interrupción por un pin al cual denominé UP.
      Otra cosa que te recomiendo que hagas es que desactives la interrupción en la misma rutina, una vez que implementes tu rutina, la volves a activar.
      Por último, no uses Delay() u otra función similar dentro de la rutina de interrupción, esto te va a bloquear el micro y no es una buena práctica.. además es muy probable que tengas problemas. Si ves el ejemplo de arriba, para implementar un antirrebote (en el pin UP hay conectado un pulsador) lo hice con la función mili()

  • @hugocalcoen
    @hugocalcoen หลายเดือนก่อน

    Perdon es a 5V o a 3.3V.-