视觉开发板—K210自学笔记(二)
视觉开发板—K210
一、开发之前的准备
工欲善其事必先利其器。各位同学先下载下面的手册:
1.Sipeed-Maix-Bit 资料下载:https://dl.sipeed.com/shareURL/MAIX/HDK/Sipeed-Maix-Bit/Maix-Bit_V2.0_with_MEMS_microphone
2.Sipeed-Maix-Bit 规格书下载:https://dl.sipeed.com/fileList/MAIX/HDK/Sipeed-Maix-Bit/Specifications/Sipeed%20Maix-Bit%20%E8%A7%84%E6%A0%BC%E4%B9%A6%20V2.0.pdf
3.Sipeed-Maix-Bit 原理图下载:https://dl.sipeed.com/fileList/MAIX/HDK/Sipeed-Maix-Bit/Maix-Bit_V2.0_with_MEMS_microphone/Maix-Bit_V2.0_Schematic.pdf
开发板参数 | |
板载资源 | 按键*2 |
RGB灯*1 | |
MEMS Microphone*1 | |
USB to UART | |
128Mbit Flash*1 | |
板载接口 | USB Type-C接口 |
24PIN DVP摄像头接口 | |
24PIN LCD接口 | |
MicroSD卡槽 | |
所有IO排针引脚引出 | |
尺寸 | 53.3*25.4mm |
供电电压 | 5.0V @ 300mA(供电电流需大于300mA) |
工作温度 | -30℃ ~85C |
二、MaixPy
按照先硬后软的顺序,我们再来看看开发环境。MaixPy 是将 Micropython 移植到 K210(一款 64 位双核带硬件 FPU、卷积加速器、FFT、Sha256 的 RISC-V CPU ) 的一个项目; MaixPy 不但支持 MCU 常规操作, 还集成了硬件加速的 AI 机器视觉和麦克风阵列相关的算法。相应的高达 1TOPS 算力核心模块却不到¥50, 凭借着快速开发和较低成本与其较小的体积很适合 AIOT 领域智能应用
MicroPython 是基于 Python3 的语法做的一款解析器,包含了 Python3 的大多数基础语法, 主要运行在性能和内存有限的嵌入式芯片上。(注意 Micropython 不包含 Python3 的所有语法)。总之MaixPy 让我们在 K210 上编程更加简单快捷高效。
使用 MaixPy 的入门教程,包括基础知识,一定要看,才能避免遇到很多问题,会给后面开发节省很多时间。
K210的开发提供了各个功能模块的 API 手册,方便编程时查阅
1.标准库:micropython 的标准库,很多 API 兼容 python3 的 API
2.machine:机器相关,重启控制,机器 UID,以及各种外设控制
3.Maix: 一些特殊的模块,比如 FPIOA,KPU,FFT等
4.内置类:内置的用 mpy(micropython 的缩写)编写的类,可以在源码项目中找到
5.机器视觉: 一些机器视觉相关的模块,image sensor lcd大致上兼容 OpenMV 的 API,但是后期不会实时跟着OpenMV 更新
6.附加外设模块:一些外设模块的使用,比如触摸屏,超声波,LED 灯等
7.内置应用: 内置的应用,比如 NES 游戏机(FC 红白机,也就是小时候的小霸王游戏机),pye(内置的文档编辑器)
三、编程快速入门
K210和OPENMV一样是可以使用MicroPython编程的开发板,甚至有些openmv的例程都可以直接拿过来直接使用。所以说教程上可以参考openmv的相关教程学习,两者支持的语言是一样的。又或者你有Python的基础也是可以直接上手的。
程序结构上类似arduino,分为三个部分:
import ...
...
一次设置 ...
...
while(True): # Loop
...
K210代码的第一部分应该包含一些头部注释,将模块引入到代码,最后是代码中的常量和全局变量。
接下来,你将要做一次性的设置代码。这包括创建I / O引脚对象,设置摄像头,定义辅助函数等。
最后,你将创建一个 while(True): 循环,在这个循环之下,你放进去的全部代码将会在循环中重复调用,直到关闭电源。
让我们看看K210的第一个例程。
如图,左键单击【文件】—【示例】—【01-Basics】—【helloworld.py】,hellworld我相信是学任何语言写的第一个程序,这里K210我们依然是最开始呈现这个最经典的程序。
### 头部注释,导入语句等
# Hello World Example
#
# Welcome to the MaixPy IDE!
# 1. Conenct board to computer
# 2. Select board at the top of MaixPy IDE: `tools->Select Board`
# 3. Click the connect buttion below to connect board
# 4. Click on the green run arrow button below to run the script!
import sensor, image, time, lcd
lcd.init(freq=15000000)
sensor.reset() # Reset and initialize the sensor. It will
# run automatically, call sensor.run(0) to stop
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000) # Wait for settings take effect.
clock = time.clock() # Create a clock object to track the FPS.
while(True):
clock.tick() # Update the FPS clock.
img = sensor.snapshot() # Take a picture and return the image.
lcd.display(img) # Display on LCD
print(clock.fps()) # Note: MaixPy's Cam runs about half as fast when connected
# to the IDE. The FPS should increase once disconnected.
程序的逻辑跟单片机是一样的,如果您的代码中没有无限的while循环,那么一旦您的K210完成运行脚本,它将停在那里,什么都不做。
现在再用中文翻译下上面的程序:
import sensor, image, time, lcd: 首先导入内置的sensor(摄像头)库,image图像库, time时间库和lcd(屏幕)库
lcd.init(freq=15000000): 初始化 LCD,这里传了一个参数叫freq即频率,是指定驱动 LCD 的时钟频率,这里是15MHz,可以根据硬件性能调整
sensor.reset(): 初始化摄像头,这里失败需要检查硬件
sensor.set_pixformat(sensor.RGB565): 设置摄像头为RGB565格式,默认都是用RGB565即可
sensor.set_framesize(sensor.QVGA): 分辨率为QVGA,即320x240
sensor.skip_frames(time = 2000): 摄像头刚启动时,图像质量还没稳定,所以跳过一些图像
clock = time.clock() 初始化时钟
while(True): 这是一个循环,循环里面的代码会被不停地运行
sensor.snapshot():从摄像头取一帧图像数据,返回值是一张图像的对象
lcd.display(): 显示图像到LCD
lcd.display(sensor.snapshot()): 这里就是先执行括号里的获取图像,返回值直接作为参数给 LCD 进行显示
程序运行后会得到下面的画面,这段程序在LCD上的使用效果会更明显一些。尽管这个程序名称叫hello world,但是貌似好像跟hello world没什么关系。但是作为K210的入门程序,给出了基本的编程开发框架,可以供给大家进一步开发。
同时,K210提供了大量的SDK共大家使用。下载链接在github上,这里搬运过来:
GitHub - sipeed/MaixPy-v1_scripts: micropython scripts for MaixPy