过去几年我最大的遗憾就是不会软件编程,作为一个资深板农,无法亲手让自己设计的硬件跑起来,那种心情是非常难受的。
自去年底树莓派基金会发布第一颗自己设计的IC - RP2040以及基于RP2040的核心模块PICO以来,从性能、灵活性、价格上看这是一颗会迅速火起来的器件,于是第一时间投入其中,于春节期间亲自设计了一款基于PICO的外设扩展板(当时还没有拿到Pico模块),并在电子森林平台发起了几次活动,迅速汇集了很多优秀的开源项目资源。
参见:硬禾“暑假一起练”平台2 - 未来最火的开源单片机模块:树莓派Pico扩展板
看好RP2040/Pico的原因不仅是因为树莓派强大的生态会迅速推起这颗器件的应用(现在海外知名网站上的各种基于RP2040的板卡和开源项目资源可以证明这一点),更是因为它的高性能、PIO的灵活性 + 对MicroPython的支持。
对我,PIO的灵活性可以在很多场合实现FPGA能实现的功能;而MicroPython这种优雅、易学易用的编程语言给我了很大的自信心。
前几天我看到一个小伙用Pico + 16颗电阻设计的任意信号发生器,
哇,RP2040太强大了!虽然自己不会编程,但花了一个下午竟然将这位小伙的代码移植到我自己设计的板子上,在示波器上看到了他产生的这些波形。
由此我在想,既然它能做任意波形发生器,为何不基于我们现有的梅林雀口袋仪器的框架用RP2040也做一款高速的信号发生器呢?
采用RP2040 + 高速DAC + 240*240的彩屏(ST7789控制器)制作一款便携式信号发生器?用KiCad迅速设计了一块板子:
做信号发生器的小伙只是提供了DDS部分的代码,并没有按键的控制以及菜单、波形的显示,要知道自己从头设计一个LCD上显示的控制界面并用按键操作起来,对我这种菜鸟来讲那是天方夜谭,估计要再苦练半年也未必能写出来。
直到,我看到另一篇文章,另一个小伙基于前面小伙的成果,再加上一款Micro-GUI就做成了下面的这个仪器:
下面的是用PICO制作的信号发生器
信号发生器的界面
太好了,我这个不会写代码的菜鸟顿时自信心来了,相信用不了多久,我也能自己DIY出一个高性能的掌中信号发生器。
于是我学习了一下Micro-GUI,太强悍、太好用了,必须给大家推荐!!!
它支持320*240以下分辨率的屏幕,无论我们硬禾常用的240*240的彩色LCD还是128*64/128*32的OLED显示屏都不在话下
它支持5个按键的输入或者2个按键+一个旋转编码器的输入,感觉就是为我们精心定制的!
它不仅支持RP2040/Pico还支持ESP32等等,因为是基于标准的MicroPython,未来任何支持MicroPython的处理器都可以用它
看看我花了周末半天时间移植Micro-GUI在我的板子上的效果:
基于Micro-GUI的案例改写的模拟表
基于Micro-GUI的案例在LCD上画的李萨如波形
改写的任意波形发生器控制界面
是不是很酷?很容易?
在Peter的Github页面上有非常详细的使用文档,我会逐步根据自己的使用体会汇总并完善在电子森林的百科页面(点击左下角的“阅读原文”跳转)。
Github上的项目有非常详细的文档,内容太多,在这里我只截一些图展示一下:
现成的Checkbox插件
用“LED”显示的效果
对话框
用于调节参数的棒状图
滑动调节棒
刻度棒插件(支持对数方式)
仪表盘插件
旋钮插件
并提供了各种信息的展示方式,比如绘制各种图形,并提供了丰富的案例,配合按键的控制:
从下面的两张图中可以有个直观的理解:
很多人都知道的LVGL,也有国外的工程师移植到Pico上面,但这需要用C编译一下,至少我搞不定。而这个MicroGUI则可以轻松搞定,而且功能强大到应有尽有,配合DMA的屏幕操作,执行起来非常流畅。
应该不需要LVGL了。
另外,如果你使用的场景不需要这么多按键,可以使用消耗更少资源的nano-GUI,也是这位老先生写的。
他的Github页面:
Micro-GUI:https://github.com/peterhinch/micropython-micro-gui
Nano-GUI:https://github.com/peterhinch/micropython-nano-gui
在他的项目页面还有很多代码资源可以学习、使用。
向这位退休的大神致敬!
有了这些巨人的肩膀,我们可以看得更远、走得更快!MicroPython的出现对于嵌入式系统的学习和应用一定会起到巨大的改变,而开源Micro-GUI则给了我们更多的可能,即便在最终的产品中,也会大大节省开发的时间。
另外我们硬禾学堂制作的嵌入式系统学习平台在后面也会将Micro-GUI移植进来,玩一些游戏、设计一些控制界面。
周末愉快!