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

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 pyb.Pin para controlar y gestionar el estado y el comportamiento de los pines. Sus características principales, escenarios de aplicación y asuntos que requieren atención se explicarán en detalle a continuación.

caracteristica principal:

Control de pines: la función pyb.Pin le permite controlar y configurar de manera flexible los pines en la cámara OpenMV. Puede configurar los modos de entrada y salida, el estado del nivel, las resistencias pull-up y pull-down, etc. de los pines para satisfacer las diferentes necesidades de la aplicación.

Versatilidad: los pines de OpenMV Cam admiten múltiples funciones, como entrada y salida digitales, entrada analógica, salida PWM, activación de interrupciones, etc. Puede elegir diferentes funciones de pin según las necesidades específicas y configurarlas y administrarlas a través de pyb.Pin.

Desarrollo simplificado: con el lenguaje de programación MicroPython, puede controlar y administrar los pines escribiendo un código conciso. OpenMV Cam proporciona una interfaz de programación amigable y código de muestra, lo que hace que el desarrollo y la depuración del control de pines sea más fácil y conveniente.

Escenarios de aplicación:

Interfaz del sensor: los pines de OpenMV Cam se pueden usar para conectar varios sensores, como sensor de temperatura, sensor de luz, sensor de aceleración, etc. A través de la función pyb.Pin, el modo de entrada y el estado de nivel del pin se pueden configurar para realizar la interacción de datos y la comunicación con el sensor.

Control del actuador: los pines se pueden utilizar para controlar dispositivos actuadores, como motores, servos, relés, etc. A través de la función pyb.Pin, el modo de salida y el estado de nivel del pin se pueden configurar para controlar y accionar el dispositivo actuador.

Interfaz de dispositivo externo: los pines de OpenMV Cam pueden comunicarse y conectarse con otros dispositivos externos, como pantallas, módulos inalámbricos, placas de expansión, etc. A través de la función pyb.Pin, la función y el protocolo de comunicación del pin se pueden configurar para realizar el intercambio y control de datos con dispositivos externos.

Cosas a tener en cuenta:

Voltaje del pin: cuando utilice la función pyb.Pin, debe prestar atención a la compatibilidad de voltaje del pin. OpenMV Cam generalmente usa un nivel de 3.3V, por lo que es necesario asegurarse de que el voltaje de los dispositivos externos y los pines sean compatibles para evitar daños en los pines o errores de datos.

Limitaciones de los pines: cada pin tiene ciertas limitaciones en sus funciones y características. Cuando utilice la función pyb.Pin, debe revisar detenidamente la documentación de OpenMV Cam y la tabla de especificaciones de pines para comprender las funciones, características eléctricas y limitaciones de cada pin y asegurarse de que estén configurados y utilizados correctamente.

Consumo de corriente y energía: cuando utilice pines para controlar y controlar dispositivos externos, debe prestar atención a la salida de corriente máxima del pin y al consumo de energía de todo el sistema. Una salida de corriente excesiva puede causar una sobrecarga de pines, mientras que el consumo excesivo de energía puede afectar la estabilidad y el rendimiento de OpenMV Cam.

En resumen, la función pyb.Pin de OpenMV Cam de MicroPython proporciona una interfaz de gestión y control de pines flexible, que se puede utilizar para aplicaciones como conectar sensores, controlar actuadores y comunicarse con dispositivos externos. Tiene características clave como control de pines, versatilidad y desarrollo simplificado. Al usarlo, debe prestar atención a factores como la compatibilidad del voltaje de los pines, las limitaciones de los pines y el consumo de energía actual. Al configurar y utilizar correctamente la función pyb.Pin, se puede lograr la interacción de datos y el control entre OpenMV Cam y dispositivos externos.

Caso 1: Controlando el interruptor de luces LED

import sensor, image, time
from pyb import LED

sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置帧大小为320x240
sensor.skip_frames(time = 2000) # 等待设置生效,延时2秒

led = LED(1) # 初始化LED,连接到引脚1

while True:
    img = sensor.snapshot() # 捕获一帧图像
    if img.is_dark(): # 如果图像较暗
        led.off() # 关闭LED
    else:
        led.on() # 打开LED
    time.sleep_ms(100) # 延时100毫秒

