[Diao Ye aprende programación] Manual de MicroPython OpenMV Cam pyb.freq

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 MB, lo que le permite transmitir fácilmente datos de flujo de imágenes a la placa de expansión LCD, a la 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í
La función pyb.freq de OpenMV Cam de MicroPython se utiliza para configurar la frecuencia principal de OpenMV Cam, es decir, la frecuencia de reloj del controlador.

caracteristica principal:

Configuración de la frecuencia del reloj del controlador: la función pyb.freq se puede utilizar para configurar la frecuencia del reloj del controlador OpenMV Cam. Al ajustar la frecuencia del reloj, puede cambiar la velocidad de funcionamiento y el rendimiento del controlador. Las frecuencias de reloj más altas aumentan la velocidad y la capacidad de respuesta de la computadora, mientras que las frecuencias de reloj más bajas reducen el consumo de energía y la generación de calor.

Flexibilidad: la función pyb.freq proporciona opciones flexibles de configuración de frecuencia. Los usuarios pueden elegir la frecuencia de reloj adecuada según las necesidades específicas y los escenarios de aplicación. OpenMV Cam admite múltiples opciones de frecuencia de reloj predefinidas y también se pueden configurar frecuencias personalizadas para satisfacer necesidades específicas.

Tiempo real: la función pyb.freq puede configurar dinámicamente la frecuencia del reloj mientras el programa se está ejecutando. Esto significa que la frecuencia del reloj se puede ajustar de manera flexible en diferentes etapas o tareas según las necesidades en tiempo real para lograr el mejor equilibrio entre rendimiento y consumo de energía.

Escenarios de aplicación:

Optimización del rendimiento: la función pyb.freq se puede utilizar en escenarios de aplicaciones de optimización del rendimiento. Al aumentar la frecuencia de reloj del controlador, se puede acelerar la velocidad de ejecución del código y mejorar la eficiencia del procesamiento de imágenes, el cálculo y la operación del algoritmo, lo cual es adecuado para aplicaciones con altos requisitos de rendimiento en tiempo real.

Aplicaciones de bajo consumo: OpenMV Cam es un módulo de cámara integrado que se usa comúnmente en dispositivos que funcionan con baterías. Al reducir la frecuencia del reloj del controlador, se puede reducir el consumo de energía y la generación de calor, se puede extender la vida útil de la batería y es adecuado para aplicaciones con mayores requisitos de consumo de energía.

Enseñanza y aprendizaje: el uso de la función pyb.freq implica la configuración subyacente y el ajuste del rendimiento del controlador, lo que presenta ciertos desafíos y valor de aprendizaje para la enseñanza y el aprendizaje. Los profesores pueden ayudar a los estudiantes a comprender y dominar los principios y métodos de configuración de la frecuencia del reloj a través de ejemplos y prácticas.

Cosas a tener en cuenta:

Rango de frecuencia y estabilidad: al configurar la frecuencia con la función pyb.freq, debe prestar atención a la legalidad y estabilidad de la frecuencia seleccionada. Seleccionar una frecuencia fuera de las especificaciones o del rango operativo del controlador puede provocar errores impredecibles o inestabilidad del sistema.

Equilibrio de rendimiento y energía: al ajustar la frecuencia del reloj, existe una compensación entre el rendimiento y el consumo de energía. Las frecuencias más altas pueden mejorar el rendimiento pero aumentan el consumo de energía y la generación de calor, y las frecuencias más bajas pueden reducir el consumo de energía pero pueden reducir el rendimiento. Por lo tanto, existen compensaciones al configurar la frecuencia según los requisitos de la aplicación y las características del dispositivo.

Compatibilidad: la disponibilidad y funcionalidad de la función pyb.freq pueden variar entre diferentes versiones de hardware y versiones de firmware. Al utilizar la función pyb.freq, debe confirmar si la versión de hardware y firmware de OpenMV Cam utilizada admite esta función y consultar documentos e información relevantes para conocer el uso preciso y las precauciones.

En resumen, la función pyb.freq de OpenMV Cam de MicroPython se utiliza para configurar la frecuencia de reloj del controlador, que tiene las características de controlar el rendimiento y el consumo de energía. Es adecuado para optimización del rendimiento, aplicaciones de bajo consumo y escenarios de enseñanza y aprendizaje. Al usarlo, debe prestar atención a factores como el rango de frecuencia y la estabilidad, el equilibrio entre el rendimiento y el consumo de energía y la compatibilidad, y configurar la frecuencia del reloj de manera razonable de acuerdo con las necesidades específicas y los escenarios de aplicación.

Caso 1: utilice pyb.freq() para implementar el filtrado de frecuencia de imágenes

Análisis: en este caso, usaremos la función pyb.freq() para implementar el filtrado de frecuencia de la imagen. Primero, necesitamos importar el módulo OpenMV Cam y luego configurar la resolución de la cámara y la velocidad de fotogramas. A continuación, usaremos un bucle para capturar imágenes continuamente y llamaremos a la función pyb.freq() después de cada captura para implementar el filtrado de frecuencia. Finalmente, guardamos la imagen capturada en un archivo.

