[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93033":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":13,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":18,"hasPages":16,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":14,"starSnapshotCount":14,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},93033,"xueersi-idf","ZyoungInc\u002Fxueersi-idf","ZyoungInc","modify Xueersi Xiaomiao from micro python to esp-idf environment",null,"C",60,14,1,0,40.63,false,"main",true,[],"2026-07-22 04:02:08","# 小喵掌机 ESP-IDF 固件与硬件资料\n\n这是给学而思小喵掌机移植的 ESP-IDF \u002F LVGL 固件工程，同时整理了屏幕、按键、传感器、GD32 协处理器和底层协议等硬件资料。\n\n## 固件下载与刷入\n\n已经编译好的 merged bin 会放在本项目的 [Releases](https:\u002F\u002Fgithub.com\u002FZyoungInc\u002Fxueersi-idf\u002Freleases\u002Flatest) 页面。普通用户可以直接下载 release 里的 `xiaomiao-merged.bin` 并从 `0x0` 地址刷入，不需要自己搭建 ESP-IDF 编译环境。\n\n示例命令：\n\n```bash\nesptool.py --chip esp32 -b 460800 write_flash 0x0 xiaomiao-merged.bin\n```\n\n刷入前请确认目标硬件是 ESP32-WROVER-B 版本的小喵掌机，并确认串口连接正常。\n\n## 当前状态\n\n- ESP32 侧固件已经移植到 ESP-IDF，使用 LVGL 9.x 驱动 ST7735 SPI 屏幕，并提供硬件状态分页 UI。\n- 最佳的性能优化，240mhz频率，高速SPI，PSRAM，FLASH频率，三重缓冲，稳定60fps UI\n- 由于屏幕的TE引脚没有连接到MCU，无法做垂直同步。抗撕裂。由于背光引脚直连cc，无法调节背光亮度。\n- 光照、热敏、蜂鸣器、按键、MicroSD、I2C 设备探测等功能已经接入 ESP32 侧固件。\n- GD32 固件仍在开发中，目前公开的 GD32 工程主要完成了 USB 转串口功能。\n- GD32 侧与 ESP32 间的 LED、电机等控制协议仍在斟酌当中，正在考虑是否兼容原有协议。欢迎大家测试或在 Issues 里提出建议。\n\n## 原理图与鸣谢\n\n原理图文件已整理为 [`xueersi-xiaomiao-schematic.pdf`](xueersi-xiaomiao-schematic.pdf)。\n\n感谢 ID「我为电波狂」对硬件进行测量并制作原理图，这部分资料对后续移植和维护非常关键。\n\n## 参与项目\n\n如果这个项目对你有帮助，欢迎 Star。遇到问题、发现硬件差异、或者有协议兼容建议，可以提交 Issue。也欢迎提交 PR，我会审核后合并。\n本项目针对官方原厂硬件，不考虑对硬件的魔改因素。对硬件改动的支持需要另外开branch或复制到自己的仓库（但需要注意下一章的要求）。\n\n## 使用与署名要求\n\n本项目由ZYoungInc（wechat\u002Ftel：15657325738）完全用爱发电并完全免费提供给爱好者们学习和交流等非营利目的。如有侵权，请联系本人。二次开发、转载、分发、商用或以任何形式使用本项目内容时，请务必保留并明确引用原作者与本项目来源，以尊重劳动成果。违反者将依法追究责任；本人保留所有权利。也欢迎举报滥用。\n\n## 1. 总体架构\n\n```text\nPC USB\n  │\n  │ USB CDC \u002F 下载串口\n  ▼\nGD32F350G8\n  ├─ USB 转 ESP32 UART0\n  ├─ ESP32 自动下载 \u002F 自动复位控制\n  ├─ I2C 从机地址 0x40\n  ├─ 控制双路电机驱动 HR8833 \u002F DRV8833\n  └─ 控制板载 LED1 \u002F LED2\n\nESP32-WROVER-B\n  ├─ SPI TFT 显示屏\n  ├─ MicroSD 卡\n  ├─ 6 个按键\n  ├─ 蜂鸣器 PWM\n  ├─ 光照 ADC\n  ├─ 热敏 ADC\n  ├─ I2C 主机\n  │   ├─ GD32F350G8：0x40\n  │   └─ MPU6050：0x68\n  └─ 预留扩展 IO\n```\n\n核心关系：\n\n```text\nESP32 = 主控 \u002F UI \u002F Python 运行环境 \u002F 屏幕 \u002F SD \u002F 按键 \u002F 传感器\nGD32  = USB 串口桥 \u002F ESP32 自动烧录控制 \u002F 电机与 LED 控制器\n0x40  = GD32 的 I2C 从机地址\n```\n\n***\n\n## 2. ESP32 引脚分配\n\n### 2.1 TFT 显示屏\n\n| 功能             | ESP32 引脚   |\n| -------------- | ---------- |\n| SPI SCK        | GPIO18     |\n| SPI MOSI       | GPIO23     |\n| SPI MISO       | GPIO19     |\n| TFT DC         | GPIO4      |\n| TFT CS         | GPIO5      |\n| TFT RES \u002F 相关复用 | GPIO19     |\n\n显示对象信息：\n\n```text\n显示分辨率：160 × 128\nSPI：SPI2\nSPI 频率：40 MHz\nSCK：GPIO18\nMOSI：GPIO23\nMISO：GPIO19\nDC：GPIO4\n```\n\n屏幕底层通过 `FrameBuffer` 和 `SCREEN` 对象刷新。\n\n***\n\n### 2.2 MicroSD 卡\n\n| 功能         | ESP32 引脚   |\n| ---------- | ---------- |\n| SPI SCK    | GPIO18     |\n| SPI MOSI   | GPIO23     |\n| SPI MISO   | GPIO19     |\n| SD CS      | GPIO22     |\n\nTFT 与 MicroSD 共用 SPI2，通过不同 CS 分时使用。\n\n***\n\n### 2.3 按键\n\n| 按键         | ESP32 引脚   |\n| ---------- | ---------- |\n| 上          | GPIO2      |\n| 下          | GPIO13     |\n| 左          | GPIO27     |\n| 右          | GPIO35     |\n| A          | GPIO34     |\n| B          | GPIO12     |\n\n注意：\n\n```text\nGPIO34、GPIO35 是输入专用脚。\nGPIO12 是启动相关敏感脚。\n```\n\n***\n\n### 2.4 ADC 传感器\n\n| 功能         | ESP32 引脚   |\n| ---------- | ---------- |\n| 光照传感器      | GPIO36     |\n| 热敏电阻       | GPIO39     |\n\n已确认：\n\n```text\nsensor.getLight() = ADC(GPIO36).read()\nsensor.getTemp()  = ADC(GPIO39) 后换算\n```\n\n***\n\n### 2.5 蜂鸣器\n\n| 功能         | ESP32 引脚   |\n| ---------- | ---------- |\n| 无源蜂鸣器      | GPIO14     |\n\n底层对象：\n\n```text\nPWM(14, freq=440, duty=0)\n```\n\n也就是：\n\n```text\nGPIO14 → PWM → 无源蜂鸣器\n```\n\n***\n\n### 2.6 I2C 总线\n\n| 功能         | ESP32 引脚   |\n| ---------- | ---------- |\n| I2C SCL    | GPIO15     |\n| I2C SDA    | GPIO21     |\n\nI2C 设备：\n\n| 地址         | 设备         |\n| ---------- | ---------- |\n| 0x40       | GD32F350G8 |\n| 0x68       | MPU6050    |\n\n当前已确认：\n\n```text\nGD32：0x40\nMPU6050：0x68，未安装时不会出现在 scan 结果中\n```\n\n***\n\n### 2.7 UART0\n\n| 功能         | ESP32 引脚   |\n| ---------- | ---------- |\n| UART0 TX   | GPIO1      |\n| UART0 RX   | GPIO3      |\n\n该 UART0 通过 GD32 转 USB 与电脑通信，用于 Python 终端、程序上传、ESP32 自动下载。\n\n***\n\n## 3. GD32F350G8 连接关系\n\nGD32F350G8 在板上承担以下功能：\n\n```text\n1. USB CDC 串口桥\n2. ESP32 自动复位 \u002F 自动下载控制\n3. I2C 从机 0x40\n4. LED1 \u002F LED2 控制\n5. 双路电机控制\n6. HR8833 \u002F DRV8833 控制信号输出\n```\n\n已知相关连接：\n\n| 功能          | 连接对象                     |\n| ----------- | ------------------------ |\n| USB D+ \u002F D- | USB 接口                   |\n| UART 桥      | ESP32 GPIO1 \u002F GPIO3      |\n| 自动下载控制      | ESP32 IO0 \u002F 复位相关线路       |\n| I2C         | ESP32 GPIO15 \u002F GPIO21    |\n| 电机 PWM      | HR8833 \u002F DRV8833         |\n| LED 控制      | LED1 \u002F LED2              |\n| SWD         | TMS \u002F TCK \u002F RST \u002F GND 焊盘 |\n\n***\n\n## 4. I2C 地址与设备\n\n### 4.1 I2C 总线\n\n```text\nI2C 控制器：ESP32 I2C(0)\nSCL：GPIO15\nSDA：GPIO21\n频率：100 kHz\n```\n\n### 4.2 地址表\n\n| I2C 地址     | 设备         | 说明         |\n| ---------- | ---------- | ---------- |\n| 0x40       | GD32F350G8 | LED、电机控制   |\n| 0x68       | MPU6050    | 加速度计 \u002F 陀螺仪 |\n\n***\n\n## 5. GD32 0x40 协议\n\n## 5.1 LED 协议\n\nGD32 的 LED 控制使用 I2C memory write 形式。\n\n| 功能         | I2C 地址     | 寄存器        | 数据         |\n| ---------- | ---------- | ---------- | ---------- |\n| LED1 关闭    | 0x40       | 0xA0       | 0          |\n| LED1 打开    | 0x40       | 0xA0       | 1          |\n| LED2 关闭    | 0x40       | 0xA1       | 0          |\n| LED2 打开    | 0x40       | 0xA1       | 1          |\n\nLED 对象内部状态：\n\n```text\nLED1:\n  reg = 0xA0\n\nLED2:\n  reg = 0xA1\n```\n\n***\n\n## 5.2 电机协议概览\n\n电机控制通过 I2C 向 0x40 写入一组 PWM 寄存器格式数据。\n\n基本格式：\n\n```text\nI2C 地址：0x40\n\n数据格式：\n[\n  起始寄存器,\n  通道A_ON_L,\n  通道A_ON_H,\n  通道A_OFF_L,\n  通道A_OFF_H,\n  通道B_ON_L,\n  通道B_ON_H,\n  通道B_OFF_L,\n  通道B_OFF_H\n]\n```\n\n每个电机占两个 PWM 通道：\n\n```text\n一个通道控制一个方向输入。\n另一个通道控制反方向输入。\n```\n\n方向逻辑：\n\n```text\n方向 1：\n  IN_A = PWM\n  IN_B = 0\n\n方向 0：\n  IN_A = 0\n  IN_B = PWM\n```\n\n***\n\n## 5.3 电机编号与寄存器\n\n| 电机编号       | 起始寄存器      | 占用通道         |\n| ---------- | ---------- | ------------ |\n| Motor 2    | 0x06       | PWM 通道 0 \u002F 1 |\n| Motor 1    | 0x0E       | PWM 通道 2 \u002F 3 |\n\n***\n\n## 5.4 速度映射\n\n速度参数范围：\n\n```text\nspeed = 0 ~ 255\n```\n\n转换关系：\n\n```text\nPWM_12bit = speed × 16\nPWM_12bit = speed \u003C\u003C 4\n```\n\n示例：\n\n| speed      | PWM 十进制    | PWM 十六进制   | 低字节        | 高字节        |\n| ---------- | ---------- | ---------- | ---------- | ---------- |\n| 0          | 0          | 0x0000     | 0x00       | 0x00       |\n| 1          | 16         | 0x0010     | 0x10       | 0x00       |\n| 10         | 160        | 0x00A0     | 0xA0       | 0x00       |\n| 50         | 800        | 0x0320     | 0x20       | 0x03       |\n| 100        | 1600       | 0x0640     | 0x40       | 0x06       |\n| 128        | 2048       | 0x0800     | 0x00       | 0x08       |\n| 200        | 3200       | 0x0C80     | 0x80       | 0x0C       |\n| 255        | 4080       | 0x0FF0     | 0xF0       | 0x0F       |\n\n***\n\n## 5.5 电机 1 数据格式\n\n### Motor 1，方向 1\n\n```text\n[\n  0x0E,\n  0x00, 0x00, PWM_L, PWM_H,\n  0x00, 0x00, 0x00, 0x00\n]\n```\n\n### Motor 1，方向 0\n\n```text\n[\n  0x0E,\n  0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, PWM_L, PWM_H\n]\n```\n\n***\n\n## 5.6 电机 2 数据格式\n\n### Motor 2，方向 1\n\n```text\n[\n  0x06,\n  0x00, 0x00, PWM_L, PWM_H,\n  0x00, 0x00, 0x00, 0x00\n]\n```\n\n### Motor 2，方向 0\n\n```text\n[\n  0x06,\n  0x00, 0x00, 0x00, 0x00,\n  0x00, 0x00, PWM_L, PWM_H\n]\n```\n\n***\n\n## 5.7 全部电机停止\n\n全停命令：\n\n```text\nI2C 地址：0x40\n数据：[0x00, 0x00, 0x00, 0x00, 0x00]\n```\n\n***\n\n## 6. MPU6050\n\n### 6.1 总线连接\n\n| 功能         | ESP32 引脚   |\n| ---------- | ---------- |\n| SCL        | GPIO15     |\n| SDA        | GPIO21     |\n\n### 6.2 地址\n\n```text\nMPU6050 I2C 地址：0x68\n```\n\n### 6.3 传感器对象内部字段\n\n```text\naddr = 104 = 0x68\nimuReady = True \u002F False\nimu = 14 字节缓存\n```\n\n### 6.4 数据类型\n\nMPU6050 提供：\n\n```text\naccX\naccY\naccZ\ngyroX\ngyroY\ngyroZ\npitch\nroll\ngesture\n```\n\n***\n\n## 7. SugarASR 扩展占用\n\n`sugar_asr.py` 使用：\n\n```text\nUART1\nTX = GPIO21\nRX = GPIO15\n波特率 = 115200\n```\n\n这与板载 I2C 引脚重合：\n\n```text\nGPIO21 = I2C SDA\nGPIO15 = I2C SCL\n```\n\n因此：\n\n```text\n使用 SugarASR 时，GPIO15 \u002F GPIO21 会作为 UART1 使用。\n使用 LED、电机、MPU6050 时，GPIO15 \u002F GPIO21 会作为 I2C 使用。\n```\n\n***\n\n## 8. 板载扩展 IO\n\n板上预留扩展 IO：\n\n| ESP32 GPIO | 类型               | 说明           |\n| ---------- | ---------------- | ------------ |\n| GPIO33     | GPIO \u002F ADC       | 可作输入、输出、ADC  |\n| GPIO32     | GPIO \u002F ADC       | 可作输入、输出、ADC  |\n| GPIO26     | GPIO \u002F DAC \u002F PWM | 可作输出、PWM、DAC |\n| GPIO25     | GPIO \u002F DAC \u002F PWM | 可作输出、PWM、DAC |\n\n推荐作为普通扩展口使用的 ESP32 引脚：\n\n```text\nGPIO25\nGPIO26\nGPIO32\nGPIO33\n```\n\n***\n\n## 9. ESP32 引脚占用总表\n\n| GPIO       | 当前功能                  | 备注               |\n| ---------- | --------------------- | ---------------- |\n| GPIO1      | UART0 TX              | 经 GD32 转 USB 串口  |\n| GPIO2      | 上键                    | 输入               |\n| GPIO3      | UART0 RX              | 经 GD32 转 USB 串口  |\n| GPIO4      | TFT DC                | 显示               |\n| GPIO5      | TFT CS                | 显示               |\n| GPIO12     | B 键                   | 启动相关敏感脚          |\n| GPIO13     | 下键                    | 输入               |\n| GPIO14     | 蜂鸣器                   | PWM              |\n| GPIO15     | I2C SCL \u002F SugarASR RX | 与 GPIO21 成组复用    |\n| GPIO18     | SPI SCK               | TFT \u002F SD 共用      |\n| GPIO19     | SPI MISO \u002F TFT 相关     | TFT \u002F SD 相关      |\n| GPIO21     | I2C SDA \u002F SugarASR TX | 与 GPIO15 成组复用    |\n| GPIO22     | SD CS                 | MicroSD          |\n| GPIO23     | SPI MOSI              | TFT \u002F SD 共用      |\n| GPIO25     | 预留扩展                  | GPIO \u002F DAC \u002F PWM |\n| GPIO26     | 预留扩展                  | GPIO \u002F DAC \u002F PWM |\n| GPIO27     | 左键                    | 输入               |\n| GPIO32     | 预留扩展                  | GPIO \u002F ADC       |\n| GPIO33     | 预留扩展                  | GPIO \u002F ADC       |\n| GPIO34     | A 键                   | 输入专用             |\n| GPIO35     | 右键                    | 输入专用             |\n| GPIO36     | 光照 ADC                | 输入专用             |\n| GPIO39     | 热敏 ADC                | 输入专用             |\n\n***\n\n## 10. 开发用对象映射\n\n| Python 对象 \u002F 模块       | 底层硬件               |\n| -------------------- | ------------------ |\n| `screen`             | FrameBuffer + TFT  |\n| `display`            | 160 × 128 TFT 显示封装 |\n| `tft`                | 底层 SCREEN 对象       |\n| `fb` \u002F `fbuf`        | FrameBuffer        |\n| `vspi`               | SPI2，40 MHz        |\n| `i2c`                | I2C0，SCL=15，SDA=21 |\n| `led1`               | GD32 0x40，寄存器 0xA0 |\n| `led2`               | GD32 0x40，寄存器 0xA1 |\n| `buzzer`             | GPIO14 PWM         |\n| `sensor.adcLight`    | GPIO36 ADC         |\n| `sensor.adcTemp`     | GPIO39 ADC         |\n| `sensor.btns`        | 6 个 ESP32 GPIO 按键  |\n| `motor.Motor`        | GD32 0x40 电机协议     |\n| `sugar_asr.SugarASR` | UART1，TX=21，RX=15  |\n\n***\n\n## 11. 开发时可直接使用的底层信息\n\n### 11.1 I2C\n\n```text\nI2C0:\n  SCL = GPIO15\n  SDA = GPIO21\n  freq = 100000\n\n设备：\n  0x40 = GD32\n  0x68 = MPU6050\n```\n\n### 11.2 LED\n\n```text\nLED1:\n  addr = 0x40\n  reg  = 0xA0\n  value 0 = off\n  value 1 = on\n\nLED2:\n  addr = 0x40\n  reg  = 0xA1\n  value 0 = off\n  value 1 = on\n```\n\n### 11.3 电机\n\n```text\nMotor 1:\n  起始寄存器 = 0x0E\n\nMotor 2:\n  起始寄存器 = 0x06\n\nspeed:\n  0 ~ 255\n  PWM = speed \u003C\u003C 4\n\ndirection:\n  1 = 第一方向通道 PWM，第二方向通道 0\n  0 = 第一方向通道 0，第二方向通道 PWM\n```\n\n### 11.4 蜂鸣器\n\n```text\nGPIO14\nPWM 输出\n无源蜂鸣器\n```\n\n### 11.5 光照 \u002F 温度\n\n```text\n光照：\n  GPIO36\n  ADC\n\n热敏：\n  GPIO39\n  ADC\n```\n\n### 11.6 按键\n\n```text\nup    = GPIO2\ndown  = GPIO13\nleft  = GPIO27\nright = GPIO35\na     = GPIO34\nb     = GPIO12\n```\n\n### 11.7 显示\n\n```text\n分辨率：160 × 128\nSPI：SPI2\nSCK：GPIO18\nMOSI：GPIO23\nMISO：GPIO19\nDC：GPIO4\nCS：GPIO5\n```\n","这是一个为学而思小喵掌机（ESP32-WROVER-B硬件平台）定制的ESP-IDF固件移植项目，将原MicroPython固件迁移至官方ESP-IDF框架，并集成LVGL 9.x图形库驱动ST7735屏幕，实现60fps三重缓冲UI。核心功能包括按键、光照\u002F热敏传感器、蜂鸣器、MicroSD卡、I2C外设（MPU6050\u002FGD32）的完整驱动支持，并提供可直接刷写的merged bin固件。适用于嵌入式爱好者对教育类掌机进行二次开发、UI定制或硬件功能拓展，无需从零搭建编译环境。",2,"2026-07-11 02:30:42","CREATED_QUERY"]