根据前面4篇文章,可以做出一个简易的时钟了;
这是一个简单的例子,通过按键控制ESP8266连接WiFi的方式,通过GET响应会包含时间信息的服务器来获取时间,显示在屏幕上;
以下是主函数:
#include "esp8266.h"
#include "lcd.h"
#include "key.h"
#include "string.h"
int main()
{
char *http = "GET\n";
char *ipd = NULL;
uint8_t key = 0;
SysTick_Init(168);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //中断优先级分组
USART1_Init(115200); //串口1初始化 调试
Usart3_Config(115200); //串口3初始化 连接esp8266
TFTLCD_Init(); //LCD初始化
KEY_Init(); //按键初始化
FRONT_COLOR = Turquoise; //字体颜色
BACK_COLOR = BLACK; //背景颜色
while(1)//按键扫描循环
{
key = KEY_Scan(0);/* 按键扫描,单次按下 */
if(key == KEY_UP)/* 开启SmartConfig配网 */
{
ESP8266_Init_SmartConfig();
while(1)
{
if(strstr((char *)esp8266_buf, "smartconfig connected wifi"))
{
ESP8266_Init_after_SmartConfig();
break;
}
delay_ms(500);
}
break;/* 跳出按键循环扫描 */
}
else if(key == KEY_DOWN)/* 直连预设配置 */
{
ESP8266_Init_Fixed_WiFi();
break;
}
else if(key == KEY_LEFT)/* 直连上次SmartConfig配置的路由 */
{
ESP8266_Init_Disconnected();
break;
}
}
while(1)//主循环
{
/* 发送GET请求 */
ESP8266_SendData(http,4);
/* 获取服务器返回的信息 */
ipd = ESP8266_GetIPD(100);
//printf("\r\n%s\r\n",ipd);
if(*(ipd+601) != '>')
{
LCD_ShowFont(0,10,ipd+601,19);
}
else
{
LCD_ShowFont(0,10,ipd+602,19);
}
delay_ms(100);
ESP8266_TCP();//再次连接服务器
}
}
主循环最后要再次连接服务器,因为GET一次后会断开连接;
void ESP8266_TCP(void)
{
/* 建立TCP连接 */
// printf("CIPSTART\r\n");
while(ESP8266_SendCmd(ESP8266_TCP_INFO, "CONNECT"))
delay_ms(500);
}
ipd偏移601就是时间字段的首地址,但偶尔这里会变成 '>' 这个字符,因此要加入判断;
使用 LCD_ShowFont() 固定显示数据的长度就可以只显示时间信息;