stm32-wifi模块

STM32 与 ESP8266 Wi-Fi 模块资料

1. ESP8266 简介

ESP8266 是一款 低成本的 Wi-Fi 模块 ,可以方便地将设备连接到无线网络。它通常用于物联网(IoT)项目中,支持 TCP/IP 协议栈 ,能够通过 AT 指令 或者 串口通信 来与外部设备(如 STM32)进行数据交换。

2. ESP8266 的特点
  • 内置 Wi-Fi:支持 2.4 GHz Wi-Fi 网络。
  • 低功耗:在待机模式下的功耗非常低,适合电池供电的设备。
  • AT 指令集 :通过串口与主机通信,使用 AT 命令 配置模块。
  • 支持连接最多 4 个客户端 :ESP8266 可以作为 Wi-Fi 热点 或连接到现有的 Wi-Fi 网络
  • 支持加密:支持 WPA2 等加密协议。
  • 较高的数据传输速率 :支持高达 80 Mbps 的数据传输速率。
3. STM32 与 ESP8266 连接方式

STM32 可以通过 USART(串口)与 ESP8266 模块通信。下面是如何连接的详细信息:

  • STM32 TX(PA9) ------ ESP8266 RX
  • STM32 RX(PA10) ------ ESP8266 TX
  • GND ------ GND
  • 3.3V 电源 ------ VCC(ESP8266 通常需要 3.3V 电源)

注意:ESP8266 模块不支持 5V 输入电压,务必确保使用 3.3V 电源。

4. ESP8266 AT 指令集

ESP8266 使用 AT 指令进行配置,以下是一些常用的指令:

  • AT:检查是否能与模块进行通信。
  • AT+RST:重启模块。
  • AT+CWJAP="SSID","PASSWORD":连接到 Wi-Fi 网络。
  • AT+CWMODE=1 :设置为 Station 模式(连接 Wi-Fi 网络)。
  • AT+CIFSR:查看 ESP8266 模块的 IP 地址。
  • AT+CIPSTART="TCP","","":与指定的 IP 和端口建立 TCP 连接。
  • AT+CIPSEND=:发送数据到指定的端口。
5. STM32 控制 ESP8266 模块

可以通过 STM32 的 USART 发送 AT 指令来控制 ESP8266 模块。以下是简单的代码示例,展示如何通过 STM32 配置 ESP8266 模块:

复制代码
#include "stm32f10x.h"

// 串口初始化函数
void USART_Init(void) {
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    // 使能 USART 和 GPIO 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

    // 配置 PA9 和 PA10 为串口 TX 和 RX
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置 USART
    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);
}

// 发送 AT 指令
void USART_SendData(uint8_t data) {
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    USART_SendData(USART1, data);
}

// 从 USART 接收数据
uint8_t USART_ReceiveData(void) {
    while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    return USART_ReceiveData(USART1);
}

// 发送 AT 指令示例
void ESP8266_Init(void) {
    USART_Init();
    USART_SendData('A');
    USART_SendData('T');
    USART_SendData('\r');
    USART_SendData('\n');
}

int main(void) {
    SystemInit();  // 系统初始化

    // 初始化 USART 串口通信
    ESP8266_Init();

    while (1) {
        // 在此处添加与 ESP8266 通信的代码
    }
}

6. 常见问题和调试

  1. 电源问题 :确保 ESP8266 获得稳定的 3.3V 电源,如果电源不稳定,模块可能会无法正常工作。
  2. 串口配置:确保 STM32 的串口波特率与 ESP8266 的波特率一致(通常为 115200)。
  3. AT 命令调试 :使用串口助手工具(如 PuttyTera Term)调试 AT 指令,查看 ESP8266 模块的响应。

ESP8266 与串口芯片的接线

ESP8266 通常通过串口通信与其他设备(如 STM32)进行连接。如果你想通过 USB 转串口芯片 (如 CP2102FT232CH340)将 ESP8266 连接到电脑或者其他设备,这里是常见的接线方式:

接线说明
  1. ESP8266 与 USB 转串口芯片接线图

    • ESP8266 TX ------ USB 转串口 RX (例如 FT232CP2102 的 RX 引脚)
    • ESP8266 RX ------ USB 转串口 TX (例如 FT232CP2102 的 TX 引脚)
    • ESP8266 GND ------ USB 转串口 GND
    • ESP8266 VCC ------ USB 转串口 3.3V(注意:ESP8266 需要 3.3V 电源,不要连接到 5V)
  2. 接线示意图 (以 FT232 为例):

    ESP8266 引脚 FT232 引脚
    TX RX
    RX TX
    GND GND
    VCC 3.3V
