欢迎光临
我们一直在努力

零基础入门 STM32 驱动 ESP01s 完成串口通讯与 HTTP 服务器请求(POST)

  技术支持:

百色市联芯创研电子工作室

1.介绍

       本文将介绍基于 STM32 单片机通过串口通讯控制 ESP01s 模块实现 HTTP 请求后台服务器的功能。该功能通过 STM32 向 ESP01s 发送一系列 AT 命令,首先复位模块并配置为 Station 模式,随后连接指定 WiFi(SSID 为 "创研微电子",密码为 "11111111");获取液体数据后,建立与目标服务器(IP:8.13x.1xx.6,端口:8652)的 HTTP(这里需要注意在命令TCP,但是配置的是HTTP通讯) 连接,最后构造并发送包含 JSON 格式数据的 POST 请求到服务器的 / PostData 接口,实现将采集到的液体数据上传至后台服务器的功能。

1.ESP01S模块图片

2.ESP01S 模块介绍

ESP01S 是由乐鑫(Espressif)推出的一款低成本、小尺寸的 WiFi 无线通信模块,基于ESP8266EX 芯片设计,是物联网(IoT)开发中连接嵌入式设备与网络的常用组件,尤其适合 STM32 等无自带 WiFi 功能的单片机扩展联网能力。

一、核心硬件特性

ESP01S 模块的硬件设计紧凑,核心参数与功能适配低功耗、小空间的嵌入式场景,具体特性如下:

  • 核心芯片:搭载 ESP8266EX,集成 32 位 Tensilica L106 微处理器(最高主频 80MHz)、WiFi 射频电路(支持 IEEE 802.11 b/g/n 协议),兼具 “通信” 与 “简易控制” 能力(可单独运行固件,也可通过 AT 指令由外部 MCU 控制)。
  • 引脚与尺寸:采用 8Pin 直插 / 贴片封装,实际可用引脚仅 4 个核心功能脚(VCC、GND、TX、RX),尺寸约 24mm×16mm,适合空间受限的硬件设计(如传感器节点、小型控制板)。
  • 供电要求:典型工作电压 3.3V(需注意:不支持 5V 供电,直接接 5V 会烧毁模块),工作电流约 70mA(发射时峰值电流可达 200mA),建议搭配 3.3V 稳压电路(如 AMS1117-3.3)确保供电稳定。
  • 通信接口:仅支持UART 串口通信(默认波特率 115200bps,可通过 AT 指令修改),通过 TX/RX 引脚与 STM32 等单片机的串口引脚交叉连接(ESP01S_TX 接 STM32_RX,ESP01S_RX 接 STM32_TX),即可实现指令与数据交互。
  • 天线设计:采用板载 PCB 天线,无需外接天线,通信距离约 10-30 米(空旷环境,受遮挡影响较大)。

二、核心工作模式

ESP01S 支持 3 种 WiFi 工作模式,可通过AT+CWMODE指令配置,适配不同物联网场景,其中Station 模式(STA 模式) 是本文与 STM32 配合的核心模式:

模式指令参数功能说明适用场景
Station 模式(STA) AT+CWMODE=1 模块作为 “WiFi 客户端”,连接外部路由器 / 热点,获取局域网 IP 后接入互联网,可与后台服务器通信 嵌入式设备(如 STM32)需上传数据到云端 / 后台服务器(本文场景)
SoftAP 模式(AP) AT+CWMODE=2 模块作为 “WiFi 热点”,其他设备(如手机、电脑)可连接模块的 WiFi,实现设备间本地通信 无路由器场景下,手机直接与模块交互(如本地调试、控制)
STA+AP 混合模式 AT+CWMODE=3 同时开启 STA 和 AP 模式,既可以连接外部路由器联网,也可以作为热点供其他设备本地连接 需同时实现 “联网上传” 和 “本地调试” 的场景

三、与 STM32 的配合优势

