ESP8266, ESP32, WeatherStation
title: 教你用 ESP8266 / ESP32 做一个天气预报 GDWeatherStation
date: 2018-12-17 10:00:00
tags:
- ESP32
- ESP8266
- 12864
- Arduino
- Weather
说明
简介以及说明
前期准备
你需要准备什么?
接口说明
你需要准备的接口说明,以及申请工作
Python端
Python端服务脚本说明
Arduino端
Arduino端说明
UI说明
关于UI设计
后续
进一步改进
通过ESP8266 / ESP32 连接WIFI访问网络获取天气,网络时间,自定义的信息,然后进行显示
利用Python获取申请的api返回信息,进行整理,上传到中转的稳定的api接口,Arduino端再访问此中转的api接口,进行数据展示
注意 ESP8266 模块有差别,但是基本都是一样的,需要注意引脚定义
当然也可以使用SPI接口,只是需要更改 Arduino程序代码即可
有些 ESP8266 没有自带 usb下载功能,需要自己买个usb下载器,进行程序烧录
本人ESP32开发板,使用的是 M5Stick core,自带电池,12864,很方便,如果使用其他的开发版,可能需要修改GDWifi里
U8G2_SH1107_64X128_1_4W_HW_SPI u8g2(U8G2_R1, 14,27,33);
,不同的屏幕,驱动芯片不一样。
百度下,有下载
根据自己型号去驱动,多数店家会有提供,百度也能找到
具体怎么去安装库,请自行百度,关键字:Arduino 添加库,Arduino 添加ESP8266支持、Arduino 添加ESP32支持
#include <NTPClient.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <U8g2lib.h>
#include <WiFiUdp.h>
无
需要申请一个空Git仓库,随便那一家都可以,申请很简单,这里不做详细描述
申请很简单,这里不做详细描述,只需要申请免费的即可,一天有限制请求次数,不过已经足够,注意记住申请后的Key
{
"city": "shenzhen", // 城市拼音
"heWeatherKey": "xxxxxx", // 和风天气Key
"qiuShiAPI": "http://m2.qiushibaike.com/article/list/text?count=5&page=1",
"gitUrl": "https://xxxxxxx.git", // 所申请的 Git 仓库地址
"title": "about me", // 推送标题
"detail": "qq:xxxxxx have a good Day! This is my first push!" // 推送内容
}
git clone https://github.com/goldhan/GDWeatherStation.git
python3 Main.py
即可已经删除关于糗事百科的功能,所以没有了中文的烦恼,不过自定义的推送内容依然不支持中文
ESP8266 源码,使用 Arduino 烧录到 ESP8266
注意所需要的库,上边有说明
#include "GDDraw.h"
void setup()
{
char ssid[] = "xxx"; // wifi ssid
char password[] = "xxx"; // wifi password
char url[] = "https://raw.githubusercontent.com/goldhan/MockJSON/master/GDWeather.json"; // git url
// SHA1 fingerprint of the certificate
//把你需要调用的请求地址用浏览器访问,然后打开调试工具选择“安全”即可看到对应请求的fingerprint,复制到这个地方即可
char fingerprint[] = "CC AA 48 48 66 46 0E 91 53 2C 9C 7C 23 2A B1 74 4D 29 9D 33";
Serial.begin(115200);
u8g2Begin();
GDWifiBegin(ssid, password, fingerprint, url);
// theFirst();
}
void loop()
{
// SHA1 fingerprint of the certificate
//把你需要调用的请求地址用浏览器访问,然后打开调试工具选择“安全”即可看到对应请求的fingerprint,复制到这个地方即可
char fingerprint[] = "CC AA 48 48 66 46 0E 91 53 2C 9C 7C 23 2A B1 74 4D 29 9D 33";
char url[] = "https://raw.githubusercontent.com/goldhan/MockJSON/master/GDWeather.json"; // git url
GDStart(fingerprint, url);
}
请按照注释去填写对应的值
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/D6, /* data=*/D5, /* reset=*/U8X8_PIN_NONE);
代码已经很明确了,请对应接线即可,也可以按照自己的喜好去换引脚端口,OLED屏幕支持 i2c, SPI,本代码用的是 i2c协议,可以按照自己的需求去更改下代码即可,具体不懂可以百度,关键字:U8G2 spi,
类似:U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0,/* clock=*/4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);
url 地址是git里面可以直接访问json的地址,一般都是以 https://raw
为开头的地址
由于是https请求,所以请用浏览器访问上边的地址,打开调试工具选择“安全”即可看到对应请求的fingerprint,SHA1
关于设计方面的说明
具体源文件 Sketch
由于此模块网上有很多成熟的代码,所有选择12864显示模块,只需要显示简单的信息,已经足够。OLED的特性,所以显示效果还不错。
显示模块所提供的可显示的区域其实不多,再加上单片机性能有限,所以尽量简单明了,只需要显示所需要的信息即可,但是本人大学艺术专业,所以还是要求自己在足够简单的同时,尽量美观!所以只运行了简单的圆角框即可,外加一点元素点缀即可。
由于显示的信息一个屏幕肯定不足够,所有设计成上下轮播的卡片展示。已足够显示,网络时间、今日天气、以及明日天气和少许的自定义信息。