[Diao Ye aprende programación] Interrupción externa de cámara OpenMV manual de MicroPython

Insertar descripción de la imagen aquí
MicroPython es una versión ligera del intérprete diseñada para ejecutar el lenguaje de programación Python 3 en sistemas integrados. En comparación con Python normal, el intérprete de MicroPython es pequeño (solo alrededor de 100 KB) y se compila en un archivo ejecutable binario para su ejecución, lo que resulta en una mayor eficiencia de ejecución. Utiliza un mecanismo de recolección de basura liviano y elimina la mayor parte de la biblioteca estándar de Python para adaptarse a microcontroladores con recursos limitados.

Las características principales de MicroPython incluyen:
1. La sintaxis y las funciones son compatibles con Python estándar, lo que facilita su aprendizaje y uso. Admite la mayor parte de la sintaxis principal de Python.
2. Acceda y controle directamente el hardware, controle GPIO, I2C, SPI, etc. como Arduino.
3. Potente sistema de módulos, que proporciona sistema de archivos, red, interfaz gráfica y otras funciones.
4. Admite compilación cruzada para generar código nativo eficiente, que es entre 10 y 100 veces más rápido que el intérprete.
5. La cantidad de código es pequeña y el uso de memoria es pequeño, adecuado para ejecutarse en MCU y placas de desarrollo con poca memoria.
6. Licencia de código abierto, de uso gratuito. El entorno interactivo de Shell proporciona comodidad para el desarrollo y las pruebas.
7. El controlador de E/S incorporado admite una gran cantidad de plataformas de microcontroladores, como ESP8266, ESP32, STM32, micro:bit, placa de control y PyBoard, etc. Hay una comunidad activa.

Los escenarios de aplicación de MicroPython incluyen:
1. Crear rápidamente prototipos e interacciones de usuario para productos integrados.
2. Realice algunos pequeños proyectos de hardware programables.
3. Como herramienta educativa, ayuda a los principiantes a aprender programación en Python e IoT.
4. Cree firmware para dispositivos inteligentes para lograr control avanzado y conectividad en la nube.
5. Diversas aplicaciones de microcontroladores como Internet de las cosas, inteligencia integrada, robots, etc.

Cosas a tener en cuenta al utilizar MicroPython:
1. La memoria y el espacio Flash son limitados.
2. La eficiencia de explicación y ejecución no es tan buena como la del lenguaje C.
3. Algunas funciones de la biblioteca son diferentes a las de la versión estándar.
4. Optimice la sintaxis de la plataforma y corrija las diferencias con Python estándar.
5. Utilice los recursos de memoria de forma racional y evite asignar grandes bloques de memoria con frecuencia.
6. Utilice código nativo para mejorar el rendimiento de las piezas críticas para la velocidad.
7. Utilice la abstracción de forma adecuada para encapsular las operaciones de hardware subyacentes.

En términos generales, MicroPython lleva Python al campo de los microcontroladores, lo cual es una innovación importante que no solo reduce el umbral de programación sino que también proporciona buenas capacidades de control de hardware. Es muy adecuado para el desarrollo de varios tipos de Internet de las cosas y hardware inteligente.
Insertar descripción de la imagen aquí
OpenMV Cam es una pequeña placa microcontroladora de bajo consumo que le permite implementar fácilmente aplicaciones utilizando visión artificial en el mundo real. Puede programar OpenMV Cam utilizando scripts Python de alto nivel (proporcionados por MicroPython OS) en lugar de C/C++. Los parámetros técnicos de OpenMV Cam incluyen los siguientes aspectos:

