# MCU-ESP8266
**Repository Path**: FasterEdge/MCU-ESP8266
## Basic Information
- **Project Name**: MCU-ESP8266
- **Description**: No description available
- **Primary Language**: C
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-31
- **Last Updated**: 2026-09-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
FasterEdge MCU - ESP8266
FasterEdge 框架的 ESP8266 平台实现(Arduino / Keil 双版本)
### 一、简介
本项目是 **[FasterEdge](https://github.com/FasterEdge/FasterEdge)** 框架在 **ESP8266** 单片机平台上的实现,将主仓库的 **Ability / Data / Command** 模型移植到资源受限的 MCU 环境。实现的能力子集、命令名、目录结构与 [MCU-ESP32](../MCU-ESP32) 完全一致,仅平台 API 按 ESP8266 适配。
- ✅ **双版本**:`arduino/`(PlatformIO/Arduino C++)与 `keil/`(Keil MDK 裸机 C)
- ✅ 与主仓库**同名同命令**,云边协同对等编程
- ✅ HMAC-SHA256 纯 C 零依赖
- ✅ 平台差异收敛到移植层(`fe_port.h`)
### 二、已实现能力(与 MCU-ESP32 一致)
**Ability(9 个)**:BaseAbility / RoleAbility / TimeAbility / OneKeyAbility / ConfigFileAbility / SerialAbility / MQTTAbility / ModbusAbility / EdgeRoleAbility(命令与主仓库完全一致,详见 [MCU-ESP32 README](../MCU-ESP32/README.md) 第二节)
**Data(4 个)**:BaseData / ConfigData / KeyringData / NetMapData
> 排除项与理由(Cmd/Sh/Bash、Docker/K8s、eKuiper/InfluxDB、TSN 等)同 MCU-ESP32,见其 README 第三节。
### 三、ESP8266 平台适配说明
| 差异点 | ESP32 版 | ESP8266 版 |
|--------|----------|-----------|
| WiFi 库 | `` | `` |
| 芯片 API | `ESP.getEfuseMac()` | `ESP.getChipId()` |
| 随机数 | `esp_random()` | `ESP.random()` |
| 核数 | 双核(`getChipCores()`)| 单核(固定 1)|
| UART 端口 | 0/1/2(`SOC_UART_NUM`)| 0/1(UART1 仅 TX)|
| 板型 | `esp32dev` | `esp12e` / `nodemcuv2` / `d1_mini` |
### 四、目录结构
```
MCU-ESP8266/
├── arduino/ # PlatformIO / Arduino C++ 版
│ ├── platformio.ini # ESP8266 构建配置(esp12e)
│ ├── include/ # fe.h / fe_ability.h / fe_data.h / fe_hmac_sha256.h
│ └── src/ # main.cpp / fe.cpp / register.cpp / ability_*.cpp / data_*.cpp
└── keil/ # Keil MDK 裸机 C 版
├── MDK-ARM/ # FasterEdge-MCU-ESP8266.uvprojx
├── Core/ # fe.h / fe.c / fe_hmac_sha256.c
├── Inc/ # fe_ability.h / fe_data.h / fe_port.h
├── Ability/ # ability_*.c(9 个)
├── Data/ # data_*.c(4 个)
└── User/ # main.c / register.c / fe_port.c
platformio_ide/ # VS Code + PlatformIO 插件工程(ESP8266 NONOS SDK 框架)
├── platformio.ini # espressif8266 / esp8266-nonos-sdk / esp12e
├── .vscode/extensions.json # 推荐 PlatformIO IDE 插件
├── include/ # fe.h / fe_ability.h / fe_data.h / fe_port.h / fe_hmac_sha256.h
└── src/ # 复用 keil 裸机 C + NONOS SDK 版 fe_port(真实实现)
```
> 三个构建途径对应三个工具链:`arduino/`(Arduino C++)、`keil/`(Keil MDK)、`platformio_ide/`(VS Code PlatformIO 插件 + NONOS SDK),能力与命令完全一致。
### 五、Arduino 版使用
```bash
cd arduino
pio run # 编译(默认 esp12e 板型)
pio upload # 烧录
pio device monitor # 串口监视器 (115200)
```
**串口命令示例(与 ESP32 版相同):**
```
help
ability_BaseAbility list_ability_names
ability_RoleAbility set_role edge
ability_TimeAbility sync_ntp
ability_OneKeyAbility issue_token sensor01
ability_ModbusAbility write_holding 0,42
ability_MQTTAbility set_broker 192.168.1.10:1883
ability_MQTTAbility publish sensors/temp,25.5
data_ConfigData set wifi.ssid=MyNet
data_KeyringData issue_token sensor01
data_NetMapData info
```
> 换板型:编辑 `platformio.ini` 将 `board` 改为 `nodemcuv2` / `d1_mini` / `esp01_1m` 等。
### 六、Keil 版使用
1. 用 Keil MDK 打开 `keil/MDK-ARM/FasterEdge-MCU-ESP8266.uvprojx`
2. 在 `User/fe_port.c` 中按注释完成平台移植(UART / Flash / 时间 / 随机数 / TCP),文件末尾附 **ESP-IDF** 与 **ESP8266 NONOS SDK** 两套参考片段
3. 编译烧录,串口命令格式同上
> 说明:ESP8266 为 Xtensa 内核,Keil MDK 主要面向 ARM Cortex-M。若用 Keil 编译,可将 `fe_port.c` 的 TODO 替换为 NONOS SDK API(末尾附参考),或在其他 Cortex-M MCU 上直接复用本框架。
### 七、PlatformIO IDE 版使用(VS Code 插件)
`platformio_ide/` 是 **裸机 C + ESP8266 NONOS SDK 框架** 工程,复用 keil 版 C 代码,`fe_port.c` 为真实 NONOS SDK 实现(UART 环形缓冲 / system_param 存储 / SNTP / os_random / espconn TCP),无需 Keil 即可在 VS Code 中编译烧录。
1. VS Code 安装 **PlatformIO IDE** 插件(打开 `platformio_ide/` 时自动提示)
2. 打开 `platformio_ide/` 目录
3. 底部状态栏点击 **Build** / **Upload** / **Serial Monitor**(115200)
```bash
cd platformio_ide
pio run # 编译
pio run -t upload # 烧录
pio device monitor # 串口监视
```
> 与 `arduino/`(Arduino C++ 框架)不同,本版为 ESP8266 NONOS SDK 框架的纯 C 实现;串口命令格式完全一致。完整接收请在 SDK 的 UART 中断中调用 `fe_port_uart_put_byte` 填充缓冲。
### 八、MCU 专有模块
除主仓库对应能力外,本仓库提供 3 个 **MCU 专有** 模块(寄存器 / GPIO / 芯片信息),三套代码(arduino / keil / platformio_ide)完全同构,平台差异由 Arduino API 或 `fe_port` 原语隔离:
| 模块 | 类型 | 命令 | 说明 |
|------|------|------|------|
| RegAbility | Ability | `read ` / `write ,` / `bit_set ,` / `bit_clear ,` / `info` | 直接读写内存映射外设寄存器(32 位,volatile 指针)|
| GpioAbility | Ability | `mode ,` / `write ,<0\|1>` / `read ` / `info` | 引脚模式 / 输出 / 读取(GPIO0-16)|
| ChipData | Data | `info` | 芯片 ID / 频率(NONOS `system_get_chip_id`)|
**示例:**
```
ability_RegAbility read 0x60000300
ability_RegAbility write 0x60000300,0x12345678
ability_RegAbility bit_set 0x60000300,7
ability_GpioAbility mode 2,output
ability_GpioAbility write 2,1
ability_GpioAbility read 2
data_ChipData info
```
> ⚠️ 寄存器操作直接访问硬件,误写可能导致系统异常,仅供调试/底层驱动使用。
### 九、与 FasterEdge 主仓库的对应关系
- 命令名与主仓库**完全一致**,与 MCU-ESP32 实现同构
- 令牌/密钥持久化(ESP8266 使用 Arduino 内置 `Preferences`/EEPROM 模拟 NVS)
- 严格类型校验保留
### 十、姊妹项目
- **[FasterEdge MCU - ESP32](https://github.com/FasterEdge/MCU-ESP32)**:双核、更多 UART、BLE 等更强平台
- **[FasterEdge](https://github.com/FasterEdge/FasterEdge)**:框架主仓库