自制8266桌面小摆件(时间、天气、温度、气压、海拔)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5059|回复: 18

自制8266桌面小摆件(时间、天气、温度、气压、海拔)

[复制链接]
发表于 2022-4-9 09:17 | 显示全部楼层 |阅读模式
本帖最后由 林枫 于 2022-5-14 14:30 编辑

图标.png


本项目完全自制,仅参考官方库的实例,所以对于硬件连接、外壳打印、软件开发完全了解。

本项目在整理相关内容,后续会完全开源,如想尝鲜或自行修改嵌入到其他项目中请留下邮箱,我会分享源码及用到的官方库源码。

本项目涉及以下内容:
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、外壳
  • 3d one软件设计
  • 3d打印机打印,pla材料


4、源码
  • 引用库

  1. #include <Arduino.h>
  2. #include <time.h>
  3. #include <SPI.h>
  4. #include <Wire.h>
  5. #include <Adafruit_GFX.h>
  6. #include <Adafruit_SSD1306.h>
  7. #include <NTPClient.h>
  8. #include <WiFiUdp.h>
  9. #include <AceTime.h>
  10. using namespace ace_time;
  11. #include <Adafruit_BMP280.h>
  12. #include <WiFiClientSecure.h>
  13. #include <ArduinoJson.h>
  14. #include <WiFiClient.h>
  15. #include <ESP8266WebServer.h>
  16. #include <ESP8266mDNS.h>
  17. #include <ESP8266HTTPUpdateServer.h>
  18. #include <Math.h>

  19. #if defined(ESP8266)
  20.   #include <ESP8266WiFi.h>
  21. #elif defined(ESP32)
  22.   #include <WiFi.h>
  23. #endif
复制代码
  • 初始化及主程序


  1. void setup() {  
  2.   Serial.begin(115200);
  3.   Serial.println("/********************/");
  4.   Serial.printf("BIN-Version: %s",Version);
  5.   Serial.println("");
  6.   OLED_setup();
  7.   display.clearDisplay();
  8.   oled_text_print("WIFI/SNTP/BMP setup..",0,4,1);
  9.   display.display();
  10.   WIFI_setup();
  11.   SNTP_setup();
  12.   BMP280_setup();
  13.   WEB_setup();
  14.   delay(2000);
  15.   pinMode(0, INPUT_PULLUP);
  16.   weather_setup();
  17. }

  18. void loop() {
  19.   httpServer.handleClient();
  20.   MDNS.update();
  21.   time_t now = time(nullptr);
  22.   print_Now_time(now+3600*h );
  23.   page_switch();
  24. }
复制代码


源码将近900行,此处全贴上不方便阅读,如有需要请留下邮箱。

未完待续!


 楼主| 发表于 2022-4-25 09:55 | 显示全部楼层
本帖最后由 林枫 于 2022-5-14 14:31 编辑

有问题可以在交流群沟通
群号:496429377
已发邮件列表:
sdry_001@126.com
871542@qq.com
137819301@qq.com
lucq879@163.com

lvjiaming888888@126.com
309184637@qq.com
lgj0088@126.com
2979534638@qq.com
发表于 2022-4-16 09:39 | 显示全部楼层
跟大佬学习一下,sdry_001@126.com,感谢!!!
 楼主| 发表于 2022-4-22 09:10 | 显示全部楼层
Arduino-008 发表于 2022-4-16 09:39
跟大佬学习一下,,感谢!!!

已发邮件
发表于 2022-4-24 21:03 | 显示全部楼层
学习一下,,感谢!!871542@qq.com
发表于 2022-4-24 21:53 | 显示全部楼层
不错啊!也发一个学习学习!137819301@qq.com
发表于 2022-4-25 06:35 | 显示全部楼层
学习学习 请发一下  lucq879@163.com
 楼主| 发表于 2022-4-25 09:43 | 显示全部楼层
谁是谁的谁 发表于 2022-4-24 21:03
学习一下,,感谢!!

已发邮件
发表于 2022-5-7 15:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:37 , Processed in 0.086405 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表