1. Procesador: OpenMV Cam H7 Plus utiliza el procesador STM32H743II ARM Cortex M7, que funciona a 480 MHz, con 32 MB de SDRAM + 1 MB de SRAM y 32 MB de memoria flash externa + 2 MB de memoria flash interna. OpenMV Cam M4 V2 utiliza el procesador STM32F427VG ARM Cortex M4 que funciona a 180 MHz con 256 KB de RAM y 1 MB de memoria flash.
2. Sensor de imagen: Tanto OpenMV Cam H7 Plus como OpenMV Cam M4 V2 utilizan el sensor de imagen OV7725, que puede capturar imágenes en escala de grises de 320x240 de 8 bits o imágenes RGB565 de 320x240 de 16 bits a 75 FPS con resoluciones superiores a 320x240. 150 FPS a 320x240.
3. Interfaz de E/S: OpenMV Cam H7 Plus y OpenMV Cam M4 V2 tienen las siguientes interfaces de E/S:
(1) Interfaz USB de velocidad completa (12 Mbs), conectada a la computadora. Cuando la OpenMV Cam esté conectada, aparecerá un puerto COM virtual y una "unidad flash USB" en su computadora.
(2) La ranura para tarjeta μSD tiene capacidad de lectura/escritura de 100 MB, lo que permite que su OpenMV Cam grabe video y extraiga material de visión artificial de la tarjeta μSD.
(3) El bus SPI funciona a una velocidad de hasta 54 Mbs, lo que le permite simplemente transmitir datos de flujo de imágenes a la placa de expansión LCD, placa de expansión WiFi u otros controladores.
(4) Bus I2C (hasta 1 Mb/s), bus CAN (hasta 1 Mb/s) y bus serie asíncrono (TX/RX, hasta 7,5 Mb/s) para conexión con otros controladores o sensores.
(5) Un ADC de 12 bits y un DAC de 12 bits.
(6) Hay interrupciones y PWM en todos los pines de E/S (hay 9 o 10 pines de E/S en la placa).
4. LED: Tanto OpenMV Cam H7 Plus como OpenMV Cam M4 V2 están equipados con un LED RGB (tricolor) y dos LED IR brillantes de 850 nm (infrarrojos).
5. Lente: Tanto OpenMV Cam H7 Plus como OpenMV Cam M4 V2 están equipados con una interfaz de lente M12 estándar y una lente predeterminada de 2,8 mm. Si desea utilizar una lente más profesional con su OpenMV Cam, puede comprarla e instalarla fácilmente usted mismo.

Insertar descripción de la imagen aquí
OpenMV Cam de MicroPython admite la función de interrupción externa y puede implementar la respuesta a la interrupción y el procesamiento de señales externas a través de la programación. A continuación se explicarán en detalle las características principales, los escenarios de aplicación y los asuntos que requieren atención de la interrupción externa OpenMV Cam de MicroPython desde una perspectiva profesional.

caracteristica principal:

Activación de interrupción: la función de interrupción externa de OpenMV Cam puede responder a cambios en señales externas configurando las condiciones de activación de interrupción del pin. Puede elegir métodos de activación de flanco ascendente, flanco descendente, flanco o nivel para activar interrupciones externas según sea necesario.

Alta velocidad de respuesta: la función de interrupción externa de OpenMV Cam tiene capacidades de respuesta rápida. Cuando la señal externa cumple con la condición de activación de interrupción, OpenMV Cam puede interrumpir rápidamente el programa que se está ejecutando actualmente y ejecutar el controlador de interrupción correspondiente.

Procesamiento asincrónico: la interrupción externa es un evento asincrónico, es decir, puede ocurrir en cualquier momento y no está controlado por el programa. La función de interrupción externa de OpenMV Cam permite el procesamiento de interrupciones de acuerdo con los cambios en las señales externas durante la ejecución del programa, logrando así una respuesta de eventos asincrónica.

Escenarios de aplicación:

Disparador de clave: la función de interrupción externa de OpenMV Cam es adecuada para aplicaciones de disparo de clave. Al configurar el pin de interrupción externo para que sea un disparador de flanco ascendente o un disparador de flanco descendente, puede realizar la respuesta del disparador a la tecla, como capturar el evento de presionar o soltar el botón, realizando así la función de control de la tecla.

