weather-clock
概述
首先使NodeMCU模块连接WiFi,接入互联网;然后连接阿里的NTP服务器,获取网络授时,向心知天气服务器发送HTTP请求,对返回的天气信息进行解析,获得今天、明天、后天的天气信息;最后通过OLED屏幕显示获得的信息。
硬件
- NodeMCU(CH340)
- 0.96英寸I2C接口OLED显示屏(SSD1306)
软件
- Arduino IDE
- PCtoLCD2002 取模软件
设计
连接WiFi
NodeMCU连接WiFi方式有很多种:
-
使用ESP8266WiFi库,在程序中写入一个WiFi信息,并连接到该WiFi。
-
使用ESP8266WiFiMulti库,在程序中写入多个WiFi信息,并自动连接到信号最强的WiFi(本项目使用该方式)。
-
使用WiFiManager库,不需要在程序中写入WiFi信息。使用WiFiManager库,当NodeMCU上电时,会在闪存中读取曾经连接并被保存的WiFi信息,然后连接到WiFi。如果连接失败,NodeMCU会创建一个热点,用手机或电脑连接该热点,然后扫描附近的WiFi,选择WiFi后输入密码进行连接(类似于路由器的配置)。
实时时间获取
NTP服务
NTP(Network Time Protocol),网络时间协议,是用来使计算机时间同步化的一种协议。
NTPClient库
An NTPClient to connect to a time sever Get time from a NTP sever and keep it in sync.
使用NTPClient库连接NTP服务器获取网络时间并保持时间同步。
实例化NTPClient对象,选择服务器(阿里)、偏移量(时区)及更新间隔(单位为毫秒)
NTPClient timeClient(ntpUDP, "ntp.aliyun.com", 60 * 60 * 8, 30 * 60 * 1000);
获取时间
timeClient.update();
nowTime = timeClient.getFormattedTime();
天气信息获取
心知天气API
心知天气通过标准的RestfulAPI接口,提供标准化的数据访问。拥有许多丰富的功能,本项目仅使用了天气类中逐日天气预报和昨日天气这一个子类,由于是普通用户,该接口只能只返回 3 天天气预报。
请求地址示例
北京今天和未来 4 天的预报 https://api.seniverse.com/v3/weather/daily.json?key=your_api_key&location=beijing&language