# esp8266-wsd **Repository Path**: hotyuo/esp8266-wsd ## Basic Information - **Project Name**: esp8266-wsd - **Description**: esp8266 温湿度+4孔oled屏+温湿度 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-26 - **Last Updated**: 2026-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP8266 物联网终端固件(0.96" OLED + AHT20 + BMP280 + 喇叭) 基于 ESP8266(NodeMCU / Wemos D1 mini)的联网显示终端: - 驱动 **0.96" SSD1306 OLED**(I2C)显示信息 - 读取 **AHT20** 温湿度、**BMP280** 气压(I2C) - 通过 WiFi 对接 `eink_web` 多设备服务端:默认显示天气,可远程推送自定义内容(滚动显示),红色告警触发喇叭 - WiFi 直连;连不上则进入 **AP 配网** 兜底(热点 `ESP-Config`,浏览器开 `192.168.4.1` 配置) --- ## 硬件清单 | 部件 | 说明 | |---|---| | ESP8266 开发板 | NodeMCU / Wemos D1 mini | | 0.96" OLED | SSD1306,I2C,4 针 | | AHT20 | 温湿度传感器,I2C | | BMP280 | 气压传感器,I2C | | 喇叭 / 蜂鸣器 | 经 NPN 三极管(如 S8050)驱动,勿直连 GPIO | | 杜邦线 / 4.7kΩ 电阻 | I2C 上拉用 | --- ## 引脚接线对应 OLED 走**硬件 I2C(D1/D2)**;AHT20 与 BMP280 走**软件 I2C(D6/D7)**,两者地址不同可共线。 | 外设 | 外设引脚 | ESP GPIO | 板丝印 D | 总线 / 备注 | |---|---|---|---|---| | OLED | VCC | 3.3V | 3V3 | | | OLED | GND | GND | G | | | OLED | SDA | GPIO4 | **D2** | 硬件 I2C,地址 `0x3C` | | OLED | SCL | GPIO5 | **D1** | 硬件 I2C | | AHT20 | VCC | 3.3V | 3V3 | | | AHT20 | GND | GND | G | | | AHT20 | SDA | GPIO12 | **D6** | 软件 I2C,地址 `0x38` | | AHT20 | SCL | GPIO13 | **D7** | 软件 I2C | | BMP280 | VCC | 3.3V | 3V3 | | | BMP280 | GND | GND | G | | | BMP280 | SDA | GPIO12 | **D6** | 软件 I2C(与 AHT20 共线) | | BMP280 | SCL | GPIO13 | **D7** | 软件 I2C | | BMP280 | SDO / ADDR | GND | — | 选地址 `0x76`(接 3.3V 则为 `0x77`) | | 喇叭 | SIG | GPIO14 | **D5** | 经 NPN 三极管,PWM 驱动 | > 注意:每组 I2C 的 SDA / SCL 建议各串 4.7kΩ 上拉到 3.3V(模块若已内置可省略)。避开启动脚 D0/D3/D4/D8。 --- ## 编译与烧录 ### 方式一:Arduino IDE(图形界面) 1. 用 Arduino IDE 打开 `eink_esp.ino`。 2. 安装库:`U8g2`、`ArduinoJson`(已附在 `lib/` 目录,可复制到 `文档/Arduino/libraries`,或用 IDE「添加 .ZIP 库」)。 3. 开发板:`ESP8266 Boards → Generic ESP8266 Module`;Flash Size `4MB`;Flash Mode `DIO`;Upload Speed `115200`。 4. 选择端口(如 COM12),点击上传。 ### 方式二:arduino-cli(命令行,推荐) ```bash # IDE 内置 arduino-cli(Windows 示例) CLI="$PROGRAMFILES/Arduino IDE/resources/app/lib/backend/resources/arduino-cli.exe" # 编译并烧录(将 COM12 换成你的实际串口号) "$CLI" compile --clean -u \ --fqbn esp8266:esp8266:generic \ --port COM12 \ --libraries lib \ --build-property "build.flash_size=4M" \ --build-property "build.flash_mode=dio" \ --build-property "upload.speed=115200" \ eink_esp.ino ``` 说明: - `lib/` 已包含 `u8g2` 与 `ArduinoJson`,**无需联网即可编译**。 - 廉价模组务必用 `build.flash_mode=dio`(QIO 会「假成功真死机」)。 - 换端口 / 首次烧录时,把命令里的 `COM12` 改为实际串口号(如 COM4、COM12)。 --- ## WiFi 与服务端配置 固件顶部常量(修改后重新烧录): ```cpp const char* DEF_SSID = "@PHICOMM_30"; // WiFi 名称 const char* DEF_PWD = "321654987"; // WiFi 密码 const char* DEF_SERVER = "http://192.168.2.218:37821"; // eink_web 服务端地址 const char* DEF_NAME = "ESP屏"; // 设备名 ``` - 设备开机直连该 WiFi;连不上则进入 AP 配网(热点 `ESP-Config`,浏览器开 `192.168.4.1` 可改以上配置)。 - `DEF_SERVER` 须填**电脑在路由器下的局域网 IP**(如 `http://192.168.2.218:37821`),不是 `192.168.4.x`(那是配网热点网段)。 --- ## 功能 - **本地显示**:城市、时间、温度、湿度、气压、本机 IP。 - **对接服务端**:默认显示天气(Open-Meteo);收到自定义内容(黑 / 红)则 OLED 滚动显示,红色内容触发 D5 喇叭告警。 - **双 I2C 总线**:OLED 与传感器分属不同总线,避免刷新噪声相互干扰。 --- ## 文件结构 ``` eink_esp/ ├── eink_esp.ino # 主固件 ├── lib/ │ ├── u8g2/ # SSD1306 OLED 驱动 │ └── ArduinoJson/ # JSON 解析 ├── README.md └── .gitignore ``` ## 配套服务端(eink_web) 同级 `../eink_web` 目录为 Node 多设备管理平台: ```bash cd ../eink_web node server.js # 浏览器打开 http://localhost:37821 ``` 在仪表盘可单独给每台设备推送自定义内容、改城市、清除回天气;设备自动心跳注册。