1. 硬件准备与环境搭建第一次接触物联网开发的朋友可能会觉得硬件选型很复杂但其实只要选对核心部件剩下的就是按部就班连接。我用的STM32F103C8T6开发板正点原子精英版和ESP8266-01S模块都是性价比极高的选择整套成本不到100元。这里特别提醒ESP8266-01S有多个版本一定要确认模块背面印有AI-Thinker字样这是官方认证版本兼容性最好。开发环境我推荐使用Keil MDK5虽然界面看起来有点老旧但对STM32的支持最稳定。安装时有个小技巧先装Keil后再安装STM32F1的Device Family Pack这样能避免很多莫名其妙的编译错误。硬件连接也很简单只需要4根杜邦线开发板3.3V → ESP8266 VCC开发板GND → ESP8266 GND开发板PB10 → ESP8266 TXD开发板PB11 → ESP8266 RXD这里有个新手常踩的坑ESP8266的EN引脚必须接3.3V否则模块无法正常工作。我第一次调试时因为这个细节浪费了两小时后来用万用表测量才发现问题。2. 机智云平台配置实战登录机智云开发者中心后创建新产品时要注意几个关键点。产品类别建议选择智能家居-环境监测这样后续数据点配置会更贴合我们的温湿度监测场景。数据点是物联网设备的灵魂需要仔细设计布尔型数据点命名为LED_Control用作开关控制数值型数据点命名为Temperature单位℃数值型数据点命名为Humidity单位%RH生成MCU代码包时硬件平台务必选择STM32F103C8x系列。这里有个隐藏技巧在高级设置里勾选自定义Product Secret这样后期设备绑定会更灵活。下载的代码包解压后重点看Gizwits文件夹里的gizwits_product.c和gizwits_protocol.c这两个文件包含了所有云端通信的核心逻辑。3. 代码移植与调试技巧官方提供的HAL库代码需要适配我们用的标准外设库这个过程就像给衣服改尺寸需要耐心但难度不大。我总结了几处必须修改的地方在gizwits_product.c中替换所有HAL_UART_Transmit为USART_SendData屏蔽hal_key.h相关代码改用我们自己定义的按键扫描函数修改串口中断处理在stm32f10x_it.c中添加void USART3_IRQHandler(void) { if(USART_GetITStatus(USART3, USART_IT_RXNE) ! RESET) { gizPutData((uint8_t *)USART3-DR, 1); } }调试阶段最头疼的是波特率问题。ESP8266-01S出厂默认115200但机智云固件需要9600。推荐先用AT指令测试ATUART9600,8,1,0,0记得发送后要保存设置ATSAVE否则断电后又会恢复默认值。4. 温湿度采集与云端交互DHT11传感器的数据采集要注意时序问题。我在实际测试中发现连续读取间隔最好大于1秒否则容易读取失败。数据上传函数可以这样优化void userHandle(void) { static uint32_t lastUpload 0; if(gizGetTimerCount() - lastUpload 2000) return; uint8_t buffer[5]; if(dht11_read_data(buffer) 0) { currentDataPoint.valueTemperature buffer[2] buffer[3]/10.0; currentDataPoint.valueHumidity buffer[0] buffer[1]/10.0; lastUpload gizGetTimerCount(); } }云端控制LED的回调函数要处理异常情况void gizwitsEventProcess(eventInfo_t *info) { if(info-event EVENT_LED_ON) { LED_ON(); } else if(info-event EVENT_LED_OFF) { LED_OFF(); } else if(info-event EVENT_WIFI_STATE) { printf(WiFi状态变化:%d\n, info-wifiStatus); } }5. 移动端配置与问题排查机智云APP的配置有个隐藏技巧在设备配网阶段如果一直卡在配置中可以尝试关闭手机蓝牙。很多安卓手机会因为蓝牙和WiFi的2.4G频段干扰导致配网失败。成功连接后在APP的设备详情页下拉可以查看原始数据报文这对调试非常有帮助。常见问题排查清单设备不上线检查串口3的TX/RX是否接反数据不上传确认gizwitsHandle()在main循环中被调用APP显示离线检查路由器是否开启了AP隔离控制指令无效确认数据点名称与代码中完全一致6. 进阶优化与扩展思路当基础功能跑通后可以考虑几个优化方向。首先是低功耗设计通过修改STM32的睡眠模式配合ESP8266的深度睡眠可以使整机功耗降低到5mA以下。其次是本地存储利用STM32的Flash模拟EEPROM保存WiFi配置信息避免每次断电都要重新配网。如果想扩展更多传感器推荐使用OneWire协议的数字温度传感器DS18B20只需要一根数据线就能组网。对于需要更高精度的场景可以考虑I2C接口的SHT30不过需要修改硬件连接和驱动代码。
从零到一:基于STM32F103与ESP8266-01S的机智云物联网设备实战开发
发布时间:2026/5/20 7:37:40
1. 硬件准备与环境搭建第一次接触物联网开发的朋友可能会觉得硬件选型很复杂但其实只要选对核心部件剩下的就是按部就班连接。我用的STM32F103C8T6开发板正点原子精英版和ESP8266-01S模块都是性价比极高的选择整套成本不到100元。这里特别提醒ESP8266-01S有多个版本一定要确认模块背面印有AI-Thinker字样这是官方认证版本兼容性最好。开发环境我推荐使用Keil MDK5虽然界面看起来有点老旧但对STM32的支持最稳定。安装时有个小技巧先装Keil后再安装STM32F1的Device Family Pack这样能避免很多莫名其妙的编译错误。硬件连接也很简单只需要4根杜邦线开发板3.3V → ESP8266 VCC开发板GND → ESP8266 GND开发板PB10 → ESP8266 TXD开发板PB11 → ESP8266 RXD这里有个新手常踩的坑ESP8266的EN引脚必须接3.3V否则模块无法正常工作。我第一次调试时因为这个细节浪费了两小时后来用万用表测量才发现问题。2. 机智云平台配置实战登录机智云开发者中心后创建新产品时要注意几个关键点。产品类别建议选择智能家居-环境监测这样后续数据点配置会更贴合我们的温湿度监测场景。数据点是物联网设备的灵魂需要仔细设计布尔型数据点命名为LED_Control用作开关控制数值型数据点命名为Temperature单位℃数值型数据点命名为Humidity单位%RH生成MCU代码包时硬件平台务必选择STM32F103C8x系列。这里有个隐藏技巧在高级设置里勾选自定义Product Secret这样后期设备绑定会更灵活。下载的代码包解压后重点看Gizwits文件夹里的gizwits_product.c和gizwits_protocol.c这两个文件包含了所有云端通信的核心逻辑。3. 代码移植与调试技巧官方提供的HAL库代码需要适配我们用的标准外设库这个过程就像给衣服改尺寸需要耐心但难度不大。我总结了几处必须修改的地方在gizwits_product.c中替换所有HAL_UART_Transmit为USART_SendData屏蔽hal_key.h相关代码改用我们自己定义的按键扫描函数修改串口中断处理在stm32f10x_it.c中添加void USART3_IRQHandler(void) { if(USART_GetITStatus(USART3, USART_IT_RXNE) ! RESET) { gizPutData((uint8_t *)USART3-DR, 1); } }调试阶段最头疼的是波特率问题。ESP8266-01S出厂默认115200但机智云固件需要9600。推荐先用AT指令测试ATUART9600,8,1,0,0记得发送后要保存设置ATSAVE否则断电后又会恢复默认值。4. 温湿度采集与云端交互DHT11传感器的数据采集要注意时序问题。我在实际测试中发现连续读取间隔最好大于1秒否则容易读取失败。数据上传函数可以这样优化void userHandle(void) { static uint32_t lastUpload 0; if(gizGetTimerCount() - lastUpload 2000) return; uint8_t buffer[5]; if(dht11_read_data(buffer) 0) { currentDataPoint.valueTemperature buffer[2] buffer[3]/10.0; currentDataPoint.valueHumidity buffer[0] buffer[1]/10.0; lastUpload gizGetTimerCount(); } }云端控制LED的回调函数要处理异常情况void gizwitsEventProcess(eventInfo_t *info) { if(info-event EVENT_LED_ON) { LED_ON(); } else if(info-event EVENT_LED_OFF) { LED_OFF(); } else if(info-event EVENT_WIFI_STATE) { printf(WiFi状态变化:%d\n, info-wifiStatus); } }5. 移动端配置与问题排查机智云APP的配置有个隐藏技巧在设备配网阶段如果一直卡在配置中可以尝试关闭手机蓝牙。很多安卓手机会因为蓝牙和WiFi的2.4G频段干扰导致配网失败。成功连接后在APP的设备详情页下拉可以查看原始数据报文这对调试非常有帮助。常见问题排查清单设备不上线检查串口3的TX/RX是否接反数据不上传确认gizwitsHandle()在main循环中被调用APP显示离线检查路由器是否开启了AP隔离控制指令无效确认数据点名称与代码中完全一致6. 进阶优化与扩展思路当基础功能跑通后可以考虑几个优化方向。首先是低功耗设计通过修改STM32的睡眠模式配合ESP8266的深度睡眠可以使整机功耗降低到5mA以下。其次是本地存储利用STM32的Flash模拟EEPROM保存WiFi配置信息避免每次断电都要重新配网。如果想扩展更多传感器推荐使用OneWire协议的数字温度传感器DS18B20只需要一根数据线就能组网。对于需要更高精度的场景可以考虑I2C接口的SHT30不过需要修改硬件连接和驱动代码。