Files
stm32-iot-sensor-node/32_README.md
T
2026-10-19 15:47:18 +08:00

5.3 KiB

STM32智能传感器节点

基于STM32F10x微控制器的多功能智能传感器节点,集成OLED显示屏、WiFi通信、多种传感器和外设控制功能。

功能特性

  • 🌡️ 传感器监测: DHT11温湿度传感器 + ADC多通道模拟量采集
  • 📡 WiFi通信: ESP8266模块,支持TCP客户端连接
  • 🖥️ OLED显示: 128x64分辨率,支持中英文显示
  • 💡 状态指示: 3路LED + 蜂鸣器报警
  • ⚙️ 系统保护: 独立看门狗(IWDG)监控
  • 📦 数据格式: JSON格式数据传输

硬件连接

核心连接

DHT11传感器:     PC10
ESP8266 WiFi:    PA2(TX)/PA3(RX) - USART2
OLED显示屏:      PB6(SCL)/PB7(SDA) - I²C
LED指示灯:       PB0/PB1/PB2
蜂鸣器:          PB5
ADC输入:         PA0-PA7

系统架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   传感器层      │    │   处理层        │    │   通信层        │
│                 │    │                 │    │                 │
│ • DHT11温湿度   │───▶│ • STM32F103     │───▶│ • ESP8266 WiFi  │
│ • ADC模拟输入   │    │ • 数据处理      │    │ • TCP协议       │
│ • GPIO输入      │    │ • OLED显示      │    │ • JSON数据      │
└─────────────────┘    └─────────────────┘    └─────────────────┘

快速开始

1. 环境配置

  • IDE: Keil MDK-ARM v5.0+
  • 调试器: ST-Link V2
  • 开发板: STM32F103C8T6

2. 网络配置

先将 user/network_config.example.h 复制为 user/network_config.h,再编辑其中的配置参数(本地配置不上传仓库):

#define WIFI_SSID       "Your_WiFi_Name"
#define WIFI_PASS       "Your_WiFi_Password"
#define SERVER_IP       "192.168.1.100"
#define SERVER_PORT     5000
#define DEVICE_ID       "sensor_001"

3. 编译烧录

cd 32/project
# 打开 myproject.uvprojx
# F7编译 → F8烧录

4. 运行状态

  • LED0: 系统电源 (常亮=正常)
  • LED1: WiFi状态 (闪烁=连接中, 常亮=已连接)
  • LED2: 服务器状态 (闪烁=连接中, 常亮=已连接)
  • OLED: 实时显示温湿度数据

数据协议

设备注册

{
    "type": "register",
    "device_id": "sensor_001",
    "action": "connect"
}

传感器数据

{
    "device_id": "sensor_001",
    "temp": 25.6,
    "humidity": 60.2,
    "adc0": 1.23,
    "led0": 1,
    "led1": 1,
    "led2": 1
}

目录结构

32/
├── cmsis/          # CMSIS核心库
├── fwlib/          # STM32标准外设库
├── mylib/          # 自定义驱动库
│   ├── dht11.c/.h          # DHT11传感器驱动
│   ├── esp8266.c/.h        # ESP8266 WiFi驱动
│   ├── oled.c/.h           # OLED显示驱动
│   ├── adc.c/.h            # ADC模数转换
│   ├── led.c/.h            # LED控制
│   ├── beep.c/.h           # 蜂鸣器控制
│   ├── systick.c/.h        # 系统定时器
│   └── usart1.c/.h         # 串口通信
├── user/           # 用户应用代码
│   ├── main.c              # 主程序
│   └── stm32f10x_it.c/.h   # 中断服务
├── project/        # Keil项目文件
├── README.md       # 项目说明
├── HARDWARE_SETUP.md # 硬件连接指南
└── QUICK_START.md  # 快速开始指南

核心API

WiFi通信模块

void esp8266_init(void);
int esp8266_connect_wifi(const char *ssid, const char *passwd);
int esp8266_tcp_connect(const char *ip, uint16_t port);
int esp8266_write(const char *data, uint16_t len);

传感器模块

void dht11_init(void);
int dht11_get_values(u8 buf[5]);    // [湿度整数, 湿度小数, 温度整数, 温度小数, 校验和]

void adc1_init(void);
float adc1_read_channel(u8 channel);

显示模块

void oled_init(void);
void oled_clear(void);
void oled_draw_text8(u8 x, u8 y, const char *text);
void oled_draw_text16(u8 x, u8 y, const char *text);

故障排除

WiFi连接失败

  • 检查SSID/密码配置
  • 确认ESP8266供电稳定
  • 查看串口调试信息

传感器读取异常

  • 检查DHT11接线(PC10)
  • 确认供电电压3.3V
  • 更换传感器测试

OLED无显示

  • 检查I²C接线(PB6/PB7)
  • 确认I²C地址(0x3C/0x3D)
  • 检查显示屏供电

性能指标

  • 启动时间: < 10秒
  • 数据频率: 200ms间隔(可配置)
  • 测量精度: 温度±0.5°C, 湿度±2%RH
  • 系统稳定性: 连续运行24小时无故障
  • 资源使用: Flash 60KB, RAM 8KB

开发文档

许可证

MIT License


最后更新: 2025-11-16 版本: v2.0.0