Activación de sensores: las interrupciones externas también se pueden aplicar a aplicaciones de activación de sensores. Por ejemplo, cuando un sensor detecta que ocurre un determinado evento o condición, puede activar interrupciones externas para implementar el procesamiento correspondiente, como recopilación de datos, notificación de alarma, etc.

Protocolo de comunicación: la función de interrupción externa también se puede utilizar para la implementación de protocolos de comunicación. Por ejemplo, en la comunicación en serie, puede configurar el pin de interrupción externo para que se active por flanco. Cuando se recibe una señal de comunicación específica, se activa la interrupción y se procesan los datos recibidos.

Cosas a tener en cuenta:

Selección de pin: cuando utilice la función de interrupción externa, debe seleccionar el pin apropiado como pin de interrupción. Asegúrese de que el pin seleccionado admita la función de interrupción externa y no entre en conflicto con otras funciones o pines del dispositivo.

Controlador de interrupciones: al programar, debe escribir un controlador de interrupciones adecuado para manejar eventos de interrupción. El controlador de interrupciones debe ser conciso y eficiente, y tratar de evitar realizar operaciones complejas en el controlador de interrupciones para garantizar la velocidad de respuesta de la interrupción.

Prioridad de interrupción: si hay varias fuentes de interrupción al mismo tiempo, se debe considerar la prioridad de la interrupción. Al programar, puede establecer la prioridad de las interrupciones para garantizar que las interrupciones de alta prioridad puedan responderse y procesarse de manera oportuna.

En resumen, la función de interrupción externa OpenMV Cam de MicroPython tiene las características de activación de interrupciones, alta velocidad de respuesta y procesamiento asincrónico, y es adecuada para escenarios de aplicaciones como activación de teclas, activación de sensores y protocolos de comunicación. Cuando utilice la función de interrupción externa, debe prestar atención a seleccionar el pin apropiado, escribir el controlador de interrupción apropiado y manejar la prioridad de interrupción. Al utilizar racionalmente la función de interrupción externa de OpenMV Cam, se pueden lograr más aplicaciones e innovaciones.

Caso 1: Controlar la luz LED de OpenMV Cam para que parpadee

import sensor, image, time
from machine import Pin, PWM

# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

# 启动摄像头
sensor.run(1)

# 设置LED灯颜色为红色
red_led = PWM(Pin(2))
red_led.freq(50)
red_led.duty_u16(255)

# 设置外部中断,当触发中断时,LED灯闪烁
def blink_led():
    global red_led
    red_led.duty(255)
    time.sleep_ms(500)
    red_led.duty(0)
    time.sleep_ms(500)

sensor.register_irq(trigger=Pin(2), handler=blink_led)

while True:
    img = sensor.snapshot()
    img.compress(quality=80, optimize=True)
    time.sleep(1/30)  # 每30帧进行一次白平衡校准

Interpretación de puntos clave: este programa demuestra cómo usar MicroPython para controlar el parpadeo de la luz LED de OpenMV Cam. Primero, debe inicializar la cámara y configurar el formato y la resolución de la imagen. Luego, inicie la cámara mediante el método de ejecución. Luego, en un bucle infinito, las imágenes de la cámara se obtienen y guardan continuamente en un archivo local. Cabe señalar que cuando se utiliza OpenMV Cam para la transmisión de video, se debe garantizar la exactitud e integridad de la transmisión de datos. Por lo tanto, debe esperar a que el receptor esté listo antes de enviar datos y debe prestar atención a la integridad y corrección de los datos al leerlos. En este programa, usamos el módulo PWM para controlar el color de la luz LED y configurar la luz LED en rojo. Luego, definimos una función llamada flash_led, que se llamará cada vez que se active la interrupción externa. Finalmente, utilizamos el método Register_irq para registrar una interrupción externa. Cuando se activa la interrupción, se llamará a la función Blink_led para controlar el parpadeo de la luz LED.

Caso 2: Controlar la grabación del micrófono de OpenMV Cam

