Skip to main content

学而思小喵掌机

  • XiaoMiao / 小喵掌机;Wener 实机外观和 PCB 对照确认与 KittenBot MeowBit v1 / diegosanzmartin/Reversing-Meowbit-v1 同版硬件高度一致。
  • 主控:ESP32
  • 外设:TFT、MicroSD、6 键、无源蜂鸣器、ADC 光照/热敏传感器、I2C、UART0
  • 本页是实机观察、硬件推测和社区资料整理;pysn2012/xueersi-xiaomiao 只是参考来源之一,不代表官方资料。
  • pysn2012/xueersi-xiaomiao
    • Apache-2.0, Python, ESP32, MicroPython, ESPHome, LVGL
    • 学而思 ESP32 小喵掌机开发资料,包含硬件引脚、MicroPython 示例、ESPHome 配置和预编译固件。
  • diegosanzmartin/Reversing-Meowbit-v1
    • MIT, C++
    • KittenBot 为 Xueersi Coding 平台开发的 MeowBit v1 硬件逆向资料,按键、LCD pinout 和板面布局可作为本机主要硬件参考。
  • https://meowbit.kittenbot.cc/

硬件资源

模块资源说明
主控ESP32常规 ESP32,仓库提供 ESP32 SPIRAM 固件
辅助 MCUGD32板上可见,疑似 USB-UART / 外设 / 下载辅助,需连线验证
显示SPI TFT / ST7735 类128x160,SPI2,示例 rotation 90;原屏具体驱动 IC 待确认
存储MicroSD与 TFT 共享 SPI2,通过 CS 分时复用
按键上 / 下 / 左 / 右 / A / B6 键输入
蜂鸣器GPIO14无源蜂鸣器,PWM / LEDC 驱动
光照GPIO36 / ADC1_CH0仅输入 ADC
温度GPIO39 / ADC1_CH3热敏电阻,ESPHome 示例用 NTC
I2CGPIO15 / GPIO21图示列出 MPU6050 / 运动传感器、马达/LED 控制器
UART0GPIO1 / GPIO3原生串口;是否经过 GD32 待确认
侧边接口MOTOR-A / MOTOR-B上游图示标注;是否对应背面 M1/M2 2Pin 小座需追线确认
扩展GPIO33 / GPIO32 / GPIO26 / GPIO25底部 1/2/3/4 扩展位;图上每路还标 GVD,疑似公共电源/地,需实测

MeowBit 对照

  • Wener 实机观察确认:手头这台小喵掌机与 diegosanzmartin/Reversing-Meowbit-v1 图片中的外观和 PCB 布局完全一致。
  • KittenBot 官方 MeowBit 资料列出 TFT、Dual LEDs、Light Sensor、Temperature Sensor、6 Programmable Buttons、Passive Buzzer、SD Card Slot、Gyroscope、Expansion Pins、JacDac Port、Micro:bit-compatible 40-pin expansion connector。
  • MeowBit v1 逆向资料中的按键 GPIO 与小喵仓库一致:GPIO2/13/27/35/34/12
  • MeowBit v1 逆向资料中的 LCD FPC 14Pin 与小喵资料一致:DC GPIO4MOSI GPIO23SCK GPIO18CS GPIO5
  • 因此后续可以把 Reversing-Meowbit-v1 当作本机主要硬件基准;GD32 角色、右侧 M1/M2 接口和 IMU/扩展位的实际电气连接仍需实测确认。

上游图示信息

pysn2012/xueersi-xiaomiao/image/xiaomiao.png 是当前最完整的上游标注图之一,包含屏幕、SD、按键、UART、底部扩展、MOTOR-A/B 和 I2C 设备地址。

模块图示信息备注
TFT 屏幕SPI2: sck=18, mosi=23, cs=5, dc=4, res=19, bl=NoneST7735 / SPI TFT 方向
SD 卡SPI2: sck=18, mosi=23, miso=19, cs=22与 TFT 共享 SCK/MOSI/MISO
按键2、下 13、左 27、右 35、A 34、B 12与 MeowBit v1 逆向资料一致
蜂鸣器14PWM / LEDC
光照36ADC input-only
热敏电阻39ADC input-only
UARTTX=1RX=3ESP32 UART0
I2CSCL=15SDA=21图示列出姿态/运动传感器和马达/LED 控制器
I2C 设备0x68: MPU6050(运动传感器)0x40: 马达/LED控制器图示功能速记:姿态(0x6B)电机/LED(0x40)0x680x6B 的关系需结合驱动/scan 确认
MOTOR-A / MOTOR-B左右侧绿色箭头标注是否对应背面 M1/M2 2Pin 小座,需追线确认
底部扩展1 -> GPIO332 -> GPIO323 -> GPIO264 -> GPIO25图上每路上方还标 GVD,疑似公共电源/地,需万用表确认

图示里给出的 0x40 I2C 写入示例:

# 格式: i2c.writeto_mem(设备地址, 寄存器地址, 数据)
i2c.writeto_mem(0x40, 0xA0, bytes([1]))
# 向地址 0x40 的设备,在寄存器 0xA0 中写入数据 1