在本文 “STM32+ESP01S 实现 HTTP 请求” 的场景中,ESP01S 的核心价值是为 STM32 “补充 WiFi 能力”,配合优势显著:

  • 开发门槛低:无需深入研究 WiFi 协议栈,仅需通过 STM32 串口发送标准化 AT 指令(如复位AT+RST、连 WiFiAT+CWJAP、建 TCP 连接AT+CIPSTART),即可控制模块完成联网与数据传输,降低嵌入式联网开发难度。
  • 硬件成本低:ESP01S 模块单价通常仅 5-10 元,远低于自带 WiFi 功能的单片机(如 STM32H743),适合低成本物联网项目。
  • 适配性强:仅需 STM32 的一个 UART 串口(如 USART1、USART2)即可与模块通信,对 STM32 型号无特殊要求(从入门级 STM32F103 到高性能 STM32F4 均可支持),硬件接线简单(仅需 4 根线:VCC、GND、TX、RX)。
  • 支持 TCP/IP 协议:ESP01S 内置 TCP/IP 协议栈,可直接建立 TCP 连接、发送 HTTP 请求(POST/GET),无需 STM32 处理复杂的协议封装(如 HTTP 头构造仅需 STM32 按格式通过串口发送字符串即可)。
  • 四、使用注意事项

  • 供电稳定性:ESP01S 在发送数据时电流波动较大,若供电不足(如仅用 STM32 的 3.3V 引脚供电),会导致模块频繁复位、通信中断,建议单独为模块提供 3.3V/500mA 以上的稳压电源,并在 VCC 与 GND 之间并联 100nF 电容滤波。
  • 串口波特率匹配:模块默认波特率为 115200bps,需确保 STM32 的串口初始化波特率与模块一致(若不一致,需通过AT+UART_SET指令修改模块波特率,或重新配置 STM32 串口)。
  • AT 指令格式:所有 AT 指令需以\\r\\n(回车 + 换行)结尾(如本文中printf("AT+CWJAP=\\"K80\\",\\"11111111\\"\\r\\n");),否则模块无法识别指令。
  • 数据长度匹配:发送 HTTP 请求时,Content-Length字段需与实际 JSON 数据长度严格一致(如本文中Content-Length: 150),否则服务器可能无法正确解析数据。
  • 3.模块资料获取

    通过网盘分享的文件:ESP01S模块资料
    链接: https://pan.baidu.com/s/1cPHplzC_eNXwORpWQcrSYA 提取码: pa4q 
    –来自百度网盘超级会员v5的分享

    2.AT设备注册配置网络指令

    printf ("AT+RST\\r\\n");
    Delay_Ms (500);
    printf ("AT+CWMODE=1\\r\\n");
    Delay_Ms (100);
    printf ("AT+CWJAP=\\"创研微电子\\",\\"11111111\\"\\r\\n");
    Delay_Ms (1000); // WiFi连接需要更长时间
    Delay_Ms (1000); // WiFi连接需要更长时间
    Delay_Ms (1000); // WiFi连接需要更长时间
    Delay_Ms (1000); // WiFi连接需要更长时间
    Delay_Ms (1000); // WiFi连接需要更长时间
    Delay_Ms (500);
    // 2. TCP连接(端口号必须在同一行)
    printf ("AT+CIPSTART=\\"TCP\\",\\"8.13x.1xx.6\\",8652\\r\\n");
    Delay_Ms (100);

    3.ESP01S模块数据提交

    这里请注意需要加上delay,给芯片一点响应时间防止数据发不过去

    // 1. 建立TCP连接
    WATER_Data(); // 获取液体数据
    printf("AT+CIPSTART=\\"TCP\\",\\"8.13x.1xx.6\\",8652\\r\\n"); // 修改IP和端口
    Delay_Ms(100);

    // 2. 准备发送数据
    printf("AT+CIPSEND=296\\r\\n");
    Delay_Ms(100); // 等待">"提示符

    // 3. 发送HTTP头部
    printf("POST /PostData HTTP/1.1\\r\\n"); // 修改路径
    Delay_Ms(100);
    printf("Host: 8.13x.1xx.6:8652\\r\\n"); // 修改Host
    Delay_Ms(100);
    printf("Content-Type: application/json\\r\\n");
    Delay_Ms(100);
    printf("Connection: close\\r\\n");
    Delay_Ms(100);
    printf("Content-Length: 150\\r\\n"); // 确保与实际JSON长度匹配
    Delay_Ms(100);
    printf("\\r\\n");
    Delay_Ms(100);
    // 4. 发送JSON数据
    printf("{\\"waterLevel1\\":%d,\\"waterLevel2\\":%d,\\"waterLevel3\\":%d,\\"indoorTemp\\":%d.%d,\\"waterTemp\\":%d.%d,\\"humidity\\":%d.%d,\\"battery\\":%d,\\"speed\\":%d}\\r\\n",
    WATER_Data20, WATER_Data50, WATER_Data80,
    at_indoorTemp, at_indoorTemp_xiao,
    at_waterTemp, at_waterTemp_xiao,
    at_humidity1, at_humidity1_xiao,
    battery_percent,diandi
    );
    Delay_Ms(100);

    printf("\\r\\n");
    Delay_Ms(100);

    printf("{\\"waterLevel1\\":%d,\\"waterLevel2\\":%d,\\"waterLevel3\\":%d,\\"indoorTemp\\":%d.%d,\\"waterTemp\\":%d.%d,\\"humidity\\":%d.%d,\\"battery\\":%d,\\"speed\\":%d}\\r\\n",
    WATER_Data20, WATER_Data50, WATER_Data80,
    at_indoorTemp, at_indoorTemp_xiao,
    at_waterTemp, at_waterTemp_xiao,
    at_humidity1, at_humidity1_xiao,
    battery_percent,diandi);

    赞(0)
    未经允许不得转载:171主机测评 » 零基础入门 STM32 驱动 ESP01s 完成串口通讯与 HTTP 服务器请求(POST)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址