7毛钱的 MCU CH32V003 驱动 1.54 寸电子墨水屏

放假了玩点轻松的,最近为了玩电子墨水屏,搞了个电子墨水屏驱动板,用 ESP32 来驱动是很方便了,不过想试试用 CH32V003 这种入门级的芯片玩玩看,顺便也学习一下墨水屏的驱动。

这里使用的墨水屏是 1.54 英寸,通信接口是 SPI,驱动代码直接找了微雪的示例程序改写成使用 CH32V003 的库。

硬件连接

CH32V003 有一个 SPI 接口,这里与电子墨水屏通信使用四线 SPI,需要额外准备一个 DC 引脚,SPI MISO 不需要使用,这里直接悬空了。

除了标准的 SPI MOSI、CLK 需要使用指定的引脚,其他引脚都使用软件方式操作,特别是 SPI CS,这里连到了 PD3。

墨水屏其他几个引脚的连接:

  • CS -> PD3
  • BUSY -> PD2
  • DC -> PC4
  • RST -> PC3

ch32v003-eink-driver-1

使用 SPI 总线

SPI 驱动直接使用 CH32V003EVT 中的例程就可以了,不过需要注意的是,例程中的一些参数需要根据墨水屏的特性进行修改,主要修改有以下几个地方:

  • SPI_DataSize:需要修改为 8b


阅读全文 »

小智 AI 通信协议补漏,通过OTA接口注册设备

上周整理了一下小智 AI 的 WebSocket 通信协议,《复刻小智AI第2步,2张核心流程图学习一下它的WebSocket协议》,后面在调试时发现了一个缺失的点,就是漏掉注册设备这一步。

一开始还对配置文件中的 "OTA_VERSION_URL": "https://api.tenclass.net/xiaozhi/ota/", 字段比较费解,好像整个通信过程中也没有用到的地方,而且在 py-xiaozhi 中也不存在固件的概念。

另外因为跑示例的时候,用的 Client-IdDevice-Id 都是从仓库中直接拿的,应该是已经在服务器已经注册过了,只需要额外添加设备即可,所以一直没发现这个问题。

后来在手动修改 Device-Id 的时候终于发现了,仔细研究了一下 xiaozhi-esp32py-xiaozhi,再自己操作了一下,总算搞明白了。

问题

如果在设备启动时,不经过设备注册过程,那么在开始对话之后,服务端会返回没找到设备版本信息的语音,而不是在后台添加设备。

2025-04-21 14:51:23,295 - WebSocketClient - INFO - 收到JSON消息: {"type":"tts","state":"sentence_start","text":"没有找到该设备的版本信息,请正确配置 OTA 地址,然后重新编译固件。","session_id":"14328015"}

这个时候,不管怎么对话,服务端都只会返回这一句。

py-xiaozhixiaozhi-esp32 项目中,都是会在启动阶段进行 OTA 固件版本检查,因此我们也需要在加载配置时,先进行 OTA 版本检查这一步,同时完成设备注册。

注册设备

注册设备也很简单,构建一个固件信息的 …

阅读全文 »

复刻小智AI第2步,2张核心流程图学习一下它的WebSocket协议

前言

继续尝试复刻小智 AI,但是是基于 Arduino 框架。

上周把 VSCode + PlatformIO + Arduino 进行 ESP32-S3 + ESP-SR + ESP-TTS 的开发环境折腾完了,主要的语音唤醒、命令识别、文本转语音功能都跑通了,后面可以开始对接小智 AI 服务端的 WebSocket 协议了。

不过原作者的 78/xiaozhi-esp32 项目稍微复杂一点,阅读起来不太方便,而且也不太想搞 IDF 编译环境,就想找看有没有其他平台的实现,然后还真找到了一个 huangjunsen0406/py-xiaozhi 项目,是 Python + PyTk 编写的带界面的桌面客户端,而且它支持手动对话以及自动对话模式切换,可以顺便学习一下 PC 上的轻量级语音识别。

通信过程

小智 AI 客户端与服务端,可以使用 WebSocket 或者 MQTT 协议,这里为了方便就直接用 WebSocket 协议来学习了。

协议概述

在小智 AI 的通信过程中,WebSocket 用于实现客户端和服务器之间的实时、双向通信。主要传输以下类型的数据:…

阅读全文 »

复刻小智AI,ESP32-S3搭建Arduino+ESP-SR+ESP-TTS开发环境踩坑记录

最近 B 站上赛博小狗和小智 AI 都很火,我也想复刻一个,最好能把两者结合一下,研究了一下,发现作者们的开源方案有些地方不太符合我的习惯,准备改造一番,然后就走上了踩坑之旅。

缘由

赛博小狗这个开源项目,作者使用了现成的语音识别模块和文本转语音模块,这两个模拟贵且不说,在使用上也不太灵活,而且主控也是使用的 STM32,这个如果要想改造结合小智 AI,开发起来也比较麻烦。

