【MM32F5270开发板试用】定制MicroPython及读取MPU6050数据到OLED1306

news/2025/1/31 13:14:00/

本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:HonestQiao

前言

这次有幸获得MM32F5270开发板的试用,非常幸运。
收到板子后,眼前一亮,这块板子,做工精良,板子上附带的周边非常丰富,能有好多玩法,其中就有我较为熟悉的MPU6050。
查看官方提供的各项开发资料,发现苏勇大佬已经提供了micropython的移植,我对micropython也比较熟悉,于是玩起了micropython,并顺利读取MPU6050的数据,呈现到OLED1306液晶屏上。

硬件

  1. MM32F5270开发板
  2. MPU6050:开发板板载
  3. OLED1306:I2C接口
  4. MicroSD卡
  5. PWLink2
  6. Type-C数据线

查阅官方提供的原理图,了解到MPU6050的接线:

其接口对应于I2C1,PC6为SCL、PC7为SDA

我手头的OLED1306为I2C接口的,可以直接接到I2C的PC6、PC7。因为一个I2C接口,可以挂多个Slave设备。

需要注意的是,有的OLED1306是3.3V和5V通用的,但有的版本只支持3.3V,上5V会烧。所以,一般用开发板电源开关旁边的3.3V即可(黄色底座的)。

千万别粗心挂到舵机电源输出上:

因为涉及到micropython固件的烧录,所以需要用到PWLink2。
其接口,参考大佬们提供的即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yz8mS0X-1666318825833)(https://pic4.zhimg.com/80/v2-04116367d66f55a277b1eb2369005fcb_1440w.webp)]

Type-C的数据线,用于连接电脑访问MicroPython的交互环境REPL,将其连接到开发板RESET按钮旁的USB UART即可。

软件

  1. 烧录软件1:Power Writer2,PWLink2官方创新工坊提供
  2. Ozone:Segger官方提供
  3. micropython-mm32F5移植版本:苏勇大佬提供
  4. mpu6050.py:MPU6.50的mpy封装,Adam Ježek大佬提供
  5. ssd1306.py:micropython官方提供
  6. oled_mpu6050.py:自己参考写的
  7. MobaXterm:终端工具,可以连接连接到MicroPython的交互环境REPL

完整的实例代码,可以从以下地址查看:https://gitee.com/honestqiao/mm32f5_micropytho_demo

定制MicroPython

苏勇大佬提供了micropython的MM32F5移植,代码库地址为:https://gitee.com/suyong_yq/micropython-su
Medivh大佬提供了一个开箱即用的Docker环境,启动就能编译,非常的方便:https://aijishu.com/a/1060000000344894

docker pull verdureorange/micropython_mm32
docker run -it --name mp_mm32 -v $(pwd)/root:/root verdureorange/micropython_mm32

其中包含了苏勇大佬提供的移植版本,位于:/micropython-su-master

需要注意的,这个移植的版本,非常精简,默认没有启动一些非常有用的扩展。
例如要驱动SSD1306,需要使用framebuf,默认的版本没有。
如果调用,会出现错误:OSError: 116
因此,可以根据需要,参考micropython官方的资料,进行一些定制。
要开启framebuf,需要在对应port的mpconfigport.h中,添加MICROPY_PY_FRAMEBUF的定义。
上面这个Docker环境也比较精简,vi也没有,于是通过下面的方式来处理:

cd /micropython-su-master/micropython-1.16/ports/mm32f5
echo '#define MICROPY_PY_FRAMEBUF                    (1)' >> mpconfigport.h

启用MICROPY_PY_FRAMEBUF,当需要有一个头文件的依赖,这个文件可以从micropython官方下载:https://github.com/micropython/micropython/blob/master/extmod/modframebuf.c,下载后,放置到 /micropython-su-master/micropython-1.16/extmod/目录即可。
然后对源文件做一下处理:(不处理,会出现modframebuf.c调用错误)

cd /micropython-su-master/micropython-1.16/ports/mm32f5
sed -i -e 's#ports/stm32/font_petme128_8x8.h#extmod/font_petme128_8x8.h#' ../../extmod/modframebuf.c

处理完后,即可进行编译:

cd /micropython-su-master/micropython-1.16/ports/mm32f5
make cross=1

编译完成后,会成功生成build-plus-f5270/firmware.elfbuild-plus-f5270/firmware.hex

把这两个文件拷贝出来备用。

使用Ozone和Power Write烧录

因为我的工作电脑是mbp,macOS环境的,所以想用找一个直接在macOS下面烧录的工具。不过试了JFlash和Ozone,没有成功,后续再测试一下openocd如何。

在Windows下面,也想用简单一点的工具烧录。
经过了解和实际测试,确定有两款工具可以使用。

  1. Ozone:一定要使用3.24b版本才行;用最新版本的就和在macOS上面一样,找不到PWLink2的USB设备。使用3.24b版本,也需要将MM32官方提供的JLink Pack中的定制内容拷贝过来才行。
  2. Power Writer:创新工坊提供的,PWLink2配合完美,下载最新版本即可使用,不需要任何额外的处理。

下面分别说明两种烧录方式:

Ozone烧录

  1. 从SEGGER官方下载v3.24b版本:https://www.segger.com/products/development-tools/ozone-j-link-debugger/#download-installation并安装
  2. 从灵动官方下载JLink Pack:https://www.mindmotion.com.cn/support/software/jlink_pack/
  3. 将JLink Pack解压后,将其中的JLinkDevices.xml和Devices/MindMotion拷贝到Ozone对应的目录即可:

  1. 打开Ozone,开启一个新的项目引导:

将会出现找到CMSID-DAP的提醒:

后续也会多次出现,一律点ACCEPT即可,然后NEXT即可。
如果不用V3.24b版本,则不会出现该提示,后续操作就不能正常进行。

  1. 在Device中,搜索MM32F5,并选择MM32F5277E9PV,其他默认即可:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWn5JLxd-1666318825835)(https://pic1.zhimg.com/80/v2-6d4ccf4d055fec993ad1f92b3da4da68_1440w.webp)]

如果没有做JLink Pack配置文件的拷贝,这里就找到不这个型号。

  1. 然后选择Target Interface为SWD,以及选中列表中出现的USB CMSIS-DAP:

如果不用V3.24b版本,这里的列表中就可能没有正确找到USB CMSIS-DAP设备。找不到设备,就无法下载烧录了。

  1. 在下一个界面中,选择之前编译成功的固件文件:firmware.elf

firmware.elf【注意,该文件需要放在全英文目录,否则可能读取错误。】

  1. 再Finish,就完成了配置,可以准备烧录了:

  1. 然后,点击绿色下箭头中的Download,就能开始烧录了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCVDqSbk-1666318825835)(https://pic3.zhimg.com/80/v2-f46641439cbdc40fb19ca3f0563082aa_1440w.webp)]

  1. 下一步会提示没有License,直接Yes通过无视即可:

  1. 等待下载完成即可:

使用Power Writer烧录

如果使用Power Writer进行烧录,就没有这么多麻烦的步骤了,简单快捷。

  1. 从Power Writer官方下载:https://docs.powerwriter.com/en/docs/powerwriter_for_arm/software/install并安装
  2. 在界面上,选择接口方式和PCU型号即可:

首次打开,可能会提示升级,按照提示升级即可。
设置完成后,右边信息窗口,会有对应的提示。

  1. 然后进入Program Memery界面,所有的操作都在这里了:

  1. 要烧录新的固件,需要先添加固件firmware.hex:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGNR7iBY-1666318825837)(https://pic1.zhimg.com/80/v2-cd42190cd5fe5a4aa165eaf6f0bc5170_1440w.webp)]

  1. 然后按照下面步骤操作一遍,即可下载:

MicroPython连接

烧录成功之后,就可以使用工具连接micropython的REPL界面。
需要注意的是,苏勇大佬提供的这个移植版本,需要插入一张SD卡,可以在卡上存储需要执行的py文件或者调用库,也可以读写该SD卡来存储文件,非常方便。另外,这张卡需要是FAT32格式的。
因为后面需要从MPU6050读取数据,以及驱动OLED1306,所以我们将各自的文件,先拷贝到SD卡的根目录备用。

  • MPU6050.py:https://github.com/adamjezek98/MPU6050-ESP8266-MicroPython/blob/master/mpu6050.py
  • ssd1306.py:https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py

然后,将SD卡插入到开发板RESET按键旁边的插口即可准备使用。
重新上电后,就能通过Type-C连接USB UART口,来连到micropython了。

从 mobaxterm官方下载免费版本:https://mobaxterm.mobatek.net/download-home-edition.html
打开后,从会话中开启新的串口连接,选择好端口和速率115200:

连接成功后,回车,会显示>>,表示连接成功,可以操作了:

MPU6050数据读取

因为之前,我们已经把MPU6050的调用库mpu6050.py拷贝到SD卡上了,所以现在可以直接调用。
因为SCL对应PC6,SDA对应了PC7,所以现需要进行一些I2C初始化和设备扫描测试:

from machine import SoftI2C, Pin
scl = Pin('PC6')
sda = Pin('PC7')
i2c = SoftI2C(scl, sda)
print("I2C Devices: %s" % ",".join(["%s" % i for i in i2c.scan()]))

上述操作,将会显示当前连接的I2C设备:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JHox7c5T-1666318825838)(https://pic1.zhimg.com/80/v2-107b85121ef70d6b06deef22bd509514_1440w.webp)]

60对应0x30,一般为SSD1306
80对应0x50,为板载EEPROM
104对应0x68:为板载MPU6050

然后,我们再试一下,能否读取MPU6050的数据。

import mpu6050
accelerometer = mpu6050.accel(i2c)
accelerometer.get_values()

执行后,就能显示读取出数据。第一次读取,一般都返回0,后续就正常了。

现在,读取MPU6050数据正常了。

OLED1306驱动

类似MPU6050,SSD1306的驱动已经拷贝到了SD卡上,也可以直接调用了。
在上一步的基础上,进一步执行指令:

from ssd1306 import SSD1306_I2C
i2c.scan()
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0)
oled.text('MPU6050',40,20)
oled.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4DKzFJv-1666318825839)(https://pic3.zhimg.com/80/v2-f386acc7ade746d8094d97c46cacb3d2_1440w.webp)]

现在,SSD1306也可以正常调用了。
如果没有显示,注意连线是否正确。连线正确的话,i2c.scan()会输出带有60的信息。连线不正确则没有。

读取MPU6050数据呈现到OLED1306

基于以上的实验,可以将代码进行结合,实现读取MPU6050的数据,并呈现到OLED1306上:

from machine import SoftI2C, Pin
from ssd1306 import SSD1306_I2C
import mpu6050
import timeoled_width = 128
oled_height = 64scl = Pin('PC6')
sda = Pin('PC7')def draw_bg():oled.fill(0)oled.line(0, 0, oled_width-1, 0, 1)oled.line(0, 0, 0, oled_height-1, 1)oled.line(oled_width-1, 0, oled_width-1, oled_height-1, 1)oled.line(0, oled_height-1, oled_width-1, oled_height-1, 1)i2c = SoftI2C(scl, sda)
print("I2C Devices: %s" % ",".join(["%s" % i for i in i2c.scan()]))oled = SSD1306_I2C(oled_width, oled_height, i2c)
draw_bg()
oled.text('MPU6050',40,20)
oled.show()
time.sleep(3)for i in range(0,100):accelerometer = mpu6050.accel(i2c)vals = accelerometer.get_values()draw_bg()acx = vals["AcX"]acy = vals["AcY"]acz = vals["AcZ"]tmp = vals["Tmp"]gyx = vals["GyX"]gyy = vals["GyY"]gyz = vals["GyZ"]print(vals)# 0-127# 63-127draw_bg()oled.text('MPU6050',40,5)oled.text('AX:%03d' % acx,2,20)oled.text('AY:%03d' % acy,2,30)oled.text('AZ:%03d' % acz,2,40)oled.text('GX:%03d' % gyx,70,20)oled.text('GY:%03d' % gyy,70,30)oled.text('GZ:%03d' % gyz,70,40)oled.text('Temp:%02.1f' % tmp,25,55)    oled.show()time.sleep(1)

运行以上代码,然后轻轻晃动开发板,就能看到数据变化了:

视频效果如下:

完整的实例代码,可以从以下地址查看:https://gitee.com/honestqiao/mm32f5_micropytho_demo

总结+后续

经过初步的使用,对这块板子的感觉非常之后。一块小小的板子,内涵非常的丰富。使用上手,也非常的容易。
除了micropython,官方也提供了MindSDK等开发工具和资料,后续也会进一步研究学习。


http://www.ppmy.cn/news/393958.html

相关文章

STM32F103学习笔记(5)—— 大彩屏使用——串口通信工程级应用

目录 1. 大彩屏概览 2. 大彩教程 3. 指令相关 4 . 指令设置 5. 屏幕仿真 6. 屏幕串口 7. 串口设置 8. 按键控制PWM大小 9. 全部代码 1. 大彩屏概览 使用大彩屏的好处是,屏幕操作可以直接用屏幕内部指令,比如禁用按键、文本输出等功能&#xff0c…

嵌入式调试神器——MicroLab​

关注、星标公众号,直达精彩内容 来源:网络素材 最近发现了一个调试神器-MicroLab,MicroLab是一款怎样的神器? 历时十五个月,有效代码量七万九千余行,蓝色星球上最好用的嵌入式开发调试神软——MicroLab Ve…

”WinForm上位机+OV7670摄像头+STM32+蓝牙“图像采集系统(一)STM32驱动CMOS摄像头OV7670

初衷;将摄像头放在防盗门猫眼位置,访客到来时,给访客拍个照,然后传到房主端显示。 现在只完成了蓝牙传输,和WinForm窗体显示,后面时间来得及的话会陆续完成WiFi传输,和手机端APK显示。 常规思路…

micropython 通过spi驱动LCD显示屏

我呢一直对电路设计和程序设计有非常大的爱好,不好说有多精通,纯属个人弄着玩的,所以后面有时间可以和大家一起来交流一下,另外最近也接触了一些PCB,所以一些开发板之类的都自己设计制作了。 今天讲的是通过micropytho…

Redis-原生命令

string 单值 set key value get key 对象 set user:1 value Mset user:1:name zhangsan user:1:sex man Mget user:1:name user:1:sex 分布式锁 setnx product:1001 true 计数器/全局序列号维护 incr article:readcount:{文章id} get article:readcount:{文章id} 哈希hash…

嵌入式调试神软——MicroLab​~

MicroLab是风媒电子的号主赵工的杰作。上周杨工与果果小师弟也分享了相关的文章,看起来很酷,但一直没有时间玩,这里先Mark一下,下一篇文章我们也玩来一下。MicroLab是一款怎样的神器?下面看看赵工文章的介绍&#xff1…

龙邱特别款英飞凌miniwiggler拆机鉴赏

龙邱特别款英飞凌miniwiggler拆机鉴赏 今年暑假准备参加智能车大赛,做基础四轮组。据学长说龙邱的库用了更多的硬件外设资源,我就在全实验室用逐飞套的情况下转投龙邱了。。。 今天核心板仿真器一堆外设到货(龙邱总是比逐飞慢个一个星期&…

STM32CubeMX(11) ——JY901陀螺仪数据的读取与简单数据处理

JY901陀螺仪数据的读取与简单数据处理 文章目录 JY901陀螺仪数据的读取与简单数据处理前言JY901简单介绍 一、上位机调试二、Cubemax配置三、代码包含官方JY901.h文件创建接收结构体和定义一些参数接收处理函数编写和结构体初始化函数一些细节的修改 实验结果总结 前言 JY901是…