openmv使用总结笔记(基础篇)

本文介绍了OpenMV摄像头的入门步骤,包括环境搭建、固件更新、程序下载与运行。通过简单的点灯和延时函数示例,展示了如何使用Python进行硬件控制。此外,还提及了按键输入、外部中断、定时器、I2C通信(以OLED显示为例)、RTC实时时钟、ADC/DAC等功能,并提供了相关库函数的使用链接。适合电子爱好者和初学者快速掌握OpenMV。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不久前刚刚接触openmv这玩意,是很多大学生做项目和比赛经常用到的一个集成了主控芯片的摄像头,openmv具有使用简单、上手快的特点,搭载microPython,这玩意和python一样不用了解底层驱动,全部都封装好在库函数中,只管疯狂调用就好,趁着最近有时间也玩玩这玩意,做点笔记总结。

入门
环境的搭建:安装openmv这一官方开发环境,便于编程和调试以及相关的openmv串口驱动安装

关于固件更新:固件意外丢失或者希望升级到较新版本固件时候,就需重新烧录固件,openmv上是一个STM32单片机,重新烧录固件相当于给单片机烧录程序

openmv例程的下载:已经连接USB线在IDE下运行的程序需要依赖于IDE,要将使程序脱离IDE可以通过将.py文件copy到设备的文件系统中,设备红色 LED 灯亮表示文件正在重写,需要等待红色灯灭掉然后按下复位按键,程序即运行

点灯:两步
(1)导入LED模块
(2)调用函数点亮led
from pyb import LED
LED(3).on()

延时函数:
(1)导入utime模块
(2)调用延时函数utime.sleep_ms(ms)。ms为参数,表示所延时的时间
import utime
utime.sleep(1) #表示延时1秒
相关的openmv库函数的使用可以查看文档,链接:https://docs.openmv.io/library

输入按键:
(1)导入Pin模块
(2)调用Pin函数
from pyb import Pin
KEY = Pin(‘P9’, Pin.IN, Pin.PULL_UP) #传入的参数有id引脚号,mode输入或输出模式,pull_mode上下拉电阻配置

外部中断:
(1)导入Extlnt模块
(2)调用函数
from pyb import Pin,ExtInt,LED
pyb.ExtInt(pin,mode,pull_mode,callback)#callback中断后执行的回调函数

定时器:

在这里插入图片描述
I2C:以OLED显示屏为例,显示所要显示的字符内容
(1)从 machine 模块导入 I2C、 Pin 子模块
(2)调用函数,完成相关配置

RTC实时时钟:
在这里插入图片描述
ADC/DAC:也是封装有库函数,直接调用即可

### 如何在 OpenMV 中集成和使用 OpenCV 尽管 OpenMV 和 OpenCV 是两个不同的工具,它们的功能有部分重叠,但在某些情况下可以尝试将两者结合起来使用。以下是关于如何在 OpenMV 中集成和使用 OpenCV 的详细说明。 #### 一、OpenMV 和 OpenCV 的区别 OpenMV 主要用于嵌入式设备上的实时图像处理任务,它通过内置的固件支持多种硬件接口(如 UART、I2C、SPI 等),可以直接与其他硬件交互[^2]。相比之下,OpenCV 更专注于计算机视觉算法库的设计与实现,适用于更复杂的图像处理场景,但它通常运行于桌面级操作系统上。 由于 OpenMV 设备资源有限,直接在其内部环境中加载完整的 OpenCV 可能会受到内存和其他性能限制的影响。因此,实际应用中可能需要考虑外部扩展的方式。 --- #### 二、在 OpenMV 上调用 OpenCV 的方法 为了实现在 OpenMV使用 OpenCV 进行图像处理,可采用以下两种常见方式: ##### 方法 1:通过 USB 或串口通信连接到主机 在这种模式下,OpenMV 负责采集摄像头数据并通过 USB 或其他通信协议传输给主机端程序(例如运行在 PC 上的 Python)。主机端则利用已安装好的 OpenCV 对接收到的数据执行进一步的复杂计算或分析。 具体流程如下: 1. 使用 OpenMV IDE 编写脚本获取原始帧并发送至电脑; 2. 在宿主机侧接收这些帧后传递给基于 OpenCV 构建的应用逻辑完成后续操作[^3]。 示例代码展示如何从 OpenMV 发送图片到 PC 并由后者负责渲染显示: ```python import cv2 from openmv import * def send_frame_to_host(): img = sensor.snapshot() # 获取当前画面快照 usb.send(img) # 将该帧推送到USB流通道供PC读取 while True: send_frame_to_host() ``` 与此同时,在客户端一侧需监听来自微控制器的消息队列以便及时更新界面内容: ```python cap = cv.VideoCapture(0) if not cap.isOpened(): raise IOError("Cannot connect to the camera!") ret, frame = cap.read() while ret: gray_image = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # Perform additional processing with OpenCV here... processed_img = some_opencv_function(gray_image) cv.imshow('Processed Video Feed', processed_img) keypress_result = cv.waitKey(1) & 0xFF if keypress_result == ord('q'): break cap.release(); cv.destroyAllWindows(); ``` 上述例子展示了怎样借助标准视频捕获 API 来同步两套独立系统的状态变化过程[^1]^。 --- ##### 方法 2:裁剪版轻量化部署方案 如果希望减少对外部依赖,则可以选择移植精简版本的 OpenCV 至目标平台之上。不过这一步骤涉及较多底层开发工作量,并且最终效果取决于所选芯片组的具体规格参数等因素制约情况。 一般建议仅保留最基础的核心组件及其关联头文件定义等内容即可满足基本需求;同时注意调整编译选项以适应特定架构特性要求。 需要注意的是这种方法难度较大而且维护成本较高,除非确实存在特殊应用场景否则不推荐初学者轻易尝试。 --- ### 总结 综上所述,虽然理论上可以在一定程度范围内让 OpenMV 结合 OpenCV 工作起来,但从工程实践角度来看前者更适合快速原型验证阶段或者低功耗边缘推理场合下的简单任务解决思路探索方向发展下去更为合适一些。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值