esp8266获取网络时间

       esp8266获取网络时间

我们使用的手机都有 “使用网络上的时间,自动调整日期和时间” 的功能。如果我们自己做的电子时钟也有自动调整时间的功能,那就很方便,而且不怕时间不准了。
我们先来看一个提供网络时间的网站,在浏览器输入“http://quan.suning.com/getSysTime.do”,网页上回出现一个日期和时间,这个是苏宁网站提供的网络授时。
esp8266获取网络时间_第1张图片
现在我们就来利用这个网页提供的网络时间,让自己的开发板也能自动调整时间。
准备器材:一块WeMos D1的WiFi模块,一块I2C接口的1602液晶屏。
准备软件:Arduino IDE
esp8266获取网络时间_第2张图片
这个模块就是WeMos D1模块,里面有一个esp8266的WiFi模块,而且和Arduino兼容,可以用Arduino那样编程控制,有Arduino那样的端口控制。
一. 编写程序,获取网络时间
我们要用Arduino IDE来编写ESP8266程序,就要先搭建ESP8266的编程环境,网上这些资料很多,我就不多说了,直接上程序源码吧:

#include 

#include 


//在这里输入你家的WiFi名字和密码
const char* ssid     = "wifissid"; 

const char* password = "wifipsw";   



HTTPClient http;

String GetUrl;

String response;



void setup() {

  // 连接到你家的WiFi

  delay(3000);

  Serial.begin(115200);



  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password);



  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }



  Serial.println("");

  Serial.println("WiFi connected");

  Serial.println("IP address: ");

  Serial.println(WiFi.localIP());



  // 连接苏宁网站的授时网页

  GetUrl = "http://quan.suning.com/getSysTime.do";

  http.setTimeout(5000);

  http.begin(GetUrl);



}



void loop() {

  // 从网站获得网页内容

  int httpCode = http.GET();

  if (httpCode > 0) {

      Serial.printf("[HTTP] GET... code: %d\n", httpCode);

      if (httpCode == HTTP_CODE_OK) {

        //读取响应内容

        response = http.getString();

        Serial.println(response);

      }

  } else {

      Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());

  }

  http.end();

  delay(3000);

}


在Arduino IDE中编译程序,并把程序烧写到WeMos开发板中,就可以在串口中看到和网页内容一样的日期和时间信息了。
esp8266获取网络时间_第3张图片

二. 1602液晶屏显示
我们选择的1602是带I2C接口的,也就是普通的1602下面插上一块转接板,然后用四条线连接开发板。
VCC和GND连接开发板上面的5V电源,SCL连接D3,SDK连接D4。
接下来我们重新修改上面的程序,加入1602的显示控制。
esp8266获取网络时间_第4张图片

#include 
#include 
#include 
#include 
#include 

const char* ssid     = "ChinaNet-xxVP"; 
const char* password = "123456789";   

HTTPClient http;
LiquidCrystal_I2C lcd(0x20, 16, 2);

void setup() {
  // put your setup code here, to run once:
  delay(3000);
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("load time");
  
  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  String GetUrl = "http://quan.suning.com/getSysTime.do";
  http.setTimeout(5000);
  http.begin(GetUrl);

}

void loop() {
  int httpCode = http.GET();
  if (httpCode > 0) {
      Serial.printf("[HTTP] GET... code: %d\n", httpCode);
      if (httpCode == HTTP_CODE_OK) {
        //读取响应内容
        String response = http.getString();
        Serial.println(response);

        //在1602上面显示日期和时间
        lcd.setCursor(0, 0);
        lcd.print(response.substring(13, 23));
        lcd.setCursor(0, 1);
        lcd.print(response.substring(24, 32));
        
      }
  } else {
      Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
  }
  http.end();
  delay(3000);
}

你可能感兴趣的:(esp8266获取网络时间)