# 使用 writeto: 地址 + 数据
i2c.writeto(0x40, bytes(data_sequence))
# 告诉 0x40 设备接收这些数据,设备自行解析含义

Pinout

功能引脚备注
Key UpGPIO2输入
Key DownGPIO13输入
Key LeftGPIO27输入
Key RightGPIO35仅输入
Key AGPIO34仅输入
Key BGPIO12启动敏感,上电阶段避免外部高电平
TFT SCKGPIO18SPI2,与 SD 共享
TFT MOSIGPIO23SPI2,与 SD 共享
TFT CSGPIO5TFT 片选
TFT DCGPIO4TFT Data/Command
TFT RESGPIO19与 SD MISO 共享
SD SCKGPIO18SPI2,与 TFT 共享
SD MOSIGPIO23SPI2,与 TFT 共享
SD MISOGPIO19SPI2,与 TFT RES 共享
SD CSGPIO22SD 片选
BuzzerGPIO14PWM
Light ADCGPIO36ADC1_CH0,仅输入
NTC ADCGPIO39ADC1_CH3,仅输入
I2C SCLGPIO15I2C
I2C SDAGPIO21I2C
UART0 TXGPIO1原生串口
UART0 RXGPIO3原生串口

LCD FPC 14Pin

  • 观察到的 14Pin 屏幕排线定义符合典型 SPI TFT LCD。
  • SCL 对应 SPI Clock,SDA 对应 SPI MOSI。
  • VCC / IOVCC / 背光供电方式需要实测后才能直接替换屏幕。
PinSymbolFunction说明
1NC空脚未连接
2GND电源接地
3LEDK背光阴极背光 LED 阴极
4LEDA背光阳极背光 LED 阳极
5GND电源接地
6RESET显示屏复位脚LCD reset
7D/C数据/命令控制脚Data / Command 选择
8SDA数据SPI MOSI / SDA
9SCL时钟SPI SCLK
10VCC模拟电压屏幕供电,可能是 2.8V / 3.3V,需实测
11IOVCC逻辑电压IO 电平供电,通常 3.3V,需实测
12CS片选信号SPI CS
13GND电源接地
14NC空脚未连接

LCD 替换推测

  • 14Pin pinout 与常见 SPI TFT 模组接近,理论上可替换成 SPI 接口的 ST7789 屏幕。
  • ST7789 常见信号包括 VCCGNDSCLSDARESDCCSBLK / LED
  • 如果原屏也是 ST7789 / ST7735 / GC9A01 / ILI9341 类 SPI 屏,替换难度主要在 pinout、供电、初始化参数和 framebuffer 尺寸。
  • 如果原屏已经是 ST7789 且只是分辨率不同,通常重点改 init sequence、分辨率、偏移量、RGB/BGR 和旋转方向。
检查项说明
排线 pinout14Pin 顺序必须完全对应,不一致需要转接板
FPC pitch间距要匹配,常见有 0.5mm 等规格,需量测
触点方向同向 / 反向会影响能否直插
VCC / IOVCC确认是 3.3V、2.8V 还是其它电压
背光驱动确认 LEDA / LEDK 是直接供电、限流电阻还是开关管控制
屏幕尺寸外形、可视区、固定结构要匹配外壳
初始化参数分辨率、offset、RGB/BGR、rotation 因模组而异
固件驱动需要能改 LCD init sequence、尺寸和 framebuffer

ST7789 可选方向

分辨率常见尺寸备注
240x2401.3 / 1.54 寸最常见,适合小掌机
240x2801.69 寸竖屏设备常见
240x3202.0 寸左右接近小屏手机比例
320x2402.0 / 2.4 寸横屏掌机更舒服
  • ESP32 推 SPI TFT 时,分辨率越高刷新压力越大。
  • UI、菜单和简单游戏可以考虑 240x320;复杂动画优先考虑 240x240 / 240x280。

M1 / M2 与 MOTOR-A/B

  • 上游 xiaomiao.png 图示把左右侧接口标成 MOTOR-A / MOTOR-B,同时列出 I2C 0x40马达/LED控制器
  • 背面板图可见两组 2Pin 小接口,丝印类似 M1+ / M1-M2+ / M2-
  • 目前可以推测 M1/M2MOTOR-A/B、I2C 0x40 控制器有关,但还不能在未追线前直接确认电气连接和可承载负载。
  • KittenBot 官方 MeowBit pinout 未把 M1/M2 列为可编程 IO 名称。
  • 公开资料里 M1/M2 也常出现在 Robotbit 扩展板的 motor port 文档中,但那是外接扩展板,不能直接套用到小喵/MeowBit 本体。
  • 验证前不要接低阻电机、外部供电或大电流负载。
检查项目的
断电量 M1+/-M2+/-GND / 3V3 的连通判断是否是电源/地/信号
上电测两组接口静态电压判断是否有固定供电或受控输出
追线到 ESP32 / GD32 / 驱动芯片判断接口真实归属
观察运行时波形判断是否为 UART、GPIO、PWM、I2C 或其它协议

