MaixPy是将Micropython移植到K210(一款64位双核带硬件FPU丶卷积加速器丶FFT丶sha256的RISC-V CPU)的一个项目,支持MCU常规操作,更集成了机器视觉和麦克风阵列,以快速开发具有极低成本和体积实用的AIOT领域智能应用。
MicroPython是英国剑桥大学的教授Damien George(达米安-乔治)所发明,Damien George是一名计算机工程师,他每天都要使用Python语言工作,同时也在做一些机器人项目。有一天,他突然冒出了一个想法:能否用Python语言来控制单片机,进行实现对机器人的操控呢?
大家都知道,Python是一款非常容易使用的脚本语言,它的语法简洁,使用简单,功能强大,容易扩展。而且python有强大的社区支持,有非常多的库可以使用,它的网络功能和计算功能也很强,可以方便的和其它语言配合使用,使用者也可以开发自己库,因此python被广泛应用于工程管理、网络编程、科学计算、人工智能、机器人、教育等许多行业,python语言也长期在编程语言排行榜上处于前五的位置。更重要的是python也是完全开源的,不像Windows、Java那样受到某些大公司的控制和影响,它完全是靠社区在推动和维护,所以python受到越来越多的开发者青睐。不过遗憾的是,因为受到硬件成本、运行性能、开发习惯等一些原因的影响,前些年python并没有在通用嵌入式方面得到太多的应用。
随着半导体技术和制造工艺的快速发展,芯片的升级换代速度也越来越快,芯片的功能、内部的存储器容量和资源不断增加,而成本却在不断降低。特别是随着象ST公司和乐鑫公司高性价比的芯片和方案应用越来越多,这就给python在低端嵌入式系统上的使用带来了可能。
Damien 花费了六个月的时间开发了MicroPython。MicroPython本身使用GNU C进行开发,在ST公司的微控制器上实现了Python 3的基本功能,拥有完善的解析器、编译器、虚拟机和类库等。在保留了python语言主要特性的基础上,他还对嵌入式系统的底层做了非常不错的封装,将常用功能都封装到库中,甚至为一些常用的传感器和硬件编写了专门的驱动。我们使用时只需要通过调用这些库和函数,就可以快速控制LED、液晶、舵机、多种传感器、SD、UART、I2C等,实现各种功能,而不用再去研究底层模块的使用方法。这样不但降低了开发难度,而且减少了重复开发工作,可以加快开发速度,提高了开发效率。以前需要较高水平的嵌入式工程师花费数天甚至数周才能完成的功能,现在普通的嵌入式开发者用几个小时就能实现类似的功能,而且要更加轻松和简单。
MicroPython系统的经典结构由三部分组成,分别是微控制器硬件(这里是-Maixduino)、MicroPython固件、用户程序。MicroPython支持的类型开发板,需要自己编译源代码,产生固件,并将固件下载到微控制器中才能运行MicroPython。
https://dl.sipeed.com/MAIX/MaixPy/release/master/
这里选择了v0.5.0_31版本
资料页
https://github.com/sipeed/kflash_gui
下载页面
https://github.com/sipeed/kflash_gui/releases
经测试,1.24、1.25和1.32都能打开(这里使用v1.32版本来烧录固件)
几个选项选好
附:
kflash_gui 特性
支持 .bin 和 .kfpgk 文件, 支持文件选择器选择
支持开发板选择
可选择程序烧录到 Flash 或者 SRAM
自动检测电脑上的串口
波特率可编辑
黑白两种皮肤可供选择
界面支持中英文切换
支持烧录进度显示和烧录速度显示
支持取消下载进程
支持合并多个 bin 文件为一个 bin 文件
支持把 kfpkg 文件转换为一个 bin 文件
支持使能 bin 文件
自动识别文件是不是固件
kflash_gui 使用方法
下载文件(kflash_gui_v.) 下载地址:release页面
解压, 并双击 kflash_gui.exe 或 kflash_gui
可以自行建快捷方式或者固定到开始页面或者固定要任务栏方便使用
如果是 Linux, 可以修改 kflash_gui.desktop 里面的路径, 然后用管理员身份复制到/usr/share/application 目录, 然后就可以在系统菜单里面找到kflash_gui的图标了,点击即可打开
选择 bin 文件或者 kfpkg 文件, 如果是bin文件需要指定地址,如果是固件需要指定0×0000地址
选择开发板
选择烧录到开发板的哪个位置 Flash(速度慢但是重新上电还可运行) 或者 SRAM(RAM中运行,下载快断电丢失程序)
选择串口
选择波特率,推荐1.5M
点击 下载 按钮来开始下载
如果需要取消,点击 取消 按钮
通常一个固件文件中至少有四个文件,以“maixpy_v0.5.0_31_gd3e71c0”固件为例,具体说明如下:
eif_maixpy_v0.5.0_31_gd3e71c0.7z:普通用户不用关心,用于死机调试;
maixpy_v0.5.0_31_gd3e71c0_m5stickv:M5STACK环境;
maixpy_v0.5.0_31_gd3e71c0_minimum: MaixPy固件最小集合,不支持 MaixPy IDE, 不包含OpenMV的相关算法;
maixpy_v0.5.0_31_gd3e71c0.bin:完整版的MaixPy固件。
这里我们需要使用maixpy_v0.5.0_31_gd3e71c0.bin:完整版的MaixPy固件。
https://cn.dl.sipeed.com/MAIX/MaixPy/ide
http://dl.sipeed.com/MAIX/MaixPy/ide/_/v0.2.4/maixpy-ide-windows-0.2.4.exe
rst:0×1(POWERON-u RESET),引导:0×13(SPI FAST-u FLASH-u引导)
配置SIP:0,SPIWP:0xee
Drv:0×00,q:0×00,d Drv:0×00,cs0 Drv:0×00,hd
Drv:0×00,wp Drv:0×00
模式:DIO,时钟div:2
负载:0×3fff0018,长度:4
负载:0×3fff001c,长度:868
负载:0×40078000,长度:9436
负载:0×40080400,长度:5668
条目0×4008068c
经检查,前面烧录的固件错了,应该是最后这个(完整版)
烧录完成,打开串口,可以看到相关详情
终于连接上了,见底栏的固件版本 0.50
复制代码 隐藏代码 #1.将板连接到计算机
#2.在MaixPy IDE顶部选择板:工具-> 开发板`
#3.单击下面的连接按钮以连接板
#4.单击下面的绿色运行箭头按钮运行脚本!
import sensor, image, time, lcd #导入传感器,图像,时间,液晶
lcd.init(freq = 15000000)
sensor.reset() #重置并初始化传感器
#自动运行,调用sensor.run(0)停止
sensor.set_pixformat(sensor.RGB565) #将像素格式设置为RGB565(或GREYSCALE)
sensor.set_framesize(sensor.QVGA) #将帧大小设置为QVGA(320×240)
sensor.skip_frames(time = 2000) #等待设置生效。 clock = time.clock() #创建一个时钟对象以跟踪FPS。 while(True):
clock.tick() #更新FPS时钟。
img = sensor.snapshot() #拍照并返回图像。
lcd.display(img) #在LCD上显示
print(clock.fps()) #注意:MaixPy的凸轮在连接时的运行速度大约是其一半
#到IDE。断开连接后,FPS应增加。`
实时拍照
复制代码 隐藏代码 `import sensor
import image
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)`
实时采集并显示图像在TFT屏上,并获取和显示实时帧数
复制代码 隐藏代码 `#实时采集并显示图像在TFT屏上,并获取和显示实时帧数 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(40,2, (“%2.1ffps” %(fps)), color=(128,0,0), scale=2)
lcd.display(img)
阴天光线不太好,实时帧数为16 fps
查看设备是否已经正确识别:
在 Windows 下可以打开设备管理器来查看
如果没有发现设备, 需要确认有没有装驱动以及接触是否良好
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
https://xshell.en.softonic.com/download
然后点击回车键,即可看到 MaixPy 的交互界面了
使用串口终端PuTTY打开串口,然后复位(或按ctrl+D),看输出的版本信息,与github 或者 master 分支 的固件版本对比,根据当前版本情况考虑升级到最新版本。这里版本是 v0.5.0-31-gd3e71c0
串口终端PuTTY的控制命令
CTRL-A-在空白行上,进入原始REPL模式
CTRL-B-在空白行上,进入常规REPL模式
CTRL-C-中断正在运行的程序
CTRL-D-在空白行上,对电路板进行软复位
CTRL-E-在空白行上进入粘贴模式
有关可用模块的列表,请键入help(‘modules’)
KPU gc random uio
Maix hashlib re ujson
main heapq sensor ulab
_boot image socket uos
_thread json struct urandom
_webrepl lcd sys ure
array machine time usocket
audio math touchscreen ustruct
binascii math ubinascii utime
board micropython ucollections utimeq
builtins modules ucryptolib uzlib
cmath nes uctypes video
collections network uerrno zlib
errno os uhashlib
fpioa_manager pye_mp uheapq
Plus any modules on the filesystem
编码器是一种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。
machine.pwm是MicroPython中用于控制PWM输出的模块之一,它提供了一些方法和属性,用于设置和控制PWM输出的频率、占空比等参数,从而实现对各种应用场景的控制。
Pin 类是 machine 模块下面的一个硬件类,用于对引脚的配置和控制,提供对 GPIO 的操作方法。
本文学习如何使用ESP32开发板来进行多线程的开发。
MicroPython的SPI是一个用于进行串行外设接口总线协议的类。
本文以一个简单的例程帮助大家在 MicroPython 下使用 I2C