Interpretación: Este programa primero importa los módulos de sensor, imagen, tiempo y pyb.LED. Luego inicialice la cámara, configure el formato de píxeles en RGB565, el tamaño del fotograma en 320x240 y espere a que la configuración surta efecto, con un retraso de 2 segundos. Luego inicialice el LED y conéctelo al pin 1. En un bucle infinito, las imágenes de la cámara se capturan continuamente. Si la imagen es oscura, apague el LED; de lo contrario, enciéndalo. El retraso final es de 100 milisegundos.

Caso 2: Control del interruptor del timbre

import sensor, image, time
from pyb import BUZZER

sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置帧大小为320x240
sensor.skip_frames(time = 2000) # 等待设置生效,延时2秒

buzzer = BUZZER(18) # 初始化蜂鸣器,连接到引脚18

while True:
    img = sensor.snapshot() # 捕获一帧图像
    if img.is_dark(): # 如果图像较暗
        buzzer.off() # 关闭蜂鸣器
    else:
        buzzer.on() # 打开蜂鸣器
    time.sleep_ms(100) # 延时100毫秒

Interpretación: Este procedimiento es similar al primer caso, excepto que el LED se reemplaza por un timbre. Primero, se importaron los módulos de sensor, imagen, tiempo y pyb.BUZZER. Luego inicialice la cámara, configure el formato de píxeles en RGB565, el tamaño del fotograma en 320x240 y espere a que la configuración surta efecto, con un retraso de 2 segundos. Luego inicialice el timbre y conéctelo al pin 18. En un bucle infinito, las imágenes de la cámara se capturan continuamente. Si la imagen es oscura, apague el timbre; en caso contrario, enciéndalo. El retraso final es de 100 milisegundos.

Caso 3: Controlando el interruptor del teclado

import sensor, image, time
from pyb import KEY

sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置帧大小为320x240
sensor.skip_frames(time = 2000) # 等待设置生效,延时2秒

key = KEY(14, pyb.Pin('E4')) # 初始化按键板,连接到引脚14和E4

while True:
    img = sensor.snapshot() # 捕获一帧图像
    if img.is_dark(): # 如果图像较暗
        key.press() # 按下按键板
    else:
        key.release() # 松开按键板
    time.sleep_ms(100) # 延时100毫秒

Interpretación: Este programa es similar al segundo caso, excepto que el timbre se reemplaza por un teclado. Primero, se importaron los módulos de sensor, imagen, tiempo y pyb.KEY. Luego inicialice la cámara, configure el formato de píxeles en RGB565, el tamaño del fotograma en 320x240 y espere a que la configuración surta efecto, con un retraso de 2 segundos. Luego inicialice el teclado y conéctelo a los pines 14 y E4. En un bucle infinito, las imágenes de la cámara se capturan continuamente. Si la imagen es oscura, presione el teclado; de lo contrario, suelte el teclado. El retraso final es de 100 milisegundos.

Caso 4: use pyb.Pin para controlar el parpadeo del LED

import pyb, time  
  
led = pyb.Pin('X1', pyb.Pin.OUT_PP) # 初始化LED引脚为输出模式  
while True:  
    led.toggle() # 翻转LED状态  
    time.sleep(500) # 延时500ms

Interpretación de los puntos clave:
Primero inicialice el pin LED al modo de salida.
En un bucle infinito, use la función toggle() para cambiar el estado del LED y use la función time.sleep() para retrasar 500 ms.

Caso 5:: Utilice pyb.Pin para leer el estado de la clave

import pyb, time  
  
button = pyb.Pin('X2', pyb.Pin.IN, pyb.Pin.PULL_UP) # 初始化按键引脚为输入模式,上拉电阻  
while True:  
    if button.value() == 0: # 如果按键被按下  
        print('Button pressed') # 打印消息  
    time.sleep(100) # 延时100ms

Interpretación de los puntos clave:
Primero inicialice el pin del botón al modo de entrada y la resistencia pull-up.
En un bucle infinito, use la función value() para leer el estado de la clave y, si se presiona la tecla (el valor es 0), imprima un mensaje. Utilice la función time.sleep() para retrasar 100 ms.

