用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]