Código:

import sensor, image, time

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

# 捕获图像并应用频率滤波
while True:
    img = sensor.snapshot()
    result = img.frequency_filter(1)  # 应用1Hz频率滤波
    if result:
        img.save("image_{}.jpg".format(time.time()))
    time.sleep(1000)  # 延时1秒

Interpretación de puntos clave: en este caso, utilizamos la función Frequency_filter () de OpenMV Cam para implementar el filtrado de frecuencia. Esta función acepta un parámetro que representa el valor de frecuencia que se aplicará. Por ejemplo, cuando el parámetro es 1, significa aplicar un filtrado de frecuencia de 1 Hz. Si el filtrado de frecuencia tiene éxito, la función devolverá Verdadero; de lo contrario, devolverá Falso.

Caso 2: utilice pyb.freq() para implementar el filtrado de paso bajo de imágenes

Análisis: en este caso, usaremos la función pyb.freq() para implementar el filtrado de paso bajo de la imagen. Primero, necesitamos importar el módulo OpenMV Cam y luego configurar la resolución de la cámara y la velocidad de fotogramas. A continuación, usaremos un bucle para capturar continuamente la imagen y llamaremos a la función pyb.freq() después de cada captura para implementar el filtrado de paso bajo. Finalmente, guardamos la imagen capturada en un archivo.

Código:

import sensor, image, time

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

# 捕获图像并应用低通滤波
while True:
    img = sensor.snapshot()
    result = img.frequency_filter(80)  # 应用80Hz频率滤波
    if result:
        img.save("image_{}.jpg".format(time.time()))
    time.sleep(1000)  # 延时1秒

Interpretación de puntos clave: en este caso, utilizamos la función Frequency_filter() de OpenMV Cam para implementar el filtrado de paso bajo. Esta función acepta un parámetro que representa el valor de frecuencia que se aplicará. Por ejemplo, cuando el parámetro es 80, significa aplicar un filtrado de frecuencia de 80 Hz. Si el filtrado de frecuencia tiene éxito, la función devolverá Verdadero; de lo contrario, devolverá Falso.

Caso 3: uso de pyb.freq() para implementar el filtrado de paso alto de imágenes

Análisis: en este caso, usaremos la función pyb.freq() para implementar el filtrado de paso alto de la imagen. Primero, necesitamos importar el módulo OpenMV Cam y luego configurar la resolución de la cámara y la velocidad de fotogramas. A continuación, usaremos un bucle para capturar continuamente la imagen y llamaremos a la función pyb.freq() después de cada captura para implementar el filtrado de paso alto. Finalmente, guardamos la imagen capturada en un archivo.

Código:

import sensor, image, time

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

# 捕获图像并应用高通滤波
while True:
    img = sensor.snapshot()
    result = img.frequency_filter(1)  # 应用1Hz频率滤波
    if result:
        img.save("image_{}.jpg".format(time.time()))
    time.sleep(1000)  # 延时1秒

Interpretación de puntos clave: en este caso, utilizamos la función Frequency_filter () de OpenMV Cam para implementar el filtrado de paso alto. Esta función acepta un parámetro que representa el valor de frecuencia que se aplicará. Por ejemplo, cuando el parámetro es 1, significa aplicar un filtrado de frecuencia de 1 Hz. Si el filtrado de frecuencia tiene éxito, la función devolverá Verdadero; de lo contrario, devolverá Falso.

Caso 4: Establecer la velocidad de fotogramas de la cámara

import sensor, image, pyb  
  
sensor.reset() # 初始化摄像头  
sensor.set_pixformat(sensor.RGB565) # 设置像素格式  
sensor.set_framesize(sensor.QVGA) # 设置帧大小  
sensor.set_fps(30) # 设置摄像头帧率为30fps  
pyb.freq(160000000) # 设置主频为160MHz  
sensor.skip_frames(time = 2000) # 等待摄像头稳定  
  
while(True):  
    img = sensor.snapshot() # 拍摄照片  
    print(img) # 打印照片

Interpretación de los puntos clave:
primero inicialice la cámara y configure el formato de píxeles y el tamaño del fotograma. Utilice la función set_fps() para configurar la velocidad de cuadros de la cámara en 30 fps. Utilice la función pyb.freq() para configurar la frecuencia principal en 160MHz para aumentar la velocidad de procesamiento de la cámara. En un bucle infinito, utilice la función instantánea() para tomar fotografías en tiempo real e imprimirlas. Al configurar la velocidad de cuadros de la cámara y la frecuencia principal, puede ajustar la velocidad de disparo y las capacidades de procesamiento de imágenes de la cámara.

Caso 5: Ajustar el contraste y el brillo de la cámara

import sensor, image, pyb  
  
sensor.reset() # 初始化摄像头  
sensor.set_pixformat(sensor.RGB565) # 设置像素格式  
sensor.set_framesize(sensor.QVGA) # 设置帧大小  
sensor.set_contrast(2) # 设置对比度为2  
sensor.set_brightness(1) # 设置亮度为1  
pyb.freq(160000000) # 设置主频为160MHz  
sensor.skip_frames(time = 2000) # 等待摄像头稳定  
  
