第一次使用esp8266做玩具。
使用了stc89c52,ds1302,lcd1602,esp8266.
先使用了ds1302实现了本地走时的功能。
在通过esp8266获取网络时间将获取到的时间写入ds1302中。
再开启ds1302走时即可。
代码关键部分在于esp8266建立连接的部分。现把esp8266初始化并进入透传代码贴出。
建议在使用前自己用串口设备电脑直连esp8266调试at指令!!!
esp8266连接wifi的指令为
AT+CWJAP=“ssid”,“password”
Uart_Send_Data("AT+CWJAP=\"ssid\",\"password\"\r\n",sizeof("AT+CWJAP=\"ssid\",\"password\"\r\n"));//输入路由器的ssid和密码
void ESP8266_Cmd_Init()
{
Uart_Send_Data("AT+RST\r\n",sizeof("AT+RST\r\n"));
Delay1s(10);
Uart_Send_Data("AT+CWMODE=1\r\n",sizeof("AT+CWMODE=1\r\n"));
Lcd_Show_String(0, 0, "SETING WMODE ");
Delay1s(3);
Uart_Send_Data("AT+CIPMUX=0\r\n",sizeof("AT+CIPMUX=0\r\n")); //设置单链接模式
Lcd_Show_String(0, 0, "SETING CIPMUX ");
Delay1s(3);
Uart_Send_Data("AT+CIPSTART=\"TCP\",\"你的api\",api访问端口\r\n",sizeof("AT+CIPSTART=\"TCP\",\"你的api\",api访问端口\r\n")); //建立TCP服务器
//修改这一句其中api部分和端口到你自己的api或服务器
Lcd_Show_String(0, 0, "SETING TCP ");
Delay1s(3);
Uart_Send_Data("AT+CIPMODE=1\r\n",sizeof("AT+CIPMODE=1\r\n")); //设置透传模式
Lcd_Show_String(0, 0, "SETING CIPMODE ");
Delay1s(3);
Uart_Send_Data("AT+CIPSEND\r\n",sizeof("AT+CIPSEND\r\n")); //进入透传模式
Lcd_Show_String(0, 0, "SETING CIPSEND ");
Delay1s(3);
}
透传中发起get指令
Uart_Send_Data(
"GET /1.php HTTP/1.1\r\n",
sizeof("GET /1.php HTTP/1.1\r\n"));//一个回车换行
Uart_Send_Data(
"Host:192.168.91.66\r\n\r\n",
sizeof("Host:192.168.91.66\r\n\r\n"));//这里一定要两个!!!
注意:
host发送结尾一定要两个回车换行!!!
这里遇到一个有趣的问题,在直接使用上述get指令将其通过串口写入esp8266时,会提示400错误,服务器没有理解发出的请求类似的提醒。
而同样的语句将其转为16进制数依次输出即可正常输出。
u8 code get[]={0x47,0x45,0x54,0x20,0x48,0x54,0x54,0x50,0x3A,0x2F,0x2F,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x39,0x31,0x2E,0x36,0x36,0x2F,0x31,0x2E,0x50,0x48,0x50,0x20,0x48,0x54,0x54,0x50,0x2F,0x31,0x2E,0x31,0x0D,0x0A,0x48,0x4F,0x53,0x54,0x3A,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x39,0x31,0x2E,0x36,0x36,0x0D,0x0A,0x0D,0x0A};
上述问题可能是host句最后的\r\n\r\n被串口输出时并不是十六进制的0x0D,0x0A,0x0D,0x0A导致的。如果有小伙伴知道这个问题的原因,请告诉我,谢谢。
退出透传时只需发送+++,无换行!
Uart_Send_Data("+++",sizeof("+++"));
串口输出代码如下
void Uart_Send_Data(u8 *c,u8 count)
{
EA = 0;
while(count--)
{
SBUF = *c;
while(!TI);
TI = 0;
c++;
}
EA = 1;
}
我使用的是家中电脑作为服务器。服务器只用了一个php文件显示时间。
date_default_timezone_set('PRC');
echo date('Y-m-d H:i:s');
?>
工程文件在https://download.csdn.net/download/weixin_43456632/12319425