求签机卖100多?!我花30就做出来了,还增加了11种玩法……

来源:立创开源硬件平台 嵌入式开发 3 次阅读
摘要:工程名称:魔法哔哔机 前言 如果你经常迷茫: ——不知道吃什么 ——不知道选A还是B 那么,这个项目,或许能“拯救”你!! 我用STM32,做了一个“魔法”哔哔机! 它最大的亮点**是:** ——仅花30元,仅用一颗存储仅20KB SRAM的主控,就实现了11种功能! 那么问题就来了 这些界面、动画、字库和文本素材的总体积,显然无法全部放入主控有限的片内存储空间。 作者是如何利用外部Flash

工程名称:魔法哔哔机

前言

如果你经常迷茫:

——不知道吃什么

——不知道选A还是B

那么,这个项目,或许能“拯救”你!!

我用STM32,做了一个“魔法”哔哔机!

它最大的亮点**是:**

——仅花30元,仅用一颗存储仅20KB SRAM的主控,就实现了11种功能

那么问题就来了

这些界面、动画、字库和文本素材的总体积,显然无法全部放入主控有限的片内存储空间。

  • 作者是如何利用外部Flash读取资源,并在仅20KB SRAM的条件下完成渲染的?

  • 他如何设计架构?

  • 如何基于FreeRTOS拆分系统任务?

  • ……

话不多说,我们先介绍项目的具体功能,再一起看看,作者是怎么设计这个哔哔机的,又为什么这样设计!

*0***1

功能说明

它有11种玩法功能,和5大系统功能:

01 

玩法功能

  • 答案之书:迷茫的时候按一按

  • 随机起名:如果你家最近有新出生的BB的话……

  • 随机短语:不愁QQ微信的个性签名

  • 求签:焊接前求个签,是上上签就奖励自己不焊了,是下下签就保护自己不焊了……bushi

  • 滚动骰子:打麻将,做决定犹豫,带它就够了

  • 出行随机推荐

  • 美食随机推荐

  • 影视随机推荐

  • 玩什么随机推荐

  • 干什么随机推荐

  • 理论续航:8-7小时

无图无真相!

所有功能演示动图如下↓

左右滑动查看更多

02 

系统功能

  • 屏幕自定义:亮度调节、一键静音、画面翻转;

  • 音频系统:内置《起风了》背景音乐,支持各类提示音效;

  • 状态监测:实时采集锂电池电压,顶部状态栏直观展示剩余电量;

  • 资源烧录:配套串口工具,批量烧录字库、图标、动画、文本素材至外部Flash。

  • 支持定制:所有图标、开机动画、文本素材都支持自定义。

左右滑动查看更多

事实上,作者做这个项目的初衷,也就是发现市面上这类产品都卖100多,于是他就想挑战做一个低成本的更丰富产品级方案……

看起来,**这类方案不止有技术参考价值,商业参考价值也不低呢!*不过如果复刻作者的开源项目,需要遵循作者的开源协议,尊重原创,不可盲目商用哦*~

接下来,咱就看看它的硬件,软件设计方案

**

**

*0***2

硬件设计方案

01 

设计图

Clip_2026-08-03_16-39-45.png

原理图1

Clip_2026-08-03_16-40-05.png

原理图2

Clip_2026-08-03_16-39-58.png

PCB图

Clip_2026-08-03_16-40-51.png

面板

Clip_2026-08-03_17-56-57.png

Clip_2026-08-03_17-57-15.png

Clip_2026-08-03_17-57-23.png

面板实物图

02 

硬件说明

整机硬件分为六大独立模块,布线采用双SPI总线互不干扰:

  • 主控模块:STM32最小系统,保留SWD调试接口,上电重映射关闭JTAG,释放PB3/PB4用作按键;USB 5V经LDO稳压3.3V整机供电;

  • 显示模块:SPI1驱动ST7789彩屏,PB11输出PWM信号调节背光,支持屏幕画面旋转切换;

  • Flash存储模块:独立SPI2总线挂载W25Q64,存储全部UI素材与文字资源,分离总线避免抢占带宽;

  • 按键模块:PB3/PB4/PB5上拉输入,下降沿中断触发,自带软件消抖,操作无延迟;

  • 发声模块:TIM4硬件PWM生成音频方波,CPU零中断开销,音色干净;

  • 电源检测模块:PA3 ADC采集电池分压电压,实时换算电量并在顶部状态栏展示。

硬件基础,软件,就不基础了!

*0***3

软件架构

作者的架构设计很有趣

  • MCU片内Flash主要存程序;

  • 外部Flash负责存放大量静态资源;

  • 运行时按需读取和渲染;

  • 新增玩法时,可以主要扩充图片、文案和声音资源,不必更换主控。

同时,作者使用FreeRTOS,将系统拆分成按键、显示、Flash烧录、电量检测、音乐五个常驻任务,这样分配有这些好处

  • 电量检测应周期执行,不会影响操作;

  • Flash读写不会让系统长时间失去响应。

  • ……

要知道,省事的做法,是将逻辑都写入一个巨大的while(1),但这会在增加功能时,出现状态判断失控的风险,也就是上述情况。

使用任务化设计,显然更适合这种拥有非常多功能,还只有单一芯片的作品。

虽然开始麻烦了点,但好处是扩展新玩法时更容易维护。且就算STM32F103资源紧张,也能实现1.9英寸彩屏、GIF动画和丰富内容。

或许这也是成本能压缩到30元的原因吧。

下面,就附上程序流程图、用户功能交互流程图、以及Flash烧录上位机的说明。

01 

程序流程图

  • 上电初始化全部外设与存储资源→加载本地配置参数→播放开机GIF动画→创建多任务并启动调度器;

  • 按键任务实时监听输入,跳转对应UI界面;

  • 显示任务循环渲染菜单与功能画面;

  • 音乐任务按需加载、暂停背景音乐;

  • ADC定时刷新电量数据;

  • 串口任务接收指令,完成Flash资源擦写。

因为用的MCU硬件资源确实有限,所有没用LVGL,自己手搓了个UI,要是用ESP32的话,那就不用担心这个了,直接上LVGL,至于为什么没用ESP32,主要是成本问题。

程序流程图

戳图片放大查看

02 

用户功能交互流程图

戳图片放大查看

03 

Flash存储架构图

因为MCU的片上Flash存储有限,所有的图标和文本字库等都放到外部Flash芯片中,以下是外部8MBFlash芯片的布局

04 

最后,关于Flash烧录上位机

为了方便烧写图标字体文本等素材到外部Flash,我还做了一个专门用于外部Flash烧写的上位机软件工具(已经上传附录),通过串口配合STM32里面的程序,即可自动按上面Flash存储架构图中的位置自动烧写到对应的地址,方便之后程序去对应位置读取,不会出现乱码,操作简单,高效方便。

软件.png

软件.png

图21 图22 Flash烧录上位机界面

*0***4

开源网址

怎么样?你喜欢这个项目吗?你会想复刻吗?

如果你想给作者点赞or深入学习,欢迎前往开源网址~

开源网址:https://oshwhub.com/mikeytt/project\_zcblbphj

面板打样**免单**券:https://activity.szlcsc.com/panel\_free\_sample.html

领券活动


相关推荐
评论区

登录后即可参与讨论

立即登录