然后就想到了乐鑫 ESP32 是已经自带了语音唤醒、语音识别、文本转语音能力的,那干嘛不直接用一个 MCU 来实现外部模块的功能,成本就要低上很多了,而且小智 AI 本身也是基于 ESP32 去做的,结合起来就更方便了。

再研究了一下小智 AI 的开源硬件端项目,发现是基于 ESP-IDF 开发的,这就叫人头大了,虽然原厂的 ESP-IDF 相比 Arduino 框架更强大,配置更灵活,但是从开发便捷性上来说,我还是更喜欢使用 Arduino 框架。

为了把这一堆东西都改成自己喜欢的样子,就开始了踩坑之旅。

开发环境

虽然在玩 ESP32 时一直用的 Arduino 框架,但是我并没有使用 Arduino IDE,而是使用的 Visual Studio Code + PlatformIO 插件。Ardunio IDE 的编辑器太古老了,缺少很多有用的功能,像代码提示、自动补全、符号跳转等功能都是缺失的。

而 Visual Studio Code …

阅读全文 »

开源了,智能UV胶紫外线固化灯复刻教程

上周分享了一个基于 CH32V003 的紫外线固化灯,《7毛钱MCU能做啥,搞个智能UV紫外线固化灯》,周末整理了一下相关的资料,把这个项目开源出来,有需要的朋友可以复刻一个~

make-smart-uvled-1

元件列表

MCU、风扇、屏幕等可以在淘宝购买,其他 PCB BOM 中的元件基本上都可以在立创商城找到。

  • CH32V003F4P6:淘宝购买,一般 7 毛的样子
  • OLED:0.96 英寸,分辨率 128x64,引脚顺序 GND、VCC、SCK、SDA
  • 风扇:5V 超薄铝散热风扇,PH2.0 接口,尺寸 4x4x1.2cm
  • LED 驱动 DX1240:立创商城购买
  • UVLED:原理图不对,实际型号 JNJ-L-3535EW90-36530-SL-G1,立创商城购买
  • 船形开关:10.5x15mm 规格两脚的,立创商城有
  • 自攻螺丝:M2x16,M2x5,两种规格
  • 锂电池:503040 规格,PH2.0 插头
  • NTC 电阻:10K 3950 线上 10cm,需要自己做 PH2.0 的插头

其他元件使用 BOM 表里面的就可以了。

总共成本大概在 50 左右。

PCB

这个项目需要两块 PCB,一个使用铝基板的 LED 灯板,一块主控板。…

阅读全文 »

7毛钱MCU能做啥,搞个智能UV紫外线固化灯

之前在做网红电气灯的时候,外壳的亚克力板是 UV 胶水粘接的,这个时候就需要使用紫外线固化灯了。虽然在买 UV 胶水的时候,卖家也送了一个紫外线固化灯,但是那个灯实在太弱了,照半天 UV 胶表面还是粘粘的。

这个时候就想到去自己做一个 UV 紫外线固化灯,刚好在立创开源平台看到一个结合了紫外线 LED 恒流驱动 + MCU 智能控制 + 风扇散热的项目,就参考了一下来做个自己的智能 UV 紫外线固化灯。

成品效果

操作视频

固化使用

diy-smart-uvled-1

功能设计

自己搞的紫外灯,功能肯定是按自己的需求设计了,最重要的一点就是紫外线 LED 功率要大,为了方便使用,也要支持电池供电。

在梳理常用的使用场景以及结合大功率灯珠的限制之后,就可以大概知道整体的功能范围了:

  • 使用 2W UVLED 灯珠,支持 PWM 调光控制亮度
  • 使用风扇散热,支持风扇电源控制
  • 支持设置 LED 亮度、自动倒计时照射固化
  • 支持灯珠温度检测,自动控制风扇开启关闭
  • 支持电池供电移动使用,支持电池电压检测

硬件选型

针对功能需求,大概的硬件选型也可以定下来了,屏幕不用显示太复杂的信息,用了 0.96 OLED,风扇和 LED 铝基板直接借用了立创开源项目选的元件,其他的都换掉了。

  • 主控 MCU:CH32V003
  • 屏幕:SSD1306 128x64 OLED


阅读全文 »

分体式键盘 ErgoX 改进一点点~

我在之前分享了一个分体式键盘 ErgoX,先复刻了一把,在使用了一段时间之后,也发现了一些问题,就根据自己的使用习惯改了点东西,重新搞了把新的。

ergox-split-update-1

原理图

ergox-split-update-2

相比原作者开源的版本,主要修改以下几个地方:

  • 把两个编码器移动到了 F 功能键这一行, 这样在 B 和 N 不习惯对应手指去按的时候可以有个替代,或者是这个位置也可以当成额外的快捷键使用,食指还是比较容易触达这个区域的
  • 替换了一下 3.5mm 耳机连接器的元件,并且没有采用交叉连线的方式,而是直接 TX 对 TX,RX 对 RX,这点修改的原因有两个:
    • 一个是 QMK 固件里说明了如果 MCU 支持的话更推荐使用 Half-duplex
    • 另外就是在买了 3.5mm 音频线后才发现大部分音频线其实没有 4 个通道,只有 3 个通道,这样如果使用全双工的话反而固件会不工作
  • 增加了两个识别电阻,用于左右手键盘的识别,这样可以实现 USB 数据线随意插,不用固定在左手或右手的键盘上

