WIFI模块_ESP82xx常用命令整理

参考连接 https://docs.espressif.com/projects/esp-at/zh_CN/latest/AT_Command_Set/index.html

没有特殊说明,基本上每条指令都已回车换行结尾进行发送。

连接wifi

1.设置wifi工作模式

发送:(AP+STATION模式)

AT+CWMODE=3

返回:

AT+CWMODE=3

OK

2.连接wifi

发送:

AT+CWJAP="XXXXX","YYYYY"

返回:
1.SSID或者密码错误:

WIFI DISCONNECT

busy p...
+CWJAP:4

ERROR

注意在输出 busy p… 会有一定的延时

2.成功:

WIFI CONNECTED
WIFI GOT IP

OK

3.已连接再次连接(正确的SSID和密码):

WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP

OK

注意在DISCONNECT 后会有一定延时

3.查询本地ip地址和MAC地址

发送:

AT+CIFSR

返回:

+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"c6:4f:33:d6:45:fb"
+CIFSR:STAIP,"192.168.3.241"
+CIFSR:STAMAC,"c4:4f:33:d6:45:fb"
OK

注意一般取STAIP

4.电脑连接模块发出的wifi (可选)

后续可以搭配手机客户段,完成一些对单片机的配置。

连接后会输出mac和ip:

+STA_CONNECTED:"08:5b:d6:91:41:82"
+DIST_STA_IP:"08:5b:d6:91:41:82","192.168.4.3"

5.扫描当前可用AP

AT+CWLAP

返回

AT+CWLAP
+CWLAP:(3,"HUAWEI-B315-E82C",-49,"30:45:96:2f:e8:2c",7)
+CWLAP:(4,"TP_LINK",-59,"08:bd:43:c8:5f:6f",11)
。。。。

OK

6.断开wifi

AT+CWQAP

返回

WIFI DISCONNECT

OK

7.上电自动连接到AP

发送

AT+CWAUTOCONN=1
或者
AT+CWAUTOCONN=0
  • 1.自动连接 0不连接

8.查看当前连接AP信息(信号强度)

发送

AT+CWJAP?

返回

+CWJAP:"wifi-ssid","04:40:a9:4d:a5:10",11,-62,0,0,0,0

OK

含义:

+CWJAP:<ssid>,<bssid>,<channel>,<rssi>,<pci_en>,<reconn_interval>,<listen_interval>,<scan_mode>,<pmf>
OK

9.Airkiss配网

发送

AT+CWSTARTSMART=3   //支持ESP-Touch和Airkiss智能配网 

返回

OK

然后手机连接要配网的无线wifi,打开安信可公众号,选择微信配网,点击开始配置按钮,等待配网完成,再次过程中,esp芯片会输出想干信息,如下:

smartconfig type:AIRKISS
Smart get wifi info
ssid:xxxxxxxxxxx   //wifi名称
password:yyyyyyyyyyy  //wifi 密码
WIFI CONNECTED
WIFI GOT IP
smartconfig connected wifi
AT+CIPSTATUS
STATUS:2

OK

TCP 客户端

以 连接通信猫服务器为例进行测试,连接远端服务器于此相同。

通信猫测试网页为:http://tongxinmao.com/App/Detail/id/1

打开后获取端口和ip信息

1.连接服务器

发送

AT+CIPSTART="TCP","120.76.100.197",10002

返回:

失败:


ERROR

成功:

CONNECT

OK

2.发送数据

发送分两步,与ec20相同,先发配置和字节长度, 等到收到>号后再发具体的数据,超过字节长度的数据会被截断。

发送第一步(配置):

AT+CIPSEND=10

返回:

错误:

ERROR

正确:

OK

>

发送第二步(数据):

0123456789

返回:

busy p...

Recv 10 bytes

SEND OK

注意有一定的延时,可以根据 是否具有 SEND OK来判断发送是否成功。

3.接收数据

收到数据格式为:++IPD,长度:数据,比如:

+IPD,10:0123456789

表示收到10个字节,数据为:0123456789

MQTT 连接

1.配置参数

发送

AT+MQTTUSERCFG=<LinkID>,<scheme>,<"client_id">,<"username">,<"password">,<cert_key_ID>,<CA_ID>,<"path">

其中

  • :当前仅支持 link ID 0。
    • 1: MQTT over TCP;
    • 2: MQTT over TLS(不校验证书);
    • 3: MQTT over TLS(校验 server 证书);
    • 4: MQTT over TLS(提供 client 证书);
    • 5: MQTT over TLS(校验 server 证书并且提供 client 证书);
    • 6: MQTT over WebSocket(基于 TCP);
    • 7: MQTT over WebSocket Secure(基于 TLS,不校验证书);
    • 8: MQTT over WebSocket Secure(基于 TLS,校验 server 证书);
    • 9: MQTT over WebSocket Secure(基于 TLS,提供 client 证书);
    • 10: MQTT over WebSocket Secure(基于 TLS,校验 server 证书并且提供 client 证书)。
  • <client_id>:MQTT 客户端 ID,最大长度:256 字节。

  • :用户名,用于登陆 MQTT broker,最大长度:64 字节。

  • :密码,用于登陆 MQTT broker,最大长度:64 字节。

  • <cert_key_ID>:证书 ID,目前 ESP-AT 仅支持一套 cert 证书,参数为 0。

  • <CA_ID>:CA ID,目前 ESP-AT 仅支持一套 CA 证书,参数为 0。

  • :资源路径,最大长度:32 字节。

