基于Sipeed Maixduino 开发板 开发
因为对python熟悉,先由maixpy进行开发,在使用boss的固件系统开发。
硬件
型号:Maixduino
芯片:k210-AI模块 esr32-WiFi+蓝牙
模组:
项目 | 说明 |
---|---|
CPU | RISC-V双核64比他、内置FPU、400Mhz标准频(可超频),内置神经网络处理器 |
内存 | 8M 64bit SRAM |
存储 | 16M Flash |
引脚参考
步骤1安装串口驱动
安装开发环境
相关需求网址
因为对python熟悉,所以安装MaixpyIDE
1、下载maixpy固件,选最新的完整版下载就好
如 maixpy_v0.5.0_34_ga1b47a3_with_lvgl.bin
2、下载烧录软件kflash
3、下载IDEmaixpy,选最新的
也可以直接串口连接了写
MicroPython背景知识
MaixPy基于MicroPython开发构建的,而MicroPython是Python3的精炼版,语法一致,但只实现了Python的标准库
第一个程序:使用屏幕和摄像头
相关程序含义可调阅API手册
import sensor,lcd#导入内置sensor库和lcd库
sensor.reset()#初始化摄像头,失败查看硬件
sensor.set_pixformat(sensor.RGB565)#设置摄像头为RGB565格式
sensor.set_framesize(sensor.QVGA)#分辨率为QVGA,即320×240
sensor.run(1)#开始运行,在现在的版本中也可以不调用,在上面设置完成后,摄像头会自动开始运行
sensor.skip_frames()#摄像头刚启动是,图像质量不稳定,所以跳过一些图像
lcd.init(freq=15000000)#初始化LCD,这里传入一个参数freq频率,是指定驱动LCD的时钟频率,这里是15MHz,根据硬件性能调整
while(True):
lcd.display(sensor.snapshot())#从摄像头取一帧数据,返回一张图像的对象并显示到lcd
第二个程序:点亮LED aduino没有,感受程序对硬件的抽象操控
K210的引脚和片内外设功能(GPIO,I2C,SPI等)的绑定是任意映射,普通单片机是固定的,比如规定了I2C就只能用Pin9或Pin10这样。
from fpioa_manager import fm
fm.register(28,fm.fpioa.GPIO0)#将28引脚映射为GPIO0功能
#fm.unregister函数可解除绑定
#注,Pin和外设只能唯一对应
#点亮LED红灯
from fpioa_manager import fm
from Maix import GPIO
io_led_r=13#将io_led_r赋13,即将Pin13/IO13脚取了个名字,13脚控制着LED红灯
fm.register(io_led_r,fm.fpioa.GPIO0)#使用fm来注册芯片外设和引脚的对应关系
led_r=GPIO(GPIO.GPIO0,GPIO.OUT)
led_r.value(0)#设置高低电平输出,这里设置了低电平,原理图中说低电平导通,LED灯亮
注:
GPIO和IO的区别:
GPIO-通用输入和输出端口,可有变成状态决定其状态,MCU的IO 就是GPIO,
IO-泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口
存储系统介绍
maixpy的存储系统大致如下:
Maipy中的存储介质主要由Flash,SD卡组成,分为三块区域,分别是Maixpy.bin固件区,xxx.kmodel
模型区,文件系统区:Flash上为spiffs,SD卡为Fatfs
1、MaixPy.bin固件区
用来存储MaixPy.bin固件,起始于0x000000,因为K210会从0x000000地址开始运行程序。
2、xxx.kmodel模型区
通常起始于0x300000,模型文件之所以不烧录在Flash文件系统,有以下原因:
1、Flash中文件系统拥有的内存并不够大,不足以放入大模型,更大的模型可以放入SD卡中
2、直接读取模型文件比经过文件系统读取速率更快
该区域没有文件系统管理,需要根据烧录时的起始地址操作文件,例如当模型烧录在0x500000时的读取方法:
KpuTask=kpu.load(0x500000)
3、文件系统区
通常从0xD00000开始,该区域交由文件系统管理,Flash末尾的3M空间由spiffs管理,另外支持FAT32(Fatfs)的SD卡,这些文件系统提供接口使我们通过文件名便可以对文件进行读写操作,而不需要如模型区一样,使用文件起始地址操作,同时帮助我们有效管理存储介质。
4、MaixPy文件系统的使用
因为Flash和SD卡的文件系统不同,接口不一致,操作时需要调用不同的接口,使用MaixPy中的虚拟文件系统(VFS)可以解决,VFS可以挂载多个不同类型文件系统,并为用户操作提供统一接口。在uos模块中实现。
import uos#类似os
print("files:",uos.listdir("/flash"))
with open("/flash/test.txt","w") as f:
f.write("hello text")
print("files:",uos.listdir("/flash"))
with open("/flash/test.txt","r") as f:
content=f.read()
print("read:",content)
spiffs文件系统会自动挂载在/flash目录,只需要访问/falsh目录即可
插上SD卡后,Fatfs自动挂载在/sd下,使用时需满足以下条件:
- 支持SPI模式,市面上大多数正版卡都支持
- 分区为MBR(msdos)
- 格式化为FAT32
- 大小测试过最大128G可用,断电后插入SD再上电,自动挂载再/sd,如果由多个分区,第二给分区名为/sd2
- 注:/ 根目录不能写入数据,只能/flash或者/sd写入数据,开机如果有SD卡,会自动将当前目录下切换到/sd,如果没有,则会自动切换到/flash
执行并编辑文件
编辑
os.listdir()查看当前目录下文件
方法一:使用内置编辑器 Micropython Editor(pye)
使用串口工具连接下位机
Linux推荐minicom windows推荐xshell
这款编辑器要求将BackSpace改为DEL功能,否则BackSpace和Ctrl+H一样功能(字符替换)
方法二:使用MaixPy IDE
打开MaixPy IDE里的Tool菜单中的 发送文件 功能来发送文件,会保存到开发板并且文件名和电脑上文件名相同。
方法三:使用工具uPyLoader 读取到PC上编辑后在保存到开发板
https://github.com/BetaRavener/uPyLoader/releases 下载地址
选择串口并点击Connect来连接板子,第一次运行需要初始化,点击File-Init transfer files 来完成初始化,这会在板子里创建两文件,分别是__upload.py和__download.py,然后双击文件名即可打开文件并编辑,编辑完成点击save保存到开发板。
方法4:使用工具rshell读取到PC上编辑后再保存到开发板
https://github.com/dhylands/rshell 地址
sudo apt-get install python3-pip
sudo pip3 install reshell
reshell -p /dev/ttyUSB1 #根据实际情况选择串口
编辑文件
ls /flash
edit /flash/boot.py#编辑器使用方法和vim一样
方法5:SD卡自动拷贝到Flash文件系统
将需要拷贝到Flash文件系统命名为cover.boot.py或cover.main.py,然后放再SD卡根目录,开发板断电插入SD卡,再上电,就会将其自动拷贝到/flash/boot.py或/flash/main.py。
执行
os.chdir()切换到当前目录到文件目录,如os.chdir("/flash")
方法一:import
执行 import hello
该方法只能被执行一次,且if __name__=="__main__"下的代码不会执行
方法二:exec()
with open("hello.py") as f:
exec(f.read())
方法三:使用Maixpy IDE执行
连接串口,点击运行
这样和REPL(交互式编辑)类似,只是将程序发送到开发板,并没有保存到文件系统,是一次执行的
方法四:uPyLoader来执行
连接好后选中文件,点击excute按钮来执行文件
方法5:使用ampy来直接运行电脑上的文件
https://github.com/scientifichackers/ampy 地址
执行命令ampy run file_in_PC.py 来执行位于电脑上的文件(文件不会保存到开发板)
MaixPy不支持挂载文件系统到电脑