1 Star 1 Fork 1

goldhan / GDWeatherStation

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0
title: 教你用 ESP8266 / ESP32 做一个天气预报 GDWeatherStation
date: 2018-12-17 10:00:00
tags: 
    - ESP32
    - ESP8266 
    - 12864
    - Arduino
    - Weather
cover: /img/GDWeatherStation/UI_0.png

教你用 ESP8266 / ESP32 做一个天气预报 GDWeatherStation

点我ESP8266分支

大纲

  • 说明

    简介以及说明

  • 前期准备

    你需要准备什么?

  • 接口说明

    你需要准备的接口说明,以及申请工作

  • Python端

    Python端服务脚本说明

  • Arduino端

    Arduino端说明

  • UI说明

    关于UI设计

  • 后续

    进一步改进

说明

最终效果说明

通过ESP8266 / ESP32 连接WIFI访问网络获取天气,网络时间,自定义的信息,然后进行显示

需要了解的技术栈

  • Arduino
  • C
  • Python

流程说明

利用Python获取申请的api返回信息,进行整理,上传到中转的稳定的api接口,Arduino端再访问此中转的api接口,进行数据展示

前期准备

硬件准备

  • ESP8266 OR ESP32 模块

    注意 ESP8266 模块有差别,但是基本都是一样的,需要注意引脚定义

  • 12864 OLED 模块 i2c接口 OR SPI

    当然也可以使用SPI接口,只是需要更改 Arduino程序代码即可

  • 连接线若干
  • 可选 usb 下载器

    有些 ESP8266 没有自带 usb下载功能,需要自己买个usb下载器,进行程序烧录

本人ESP32开发板,使用的是 M5Stick core,自带电池,12864,很方便,如果使用其他的开发版,可能需要修改GDWifi里 U8G2_SH1107_64X128_1_4W_HW_SPI u8g2(U8G2_R1, 14,27,33);,不同的屏幕,驱动芯片不一样。

环境准备

  • Arduino IDE

    百度下,有下载

  • usb下载器驱动

    根据自己型号去驱动,多数店家会有提供,百度也能找到

  • Python3 环境

所需要的第三发库

Arduino IDE 需要的库

具体怎么去安装库,请自行百度,关键字:Arduino 添加库,Arduino 添加ESP8266支持Arduino 添加ESP32支持

#include <NTPClient.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <U8g2lib.h>
#include <WiFiUdp.h>

Python

接口说明

你需要申请

一个空的Git仓库

需要申请一个空Git仓库,随便那一家都可以,申请很简单,这里不做详细描述

和风天气API Key

和风天气API申请地址

申请很简单,这里不做详细描述,只需要申请免费的即可,一天有限制请求次数,不过已经足够,注意记住申请后的Key

Python端

服务器端——Python实现

为啥要写个这样的程序

  • 首先单片机性能有限,并且来来回回烧录程序比较麻烦,目前网上的接口对于单片机来讲数据量还是比较大的,解析会耗费很大的硬件资源,且接口不稳定。所以想自己组装一个自己能够把控的接口。
  • 自己组装接口可以只要自己想要的信息,使数据量变的小巧,适合单片机的解析,并且可以保证接口的稳定

目前已经实现的功能

  • 定时从网上的接口获取数据,解析成自己组装的接口并且上传到指定的git仓库上
  • 定时上传和天气数据
  • 定时上传糗事百科段子 (已删除此功能)
  • 定时push自己的自定义信息

使用

  • 程序有一个json文件,当第一次使用时需要配置自己的申请的一些接口,和key
  • userData.json 文件存放着所用的接口及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!" // 推送内容
}
  1. git clone https://github.com/goldhan/GDWeatherStation.git
  2. 修改 service 目录下的 userData.json 文件
  3. 终端 cd 到 Service 目录下
  4. python3 Main.py 即可

问题

已经删除关于糗事百科的功能,所以没有了中文的烦恼,不过自定义的推送内容依然不支持中文

  • 目前糗事百科接口都是中文,但是ESP8266 上的程序不支持中文(不知道有没有英语版的类似糗事百科的接口
  • 还是中文中文中文!
  • ESP32支持中文

注意

  • 当请求有问题时程序会停止,请注意。
  • 请严格的按照json文件里的格式进行填写,不要乱加多余的空格或者其他不必要的字符。
  • 注意定义推送消息不要多,因为屏幕显示区域有限
  • 因为对应的ESP8266 端的程序不支持中文,所以请用英语写推送消息。
  • ESP32支持中文显示,可以用中文写自定义的推送消息

Arduino端

ESP8266 源码,使用 Arduino 烧录到 ESP8266

Arduino 使用说明

注意所需要的库,上边有说明

GDWeatherStation.ino

#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 地址

url 地址是git里面可以直接访问json的地址,一般都是以 https://raw 为开头的地址

  • fingerprint

由于是https请求,所以请用浏览器访问上边的地址,打开调试工具选择“安全”即可看到对应请求的fingerprint,SHA1

UI说明

关于设计方面的说明

UI 展示

01 02 03

具体源文件 Sketch

12864 OLED

由于此模块网上有很多成熟的代码,所有选择12864显示模块,只需要显示简单的信息,已经足够。OLED的特性,所以显示效果还不错。

设计思路

简单,美观

显示模块所提供的可显示的区域其实不多,再加上单片机性能有限,所以尽量简单明了,只需要显示所需要的信息即可,但是本人大学艺术专业,所以还是要求自己在足够简单的同时,尽量美观!所以只运行了简单的圆角框即可,外加一点元素点缀即可。

卡片

由于显示的信息一个屏幕肯定不足够,所有设计成上下轮播的卡片展示。已足够显示,网络时间、今日天气、以及明日天气和少许的自定义信息。

后续

关于后续计划

不足

由于本人不会 C++ 所以一些 C++代码写的比较乱,甚至只能说是 C代码,Python 也是只会一点皮毛,所以写的也不好,不过还是可以用

计划

  1. 自己设计3D外壳(哈哈,还好我之前就是做三维的,3ds Max,VRay,对于我来讲都很熟练),然后利用3D打印出来
  2. 优化Wifi接入,利用 Airkiss

其他

反正都是瞎折腾

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

ESP8266,WeatherStation 展开 收起
C 等 3 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/goldhan/GDWeatherStation.git
git@gitee.com:goldhan/GDWeatherStation.git
goldhan
GDWeatherStation
GDWeatherStation
master

搜索帮助