GD32 / USB-UART 推测

  • 板上未见独立 USB-UART 芯片,同时观察到 GD32 MCU。
  • 推测 GD32 可能承担 USB CDC 转 UART、ESP32 自动下载控制或外设辅助控制。
  • 是否真实承担 USB-UART 需要用连线、枚举信息和串口行为确认。
可能方案说明
GD32 作为 USB-UART 桥GD32 连接 USB D+ / D-,再通过 UART 接 ESP32
GD32 作为键盘 / 外设控制 MCU负责按键、蜂鸣器、传感器等,再和 ESP32 通信
GD32 作为下载 / 烧录辅助芯片控制 ESP32 EN / GPIO0,实现自动下载
GD32 是主控之一ESP32 负责无线或应用,GD32 负责底层外设

验证点

检查项判断
USB D+ / D- 是否接到 GD32如果直连 GD32,说明 GD32 至少参与 USB 侧功能
GD32 UART 是否接 ESP32 U0RXD / U0TXD可验证是否作为 USB-UART 桥
GD32 是否连接 ESP32 EN / GPIO0可验证是否参与自动下载
插 USB 后 VID/PID / 串口名称CDC 串口且无 CH340/CP2102/FT232 时,GD32 做 USB CDC 的可能性较高

IMU 预留推测

  • 板上存在空置焊盘,疑似 MPU6050 / MPU6500 / ICM-206xx 一类 I2C IMU 预留位。
  • 如果焊盘连接到 GPIO15 / GPIO21,可尝试 I2C scan。
  • 焊上 MPU6050 后,常见 I2C 地址为 0x680x69
信号说明
VCCIMU 供电
GND
SCLI2C clock,可能接 GPIO15
SDAI2C data,可能接 GPIO21
INT中断脚,需追线确认
AD0地址选择脚,决定 0x68 / 0x69

注意事项

  • GPIO34、GPIO35、GPIO36、GPIO39 是 input-only,不能作为输出。
  • GPIO12 是 ESP32 strapping pin;小喵掌机 B 键接在 GPIO12,上电阶段要避免外部高电平影响启动。
  • TFT 与 MicroSD 共享 SPI2 的 GPIO18、GPIO23、GPIO19,通过不同 CS 分时访问。
  • 上游 README 中的部分扩展说明需要按实机追线复核,不宜直接当作确定硬件结论。
  • 如果使用 ESPHome 示例,示例 AP / Wi-Fi 配置应改成自己的配置,不要沿用公开仓库里的默认值。

下一步确认

优先级项目目的
P0测量 LCD VCC / IOVCC判断 ST7789 是否可直接接入
P0确认 FPC pitch 和触点方向判断是否能直接换屏或需要转接
P0确认原屏驱动 IC判断是否只需改初始化参数
P1追 GD32 到 ESP32 的 UART / EN / GPIO0判断 USB-UART、烧录和辅助控制路径
P1追右侧 M1/M2 2Pin 小座判断是电源、GPIO、通信口还是专用模块接口
P1记录 USB VID/PID 和串口名称验证 GD32 是否作为 USB CDC 设备
P1扫 I2C 总线确认是否已有 IMU 或预留地址
P2测背光 LEDA / LEDK 驱动判断换屏背光是否需要限流或开关控制

软件入口

路径内容
bins/ESP32_SPIRAM_1.24_SDCARDST7735.bin预编译 ESP32 SPIRAM / SDCard / ST7735 固件
bins/lvgl9.3_mpy_ESP32_GENERIC_SPIRAM_4MB_st7735.binLVGL 9.3 + MicroPython 固件
microptyhon/MicroPython 示例;上游目录名保留拼写 microptyhon
lvgl-mpy/LVGL MicroPython 示例、字体和 screen 示例
esphome/xiaomiao.yamlESPHome 主配置,包含 Wi-Fi、packages、Home Assistant 时间同步
esphome/packages/device.yamlSPI / ST7735 显示配置
esphome/packages/sensors.yaml在线状态、uptime、Wi-Fi、光照 ADC、NTC 温度、IP 信息
esphome/packages/fonts.yaml字体配置

MicroPython 初始化

from machine import I2C, PWM, Pin, SPI

key_up = Pin(2, Pin.IN, Pin.PULL_UP)

spi = SPI(2, baudrate=40_000_000, sck=Pin(18), mosi=Pin(23), miso=Pin(19))
i2c = I2C(0, scl=Pin(15), sda=Pin(21))
buzzer = PWM(Pin(14), freq=2000, duty=512)

ESPHome 片段

spi:
- id: lcd_spi
clk_pin: GPIO18
mosi_pin: GPIO23

display:
- platform: mipi_spi
id: tft_display
model: ST7735
spi_id: lcd_spi
cs_pin: 5
dc_pin: 4
reset_pin: 19
rotation: 90
dimensions:
width: 128
height: 160

参考