连接注意事项
  1. 电压问题 :ESP8266 模块工作电压为 3.3V ,切记不要将其连接到 5V,否则可能会烧坏模块。
  2. 电流问题 :ESP8266 在进行 Wi-Fi 传输时,可能会出现瞬时电流较大的情况。确保你使用的 USB 转串口芯片 能提供足够的电流,最好使用 3.3V 稳定的电源
  3. 串口配置 :确保 串口波特率 与 ESP8266 模块一致。默认波特率通常是 115200,可以通过 AT 命令来修改。
常见 USB 转串口芯片型号
  • FT232:常见的 USB 转串口芯片,支持 3.3V 和 5V 的通信,可以用于连接 ESP8266 和电脑。
  • CP2102:也是一种常见的 USB 转串口芯片,具有类似 FT232 的功能。
  • CH340:便宜且常用的 USB 转串口芯片,适用于连接 ESP8266。

ESP8266 与串口芯片(CH340)的接线:

2. Wi-Fi 配置指令
3. TCP/IP 连接
4. 数据发送与接收
5. Wi-Fi 热点配置
6. 高级功能

|------------|------------|
| ESP8266 引脚 | CH340引脚 |
| 3V3 | 3.3v |
| RST | 5v |
| EN | 接单片机3.3/5v |
| TX | RXD |
| RX | TXD |
| IO0 | GND |
| IO2 | 不接 |
| GND | 接单片机的GND |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |

AT模式指令配置:

基础 AT 指令一览表

以下是一些常见的 AT 指令 ,用于控制 ESP8266 模块:

1. 基础指令
  • AT :检查 ESP8266 模块是否正常工作(回复:OK)。
  • AT+RST :重启 ESP8266 模块(回复:OK)。
  • AT+GMR :查看模块的固件版本(回复:OK)。
  • AT+CSQ:查询信号强度(返回信号强度的数值)。
  • AT+CWJAP="SSID","PASSWORD" :连接 Wi-Fi 网络,SSID 为网络名称,PASSWORD 为密码(回复:OK)。
  • AT+CWMODE=1 :设置 ESP8266 为 Station 模式(连接现有 Wi-Fi 网络)。
  • AT+CWMODE=2 :设置 ESP8266 为 Access Point 模式(创建 Wi-Fi 热点)。
  • AT+CIFSR:查询 ESP8266 的 IP 地址(返回 IP 地址)。
  • AT+CIPSTART="TCP","","":启动 TCP 连接,连接到指定的 IP 和端口。
  • AT+CIPSEND= :准备发送数据,<length> 为数据长度。
  • AT+CIPCLOSE:关闭 TCP 连接。
  • AT+CIPSEND=4:准备发送 4 字节的数据。
  • AT+IPD:接收数据。
  • AT+CIPMUX=1:允许多个连接。
  • AT+CWSAP="SSID","PASSWORD",, :设置 ESP8266 为 Wi-Fi 热点模式,SSID 为热点名称,PASSWORD 为密码,CHANNEL 为信道(0-13),SECURITY 为加密方式(如 WPA2)。
  • AT+RST:重启 ESP8266 模块。
  • AT+UART=9600,8,1,0,0 :设置串口参数,9600 为波特率,8 为数据位,1 为停止位。

之前上传的文件已经过期,无法查看。如果你希望我重新查看这些文件,请重新上传相关文件,或者我可以直接为你提供 TCP、UDP 和透传 的相关资料。

TCP、UDP 和透传简介

1. TCP(传输控制协议)

TCP 是一种 面向连接的 协议,提供可靠的数据传输服务。它确保数据从发送端到接收端的可靠传递,即使发生丢包也会自动重传数据。 特点

  • 可靠性:通过握手过程确保连接建立,并通过确认机制保证数据的准确送达。
  • 顺序传输:数据包按发送顺序到达接收端。
  • 流量控制:通过滑动窗口控制发送速度,避免接收端接收不过来。
  • 拥塞控制:根据网络状况调整传输速率,避免网络过载。

应用 :适用于需要高可靠性和完整性的数据传输,如 网页浏览 (HTTP)、文件传输 (FTP)、电子邮件(SMTP)等。

2. UDP(用户数据报协议)
3. 透传(Transparent Transmission)

透传可以基于 TCP 或 UDP 协议进行。在透传模式下,数据直接从发送方传输到接收方,中间不做协议解析,适用于串口、Wi-Fi 等连接方式。


总结

如果你有更具体的问题或需要详细的代码示例,随时告诉我!

