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..!
Te recomiendo que las variables donde almacenas millis(), las declares como unsigned long mejor que long solamente, enhorabuena por el vídeo. Un saludo
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
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
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?
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
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.
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 !
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.
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.
@@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 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
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()
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.
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.
Me alegro de que te gusten los vídeos. Ya lo siento, pero de servidores web y bases de datos no controlo mucho.
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..!
Mil gracias. Un abrazo desde Colombia
Te recomiendo que las variables donde almacenas millis(), las declares como unsigned long mejor que long solamente, enhorabuena por el vídeo. Un saludo
Gracias por el video.
Gracias por tu ayuda compañero , has más video de esp32 explicando cosas así e importantes
excelente amigo. Me sirvió de mucho tu explicacion
MUCHAS FELICIDADES!! TENDRAS EL LINK DONDE MUESTRAS TODOS TUS VIDEOS, POR FAVOR, GRACIAS
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
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
saludos cordiales ; los pulsadores se van a poner normalmente abiertos o normalmente cerrado ?
se puede usar micros() dentro de una interrupcion?
Amigo sos un capo, excelente video
hola , gracias por tu tiempo. cuanto tiempo puede tardar en mostrarse en thingspeak las lecturas dadas por los sensores desde que inicia el esp32
Excelente ,Gracias ,,
las interrupciones tambien funcionan en el void setup()?
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?
Buenas Excelente vídeo!! Consulta cómo sería su código para subirlo a Telegram!? Si me puedes ayudar con esto
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
Hola.
¿Se puede generar la interrupción en cualquier pin?
En los Arduino no todos valen
Gracias.
Cada microcontrolador tiene sus características revísalo
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????
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.
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 !
Hola Buenísimo... Pero porque no funciona en un ESP8266
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.
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.
@@ingenieroencasa Gracias por contestar ;)
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
Me pasa lo mismo en una ESP8266, has resuleto tu problema?
@@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
Hola ¿Tal vez resolviste el problema? Llevo algunos días sin poder resolverlo
@@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
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()
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.
Perdon es a 5V o a 3.3V.-