import sensor, image, time
from machine import Pin, UART

# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

# 启动摄像头
sensor.run(1)

# 设置麦克风为输入模式
mic = Pin(0, Pin.IN)

# 设置串口通信,用于将录音数据发送到电脑
uart = UART(1, 9600)

# 设置外部中断,当触发中断时,开始录音
def start_recording():
    global mic, uart
    uart.init(9600, bits=8, parity=None, stop=1)
    while True:
        if mic.value() == 1:
            data = mic.read()
            uart.write(data)
            time.sleep_ms(100)

sensor.register_irq(trigger=Pin(0), handler=start_recording)

while True:
    img = sensor.snapshot()
    img.compress(quality=80, optimize=True)
    time.sleep(1/30)  # 每30帧进行一次白平衡校准

Puntos clave: este programa demuestra cómo usar MicroPython para controlar la grabación del micrófono de OpenMV Cam. Primero, debe inicializar la cámara y configurar el formato y la resolución de la imagen. Luego, inicie la cámara mediante el método de ejecución. Luego, en un bucle infinito, las imágenes de la cámara se obtienen y guardan continuamente en un archivo local. Cabe señalar que cuando se utiliza OpenMV Cam para la transmisión de video, se debe garantizar la exactitud e integridad de la transmisión de datos.

Caso 3: El botón activa una interrupción externa:

import pyb

# 定义外部中断回调函数
def button_interrupt(line):
    print("Button pressed!")

# 初始化外部中断
extint = pyb.ExtInt('P1', pyb.ExtInt.IRQ_RISING_FALLING, pyb.Pin.PULL_UP, button_interrupt)

# 主循环
while True:
    pyb.delay(1000)

Interpretación de los puntos clave:
use pyb.ExtInt () para inicializar el objeto de interrupción externo. Los parámetros incluyen el número de pin de interrupción, la condición de activación de interrupción, la configuración de extracción / extracción de pin y la función de devolución de llamada de interrupción.
La condición de activación de la interrupción puede ser pyb.ExtInt.IRQ_RISING (activador de flanco ascendente), pyb.ExtInt.IRQ_FALLING (activador de flanco descendente) o pyb.ExtInt.IRQ_RISING_FALLING (activador de flanco ascendente y descendente).
Utilice pyb.Pin.PULL_UP para configurar el pin en modo desplegable, o pyb.Pin.PULL_DOWN para configurarlo en modo desplegable.
Defina una función de devolución de llamada de interrupción button_interrupt() para ejecutar código específico cuando se activa la interrupción.
Utilice pyb.delay() en el bucle principal para retrasar y mantener el programa en ejecución.
Este ejemplo muestra cómo usar MicroPython para activar una interrupción externa mediante un botón en OpenMV Cam y ejecutar código específico cuando se activa la interrupción.

Caso 4: El sensor de detección activa una interrupción externa:

import pyb

# 定义外部中断回调函数
def sensor_interrupt(line):
    print("Sensor triggered!")

# 初始化外部中断
extint = pyb.ExtInt('P2', pyb.ExtInt.IRQ_RISING, pyb.Pin.PULL_DOWN, sensor_interrupt)

# 主循环
while True:
    pyb.delay(1000)

Interpretación de los puntos clave:
use pyb.ExtInt () para inicializar el objeto de interrupción externo. Los parámetros incluyen el número de pin de interrupción, la condición de activación de interrupción, la configuración de extracción / extracción de pin y la función de devolución de llamada de interrupción.
La condición de activación de la interrupción puede ser pyb.ExtInt.IRQ_RISING (activador de flanco ascendente), pyb.ExtInt.IRQ_FALLING (activador de flanco descendente) o pyb.ExtInt.IRQ_RISING_FALLING (activador de flanco ascendente y descendente).
Utilice pyb.Pin.PULL_DOWN para configurar el pin en modo desplegable, o pyb.Pin.PULL_UP para configurarlo en modo desplegable.
Defina una función de devolución de llamada de interrupción sensor_interrupt() para ejecutar código específico cuando se activa la interrupción.
Utilice pyb.delay() en el bucle principal para retrasar y mantener el programa en ejecución.
Este ejemplo muestra cómo usar MicroPython para activar una interrupción externa desde un sensor en OpenMV Cam y ejecutar un código específico cuando se activa la interrupción.

