本帖最后由 林枫 于 2022-5-14 14:30 编辑
本项目完全自制,仅参考官方库的实例,所以对于硬件连接、外壳打印、软件开发完全了解。
本项目在整理相关内容,后续会完全开源,如想尝鲜或自行修改嵌入到其他项目中请留下邮箱,我会分享源码及用到的官方库源码。
本项目涉及以下内容:
1、项目思路
- 初始化:屏幕、气压计、Wi-Fi连接、时间服务器校准、实时天气、3天天气(无Wi-Fi或无法访问internet或硬件故障时可通过nodemcu flash按键跳过初始化直接进入显示页面)
- 页面显示:调用Adafruit_SSD1306.h库显示字母,调用Adafruit_GFX.绘制图形
- 翻页:已时间秒作为基准,设定间隔轮循页面(可通过nodemcu flash按键下一页)
- 天气:访问和风天气的https协议提供的API,返回json数据后解析温度、湿度、日升日落时间、做高最低气温(当前天气2min更新一次,3天天气10min更新一次,无Wi-Fi时自动跳过天气更新,无internet时10s超时跳过)
- 气压海拔:bmp280提供温度和气压,通过气压值经过海平面气压换算后得到当前位置海拔(此处海拔受气压影响会有差异)
- 打印日志:电脑串口打印运行日志,后续会增加sd卡日志存储
- 固件更新:支持Arduino IDE更新和web更新
2、硬件
- esp8266主芯片(nodemcu v1.0方案)
- oled屏幕(7针spi0.96寸)
- 气压计(BMP280四针i2c)
3、外壳
4、源码
- #include <Arduino.h>
- #include <time.h>
- #include <SPI.h>
- #include <Wire.h>
- #include <Adafruit_GFX.h>
- #include <Adafruit_SSD1306.h>
- #include <NTPClient.h>
- #include <WiFiUdp.h>
- #include <AceTime.h>
- using namespace ace_time;
- #include <Adafruit_BMP280.h>
- #include <WiFiClientSecure.h>
- #include <ArduinoJson.h>
- #include <WiFiClient.h>
- #include <ESP8266WebServer.h>
- #include <ESP8266mDNS.h>
- #include <ESP8266HTTPUpdateServer.h>
- #include <Math.h>
- #if defined(ESP8266)
- #include <ESP8266WiFi.h>
- #elif defined(ESP32)
- #include <WiFi.h>
- #endif
复制代码
- void setup() {
- Serial.begin(115200);
- Serial.println("/********************/");
- Serial.printf("BIN-Version: %s",Version);
- Serial.println("");
- OLED_setup();
- display.clearDisplay();
- oled_text_print("WIFI/SNTP/BMP setup..",0,4,1);
- display.display();
- WIFI_setup();
- SNTP_setup();
- BMP280_setup();
- WEB_setup();
- delay(2000);
- pinMode(0, INPUT_PULLUP);
- weather_setup();
- }
- void loop() {
- httpServer.handleClient();
- MDNS.update();
- time_t now = time(nullptr);
- print_Now_time(now+3600*h );
- page_switch();
- }
复制代码
源码将近900行,此处全贴上不方便阅读,如有需要请留下邮箱。
未完待续!
|