while(True):  
    img = sensor.snapshot() # 拍摄照片  
    print(img) # 打印照片

Interpretación de los puntos clave:
primero inicialice la cámara y configure el formato de píxeles y el tamaño del fotograma. Utilice la función set_contrast() y la función set_brightness() para establecer el contraste y el brillo respectivamente. Utilice la función pyb.freq() para configurar la frecuencia principal en 160MHz para aumentar la velocidad de procesamiento de la cámara. En un bucle infinito, utilice la función instantánea() para tomar fotografías en tiempo real e imprimirlas. Al ajustar el contraste y el brillo de la cámara, puede mejorar la claridad y los efectos visuales de las fotografías que toma.

Caso 6: Procesamiento de transmisión de video en tiempo real de la cámara

import sensor, image, pyb, machine  
  
sensor.reset() # 初始化摄像头  
sensor.set_pixformat(sensor.RGB565) # 设置像素格式  
sensor.set_framesize(sensor.QVGA) # 设置帧大小  
pyb.freq(160000000) # 设置主频为160MHz  
sensor.skip_frames(time = 2000) # 等待摄像头稳定  
lcd = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21), freq=100000) # 初始化LCD屏幕  
lcd.init() # 初始化LCD屏幕  
lcd.direction(lcd.YX_LRUD) # 设置LCD屏幕方向为从左到右,从上到下  
lcd.clear() # 清空LCD屏幕  
lcd.display(image.Image()) # 在LCD屏幕上显示一张空白图片,以准备接收实时视频流  
stream = sensor.snapshot() # 开始摄像头实时视频流  
while(True):  
    lcd.display(stream) # 在LCD屏幕上显示实时视频流

Interpretación de los puntos clave:
primero inicialice la cámara y configure el formato de píxeles y el tamaño del fotograma. Utilice la función pyb.freq() para configurar la frecuencia principal en 160MHz para aumentar la velocidad de procesamiento de la cámara. Inicialice la pantalla LCD, establezca su orientación y borre la pantalla. Utilice la función snapshot() para iniciar la transmisión de video en tiempo real de la cámara. En un bucle infinito, muestra la transmisión de vídeo en vivo en la pantalla LCD. A través del procesamiento de transmisión de video en tiempo real, se puede lograr el monitoreo y visualización de cámaras en tiempo real.

Caso 7: Configure la frecuencia del reloj del sistema:

import pyb

pyb.freq(200000000)  # 设置系统时钟频率为200MHz
要点解读:

该程序使用pyb.freq()函数设置系统时钟频率。
pyb.freq(200000000)将系统时钟频率设置为200MHz。

Caso 8: Medición del tiempo de ejecución del código:

import pyb

start_time = pyb.millis()  # 记录开始时间

# 执行需要测量时间的代码

end_time = pyb.millis()  # 记录结束时间
execution_time = end_time - start_time  # 计算代码执行时间
print("Execution Time:", execution_time, "ms")

Interpretación de puntos clave:
este programa utiliza la función pyb.millis () para medir el tiempo de ejecución del código.
start_time = pyb.millis() registra la hora de inicio, que es el tiempo antes de que se ejecute el código.
Después de ejecutar el código que debe medirse, use end_time = pyb.millis() para registrar la hora de finalización, que es el tiempo después de que se ejecuta el código.
Al calcular el tiempo de ejecución = tiempo_final - tiempo_inicio, se obtiene el tiempo de ejecución del código.
Utilice la función print() para generar el tiempo de ejecución del código.

Caso 9: Utilice un temporizador para generar señales de pulso periódicas:

import pyb

timer = pyb.Timer(1)  # 创建定时器对象
timer.init(freq=1000)  # 设置定时器频率为1kHz

ch = timer.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7"))  # 创建通道对象
ch.pulse_width_percent(50)  # 设置脉冲宽度占空比为50%

timer.counter()  # 获取定时器计数器值

Interpretación de puntos clave:
este programa utiliza los módulos pyb.Timer y pyb.Pin para generar señales de pulso periódicas.
timer = pyb.Timer(1) crea un objeto de temporizador y establece su número en 1.
Utilice timer.init(freq=1000) para configurar la frecuencia del temporizador en 1kHz.
ch = timer.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7")) crea un objeto de canal, especifica el número de canal como 1, usa el modo PWM y envía la señal al pin "P7" .
Utilice ch.pulse_width_percent(50) para configurar el ciclo de trabajo del ancho de pulso al 50%.
Utilice timer.counter() para obtener el valor del contador del temporizador, que se puede utilizar para operaciones adicionales o para monitorear el estado del temporizador.
Estos códigos de muestra muestran cómo usar el módulo pyb.freq en MicroPython y OpenMV Cam para configurar la frecuencia del reloj del sistema, medir el tiempo de ejecución del código y generar señales de pulso periódicas. Puede modificar y ampliar estos códigos de muestra según sus propias necesidades y escenarios de aplicación específicos.

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/133579582
Recomendado
Clasificación