【花雕测评】【AI】尝试搭建Maixduino几种开发环境
https://makelog.dfrobot.com.cn/article-311383.html
【花雕测评】【AI】MaixPy基本使用、显示文字及摄像机的22个小项目
https://makelog.dfrobot.com.cn/article-311389.html
【花雕测评】【AI】Mind+图片文字显示、呼吸灯和网络应用的22项小实验
https://makelog.dfrobot.com.cn/article-311386.html
【花雕测评】【AI】MaixPy机器视觉与Color识别的8个尝试
https://makelog.dfrobot.com.cn/article-311393.html
【花雕测评】【AI】Mind+机器视觉之数字图像处理和显示的22种小测试
https://makelog.dfrobot.com.cn/article-311405.html
【花雕测评】【AI】MaixPy之神经网络KPU与人脸识别的初步体验
https://makelog.dfrobot.com.cn/article-311400.html
【花雕测评】【AI】Mind+机器视觉之颜色、维码与形状识别的8个小实验
https://makelog.dfrobot.com.cn/article-311417.html
搭建MaixPy开发环境
1、MaixPy 是将 Micropython 移植到 K210( 一款64位双核带硬件FPU、卷积加速器、FFT、sha256的 RISC-V CPU, ) 的一个项目, 支持 MCU 常规操作, 更集成了机器视觉和麦克风阵列, 以快速开发具有极低成本和体积实用的 AIOT 领域智能应用。
2、最新固件(V0.62)
3、固件下载工具:kflash_gui v1.6.7
4、烧录固件到Maixduino
5、安装MaixPy IDE
6、安装完成后的启动首页
7、关于Maixduino的开发环境
详见《【花雕测评】【AI】尝试搭建Maixduino几种开发环境》
https://makelog.dfrobot.com.cn/article-311383.html
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之一:hello micropython
1、打开MaixPy IDE,选择一个串口,这里选COM3
2、点击工具——选择开发板为Maixduino
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之一:hello micropython
3、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之一:hello micropython
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import sys
for i in range(0, 2):
print("hello micropython")
print("hello ", end="micropython\n")
print("implementation:", sys.implementation)
print("platform:", sys.platform)
print("path:", sys.path)
print("Python version:", sys.version)
print("please input string, end with Enter")
r = sys.stdin.readline()
w_len = sys.stdout.write(r)
sys – 系统特定功能模块(标准库之一)
sys.implementation——包含有关当前Python实现的信息的对象
系统:micropython
固件:V0.5.0
sys.platform——运行 MicroPython 的平台
平台:MaixPy
sys.path——用于搜索导入模块的可变目录列表
路径:['','。','/ flash']
sys.version——实现的 Python 版本, 返回一个字符串
Python版本:3.4.0
sys.stdin——标准输入
sys.stdout——标准输出
4、实验场景图
5、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之二:查询闪存目录
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之二:查询闪存目录
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import uos
mount_points = uos.listdir("/")
for fs in mount_points:
print("------------")
print(" dir:", fs)
uos.listdir("/"+fs)
uos – 基本的“操作系统”服务模块(标准库)
uos.ilistdir([dir])
此函数返回一个迭代器,然后生成与列出的目录中的条目对应的元组。如果不传参数,它列出了当前目录,否则它列出了dir给出的目录。
dir: flash
['boot.py', 'main.py', 'freq.conf']
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之三:JSON编码和解码
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之三:JSON编码和解码
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import ujson
json_str = '''{
"name": "sipeed",
"babies": [
{
"name": "maixpy",
"birthday": 2.9102,
"sex": "unstable"
}
]
}'''
obj = ujson.loads(json_str)
print(obj["name"])
print(obj["babies"])
ujson –编码和解码模块(标准库)
该模块实现了相应 CPython 模块的子集,允许在 Python 对象和 JSON 数据格式之间进行转换。
load
ujson.load(stream)
解析给定的流,将其解释为 JSON 字符串并将数据反序列化为 Python 对象。返回结果对象。解析继续,直到遇到文件结尾。如果未正确形成流中的数据,则会引发 ValueError。
loads
ujson.loads(str)
解析JSON str并返回一个对象。如果字符串格式出错,则引发ValueError。
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之四:thread多线程
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之四:thread多线程
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import _thread
import time
def func(name):
while 1:
print("hello {}".format(name))
time.sleep(1)
_thread.start_new_thread(func,("1",))
_thread.start_new_thread(func,("2",))
while 1:
pass
_thread多线程支持模块
该模块提供了用于处理多个线程(也称为轻量级进程或任务)的低级原语-多个控件线程共享其全局数据空间。为了进行同步,提供了简单的锁(也称为互斥体或二进制信号量)。该threading模块提供了易于使用的功能,并在此模块之上构建了更高级别的线程API。
_thread.start_new_thread(函数,args [,kwargs ] )
启动一个新线程并返回其标识符。线程使用参数列表args(必须是元组)执行函数 功能。可选的 kwargs参数指定关键字参数的字典。当函数返回时,线程以静默方式退出。当函数以未处理的异常终止时,将打印堆栈跟踪,然后线程退出(但其他线程继续运行)。
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之五:更新频率的演示
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之五:更新频率的演示
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
from Maix import freq
cpu_freq, kpu_freq = freq.get()
print(cpu_freq, kpu_freq)
freq.set(cpu = 400, pll1=400, kpu_div = 1)
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之六:引脚索引
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之六:引脚索引
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
from board import board_info
wifi_en_pin = board_info.WIFI_EN
print(wifi_en_pin) #输出为8
board_info.pin_map() #打印所有
board_info.pin_map(8)#只打印8号引脚的信息
board_info内置库
主要用于方便用户使用开发板引脚配置,其中内置了对人友好的命名及接口,可以使用户减少对电器连接原理图的依赖。是内部定义的一个 Board_Info 全局变量, 使用 MicroPython 语法编写。
引脚索引
主要是将数字转换为人类友好的字符串,让用户方便编程。输入以下,请注意不要忽略 . 号,然后按下 tab键 进行补全,可以看到板级相关的引脚功能
board_info.
比如
输入以下代码,将返回数字 8,代表的是开发板的第8号引脚,其电器连接是wifi模块的使能引脚
board_info.WIFI_EN
查找方法
当用户不清楚引脚电器连接时,可以使用该方法查找
board_info.pin_map(pin_num)
参数
该方法不传入参数或者传入一个参数
pin_num: 引脚编号,范围[6,47]
当不传入参数时,将打印所有引脚的板级电气连接信息,传入参数时,仅打印指定引脚的板级电气连接信息。
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之七:定时3秒后打印信息
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之七:定时3秒后打印信息
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
from machine import Timer
def on_timer(timer):
print("time up:",timer)
print("param:",timer.callback_arg())
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_ONE_SHOT, period=3000, callback=on_timer, arg=on_timer)
print("period:",tim.period())
machine.Timer函数
硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。
MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。
共有 3 个定时器, 每个定时器有 4 个通道可以使用。
参数
id: Timer ID, [0~2] (Timer.TIMER0~TIMER2)
channel: Timer 通道, [Timer.CHANNEL0~Timer.CHANNEL3]
mode: Timer 模式, MODE_ONE_SHOT 或者 MODE_PERIODIC 或者 MODE_PWM
period: Timer 周期, 在启动定时器后 period 时间, 回调函数将会被调用,(0,~)
unit: 设置周期的单位,默认位毫秒(ms),Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者Timer.UNIT_NS
callback: 定时器回调函数, 定义了两个参数, 一个是定时器对象Timer, 第二个是在定义对象是希望传的参数arg,更多请看arg参数解释
注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态分配开关中断等动作
arg: 希望传给回调函数的参数,作为回调函数的第二个参数
start: 是否在对象构建成功后立即开始定时器, True:立即开始, False:不立即开启,需要调用start()函数来启动定时器
priority: 硬件定时器中断优先级, 与特定的CPU相关, 在K210中,取值范围是[1,7], 值越小优先级越高
div: 硬件定时器分频器,取值范围[0,255], 默认为0, clk_timer(定时器时钟频率) = clk_pll0(锁相环0频率)/2^(div+1)
clk_timer*period(unit:s) 应该 < 2^32 并且 >=1
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之八:每隔 1 秒打印消息, 停止 5 秒后再重启,
5 秒后关闭并注销定时器
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之八:每隔 1 秒打印消息, 停止 5 秒后再重启,5秒后关闭并注销定时器
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import time
from machine import Timer
def on_timer(timer):
print("time up:",timer)
print("param:",timer.callback_arg())
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1, unit=Timer.UNIT_S, callback=on_timer, arg=on_timer, start=False, priority=1, div=0)
print("period:",tim.period())
tim.start()
time.sleep(5)
tim.stop()
time.sleep(5)
tim.restart()
time.sleep(5)
tim.stop()
del tim
machine.Timer
硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。共有 3 个定时器, 每个定时器有 4 个通道可以使用。
常量
TIMER0: Timer0 id
TIMER1: Timer1 id
TIMER2: Timer2 id
CHANNEL0: Timer 通道 0
CHANNEL1: Timer 通道 1
CHANNEL2: Timer 通道 2
CHANNEL3: Timer 通道 3
MODE_ONE_SHOT: Timer 只运行一次(回调一次)
MODE_PERIODIC: Timer 始终运行(连续回调)
MODE_PWM: 定时器不用来回调函数,用以产生PWM
UNIT_S: 单位秒 (s)
UNIT_MS: 单位毫秒 (ms)
UNIT_US: 单位微秒 (us)
UNIT_NS: 单位纳秒 (ns)
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之九:SPI 基本读写
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之九:SPI 基本读写
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
from machine import SPI
spi1 = SPI(SPI.SPI1, mode=SPI.MODE_MASTER, baudrate=10000000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=28, mosi=29, miso=30, cs0=27)
w = b'12306'
r = bytearray(5)
spi1.write(w)
spi1.write(w, cs=SPI.CS0)
spi1.write_readinto(w, r)
spi1.read(5, write=0x00)
spi1.readinto(r, write=0x00)
machine.SPI
SPI(Serial Peripheral Interface) 是一个同步串行协议,由主机和从机组成。
标准4线模式由 SCK(SCLK), CS(片选), MOSI, MISO 4条线连接主从机
在 K210 上, SPI 有一下特征:
共有 4 个 SPI 设备, 其中 SPI0 、SPI1、 SPI3 只能工作在主机模式下, SPI2 只能工作在从机模式时下, 在 MaixPy 上, SPI3已经用来连接了 SPI Flash, 暂时保留, 以后如果有必要再考虑开放接口与 SPI Flash 分时复用
支持 1/2/4/8 线全双工模式, 在 MaixPy 中, 目前只支持标准(摩托罗拉)4线全双工模式(即 SCK, MOSI, MISO, CS 四个引脚)
最高传输速率45M
支持DMA
4个可配置任意引脚的硬件片选
2、实验串口返回情况
ST7789驱动器芯片2.4寸LCD屏(24P 320X240)
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目之十:显示英文 hello MicroPython!
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目之十:显示英文 hello MicroPython!
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import lcd
lcd.init()
lcd.draw_string(100, 100, "hello MicroPython!", lcd.RED, lcd.BLACK)
lcd 屏幕显示驱动
lcd.display(image, roi=Auto)
在液晶屏上显示一张 image(GRAYSCALE或RGB565)。
roi 是一个感兴趣区域的矩形元组(x, y, w, h)。若未指定,即为图像矩形
若 roi 宽度小于lcd宽度,则用垂直的黑色边框使 roi 居于屏幕中心(即用黑色填充未占用区域)。
若 roi 宽度大于lcd宽度,则 roi 居于屏幕中心,且不匹配像素不会显示(即液晶屏以窗口形态显示 roi 的中心)。
若 roi 高度小于lcd高度,则用垂直的黑色边框使 roi 居于屏幕中心(即用黑色填充未占用区域)。
若 roi 高度大于lcd高度,则 roi 居于屏幕中心,且不匹配像素不会显示(即液晶屏以窗口形态显示 roi 的中心)。
roi 是键值参数,必须在函数调用中通过写入 roi= 来显式地调用。
2、实验场景图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十一:LCD屏显示"hello maixpy"
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十一:LCD屏显示"hello maixpy"
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import lcd, time
import image
bg = (236,36,36)
lcd.init(freq=15000000)
lcd.direction(lcd.YX_RLDU)
lcd.clear(lcd.RED)
time.sleep(1)
lcd.draw_string(120, 120, "hello maixpy", lcd.WHITE, lcd.RED)
time.sleep(2)
img = image.Image()
img.draw_string(60, 100, "hello maixpy", scale=2)
img.draw_rectangle((120,120,30,30))
lcd.display(img)
lcd 屏幕显示驱动函数
1. lcd.init(type=1, freq=15000000, color=lcd.BLACK)
初始化 LCD 屏幕显示
参数
type: LCD 的类型(保留给未来使用):
0: None
1: lcd shield(默认值)
type 是键值参数,必须在函数调用中通过写入 type= 来显式地调用
freq: LCD (实际上指 SPI 的通讯速率) 的频率
color: LCD 初始化的颜色, 可以是 16 位的 RGB565 颜色值,比如 0xFFFF; 或者 RGB888 元组, 比如 (236, 36, 36), 默认 lcd.BLACK
2. lcd.clear()
将液晶屏清空为黑色或者指定的颜色。
参数
color: LCD 初始化的颜色, 可以是 16 位的 RGB565 颜色值,比如 0xFFFF; 或者 RGB888 元组, 比如 (236, 36, 36)
3. lcd.freq(freq)
设置或者获取 LCD (SPI) 的频率
Paremeters
freq: LCD (SPI) 的频率
Return
LCD 的频率
4. lcd.direction(dir)
在 v0.3.1 之后已经被舍弃, 请使用lcd.rotation 和 lcd.invert代替, 如非必要请勿使用, 接口仍会被保留用于调试使用
设置屏幕方向, 以及是否镜像等
参数
dir: 正常情况下推荐 lcd.YX_LRUD 和 lcd.YX_RLDU, 另外还有其它值,交换 XY 或者 LR 或者 DU即可
2、实验场景动态图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十二:LCD液晶显示器彩条测试
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十二:LCD液晶显示器彩条测试
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import lcd,image, time
lcd.init(type=1, freq=15000000)
# lcd.init(type=2, freq=20000000)
# lcd.init(type=1, width=320, height=240, invert=True, freq=20000000)
img = image.Image(size=(240,240))
img.draw_rectangle(0,0,30, 240, fill=True, color=(0xff, 0xff, 0xff))
img.draw_rectangle(30,0,30, 240, fill=True, color=(250, 232, 25))
img.draw_rectangle(60,0,30, 240, fill=True, color=(106, 198, 218))
img.draw_rectangle(90,0,30, 240, fill=True, color=(98, 177, 31))
img.draw_rectangle(120,0,30, 240, fill=True, color=(180, 82, 155))
img.draw_rectangle(150,0,30, 240, fill=True, color=(231, 47, 29))
img.draw_rectangle(180,0,30, 240, fill=True, color=(32, 77, 158))
img.draw_rectangle(210,0,30, 240, fill=True, color=(27, 28, 32))
lcd.display(img)
count = 500
while count > 0:
t = time.ticks_ms()
lcd.display(img)
print(time.ticks_ms() - t)
count -= 1
2、实验场景动态图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十三:测试Microphone阵列算法
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十三:测试Microphone阵列算法
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
from Maix import MIC_ARRAY as mic
import lcd
lcd.init()
mic.init()
while True:
imga = mic.get_map()
b = mic.get_dir(imga)
a = mic.set_led(b,(0,0,255))
imgb = imga.resize(160,160)
imgc = imgb.to_rainbow(1)
a = lcd.display(imgc)
mic.deinit()
2、实验串口返回情况
3、实验场景图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十四:图形与hello maixpy
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十四:图形与hello maixpy
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import lcd, time
import image
bg = (236,36,36)
lcd.init(freq=15000000)
lcd.direction(lcd.YX_RLDU)
img = image.Image()
img.draw_string(60, 100, "hello maixpy", scale=2)
img.draw_rectangle((120,120,30,30))
img.draw_circle((150,140, 80))
img.draw_cross((250,40))
img.draw_arrow((250,200,20,200), color=(236,36,36))
lcd.display(img)
2、实验场景图
配套 OV2640摄像头:200W像素通用24P摄像头模块
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十五:测试单目摄像头
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十五:测试单目摄像头
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import sensor
import lcd
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
while True:
img = sensor.snapshot()
lcd.display(img)
单目摄像头sensor驱动
传感器模块,进行摄像头配置及图像抓取等,用于控制开发板摄像头完成摄像任务。
1. 初始化单目摄像头
重置并初始化单目摄像头
sensor.reset([freq=24000000, set_regs=True, dual_buff=False])
参数
freq: 设置摄像头时钟频率,频率越高帧率越高,但是画质可能更差。默认 24MHz, 如果摄像头有彩色斑点(ov7740),可以适当调低比如 20MHz
set_regs: 允许程序写摄像头寄存器,默认为 True。 如果需要自定义复位序列,可以设置为False,然后使用sensor.__write_reg(addr, value) 函数自定义写寄存器序列
dual_buff: 允许使用双缓冲,会增高帧率,但是内存占用也会增加(大约为384KiB)
2. 捕获图像控制
启动或关闭捕获图像功能(默认经过复位,设置帧大小,设置像素格式后会自动启动摄像头,不调用run(1)也会开始采集图像)
sensor.run(enable)
参数
enable: 1 表示开启 0 表示停止
返回值
return: 返回 1
3. 设置帧大小
用于设置摄像头输出帧大小,k210最大支持VGA格式,大于VGA将无法获取图像
MaixPy开发板配置的屏幕是320*240分辨率,推荐设置为QVGA格式
sensor.set_framesize(framesize[, set_regs=True])
参数
framesize: 帧大小
set_regs: 允许程序写摄像头寄存器,默认为 True。 如果需要自定义设置帧大小的序列,可以设置为False,然后使用sensor.__write_reg(addr, value) 函数自定义写寄存器序列
返回值
True : 设置成功
False: 设置错误
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十六:尝试拍一张照片
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十六:尝试拍一张照片
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import sensor, lcd, image
print("init")
lcd.init(freq=15000000)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames(40)
print("init ok")
path = "/sd/image.jpg"
img = sensor.snapshot()
print("save image")
img.save(path)
print("read image")
img_read = image.Image(path)
lcd.display(img_read)
print("ok")
单目摄像头sensor驱动
传感器模块,进行摄像头配置及图像抓取等,用于控制开发板摄像头完成摄像任务。
4. 设置帧格式
用于设置摄像头输出格式
MaixPy开发板配置的屏幕使用的是RGB565,推荐设置为RGB565格式
sensor.set_pixformat(format[, set_regs=True])
参数
format: 帧格式
set_regs: 允许程序写摄像头寄存器,默认为 True。 如果需要自定义设置像素格式的序列,可以设置为False,然后使用sensor.__write_reg(addr, value) 函数自定义写寄存器序列
可选的帧格式有GRAYSCALE, RGB565, YUV422
返回值
True : 设置成功
False: 设置错误
5. 图像捕捉控制
图像捕捉功能控制
sensor.run(enable)
参数
enable: 1 表示开始抓取图像 0 表示停止抓取图像
返回值
True : 设置成功
False: 设置错误
6. 拍摄图像
使用摄像头拍摄一张照片
sensor.snapshot()
参数
无
返回值
img: 返回的图像对象
2、实验串口返回情况
3、实验场景图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十七:录制一段视频(30秒)
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十七:录制一段视频(30秒)
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import video, sensor, image, lcd, time
lcd.init(freq=15000000)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames(30)
v = video.open("/sd/capture.avi", record=1, interval=200000, quality=50)
i = 0
tim = time.ticks_ms()
while True:
tim = time.ticks_ms()
img = sensor.snapshot()
lcd.display(img)
img_len = v.record(img)
# print("record",time.ticks_ms() - tim)
i += 1
if i > 100:
break
print("finish")
v.record_finish()
lcd.clear()
单目摄像头sensor驱动
传感器模块,进行摄像头配置及图像抓取等,用于控制开发板摄像头完成摄像任务。
7. 摄像头控制
关闭摄像头/切换摄像头
sensor.shutdown(enable/select)
参数
单目摄像头
enable: True 表示开启摄像头 False 表示关闭摄像头
双目摄像头
select: 通过写入 0 或 1 来切换摄像头
返回值
无
8. 跳帧
跳过指定帧数或者跳过指定时间内的图像,让相机图像在改变相机设置后稳定下来
sensor.skip_frames([n,time])
参数
n: 跳过 n 帧图像
time: 跳过指定时间,单位为ms
若 n 和 time 皆未指定,该方法跳过300毫秒的帧;若二者皆指定,该方法会跳过 n 数量的帧,但将在 time 毫秒后返回
返回值
无
9. 分辨率宽度
获取摄像头分辨率宽度
sensor.width()
参数
无
返回值
int类型的摄像头分辨率宽度
10. 分辨率高度
获取摄像头分辨率高度
sensor.height()
参数
无
返回值
int类型的摄像头分辨率高度
11. 获取帧缓冲
获取当前帧缓冲区
sensor.get_fb()
参数
无
返回值
image类型的对象
2、实验串口返回情况
在电脑上打开micro-SD卡,里面拍的照片,及录制的一小段视频(实际只有25秒)
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十八:获取和显示实时帧数
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十八:获取和显示实时帧数
# 1. 将板子连接到计算机
# 2. 在 MaixPy IDE 顶部选择板:`Maixduino`
# 3. 点击下方的连接按钮连接板子
# 4. 点击下方绿色运行箭头按钮运行脚本!
import sensor
import image
import lcd
import time
clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames(30)
while True:
clock.tick()
img = sensor.snapshot()
fps =clock.fps()
img.draw_string(2,2, ("%2.1ffps" %(fps)), color=(0,128,0), scale=2)
lcd.display(img)
单目摄像头sensor驱动
传感器模块,进行摄像头配置及图像抓取等,用于控制开发板摄像头完成摄像任务。
12. 获取ID
获取当前摄像头ID
sensor.get_id()
参数
无
返回值
int类型的ID
13. 设置彩条测试模式
将摄像头设置为彩条测试模式
开启彩条测试模式后,摄像头会输出一彩条图像,常用来检测摄像机总线是否连接正确。
sensor.set_colorbar(enable)
参数
enable: 1 表示开启彩条测试模式 0 表示关闭彩条测试模式
返回值
无
14. 设置对比度
设置摄像头对比度
sensor.set_contrast(contrast)
参数
constrast: 摄像头对比度,范围为[-2,+2]
返回值
True : 设置成功
False: 设置错误
15. 设置亮度
设置摄像头亮度
sensor.set_brightness(brightness)
参数
constrast: 摄像头亮度,范围为[-2,+2]
返回值
True : 设置成功
False: 设置错误
16. 设置饱和度
设置摄像头饱和度
sensor.set_saturation(saturation)
参数
constrast: 摄像头饱和度,范围为[-2,+2]
返回值
True : 设置成功
False: 设置错误
2、实验串口返回情况
阴天灯光下实时帧数大约10-15帧(fps)
3、实验场景动态图
单目摄像头sensor驱动
传感器模块,进行摄像头配置及图像抓取等,用于控制开发板摄像头完成摄像任务。
17. 设置自动增益
设置摄像自动增益模式
sensor.set_auto_gain(enable,gain_db)
参数
enable: 1 表示开启自动增益 0 表示关闭自动增益
gain_db: 关闭自动增益时,设置的摄像头固定增益值,单位为dB
如果需要追踪颜色,需要关闭自动增益
返回值
无
18. 获取增益值
获取摄像头增益值
sensor.get_gain_db()
参数
无
返回值
float类型的增益值
19. 设置水平镜像
设置摄像头水平镜像
sensor.set_hmirror(enable)
参数
enable: 1 表示开启水平镜像 0 表示关闭水平镜像
返回值
无
20. 写入寄存器
往摄像头寄存器写入指定值
sensor.__write_reg(address, value)
参数
address: 寄存器地址
value : 写入值
返回值
无
21. 读取寄存器
读取摄像头寄存器值
sensor.__read_reg(address)
参数
address: 寄存器地址
返回值
int类型的寄存器值
4、实验场景图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目十九:测试看门狗( WDT)定时器
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目十九:测试看门狗( WDT)定时器
import time
from machine import WDT
# '''
# test default wdt
wdt0 = WDT(id=0, timeout=3000)
print('into', wdt0)
time.sleep(2)
print(time.ticks_ms())
# 1.test wdt feed
wdt0.feed()
time.sleep(2)
print(time.ticks_ms())
# 2.test wdt stop
wdt0.stop()
print('stop', wdt0)
# 3.wait wdt work
#while True:
#print('idle', time.ticks_ms())
#time.sleep(1)
# '''
# '''
def on_wdt(self):
print(self.context(), self)
#self.feed()
## release WDT
#self.stop()
# test callback wdt
wdt1 = WDT(id=1, timeout=4000, callback=on_wdt, context={})
print('into', wdt1)
time.sleep(2)
print(time.ticks_ms())
# 1.test wdt feed
wdt1.feed()
time.sleep(2)
print(time.ticks_ms())
# 2.test wdt stop
wdt1.stop()
print('stop', wdt1)
# 3.wait wdt work
#while True:
#print('idle', time.ticks_ms())
#time.sleep(1)
# '''
#'''
## test default and callback wdt
def on_wdt(self):
print(self.context(), self)
#self.feed()
## release WDT
#self.stop()
wdt0 = WDT(id=0, timeout=3000, callback=on_wdt, context=[])
wdt1 = WDT(id=1, timeout=4000, callback=on_wdt, context={})
## 3.wait wdt work
while True:
#wdt0.feed()
print('idle', time.ticks_ms())
time.sleep(1)
#'''
2、实验串口返回情况
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目二十:GPIO与注册覆盖测试
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目二十:GPIO与注册覆盖测试
from Maix import FPIOA
class fm:
fpioa = FPIOA()
def help():
__class__.fpioa.help()
def get_pin_by_function(function):
return __class__.fpioa.get_Pin_num(function)
def register(pin, function, force=False):
pin_used = __class__.get_pin_by_function(function)
if pin_used == pin:
return
if None != pin_used:
info = "[Warning] function is used by %s(pin:%d)" % (
fm.str_function(function), pin_used)
if force == False:
raise Exception(info)
else:
print(info)
__class__.fpioa.set_function(pin, function)
def unregister(pin):
__class__.fpioa.set_function(pin, fm.fpioa.RESV0)
def str_function(function):
if fm.fpioa.GPIOHS0 <= function and function <= fm.fpioa.GPIO7:
if fm.fpioa.GPIO0 <= function:
return 'fm.fpioa.GPIO%d' % (function - fm.fpioa.GPIO0)
return 'fm.fpioa.GPIOHS%d' % (function - fm.fpioa.GPIOHS0)
return 'unknown'
def get_gpio_used():
return [(__class__.str_function(f), __class__.get_pin_by_function(f)) for f in range(fm.fpioa.GPIOHS0, fm.fpioa.GPIO7 + 1)]
if __name__ == "__main__":
import time
print('检查注册')
for item in fm.get_gpio_used():
print(item)
print('测试注销')
for pin in range(8, 48):
fm.unregister(pin)
print('检查注册')
for item in fm.get_gpio_used():
print(item)
# gpio test
from Maix import GPIO
def gpio_test():
for i in range(5):
led_b.value(1)
led_g.value(1)
time.sleep_ms(100)
print('醒来......')
led_b.value(0)
led_g.value(0)
time.sleep_ms(100)
print('醒来......')
print('注册...')
fm.register(12, fm.fpioa.GPIO0)
fm.register(13, fm.fpioa.GPIOHS0)
led_b = GPIO(GPIO.GPIO0, GPIO.OUT)
led_g = GPIO(GPIO.GPIOHS0, GPIO.OUT)
gpio_test()
print('注销...')
fm.unregister(12)
fm.unregister(13)
gpio_test()
print('注册...')
fm.register(12, fm.fpioa.GPIO0)
fm.register(13, fm.fpioa.GPIOHS0)
gpio_test()
fm.unregister(12)
fm.unregister(13)
# register Coverage test
fm.register(12, fm.fpioa.GPIO0)
time.sleep_ms(500)
try:
fm.register(13, fm.fpioa.GPIO0) # fail
except Exception as e:
print('异常')
print(e)
time.sleep_ms(500)
fm.register(12, fm.fpioa.GPIOHS0) # pass
time.sleep_ms(500)
print('警告')
fm.register(13, fm.fpioa.GPIOHS0, force=True) # pass
time.sleep_ms(500)
fm.unregister(12)
fm.unregister(13)
2、实验串口返回情况
实验串口返回情况——
检查注册
('fm.fpioa.GPIOHS0', None)
('fm.fpioa.GPIOHS1', None)
('fm.fpioa.GPIOHS2', None)
('fm.fpioa.GPIOHS3', None)
('fm.fpioa.GPIOHS4', None)
('fm.fpioa.GPIOHS5', None)
('fm.fpioa.GPIOHS6', None)
('fm.fpioa.GPIOHS7', None)
('fm.fpioa.GPIOHS8', None)
('fm.fpioa.GPIOHS9', None)
('fm.fpioa.GPIOHS10', None)
('fm.fpioa.GPIOHS11', None)
('fm.fpioa.GPIOHS12', None)
('fm.fpioa.GPIOHS13', None)
('fm.fpioa.GPIOHS14', None)
('fm.fpioa.GPIOHS15', None)
('fm.fpioa.GPIOHS16', None)
('fm.fpioa.GPIOHS17', None)
('fm.fpioa.GPIOHS18', None)
('fm.fpioa.GPIOHS19', None)
('fm.fpioa.GPIOHS20', None)
('fm.fpioa.GPIOHS21', None)
('fm.fpioa.GPIOHS22', None)
('fm.fpioa.GPIOHS23', None)
('fm.fpioa.GPIOHS24', None)
('fm.fpioa.GPIOHS25', None)
('fm.fpioa.GPIOHS26', None)
('fm.fpioa.GPIOHS27', None)
('fm.fpioa.GPIOHS28', None)
('fm.fpioa.GPIOHS29', None)
('fm.fpioa.GPIOHS30', None)
('fm.fpioa.GPIOHS31', None)
('fm.fpioa.GPIO0', None)
('fm.fpioa.GPIO1', None)
('fm.fpioa.GPIO2', None)
('fm.fpioa.GPIO3', None)
('fm.fpioa.GPIO4', None)
('fm.fpioa.GPIO5', None)
('fm.fpioa.GPIO6', None)
('fm.fpioa.GPIO7', None)
测试注销
检查注册
('fm.fpioa.GPIOHS0', None)
('fm.fpioa.GPIOHS1', None)
('fm.fpioa.GPIOHS2', None)
('fm.fpioa.GPIOHS3', None)
('fm.fpioa.GPIOHS4', None)
('fm.fpioa.GPIOHS5', None)
('fm.fpioa.GPIOHS6', None)
('fm.fpioa.GPIOHS7', None)
('fm.fpioa.GPIOHS8', None)
('fm.fpioa.GPIOHS9', None)
('fm.fpioa.GPIOHS10', None)
('fm.fpioa.GPIOHS11', None)
('fm.fpioa.GPIOHS12', None)
('fm.fpioa.GPIOHS13', None)
('fm.fpioa.GPIOHS14', None)
('fm.fpioa.GPIOHS15', None)
('fm.fpioa.GPIOHS16', None)
('fm.fpioa.GPIOHS17', None)
('fm.fpioa.GPIOHS18', None)
('fm.fpioa.GPIOHS19', None)
('fm.fpioa.GPIOHS20', None)
('fm.fpioa.GPIOHS21', None)
('fm.fpioa.GPIOHS22', None)
('fm.fpioa.GPIOHS23', None)
('fm.fpioa.GPIOHS24', None)
('fm.fpioa.GPIOHS25', None)
('fm.fpioa.GPIOHS26', None)
('fm.fpioa.GPIOHS27', None)
('fm.fpioa.GPIOHS28', None)
('fm.fpioa.GPIOHS29', None)
('fm.fpioa.GPIOHS30'醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
注销...
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
注册...
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
醒来......
异常
[Warning] function is used by fm.fpioa.GPIO0(pin:12)
警告
[Warning] function is used by fm.fpioa.GPIOHS0(pin:12)
MicroPython v0.6.2-68-g520879e06 on 2021-09-18; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>>
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目二十一:红色背景的四面旋转字体
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目二十一:红色背景的四面旋转字体
import lcd, time
lcd.init()
#lcd.direction(lcd.XY_RLDU)
#lcd.init(type=2, invert=True) # cube ips
#lcd.init(width=320, height=240, invert=True, freq=20000000)
# see lcd datasheet (such as amigo ips)
#lcd.register(0x36, 0b01101000) # BGR2RGB Mode
#lcd.register(0x21, None) # invert=True
#lcd.register(0x20, None) # invert=False
#lcd.register(0x36, [0b01101000, ]) # invert=True
lcd.clear(lcd.RED)
lcd.rotation(0)
lcd.draw_string(30, 30, "hello maixpy", lcd.WHITE, lcd.RED)
time.sleep(1)
lcd.rotation(1)
lcd.draw_string(60, 60, "hello maixpy", lcd.WHITE, lcd.RED)
time.sleep(1)
lcd.rotation(2)
lcd.draw_string(120, 60, "hello maixpy", lcd.WHITE, lcd.RED)
time.sleep(1)
lcd.rotation(3)
lcd.draw_string(120, 120, "hello maixpy", lcd.WHITE, lcd.RED)
time.sleep(1)
2、实验场景图
【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
项目二十二:查看 fs 使用/总数
1、实验开源代码
#【花雕测评】【AI】运用MaixPy平台的Maixduino几个小项目
# 项目二十二:查看 fs 使用/总数
import os
def sizeof_fmt(num, suffix='B'):
for unit in ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z']:
if abs(num) < 1024.0:
return "%3.1f%s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f%s%s" % (num, 'Yi', suffix)
root_files = os.listdir('/')
fs_info_list = []
for f in root_files:
fs_path = '/' + f
fs_stat = os.statvfs(fs_path)
bs1 = fs_stat[0]
bs2 = fs_stat[1]
total_blocks = fs_stat[2]
free_blocks = fs_stat[3]
info = "%s total=%s free=%s" % (
fs_path,
sizeof_fmt(bs1 * total_blocks),
sizeof_fmt(bs2 * free_blocks)
)
fs_info_list.append(info)
print(info)
2、实验串口返回情况
Arduino 系列传感器和执行器模块实验目录清单:
一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)
https://mc.dfrobot.com.cn/thread-280845-1-1.html
连杆形式的腿机构十一种:盘点机器人行走背后的机械原理
https://mc.dfrobot.com.cn/thread-308097-1-1.html
【花雕动手做】超低成本,尝试五十元的麦克纳姆轮小车!
https://mc.dfrobot.com.cn/thread-307863-1-1.html
【花雕动手做】超迷你哦,用徽商香烟盒做个智能小车!
https://mc.dfrobot.com.cn/thread-307907-1-1.html
【花雕动手做】太搞笑啦,一支胶管制成二只蠕动机器人
https://mc.dfrobot.com.cn/thread-308046-1-1.html
【花雕动手做】快餐盒盖,极低成本搭建机器人实验平台
https://mc.dfrobot.com.cn/thread-308063-1-1.html
【花雕动手做】特别苗条,使用微波传感器控制的纤细小车
https://mc.dfrobot.com.cn/thread-308866-1-1.html
【花雕动手做】脑洞大开、五花八门的简易机器人66种
https://mc.dfrobot.com.cn/thread-307900-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(1)---LED节奏灯
https://mc.dfrobot.com.cn/thread-311167-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(2)---OLED频谱灯
https://mc.dfrobot.com.cn/thread-311174-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(3)---RGB律动灯
https://mc.dfrobot.com.cn/thread-311183-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(4)---WS2812条灯
https://mc.dfrobot.com.cn/thread-311190-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(5)---WS2812柱跳灯
https://mc.dfrobot.com.cn/thread-311192-1-1.html
【花雕动手做】看见声音,基于Arduino系列音乐可视器(6)---点阵频谱灯
https://mc.dfrobot.com.cn/thread-311201-1-1.html
实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
https://mc.dfrobot.com.cn/thread-308195-1-1.html
实验一百六十三:BMI160 6轴惯性运动传感器 16位3轴加速度+超低功耗3轴陀螺仪 I2C/SPI 14LGA
https://mc.dfrobot.com.cn/thread-310371-1-1.html
实验一百六十五:2.4 英寸 TFT LCD 触摸屏模块 XPT2046 PCB ILI9341 240x320 像素 8 位 SPI 串口显示器 300mA
https://mc.dfrobot.com.cn/thread-309803-1-1.html
实验一百七十六:6mm大尺寸8x8LED方块方格点阵模块 可级联 红绿蓝白色 可选8级亮度
https://mc.dfrobot.com.cn/thread-309845-1-1.html
实验一百七十九:0.66英寸OLED显示模块 液晶屏模块IIC/I2C接口 64*48像素 SSD1306驱动芯片
https://mc.dfrobot.com.cn/thread-311179-1-1.html
实验一百八十一:1.3寸OLED液晶屏 I2C IIC通信 4针模块 1106/1306驱动 128*64像素
https://mc.dfrobot.com.cn/thread-311123-1-1.html
实验一百八十三:GY-530 VL53L0X 激光测距 ToF测距 飞行时间测距传感器模块 IIC通信协议
https://mc.dfrobot.com.cn/thread-310273-1-1.html
实验一百八十五:MAX4466声音传感器 驻极体话筒放大器 麦克风可调功放模块 microphone
https://mc.dfrobot.com.cn/thread-310193-1-1.html
实验一百八十九:TDA1308 硅麦克风 数字咪头放大模块 拾音器放大板 楼氏SUNLEPHANT
https://mc.dfrobot.com.cn/thread-310246-1-1.html
实验一百九十三:TCS34725颜色识别传感器 RGB IIC明光感应模块 ColorSensor
https://mc.dfrobot.com.cn/thread-310209-1-1.html
实验二百:RCWL-0515微波雷达感应开关 人体感应 智能感应探测传感器 12-15米远距离2.7G微波检测模块
https://mc.dfrobot.com.cn/thread-310313-1-1.html
实验二百零一:OPT101模拟光照传感器 TEMT6000光强度模块 单片光电二极管 YourCee
https://mc.dfrobot.com.cn/thread-311164-1-1.html
实验二百零三:Air724UG合宙 Cat14G模块 DTU物联网UART串口通信数据TCP透传 核心板组合套餐
https://mc.dfrobot.com.cn/thread-310342-1-1.html
实验二百零七:I2C红色8*8LED点阵模块ht16k33驱动1088BS树莓派物联网可扩展编程
https://mc.dfrobot.com.cn/thread-310951-1-1.html
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块 NB-IoT广域低功耗无线通信 GPS/北斗精准定位
https://mc.dfrobot.com.cn/thread-310433-1-1.html
【花雕测评】【AI】尝试搭建Maixduino几种开发环境
https://makelog.dfrobot.com.cn/article-311383.html
【花雕测评】【AI】MaixPy基本使用、显示文字及摄像机的22个小项目
https://makelog.dfrobot.com.cn/article-311389.html
【花雕测评】【AI】Mind+图片文字显示、呼吸灯和网络应用的22项小实验
https://makelog.dfrobot.com.cn/article-311386.html
【花雕测评】【AI】MaixPy机器视觉与Color识别的8个尝试
https://makelog.dfrobot.com.cn/article-311393.html
【花雕测评】【AI】Mind+机器视觉之数字图像处理和显示的22种小测试
https://makelog.dfrobot.com.cn/article-311405.html
【花雕测评】【AI】MaixPy之神经网络KPU与人脸识别的初步体验
https://makelog.dfrobot.com.cn/article-311400.html
【花雕测评】【AI】Mind+机器视觉之颜色、维码与形状识别的8个小实验
https://makelog.dfrobot.com.cn/article-311417.html
MakeIt2021.10.23
感谢老师分享
驴友花雕2021.10.23
谢谢鼓励