https://github.com/however-yir/embedded-systems-lab
Embedded IoT projects: STM32 FreeRTOS monitor, industrial Modbus middleware, ESP32-S3 BLE keyboard.
https://github.com/however-yir/embedded-systems-lab
ble-hid embedded-systems esp32-s3 freertos industrial-automation iot modbus rtos stm32
Last synced: 24 days ago
JSON representation
Embedded IoT projects: STM32 FreeRTOS monitor, industrial Modbus middleware, ESP32-S3 BLE keyboard.
- Host: GitHub
- URL: https://github.com/however-yir/embedded-systems-lab
- Owner: however-yir
- License: mit
- Created: 2026-05-04T05:10:41.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-22T12:24:51.000Z (about 1 month ago)
- Last Synced: 2026-05-22T17:56:13.006Z (about 1 month ago)
- Topics: ble-hid, embedded-systems, esp32-s3, freertos, industrial-automation, iot, modbus, rtos, stm32
- Language: C
- Size: 33.1 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Embedded Systems Lab
嵌入式 IoT 项目集合,覆盖 STM32 FreeRTOS 实时监控、工业 Modbus 通信中间件与 ESP32-S3 自定义硬件。
---
## 第一屏可运行状态
### edgepulse-rtos-monitor
| 项 | 状态 |
|---|---|
| 硬件要求 | NUCLEO-F746ZG、板载 LAN8742A Ethernet PHY、RJ45 网络、ST-LINK/OpenOCD |
| 构建方式 | `cd edgepulse-rtos-monitor && make`,烧录命令为 `make flash` |
| 验证证据 | ARM GCC 构建由 `make`/CI 验证;Web 监控截图与串口启动日志当前为 planned evidence,预留位置见子项目 README |
| CI 覆盖 | 根 `.github/workflows/ci.yml` 的 `build-edgepulse` 作业安装 `gcc-arm-none-eabi` 后执行 `make` |
### industrial-edge-modbus-stm32-freertos
| 项 | 状态 |
|---|---|
| 硬件要求 | STM32F103/G431/F429/H743 等示例板卡、RS485/RS232 收发器、USB 转串口或以太网链路 |
| 构建方式 | STM32CubeIDE 导入 `Examples/*`;部分示例可用 `arm-none-eabi-gcc`/`make`;库源码可做语法检查 |
| 验证证据 | README 补充 RTU/TCP bench 步骤、串口参数与 `pymodbus` 命令示例;真实双板/现场总线日志为 planned evidence |
| CI 覆盖 | 根 `build-modbus` 作业对 `MODBUS-LIB/Src/*.c` 做 ARM GCC 语法检查,并尝试构建首个可用示例 |
### vibecraft-keyboard
| 项 | 状态 |
|---|---|
| 硬件要求 | ESP32-S3、ST7789 长条屏、7 个机械按键、1 个带按压旋转编码器、USB-C 数据线 |
| 构建方式 | `./scripts/bootstrap-upstream.sh` 拉取上游后,执行 `./scripts/build-firmware.sh keys` 与 `ESP_PORT=... ./scripts/flash-firmware.sh keys` |
| 验证证据 | README/docs 覆盖 BOM、接线、烧录、BLE HID 验证;实物照片、BLE 配对截图、串口/烧录日志为 planned evidence |
| CI 覆盖 | 根 `.github/workflows/ci.yml` 的 `build-vibecraft` 作业运行 Python lint、shell 脚本检查与 `pytest tests -q` |
---
## 项目列表
| 子项目 | 定位 | 技术栈 |
|---|---|---|
| [edgepulse-rtos-monitor](./edgepulse-rtos-monitor/) | RTOS 任务 Web 监控 | C + FreeRTOS + LwIP + STM32 |
| [industrial-edge-modbus-stm32-freertos](./industrial-edge-modbus-stm32-freertos/) | 工业 Modbus 中间件 | C + FreeRTOS + Modbus + STM32 |
| [vibecraft-keyboard](./vibecraft-keyboard/) | ESP32-S3 DIY 编程键盘 | Python + ESP32-S3 + BLE HID |
---
## 子项目详情
### edgepulse-rtos-monitor — RTOS 任务监控
STM32 FreeRTOS + LwIP 嵌入式 Web 监控固件,提供实时任务仪表板与 JSON 状态 API。
**硬件要求**
| 组件 | 型号 | 说明 |
|---|---|---|
| 开发板 | NUCLEO-F746ZG (STM32F746ZG) | Cortex-M7, 1MB Flash, 320KB SRAM |
| 以太网 | 板载 LAN8742A PHY | 通过 RMII 连接 |
| 调试器 | ST-LINK V2 (板载) | USB 直连烧录 |
| 网络 | RJ45 以太网线 | 连接至路由器/交换机 |
**构建方式**
```bash
cd edgepulse-rtos-monitor
make # 编译产物在 build/ 目录
make flash # 通过 ST-LINK 烧录到开发板
```
前置依赖:`arm-none-eabi-gcc`、`make`、`OpenOCD`(烧录)。
**验证方式**
1. 设备联网后浏览器访问 `http:///`,确认首页仪表板加载
2. 访问 `http:///tasks`,确认任务列表实时刷新
3. 访问 `http:///api/status`,确认返回 JSON 含 `ip`、`uptime_ms` 等字段
4. CI 编译检查:GitHub Actions 运行 ARM GCC 交叉编译
---
### industrial-edge-modbus-stm32-freertos — 工业 Modbus 中间件
STM32 + FreeRTOS 工业边缘 Modbus 中间件,支持 RTU/TCP/USB-CDC、主从模式、RS485、DMA 高波特率。
**硬件要求**
| 组件 | 型号 | 说明 |
|---|---|---|
| 开发板 | STM32F103 / G431 / F429 / H743 等 | 多板卡示例见 `Examples/` |
| 串口转接 | RS485 / RS232 收发器 | 如 MAX485、SP3485 |
| 调试器 | ST-LINK 或 J-Link | SWD 接口 |
| 测试上位机 | USB 转串口模块 | 配合 Python 脚本测试 |
**构建方式**
```bash
cd industrial-edge-modbus-stm32-freertos
# 方式 1:STM32CubeIDE 导入
# File > Import > Existing Projects > 指向 Examples/ModbusF103 等
# 方式 2:Makefile(部分示例)
cd Examples/ModbusF103 && make
```
前置依赖:STM32CubeIDE 1.8+(推荐)或 `arm-none-eabi-gcc` + `make`。
**验证方式**
1. 将示例固件烧录到开发板,用串口工具连接确认 Modbus 帧收发
2. 运行 `Script/SlaveServerSerial.py` 作为上位机从站,验证读写寄存器
3. `MODBUS-LIB/` 的 C 源码可通过 `arm-none-eabi-gcc -fsyntax-only` 语法检查
4. CI 运行 MODBUS-LIB 语法检查 + 示例项目编译尝试
---
### vibecraft-keyboard — ESP32-S3 DIY 编程键盘
ESP32-S3 DIY 编程键盘,支持 BLE HID、ST7789 状态显示、旋钮输入与可编程键位映射。
**硬件要求**
| 组件 | 型号 | 数量 | 说明 |
|---|---|---:|---|
| 主控 | ESP32-S3 开发板 (16MB Flash) | 1 | 支持 BLE + USB |
| 显示屏 | ST7789 长条屏 | 1 | SPI 接口,状态显示 |
| 按键 | 机械轴体 | 7 | 编程快捷键 |
| 旋钮 | EC11 旋转编码器 | 1 | 需支持按压 |
| 供电 | USB Type-C 线 | 1 | 样机阶段直接供电 |
| 可选 | I2S 麦克风 | 1 | 语音输入扩展 |
**构建方式**
```bash
cd vibecraft-keyboard
# 拉取上游参考固件
./scripts/bootstrap-upstream.sh
# 编译固件
./scripts/build-firmware.sh keys
# 烧录固件
ESP_PORT=/dev/cu.usbmodem1101 ./scripts/flash-firmware.sh keys
# 编译上位机
./scripts/build-host-tools.sh
```
前置依赖:ESP-IDF/ESP Rust 工具链、Python 3.9+、`cargo`、`espflash`、`jq`。
**验证方式**
1. 烧录固件后长条屏显示状态文本
2. 七个按键与旋钮事件均可被固件识别
3. 宿主机 BLE 连接后 Hook 能把状态消息发到设备
4. `./scripts/check.sh` 执行 shellcheck + pytest
5. CI 运行 Python lint、shell 脚本检查、pytest
---
## 目录结构
```
embedded-systems-lab/
├── edgepulse-rtos-monitor/ # RTOS Web 监控 (STM32F7)
├── industrial-edge-modbus-stm32-freertos/ # Modbus 中间件 (STM32 系列)
├── vibecraft-keyboard/ # ESP32-S3 DIY 键盘
├── LICENSE # MIT License
├── CONTRIBUTING.md # 贡献指南
├── CODE_OF_CONDUCT.md # 行为准则
└── .github/
├── ISSUE_TEMPLATE/ # Issue 模板
├── PULL_REQUEST_TEMPLATE.md # PR 模板
├── dependabot.yml # 依赖自动更新
└── workflows/
└── ci.yml # CI: 结构校验 + 编译检查
```
## 快速启动
每个子目录都是独立项目,进入对应目录后按照其 README 操作:
```bash
cd edgepulse-rtos-monitor/
# 或
cd industrial-edge-modbus-stm32-freertos/
# 或
cd vibecraft-keyboard/
```
## CI 状态

CI 流水线包含:
1. **结构校验**:根目录文件、子项目 README/LICENSE、GitHub 社区文件
2. **edgepulse 编译**:ARM GCC 交叉编译
3. **modbus 检查**:MODBUS-LIB 语法检查 + 示例项目编译
4. **vibecraft 检查**:Python lint + shellcheck + pytest
## 贡献
欢迎通过 Issue 和 Pull Request 参与贡献,详见 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可
本仓库原创内容采用 [MIT License](LICENSE) 发布。各子项目内第三方组件遵循各自许可证。