另外虽然还加了一个 12832 OLED 的接口,但是还没有研究明白分体式键盘屏幕咋整,就先留着焊盘没真正用起来了。

PCB 设计

ergox-split-update-3

PCB 整体跟之前一样,除了编码器位置移动之后,还把 MCU RP2040 的位置移动了一下。

这是因为原作者是直接用的三明治式亚克力外壳,但是我尝试给键盘做封闭式外壳,在建模的时候发现,MCU 和按键离得太近了,没办法加上左侧的墙壁,要露出来一条缝,就把 MCU …

阅读全文 »

摸鱼小副屏,把它变成摸鱼小电脑~

有段时间一起想搞一个 Macintosh 造型的小副屏,但是苦于不会建模,在 Thingiverse 上也找不到合适的模型,比较常见的天气小电视又有些小,一直没能搞成。终于后来在 MakerWorld 上看到一个摸鱼小副屏,适配 2.8 寸 LCD 屏幕,瞬间觉得有救了。

不过原作者推荐的 HDMI 转接板对 macOS 的支持不太好,总是选不到正确的分辨率,刚好之前想搞个小电脑,就顺便拿手上的 H616 开发板来改造一下了~

diy-h616-micro-pc-1

用来看个视频也没啥问题,不过尝试打开 iQIYI 啥的卡死了……

放个普通视频还可以的~

硬件列表

2.8 寸 LCD + HDMI 转接板

螃蟹方案,可以支持触摸,还有 OSD 支持,不过这个场景下选最便宜的套餐就行了。

diy-h616-micro-pc-2

香橙派 Pi Zero 2W 开发板

我买的时候还是全志 H616,现在似乎升级到 H618 芯片,四核 ARM 开发板,自带 Wi-Fi。

diy-h616-micro-pc-3

HDMI 软排线 转接头

diy-h616-micro-pc-4

原作摸鱼小副屏

模型地址:https://makerworld.com.cn/zh/models/655031

阅读全文 »

爆改复古小玩具,打造迷你收音机

最近在例行刷某宝时,看到一个复古录音机很有意思,体积很小,只有 4x6x2.5cm 大小,自带了播放歌曲片段以及录音回放功能,不过这功能虽然有趣但有点单调,就想着能不能改造一番。

刚好之前在 OSHwHub 看到过一个收音机项目,使用了 RDA5807 芯片,使用起来相当简单,就拿这个复古录音机来个爆改收音机。

RDA5807 介绍

RDA5807 是一个用起来相当简单的收音机芯片,既可以使用 I2C 控制,也可以直接使用自带的 GPIO 来控制,不需要额外的电路就可以实现待机、搜台、音量调节功能。

The RDA5807FP series is the newest generation single-chip broadcast FM stereo radio tuner with fully integrated synthesizer, IF selectivity, RDS/RBDS and MPX decoder. The tuner uses the CMOS process, support multi-interface and require the



阅读全文 »

25块售价成本多少?拆一个500合1游戏机

最近在刷某宝的时候看到一个游戏机,掌机尺寸,可以玩 NES 游戏,3.0 寸屏幕,还支持第二个手柄一起双打,用完券只要 25 块钱包邮,要知道之前用 ESP32-S3 做一个游戏机模拟机光 BOM 成本都得 60 块了 😂。

这不马上下单,买来拆开看看是咋做到的。

关于 DIY 游戏机的内容可以看这篇文章:成本60元,用ESP32-S3做个开源游戏机,能玩FC/NES、GameBoy,还有专属彩色PCB

包装

外包装也没啥品牌,就是一个直白的 Game Box。

我当时买的双人版,除了主机之外,还有电视 S 端子线、一个额外的手柄、BL-5C 充电电池、Micro USB 充电线。

开机使用

通过一个拨动开关开机,就可以看到游戏列表了,很像以前盗版游戏卡带的界面。

屏幕 3.0 寸的,但是可视角度并不是特别好,应该是那种本身设计为竖向观看的,横着使用的时像素排列看起来不舒适。

当然这么便宜的游戏机,操作什么的就不要太讲究了,能玩。

感受过游戏之后, 就可以拆开来看看到底咋做到这么低的成本了 😂。

拆解

从背面取下 6 颗螺丝,就可以拆开整个主机了。

直接看到的就是一个单面板 PCB,不知道相比双面板,单面板 PCB 能省多少钱。

全拆开,整体就是三明治结构,主要部件:

  • 3.0 寸 TFT 屏幕,看排线应该是


阅读全文 »