百问网7天物联网智能家居 学习心得 打卡第七天

2022.3.27

主要讲的内容是:项目完善与总结回顾

基于上篇文章进行了代码改进添加了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);
}

你可能感兴趣的:(物联网,单片机,stm32)