百问网七天物联网课程笔记(第六天)
基础班部分
今日内容:使用开发板配置TCP连接,使用小程序和开发板进行交互。
AT指令发送函数:
// 向ESP8266发送AT指令
uint8_t ESP8266_SendCommand(char *cmd, char *reply, uint16_t timeout)
{
// 1.保存传入的指令
char buf[256] = {0};
strcat(buf, cmd);
// 2.处理AT指令
if (strstr(buf, "\r\n") == 0)
{
strcat(buf, "\r\n");
}
// 3.清理前面接收的buf
USART2_ClearBuf();
// 4.发送数据
USART2_Transmit((uint8_t *)buf, strlen(buf), 500);
// 5.接收数据
memset(buf, 0, 256);
while(timeout != 0)
{
if(USART2_Receive((uint8_t *)buf))
{
if (strstr(buf, reply))
{
printf("%s Send ok!\r\n", cmd); // 发送成功
if (strstr(buf, "CIFSR"))
printf("%s\r\n", buf); // 打印IP地址
return 0;
}
else
{
timeout--;
HAL_Delay(1);
}
}
}
printf("%s Send error!\r\n", cmd); // 发送失败
return 1;
}
TCP连接AT指令配置过程:
ESP8266_SendCommand("AT+RST", "OK", 500);
HAL_Delay(1000);
ESP8266_SendCommand("AT+CWMODE=1", "OK", 500);
ESP8266_SendCommand("AT+CWJAP=\"TP-LINK\",\"password\"", "OK", 5000);
ESP8266_SendCommand("AT+CIPMUX=1", "OK", 500);
ESP8266_SendCommand("AT+CIPSERVER=1,9999", "OK", 500);
ESP8266_SendCommand("AT+CIFSR", "OK", 500);
小程序参数配置注意事项:
1.手机要和wifi模块连接同一个wifi
2.IP地址为AT+CIFSR指令查询返回的IP
3.端口:9999
连接成功后,
打开“台灯”,串口显示“led on”。
关闭“台灯”,串口显示“led off”。
点击开发板的按键,“门铃”标签亮
字符串处理函数介绍
wifi模块的数据接收和发送都是基于字符串,以下几个是AT指令处理过程中的常用处理函数。
头文件:#include “string.h”
strlen():计算指定字符串的长度
strcat():字符串拼接
strncat():将字符串2的前n个字符拼接到字符串1后面
strcpy():复制字符串。成功返回新字符串的首地址,失败返回NULL
strncpy():复制指定长度的字符串。成功返回新字符串的首地址,失败返回NULL
strstr():在字符串1中查到字符串2出现的位置。成功返回字符串1中,字符串2首次出现的地址
strchr():在字符串1中查到单个字符2出现的位置。成功返回字符串1中,单个字符2首次出现的地址
strcmp():比较字符串1和字符串2是否一样(比较的是字符ASCII码的大小)
strncmp():比较字符串1和字符串2前n个字符是否一样(比较的是字符ASCII码的大小)
strtok():分解参数1的字符串为一组字符串,参数2为分隔符
sprintf():头文件 #include"stdio.h",用于实现字符串和整形数字的组合