wyywang 发表于 2020-1-31 10:13:36

用ESP8266做一个基于ntp的时钟

**#ESP8266做一个吃汉堡的时钟:happy:**

//OLED--- ESP8266
//VCC   --- 3V(3.3V)
//GND   --- G (GND)
//SDA   --- D2(GPIO4)
//SCL   --- D1(GPIO5)

ESP8266 可以用:(复制的)(可以点击连接跳转到相应的github仓库?)

(https://github.com/espressif/ESP8266_RTOS_SDK)

(https://github.com/espressif/ESP8266_NONOS_SDK)

(http://micropython.org/)

(https://github.com/esp8266/Arduino)

(http://www.nodemcu.com/index_cn.html)√

(https://github.com/alibaba/AliOS-Things)

前期目标:sntp显示时间并嫖一个oled -ssd1306

- 实现连接WIFI

- 自动网页配网(github上找的 后续看看能不能实现认证成信大的认证

- 搭建http服务器(示例

- 搭建可以修改时区的http服务器(github,还可以在网页上面显示时间??

- 串口输出时间/时间戳 //时间戳算法是找的,或者不用easyntp 可以直接 出时间

- 1306显示时间通过ntp

- 1306显示时间通过本地https://blog.csdn.net/ling3ye/article/details/53028069

- 1306在一个**汉堡**上显示时间(clock)





## How NTP Works?

NTP can operate in a number of ways. The most common configuration is to **operate in client-server mode**. The basic working principle is as follows:

1. The client device such as ESP8266 connects to the server using the User Datagram Protocol (UDP) on port 123.
2. A client then transmits a request packet to a NTP server.
3. In response to this request the NTP server sends a time stamp packet.
4. A time stamp packet contains multiple information like UNIX timestamp, accuracy, delay or timezone.
5. A client can then parse out current date & time values.
6. !(https://lastminuteengineers.com/wp-content/uploads/arduino/NTP-Server-Working-Request-And-Timestamp-Packet-Transfer.png)



`初始化串口//`

`\#include<ESP8266WiFi.h> //wifi库`

`const char* ssid = "hape";//`wifi名字

`const char* password = "123456789";//`密码

`void setup() {` //设置

`//启动串口`

`Serial.begin(115200);//9600也可以 具体看板子`

`Serial.println();`

`Serial.println();`

`Serial.print("Connecting to");`

`Serial.println(ssid);`

`WiFi.begin(ssid,password);`//连接

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

`{`

`delay(500);`

`Serial.print(".");`//等待连接的串口输出 示例都这么写 我觉得没啥用

}

换//源程序 找到个NTPclient 可以直接出分秒 不用把unix时间戳转换了 https://tool.lu/timestamp/ 也有一个是https://wenku.baidu.com/view/7dbbeb9d82d049649b6648d7c1c708a1284a0a93.html

其实就是官方文档https://www.arduino.cc/en/Tutorial/UdpNTPClient

```c
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char *ssid   = "YOUR_SSID";
const char *password = "YOUR_PASS";

const long utcOffsetInSeconds = 3600;

char daysOfTheWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);


void loop() {
timeClient.update();

Serial.print(daysOfTheWeek);
Serial.print(", ");
Serial.print(timeClient.getHours());
Serial.print(":");
Serial.print(timeClient.getMinutes());
Serial.print(":");
Serial.println(timeClient.getSeconds());
//Serial.println(timeClient.getFormattedTime());

delay(1000);
}
```

从github上看到这段

联网思路:不断访问我的网页

mqtt和mqt先放这里:~~~

https://zhuanlan.zhihu.com/p/38241129

https://tonycode.top/2018/09/11/Arduino-Basics-18/#2-%E6%96%B0%E5%BB%BAsketch%EF%BC%8C%E6%8B%B7%E8%B4%9D%E5%A6%82%E4%B8%8B%E4%BB%A3%E7%A0%81%E6%9B%BF%E6%8D%A2%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E7%9A%84%E4%BB%A3%E7%A0%81%E5%B9%B6%E8%BF%9B%E8%A1%8C%E4%BF%9D%E5%AD%98%E3%80%82



目前思路:



实现代码:~~~

~~~c
void http ()
{
HTTPClient http;
http.begin(url);
int aa = http.GET();
int bb;
if (aa > 0)
{
    txt = http.getString();
    //Serial.println(txt);
    bb = txt.indexOf("set");
    //Serial.println("AAAAAAA");
    //Serial.println(bb);
    set = txt.substring(bb + 4, bb + 5);
    Serial.println("SSSSSSSSSSS");
    Serial.println(set);
    tm4 = txt.indexOf("time:");
    tm1 = txt.substring(tm4 + 5, tm4 + 7);
    tm2 = txt.substring(tm4 + 8, tm4 + 10);
    tm3 = txt.substring(tm4 + 11, tm4 + 13);
    //Serial.println("CCCCCCCC");
    //Serial.println(tm1);
    //Serial.println(tm2);
    //Serial.println(tm3);
    http.end();
    if (bb = "0" && (tma != tm1 || tmb != tm2 || tmc != tm3))
    {

      sec = tm3.toInt();
      mins = tm2.toInt();
      hs = tm1.toInt();
      tma = tm1, tmb = tm2, tmc = tm3;
      if (sec > 59 || sec < 0 || mins > 59 || mins < 0 || hs > 59 || hs < 0)
      {
      Serial.print("ERROR!!!!!!!");
      sec = mins = hs = 0;
      }
    }
}

}
~~~



总程序:~~~

~~~c
#include<ESP8266WiFi.h>
#include <EasyNTPClient.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <time.h>
#include <Ticker.h>
#include <ESP8266HTTPClient.h>
#define OLED_RESET LED_BUILTIN//4
String txt;
String set;
int yesno = 0;
Adafruit_SSD1306 display(OLED_RESET);
int sec = 0, mins = 0, hs = 0, tm4;
String tm1 = "0", tm2 = "0", tm3 = "0", tma = "a" , tmb = "a", tmc = "a";
Ticker test;
String url = "http://106.75.101.193:8044/hunan.xml";



void shijian (void)
{
sec++;
if (sec >= 60)
{
    mins++;
    sec = 0;
}
if (mins >= 60)
{
    hs++;
    mins = 0;
    hs = 0;
}


}
void http ()
{
HTTPClient http;
http.begin(url);
int aa = http.GET();
int bb;
if (aa > 0)
{
    txt = http.getString();
    //Serial.println(txt);
    bb = txt.indexOf("set");
    //Serial.println("AAAAAAA");
    //Serial.println(bb);
    set = txt.substring(bb + 4, bb + 5);
    Serial.println("SSSSSSSSSSS");
    Serial.println(set);
    tm4 = txt.indexOf("time:");
    tm1 = txt.substring(tm4 + 5, tm4 + 7);
    tm2 = txt.substring(tm4 + 8, tm4 + 10);
    tm3 = txt.substring(tm4 + 11, tm4 + 13);
    //Serial.println("CCCCCCCC");
    //Serial.println(tm1);
    //Serial.println(tm2);
    //Serial.println(tm3);
    http.end();
    if (bb = "0" && (tma != tm1 || tmb != tm2 || tmc != tm3))
    {

      sec = tm3.toInt();
      mins = tm2.toInt();
      hs = tm1.toInt();
      tma = tm1, tmb = tm2, tmc = tm3;
      if (sec > 59 || sec < 0 || mins > 59 || mins < 0 || hs > 59 || hs < 0)
      {
      Serial.print("ERROR!!!!!!!");
      sec = mins = hs = 0;
      }
    }
}

}

//WIFI参数
const char* ssid = "why";
const char* password = "12345678.";

int ceshi;
static const uint8_t PROGMEM photo_128x64[] = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x05, 0x80, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x0D, 0x80, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x0D, 0x80, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x1D, 0xC0, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x1D, 0xC0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3D, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3D, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3D, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x7D, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFD, 0xF8, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFD, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0xFD, 0xFE, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xFD, 0xFF, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xFD, 0xFF, 0xC3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0xF8, 0xFF, 0xC7, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0xF0, 0x7F, 0xF7, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0xFD, 0xC3, 0xFF, 0x7F, 0x71, 0x9C, 0xCF, 0xFB, 0xF3, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xE3, 0xFF, 0x7F, 0xFB, 0x9D, 0xEF, 0xFF, 0xFB, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0xE7, 0xFF, 0x7F, 0xFB, 0xFB, 0xFF, 0xFF, 0xFB, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x87, 0xFF, 0x7E, 0x7F, 0xFF, 0xFB, 0xF1, 0xC7, 0x1B, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x87, 0x7E, 0x7E, 0x7F, 0x9F, 0xF7, 0xF9, 0xCF, 0x1B, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0x7E, 0x7F, 0x7F, 0x9E, 0xF7, 0x3D, 0xC7, 0xFB, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xFF, 0x3C, 0x7F, 0xF7, 0xDE, 0xFE, 0x1F, 0xC7, 0xFB, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0x18, 0x7F, 0x71, 0xEC, 0x6E, 0x1F, 0xC3, 0xF3, 0x8E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp1.aliyun.com", 60 * 60 * 8, 30 * 60 * 1000); //时区设置 北京/上海/重启 是东八区

void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//根据型号 设置起始位置 定义I2C地址
display.setTextSize(1);//设置字体大小
display.setTextColor(WHITE);//颜色
display.clearDisplay();//清屏幕
display.display();//显示 //后面类似bios启动就是用这个特性 不清屏幕直接写
//启动串口
Serial.begin(115200);
Serial.println();
Serial.println();
Serial.print("Connecting to");
Serial.println();
Serial.println(ssid);
display.clearDisplay();   // clears the screen and buffer
display.drawBitmap(0, 0, photo_128x64, 128, 62, WHITE);
display.display();
delay(100);
display.setCursor(0, 0); display.println("Wifi connecting to "); display.println( ssid );
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
    delay(500);
    Serial.print(".");
    display.print(".");
    display.display();
}
display.clearDisplay();
Serial.println("");
Serial.println("连接成功");
Serial.print("IP address:");
Serial.println(WiFi.localIP());
display.println("IP address:");
display.setCursor(0, 0);
//display.println("");
display.print("IP address:");
display.println(WiFi.localIP());
delay(500);
test.attach(1, shijian);
}
//int value = 0;
void loop() {
http();
if (set == "1") {
    String formattedDate;
    String dayStamp;
    String timeStamp;
    display.clearDisplay();
    timeClient.update();
    Serial.println(timeClient.getFormattedDate());
    formattedDate = timeClient.getFormattedDate();
    Serial.println(formattedDate);
    int splitT = formattedDate.indexOf("T");
    dayStamp = formattedDate.substring(0, splitT);
    Serial.print("DATE: ");
    Serial.println(dayStamp);
    timeStamp = formattedDate.substring(splitT + 1, formattedDate.length() - 1);
    display.setTextSize(2);//设置字体大小
    display.setTextColor(WHITE);//颜色
    Serial.print("      TIME:");
    Serial.println(timeStamp);
    display.setCursor(0, 0);
    display.println("    TIME:");
    display.print("");
    display.println(timeStamp);
    display.print("    DATE: ");
    Serial.println("TTTTTTTTT");
    Serial.println(sec);
    Serial.println(mins);
    Serial.println(hs);



    //Serial.print("小时 ");
    //nian = timeClient.getYears())
    //Serial.print(timeClient.getHours());
    //Serial.print("分钟");
    //Serial.print(timeClient.getMinutes());
    //Serial.print("秒");
    //Serial.println(timeClient.getSeconds());
    //display.clearDisplay();

    display.print(dayStamp);

    //display.println("Wifi Connected!");
    // display.print("IP:");
    //display.println(WiFi.localIP() );



    //hours = timeClient.getMinutes();

    //Serial.print("小时 ");
    //Serial.print(hours);
    //display.printf("%02d",hours);
    delay(500);
    display.display();
    http();
}
if (set == "0")
{
    display.clearDisplay();
    display.setTextSize(2);//设置字体大小
    display.setTextColor(WHITE);//颜色 但是用不上 必须要设置?
    display.setCursor(0, 0);
    display.println("OFFLINE!!");
    display.println(hs);
    display.println(mins);
    display.println(sec);
    display.display();

    delay(500);
    http();

}

}
~~~

用到的学习资料:

~~~
https://www.geek-workshop.com/thread-29009-1-1.html

https://www.bilibili.com/video/av68556349/

https://www.bilibili.com/video/av74315332?from=search&seid=708733912967415754
hatsune 2019-12-15 16:47:54
https://zhuanlan.zhihu.com/p/56727359
re-鬼笔(LongLone小弟) 2019-12-15 22:54:29
https://blog.csdn.net/m0_37738838/article/details/84862222
hatsune 2019-12-16 13:20:28
https://blog.csdn.net/m0_37738838/article/details/84862222
hatsune 2019-12-16 13:49:29
https://www.cnblogs.com/kekeoutlook/p/10812719.html
hatsune 2019-12-16 14:44:30
https://blog.csdn.net/ling3ye/article/details/53028069
hatsune 2019-12-16 22:02:55
https://blog.csdn.net/u013810296/article/details/54910968
hatsune 2019-12-16 22:28:59
https://www.cnblogs.com/danpianjicainiao/p/11048734.html#_label1_0_0
hatsune 2019-12-17 17:09:21
https://blog.csdn.net/qq_42860728/article/details/84310160
re-鬼笔(LongLone小弟) 2019-12-17 19:07:44
https://www.cnblogs.com/danpianjicainiao/p/11048624.html
hatsune 2019-12-17 21:14:31
链接:https://pan.baidu.com/s/1rolwnTs8AhkveFDUKQTzEw
提取码:1hmw
[呲牙]
hatsune 2019-12-18 11:05:30
https://blog.csdn.net/hhy_csdn/article/details/84327755
hatsune 2019-12-18 11:06:13
https://blog.csdn.net/g1fdgfgdf2_/article/details/78801454
hatsune 2019-12-18 11:15:14
https://randomnerdtutorials.com/esp8266-web-server/
hatsune 2019-12-18 12:08:06
https://blog.csdn.net/zxk_hi/article/details/81092781
hatsune 2019-12-18 13:36:02
https://blog.csdn.net/lgj123xj/article/details/78626160
hatsune 2019-12-18 16:42:08
https://tonycode.top/2018/09/11/Arduino-Basics-18/#2-%E6%96%B0%E5%BB%BAsketch%EF%BC%8C%E6%8B%B7%E8%B4%9D%E5%A6%82%E4%B8%8B%E4%BB%A3%E7%A0%81%E6%9B%BF%E6%8D%A2%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E7%9A%84%E4%BB%A3%E7%A0%81%E5%B9%B6%E8%BF%9B%E8%A1%8C%E4%BF%9D%E5%AD%98%E3%80%82
hatsune 2019-12-18 16:44:55
https://zhuanlan.zhihu.com/p/38241129
hatsune 2019-12-18 17:56:43
https://www.cnblogs.com/annie-fun/p/6369872.html
hatsune 2019-12-18 21:24:16
https://blog.csdn.net/ki1381/article/details/88625039
hatsune 2019-12-18 22:05:55
https://www.myoschain.com/blog/137727638625058816

https://www.sohu.com/a/338835037_354899
hatsune 2019-12-19 17:50:36
https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md
~~~


页: [1]
查看完整版本: 用ESP8266做一个基于ntp的时钟