wenbo2005.online

学习记录 / STM32

WIFI+AT 指令

STM322024-10-20

注意:ESP8266需要与单片机同时初始化,即共RESER端。

详细 : https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/Wi-Fi_AT_Commands.html

AT                                  启动AT测试
AT+RST                            重启模块
AT+GMR                  查看版本信息
AT+RESTORE              恢复出厂设置
AT+CWMODE=1/2/3          设置工作模式(1 -> Station   2 -> AP  3 -> AP+Station)

AT+CWSAP_DEF="WIFI名称","WIFI密码",通道号,加密方式                设置WIFI参数(只在AP开启后生效)

(通道建议:1,6,11)

(加密方式:0 -> OPEN 2 -> WPA_PSK 3 -> WPA2_PSK 4 -> WPA2_PSK)

AT+SAVETRANSL INK=1,"192.168.4.1",8080,"TCP"            开启开机透传,设置IP,端口号,建立TCP连接

(+++可以退出透传,不需要加换行)

两种通信方式:

(一),第三方热点,两个ESP8266连接,其中一个做TCP的服务器,一个做客户端(内网)。

(二),两个ESP8266-01S ,一个做TCP的服务器,一个做客户端(外网)。

//==========================================注意电压,必需稳定!!=========================================================
//设置ESP8266-01S为服务器Sever
/*
* wifi_name: WIFI名称
* wifi_password:WIFI密码
* chennel:WIFI通道
* mode: WIFI加密方式   例如:3 -> WPA2_PSK
* port_num: TCP端口号
*/
void ESP8266_Sever_Init(char* wifi_name,char* wifi_password,uint8_t chennel,uint8_t mode,uint16_t port_num)
{  
    printf("AT+RESTORE\r\n");                            //恢复出厂设置
    //or printf("AT+RES\r\n");
    HAL_Delay(500);
    printf("AT+CWMODE=2\r\n");                            //设置WiFi为Station模式
    HAL_Delay(500);
    //连接WiFi,“热点名”,“热点密码”,通道5,加密方式为 WPA2_PSK
    printf("AT+CWSAP=\"%s\",\"%s\",%d,%d\r\n",wifi_name,wifi_password,chennel,mode);
    HAL_Delay(1500);
    printf("AT+CIPMUX=1\r\n");                            //启动多链接模式
    HAL_Delay(500);
    printf("AT+CIPSERVER=1,%d\r\n",port_num);                //开启TCP Server ,端口设置为8080
    HAL_Delay(500);
}

//======================================================客户端========================================================
//设置ESP8266-01S为客户端Client
/*
* wifi_name: WIFI名称
* wifi_password:WIFI密码
* IP:主机地址  例如: "192.168.4.1"
* port_num: TCP端口号
*/
void ESP8266_Client_Init(char* wifi_name,char* wifi_password,char* IP ,uint16_t port_num)
{
    HAL_GPIO_TogglePin(GPIOC,LED_Pin);
    printf("AT+RESTORE\r\n");                                //设置WiFi为Station模式
    //or printf("AT+RES\r\n");  
    HAL_Delay(2000);                                    //这个时间变短,可能初始化失败
    HAL_GPIO_TogglePin(GPIOC,LED_Pin);

    printf("AT+CWMODE=1\r\n");                                //设置WiFi为Station模式
    HAL_Delay(1000);
    HAL_GPIO_TogglePin(GPIOC,LED_Pin);

    //连接WiFi,“热点名”,“热点密码”
    printf("AT+CWJAP=\"%s\",\"%s\"\r\n",wifi_name,wifi_password);  
    HAL_Delay(4000);
    HAL_GPIO_TogglePin(GPIOC,LED_Pin);

    //连接上面创建的服务器,地址可以用AT+CIFSR查询出来,APIP后面的地址就是,端口号也要对应
    printf("AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",IP,port_num);
    HAL_Delay(2000);
    HAL_GPIO_TogglePin(GPIOC,LED_Pin);

    printf("AT+CIPMODE=1\r\n");//设置透传模式
    HAL_Delay(500);
    HAL_GPIO_TogglePin(GPIOC,LED_Pin);

    printf("AT+CIPSEND\r\n");//用于在wifi 透传模式下传输数据
    HAL_Delay(500);
}