主要讲的内容是:项目完善与总结回顾
基于上篇文章进行了代码改进添加了2向功能,利用串口手动输入WiFi账号和密码和优化展示ESP8266IP,代码段如下图。
1、设置上电后等待时间 如果在等待时间内按下按键,可输入账号和密码超时则跳出。
2、判断是否有按键按下
如果有按键按下,就马上获取数据首先获取WiFi账号
while循环获取字符,每次只能获取一个字符
getchar获取串口输入的字符,每次获取一个
定义char ch 来存放字符
while循环判定ch是否是\r,一旦输入回车就判断我们输入完了
ch是单个数据,要把ch保存起来,定义 char ssid_buf[20]="NETGEAR"保存起来,默认的账号是NETGEAR,密码100ask.cq,
定义长度 char len ssid_buf[len]=ch,每次长度+1 len++
在判断有按键按下时将ssid buf ,清空一下,不然输入账号时,如果字符少于7个就不会完全覆盖所以要将 ssid buf清空,memset(ssdi buf,0,20)
if(ch>“ ”)的意思是输入的如果是一些控制符,就给他过滤掉
接下来就是获取WiFi的密码操作和上面获取WiFi的账号基本一致
3、组合指令("AT+CWJAP=\"NETGEAR\",\"100ask.cq\"")
利用strcat将账号密码拼接起来,再利用memcpy将账号密码传回去。
//添加功能1:支持手动输入WIFI账号和密码
void Key_Update_WIFI(char *cmd, uint16_t d_time)
{
char ssid_buf[20] = "NETGEAR";
char pwd_buf[20] = "100ask.cq";
char wifi_cmd[50] = "AT+CWJAP=\"";
char ch = 0;
char len = 0;
//1.设置等待时间
HAL_Delay(d_time);
//2.判断是否有按键
if (Key_GetFlag())
{
//2.1获取WIFI账号
printf("Please enter SSID:");
memset(ssid_buf, 0, 20);
while(ch != '\r') //判断是否输入完
{
ch = getchar(); //获取输入的字符
if(ch > ' ')
{
printf("%c",ch);
ssid_buf[len] = ch;//保存输入
len++;
}
}
//2.2获取WIFI密码
ch = 0;
len = 0;
printf("\r\nPlease enter Password:");
memset(pwd_buf, 0, 20);
while(ch != '\r') //判断是否输入完
{
ch = getchar(); //获取输入的字符
if(ch > ' ')
{
printf("%c",ch);
pwd_buf[len] = ch;//保存输入
len++;
}
}
}
printf("\r\n");
//3.组合指令 ("AT+CWJAP=\"NETGEAR\",\"100ask.cq\"")
strcat(wifi_cmd, ssid_buf);
strcat(wifi_cmd, "\",\"");
strcat(wifi_cmd, pwd_buf);
strcat(wifi_cmd, "\"");
memcpy(cmd, wifi_cmd, strlen(wifi_cmd));
}
功能2 优化ESP8266 IP 这段代码 自己C语言基础很差还没理解 ,理解后再更新上来。
//添加功能2:优化展示ESP8266 IP
/*
"192.168.50.170"
+CIFSR:STAMAC,"ac:0b:fb:c7:df:30"
*/
void Show_IP(char *ip)
{
char buf[256] = {0};
char ip_buf[256] = {0};
uint8_t len = 0;
char *ip_offset;
ip_offset = strstr(ip, "STAIP")+6;
memcpy(buf, ip_offset, strlen(ip_offset));
while(buf[len] != '\r')
{
ip_buf[len] = buf[len];
len++;
}
printf("ESP8266 IP: %s\r\n", ip_buf);
}