Caso 5: El codificador activa una interrupción externa:

import pyb

# 定义外部中断回调函数
def encoder_interrupt(line):
    print("Encoder triggered!")

# 初始化外部中断
extint1 = pyb.ExtInt('P3', pyb.ExtInt.IRQ_RISING, pyb.Pin.PULL_NONE, encoder_interrupt)
extint2 = pyb.ExtInt('P4', pyb.ExtInt.IRQ_RISING, pyb.Pin.PULL_NONE, encoder_interrupt)

# 主循环
while True:
    pyb.delay(1000)

Interpretación de los puntos clave:
use pyb.ExtInt () para inicializar el objeto de interrupción externo. Los parámetros incluyen el número de pin de interrupción, la condición de activación de interrupción, la configuración de extracción / extracción de pin y la función de devolución de llamada de interrupción.
La condición de activación de la interrupción puede ser pyb.ExtInt.IRQ_RISING (activador de flanco ascendente), pyb.ExtInt.IRQ_FALLING (activador de flanco descendente) o pyb.ExtInt.IRQ_RISING_FALLING (activador de flanco ascendente y descendente).
Utilice pyb.Pin.PULL_NONE para deshabilitar la configuración desplegable/desplegable del pin.
Defina una función de devolución de llamada de interrupción encoder_interrupt() para ejecutar código específico cuando se activa la interrupción.
Utilice pyb.delay() en el bucle principal para retrasar y mantener el programa en ejecución.
Este ejemplo muestra cómo usar MicroPython para activar una interrupción externa a través del codificador en OpenMV Cam y ejecutar código específico cuando se activa la interrupción.

Caso 6: Utilice una interrupción externa para controlar el encendido y apagado de las luces LED

import pyb  
  
led = pyb.Pin('X1', pyb.Pin.OUT_PP) # 将X1引脚配置为输出模式,用于控制LED灯  
button = pyb.Pin('X2', pyb.Pin.IN) # 将X2引脚配置为输入模式,用于接收按键信号  
button.irq(trigger=pyb.Pin.IRQ_FALLING, handler=lambda p: led.toggle()) # 设置外部中断,触发方式为下降沿,中断处理函数为led.toggle()

Interpretación de puntos clave: este código utiliza el tiempo de ejecución MicroPython de OpenMV Cam para usar interrupciones externas para controlar el encendido y apagado de las luces LED. En el código, primero usamos la función pyb.Pin() para configurar los pines X1 y X2 en modo de salida y modo de entrada, que se usan para controlar las luces LED y recibir señales clave respectivamente. Luego use el método button.irq () para configurar la interrupción externa, el modo de activación es el flanco descendente y la función de procesamiento de interrupción es led.toggle (), que cambia el estado de la luz LED. Cuando se presiona el botón, se activará una interrupción externa y se ejecutará la función de procesamiento de interrupción para controlar el encendido y apagado de la luz LED. Cabe señalar que en OpenMV Cam, el módulo pyb se puede utilizar para el control general del hardware.

Caso 7: uso de interrupciones externas para implementar la función de conteo

import pyb  
  
button = pyb.Pin('X2', pyb.Pin.IN) # 将X2引脚配置为输入模式,用于接收按键信号  
count = 0 # 初始化计数器为0  
  
def count_callback(p):  
    global count  
    count += 1 # 计数器加1  
    print('Count:', count) # 打印计数器值  
  
button.irq(trigger=pyb.Pin.IRQ_FALLING, handler=count_callback) # 设置外部中断,触发方式为下降沿,中断处理函数为count_callback