4. TCP Clint连接:建立客户端和ESP8266同一局域网IP地址,
  • UDP 是一种 无连接的 协议,不保证数据传输的可靠性和顺序,适用于实时性要求高但不要求完全可靠的数据传输。
  • 特点
    • 不可靠性:没有连接建立过程,不保证数据的到达与顺序。
    • 低延迟:由于没有重传和确认机制,数据传输延迟较低。
    • 无拥塞控制:没有流量控制和拥塞控制,适用于实时应用。
  • 应用 :适用于对实时性要求较高的应用,如 视频直播VoIP 电话在线游戏DNS 查询 等。
  • 透传 是一种将数据从一个设备直接传输到另一个设备的方式,而不需要中间设备对数据进行解析或处理。透传常见于串口通信、网络传输等场景,数据从发送端透明地传输到接收端。
  • 特点
    • 无协议解析:透传模式下,传输的数据不经过协议解析,发送方和接收方仅关心数据本身。
    • 高效性:因为没有协议层的复杂性,数据可以快速传输。
    • 灵活性:可以用于串口设备、无线设备和网络通信等多种场景。
  • 应用 :常见于 串口通信 (如 ESP8266 模块的透传功能),用于 物联网设备 之间的数据交换。
  • 透传+TCP:在 TCP 连接上进行透传时,数据的传输仍然可靠并且保证顺序。
  • 透传+UDP:在 UDP 连接上进行透传时,数据传输不保证可靠性,适用于要求低延迟的场景。
  • TCP:可靠,适用于需要高可靠性和完整性的数据传输。
  • UDP:实时性高,但不可靠,适用于要求低延迟的场景。
  • 透传:直接传输数据,不做解析,适用于物联网设备和串口通信。

单连接 TCP Client

  1. 配置 WiFi 模式
    AT+CWMODE=3 // softAP+station mode
    响应 :
    OK
  2. 连接路由器
    AT+CWJAP="SSID","password" // SSID and password of router
    响应 :
    OK
  3. 查询 ESP8266 设备的 IP 地址
    AT+CIFSR
    响应 :
    +CIFSR:APIP,"192.168.4.1"
    +CIFSR:APMAC,"1a:fe:34:a5:8d:c6"
    +CIFSR:STAIP,"192.168.3.133"
    +CIFSR:STAMAC,"18:fe:34:a5:8d:c6"
    OK
  4. PC 与 ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个 TCP 服
    务器。
  • 假设, PC 创建的服务器 IP 地址为 192.168.3.116 ,端⼝为 8080 。
  1. ESP8266 设备作为 TCP client 连接到上述服务器
    AT+CIPSTART="TCP","192.168.3.116",8080 //protocol, server IP and port
    响应 :
    OK
  2. ESP8266 设备向服务器发送数据
    AT+CIPSEND=4 // set date length which will be sent, such as 4 bytes
    >test // enter the data, no CR
    响应 :
    Recv 4 bytes
    Espressif
    2/15
    2017.08 2. 单连接 TCP Client
    SEND OK
  3. 当 ESP8266 设备接收到服务器发来的数据,将提示如下信息:
    +IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
    注意:
    发送数据时,如果输⼊的字节数超过了设置⻓度( n ):
    - 系统将提示 busy ,并发送
特性 TCP UDP
连接方式 面向连接(需建立连接) 无连接(直接发送)
可靠性 提供可靠的传输,确保数据到达 不保证可靠性,数据可能丢失
顺序保证 数据按发送顺序到达 不保证顺序
控制 拥塞控制、流量控制 无流量控制、无拥塞控制
应用场景 文件传输、网页浏览、电子邮件等 视频会议、实时语音、游戏等
相关推荐
小诸葛的博客1 小时前
Flannel UDP 模式的优缺点
网络协议·udp·php
Wallace Zhang1 小时前
STM32F103_LL库+寄存器学习笔记22 - 基础定时器TIM实现1ms周期回调
笔记·stm32·学习
小石(努力版)2 小时前
嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐
stm32·单片机·学习
桃子酱紫君2 小时前
华为配置篇-RSTP/MSTP实验
开发语言·华为·php
GodKK老神灭2 小时前
STM32 变量加载到flash的过程中
stm32
檀越剑指大厂3 小时前
T-BOX硬件方案深度解析:STM32与SD NAND Flash存储的完美搭配
stm32·单片机·嵌入式硬件
JPCstorm3 小时前
客服系统重构详细计划
php
7yewh3 小时前
MCU程序加密保护(一)闪存读写保护法 加密与解密
单片机·嵌入式硬件
不脱发的程序猿3 小时前
如何优化MCU中断响应时间
单片机·嵌入式硬件·rtos
智慧地球(AI·Earth)4 小时前
OpenAI for Countries:全球AI基础设施的“技术基建革命”
开发语言·人工智能·php