Caso 6: use pyb.Pin para controlar el ángulo del mecanismo de dirección

import pyb, time  
  
servo = pyb.Pin('X3', pyb.Pin.OUT_PP) # 初始化舵机引脚为输出模式  
while True:  
    for angle in range(0, 181, 10): # 从0度到180度,步长为10度  
        servo.pulse_width_us(500 + angle * 10) # 设置舵机脉冲宽度,控制舵机角度  
        time.sleep(20) # 延时20ms,以减少CPU的使用率

Interpretación de los puntos clave:
Primero inicialice los pines del servo al modo de salida.
En un bucle infinito, utilice un bucle for para pasar de 0 grados a 180 grados en pasos de 10 grados. Utilice la función pulse_width_us() para establecer el ancho del pulso del servo y controlar el ángulo del servo. Utilice la función time.sleep() para retrasar 20 ms y reducir el uso de la CPU.

Caso 7: Controlar la luz LED para encender y apagar:

import time
import pyb

led = pyb.Pin("LED1", pyb.Pin.OUT)

while True:
    led.toggle()
    time.sleep(1)

Interpretación de puntos clave:
este programa utiliza el módulo pyb.Pin para controlar las luces LED en OpenMV Cam.
Cree una instancia de un objeto Pin usando pyb.Pin("LED1", pyb.Pin.OUT), conéctelo al pin LED1 y configúrelo en modo de salida.
En un bucle infinito, deje que el programa continúe realizando las siguientes operaciones:
use led.toggle() para cambiar el estado de la luz LED (encendido y apagado).
Utilice time.sleep(1) para retrasar 1 segundo el control de la frecuencia de conmutación del estado de la luz LED.

Caso 8: Leer estado del botón:

import pyb

button = pyb.Pin("USR", pyb.Pin.IN)

while True:
    if button.value():
        print("Button pressed")
    else:
        print("Button released")

Interpretación de puntos clave:
este programa utiliza el módulo pyb.Pin para leer el estado del botón en OpenMV Cam.
Utilice pyb.Pin("USR", pyb.Pin.IN) para crear una instancia de un objeto Pin, conéctelo al pin USR y configúrelo en modo de entrada.
En un bucle infinito, haga que el programa continúe haciendo lo siguiente:
Utilice button.value() para leer el estado del botón. Si se presiona el botón, button.value() devolverá True; si se suelta el botón, button.value() devolverá False.
Según el estado del botón, utilice la función print() para generar la información correspondiente.

Caso 9: Mecanismo de dirección con control PWM:

import time
import pyb

servo = pyb.Servo(1)  # 连接到舵机的引脚号

while True:
    servo.angle(0)  # 设置舵机角度为0度
    time.sleep(1)
    servo.angle(90)  # 设置舵机角度为90度
    time.sleep(1)
    servo.angle(-90)  # 设置舵机角度为-90度
    time.sleep(1)

Interpretación de puntos clave:
este programa utiliza el módulo pyb.Pin para controlar el servo en la cámara OpenMV.
Utilice pyb.Servo(1) para crear una instancia de un objeto Servo y conéctelo al número de pin del servo (configurado de acuerdo con la situación de conexión real).
En un bucle infinito, haga que el programa continúe realizando las siguientes operaciones:
Utilice servo.angle() para establecer el ángulo del servo. En el ejemplo, establezca los ángulos del servo en 0 grados, 90 grados y -90 grados respectivamente.
Utilice time.sleep(1) para retrasar 1 segundo para controlar la velocidad de cambio del ángulo del servo.

Estos ejemplos de aplicaciones prácticas muestran cómo utilizar el módulo pyb.Pin para controlar la funcionalidad de OpenMV Cam. El primer ejemplo demuestra cómo controlar el encendido y apagado de una luz LED configurando el pin del LED en modo de salida y usando led.toggle() para alternar el estado de la luz LED. El segundo ejemplo muestra cómo leer el estado del botón configurando el pin del botón en modo de entrada y usando button.value() para leer el estado del botón. El tercer ejemplo demuestra cómo usar PWM para controlar el servo creando una instancia del objeto Servo y usando servo.angle() para establecer el ángulo del servo.

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