普通使用:

发送:

AT+MQTTUSERCFG=0,1,"i_am_esp_wif","username","password",0,0,""

返回:

OK

2.连接

发送:

AT+MQTTCONN=0,"你的服务器ip",1883,1
  • 最后一个1 表示自动重连mqtt

返回

正确

+MQTTCONNECTED:0,1,"你的服务器ip","1883","",1

OK

错误:

+MQTTDISCONNECTED:0

ERROR

注意:有一定的时间延迟

3.订阅

发送

AT+MQTTSUB=0,"rcv_topic",1

返回

OK

当收到订阅主题的消息时:

+MQTTSUBRECV:0,"rcv_topic",195,{
    "device_addr":"868704043803038",
    "device_version":"20210106_v_1.0.12",
    "device_commond":"05",
    "device_packageno":3,
    "data":{
    "pos_speed":"?",
    "num_3_col":"?"
    }
}

包含主题、字节长度、具体数据

4.发布数据

发送第一步:

AT+MQTTPUBRAW=0,"pc_topic",10,2,0

返回

正确

OK
>

错误

ERROR

发送第二步(发送具体的数据):

0123456789

返回

成功

+MQTTPUB:OK

失败

+MQTTPUB:FAIL

4. 主动断开连接

AT+MQTTCLEAN=0

返回

OK

断开连接后发送发布订阅指令返回的都是ERROR

5.意外断开

如果mqtt被服务器主动提出,那么会收到

+MQTTDISCONNECTED:0

6.通信时间说明

  • 一般来说,AT MQTT 命令都会在 10 秒内响应,但 AT+MQTTCONN 命令除外。例如,如果路由器不能上网,命令 AT+MQTTPUB 会在 10 秒内响应,但 AT+MQTTCONN 命令在网络环境不好的情况下,可能需要更多的时间用来重传数据包。
  • 如果 AT+MQTTCONN 是基于 TLS 连接,每个数据包的超时时间为 10 秒,则总超时时间会根据握手数据包的数量而变得更长。
  • 当 MQTT 连接断开时,会提示 +MQTTDISCONNECTED:<LinkID> 消息。
  • 当 MQTT 连接建立时,会提示 +MQTTCONNECTED:<LinkID>,<scheme>,<"host">,port,<"path">,<reconnect> 消息。

HTTP 通信

主要用于OTA下载固件

1.获取url资源大小

发送:

AT+HTTPGETSIZE="http://www.fengfengiot.cn/box-wifi/output-crc_new.bin"

返回:

+HTTPGETSIZE:4755

OK

2.GET数据

发送

AT+HTTPCLIENT=2,1,"http://www.fengfengiot.cn/box-wifi/output-crc_new.bin",,,1

返回

+HTTPCLIENT:262,数据
+HTTPCLIENT:512,数据

...

OK
  • 如果返回的资源数据总数大于512,那么会分多次返回,第一次先返回总数对512取余数的个数,然后再返回剩下的n个512个字节。

待续。。。

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是使用STM32微控制器和ESP8266 WiFi模块进行通信的示例代码: ```c #include "stm32f4xx.h" #include "stm32f4xx_hal.h" #include <string.h> UART_HandleTypeDef huart2; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART2_UART_Init(void); void ESP8266_SendCommand(const char* command) { HAL_UART_Transmit(&huart2, (uint8_t*)command, strlen(command), HAL_MAX_DELAY); } void ESP8266_Init() { ESP8266_SendCommand("AT+RST\r\n"); // 重启ESP8266模块 HAL_Delay(2000); ESP8266_SendCommand("AT+CWMODE=1\r\n"); // 设置为Station模式 HAL_Delay(1000); ESP8266_SendCommand("AT+CWJAP=\"your_wifi_ssid\",\"your_wifi_password\"\r\n"); // 连接WiFi HAL_Delay(5000); ESP8266_SendCommand("AT+CIPMUX=0\r\n"); // 设置为单连接模式 HAL_Delay(1000); } void ESP8266_SendData(const char* data) { char buffer[100]; sprintf(buffer, "AT+CIPSTART=\"TCP\",\"your_server_ip\",your_server_port\r\n"); ESP8266_SendCommand(buffer); HAL_Delay(2000); sprintf(buffer, "AT+CIPSEND=%d\r\n", strlen(data)); ESP8266_SendCommand(buffer); HAL_Delay(1000); ESP8266_SendCommand(data); HAL_Delay(1000); ESP8266_SendCommand("AT+CIPCLOSE\r\n"); HAL_Delay(1000); } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); ESP8266_Init(); while (1) { ESP8266_SendData("Hello, server!"); HAL_Delay(5000); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 16; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { while(1); } if (HAL_PWREx_EnableOverDrive() != HAL_OK) { while(1); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { while(1); } HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } static void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { while(1); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 请确保替换示例代码中的以下信息: - "your_wifi_ssid":您的WiFi SSID(名称) - "your_wifi_password":您的WiFi密码 - "your_server_ip":您的服务器IP地址 - your_server_port:您的服务器端口号 这仅是一个基本示例,您可能需要根据您的特定应用程序进行进一步的自定义和调整。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值