51单片机利用8266获取网络时间

51单片机利用8266获取网络时间

我现在是成都一所不出名的二本院校大三学生,第一次来到CSDN,趁有时间,把我之前做的项目,其中一个模块拿出来和大家分享,我也是小白,希望提出宝贵意见。OK,废话不多说。

效果如下 51单片机利用8266获取网络时间_第1张图片
因为我加的延时比较多,而且拍照延时,所以造成了电脑和1602显示的时间不一样。

下面是我写程序的步骤

  1. 使用串口发送指令AT+CWMODE=1设置模块Wi-Fi应用模式为Station模式;

  2. 发送指令AT+RST重启模块使应用模式更改生效;

  3. 发送指令AT+CWJAP =”ssid”,”pwd”连接AP;

  4. 发送指令AT+CIPMUX=0设置模块为单路连接模式,模块默认为单路连接模式;

  5. 发送指令AT+CIPSTART=”TCP”,”api.k780.com”,80 与服务器建立TCP连接 ;

  6. 发送指令AT+CIPMODE=1设置模块传输模式为透传模式;

  7. 发送指令AT+CIPSEND开启透传模式向服务器发送数据,模块收到此指令后先换行后返回“>”

  8. 剩下只需要发送 GET http://api.k780.com:88/?app=life.time&appkey={APPKEY}&sign={SIGN}&format=json HTTP/1.0\r\n\r\n,就能获取到年月时间。
    ** 建议先用wifi烧录模块,测试下这几步,能不能使用,如果不能后面的编程也没有什么意义。
    注意:每一款8266初始化返回的数据不同,所以我们下面程序中 ESP8266_Init_Count>=8中的8就不一定了,需要自己去算。
    **
    下面是我程序最核心的部分中断接收程序,当时考虑了很久才想到了这个方法。(小白太笨了)

    void Uart() interrupt 4 //串口接收中断
    {
    unsigned char receiveData;
    if(RI)
    {

    receiveData=SBUF; //出去接收到的数据
    if(receiveData==‘O’||RecData[0]==‘O’) //判断是否到发送数据
    {
    RecData[count++]=receiveData;
    if(RecData[1] = =‘K’)
    {ESP8266_Init_Count++;}
    if(count= =2)
    {
    count=0;
    RecData[0]=0;
    RecData[1]=0;
    }
    }

    if( ESP8266_Init_Count>=8) //判断是否初始化结束,需要保存我们需要的数据
    {
    if(‘0’<=receiveData&&receiveData<=‘9’)
    {
    if(timecount>=26)timecount=0;
    RecTime[timecount++]=receiveData;
    }
    }
    RI = 0; //清除接收中断标志位
    }
    }`

本来应该好好讲下这个程序,小白不怎么会,下次注意。下面附上主程序
main.c

#include
#include "uart.h"
#include "wifi.h"
#include"1602.h"
/*****************************************************************************
							  MYS

*******************************************************************************/
extern unsigned char RecData[30];	  //中间变量
extern unsigned char RecTime[30];	   //中间变量
unsigned char time[6]={0};

int hour=0;
int i=0,j=6,m=0;
sbit  ESP8266_RST  = P3^2;
void main()
{
	lcd_system_reset();	//1602初始化
	Uart_Init();  //串口初始化
	ESP8266_RST = 0; //低电平复位,高电平工作
	Delay_ms(200);   //延时200ms
	ESP8266_RST = 1; //低电平复位,高电平工作
  ESP8266_Cmd_Init();//ESP8266初始化  
	Delay_ms(300);
Uart_Send_Data("GET http://api.k780.com:88/?app=life.time&appkey={APPKEY}&sign={SIGN}&format=json HTTP/1.0\r\n\r\n",sizeof("GET http://api.k780.com:88/?app=life.time&appkey={APPKEY}&sign={SIGN}&format=json HTTP/1.0\r\n\r\n"));//获取时间
Delay_ms(1000);

for(;i<6;i++,j++)
{
	time[i] = RecTime[j];
}
if(time[0]!='0')
{
	hour = (time[0]-'0')*10+time[1]-'0';
	hour+=8;
	if(hour >= 24)hour-=24;
	time[0] = hour/10+'0';
	time[1] = hour%10+'0';
}
else
{
	hour = time[1]-'0'+8;
	if(hour>=10)
	{
	    time[0] = hour/10+'0';
		time[1] = hour%10+'0';
	}
	else
	{
	time[1]=hour+'0';
	}
}

for(i=0;i<6;i++)
{			   
 lcd_char_write(i,0,time[i]);
} 
while(1);
}

好了,这是第一次写博客,不怎么会布局,先熟悉下,下次好好写。附上源码,好麻烦啊,不能直接上传
资源链接
如果有同学没有积分,加我QQ:1757334763,免费额。(但是如果有就不要吝啬,博主也不容易)

你可能感兴趣的:(51,wifi)