Interpretación de puntos clave: este código utiliza el tiempo de ejecución MicroPython de OpenMV Cam para implementar la función de conteo mediante interrupciones externas. En el código, primero usamos la función pyb.Pin() para configurar el pin X2 en modo de entrada para recibir señales clave. Luego, una función count_callback() se define como una función de manejo de interrupciones, que suma 1 al contador e imprime el valor del contador. Finalmente, use el método button.irq () para configurar la interrupción externa, el modo de activación es el flanco descendente y la función de procesamiento de interrupciones es count_callback (). Cuando se presiona el botón, se activa una interrupción externa y se ejecuta la función de procesamiento de interrupción para realizar la función de conteo. Cabe señalar que el recuento de variables globales se utiliza en la función de manejo de interrupciones para implementar la función de conteo.

Caso 8: uso de interrupciones externas para implementar la función de fotografía programada

import pyb  
import sensor  
import image  
import time  
  
button = pyb.Pin('X2', pyb.Pin.IN) # 将X2引脚配置为输入模式,用于接收按键信号  
sensor.reset() # 初始化摄像头  
sensor.set_pixformat(sensor.GRAYSCALE) # 设置摄像头像素格式为灰度图像  
sensor.set_framesize(sensor.QVGA) # 设置摄像头帧大小为QVGA  
sensor.skip_frames(time=2000) # 等待摄像头稳定工作  
  
def capture_callback(p):  
    img = sensor.snapshot() # 拍照并获取图像对象  
    img.save('capture.jpg') # 保存图像到文件系统中  
    print('Capture image saved.') # 打印保存成功的提示信息  
  
button.irq(trigger=pyb.Pin.IRQ_FALLING, handler=capture_callback) # 设置外部中断,触发方式为下降沿,中断处理函数为capture_callback

Interpretación de puntos clave: este código utiliza el tiempo de ejecución MicroPython de OpenMV Cam para utilizar interrupciones externas para implementar la función de fotografía programada. En el código, primero usamos la función pyb.Pin() para configurar el pin X2 en modo de entrada para recibir señales clave. Luego use el módulo del sensor para inicializar la cámara y configurar los parámetros relevantes. Luego, se define una función capture_callback() como función de procesamiento de interrupciones. Esta función toma una fotografía y obtiene el objeto de imagen, guarda la imagen en el sistema de archivos e imprime un mensaje indicando que el guardado se realizó correctamente. Finalmente, use el método button.irq () para configurar la interrupción externa, el modo de activación es el flanco descendente y la función de procesamiento de interrupciones es capture_callback (). Cuando se presiona el botón, se activará una interrupción externa y se ejecutará la función de procesamiento de interrupción, realizando así la función de toma de fotografías programada. Cabe señalar que en OpenMV Cam, los módulos de sensor y de imagen se pueden utilizar para el control de la cámara y el procesamiento de imágenes.

Estos programas de muestra muestran cómo usar MicroPython para implementar diferentes escenarios de aplicación de interrupciones externas en OpenMV Cam. Estas incluyen interrupciones activadas por botones, interrupciones activadas por sensores e interrupciones activadas por codificadores. Para cada ejemplo, usamos pyb.ExtInt() para inicializar el objeto de interrupción externo y definir una función de devolución de llamada de interrupción para ejecutar código específico cuando se activa la interrupción.

Tenga en cuenta que los casos anteriores son sólo para ampliar ideas y pueden contener errores o inaplicabilidad. Diferentes plataformas de hardware, escenarios de uso y versiones de MicroPython pueden dar lugar a diferentes métodos de uso. En la programación real, debe ajustarla de acuerdo con la configuración de su hardware y sus necesidades específicas, y realizar múltiples pruebas reales. Es importante asegurarse de que el hardware esté conectado correctamente y comprender las especificaciones y características de los sensores y dispositivos utilizados.

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_41659040/article/details/133546448
Recomendado
Clasificación