231浏览
查看: 231|回复: 2

[ESP8266/ESP32] [数智出行/智能家居]基于arduino框架的esp8266天气时钟

[复制链接]
回帖奖励 3 创造力 回复本帖可获得 3 创造力奖励! 每人限 1 次
本帖最后由 ljs硬件小6 于 2024-10-4 16:16 编辑

       前几天想做一个骑行助手,但是我们在骑车时不能掏出手表或手机查看时间和天气,所以骑行多久根本不知道,且可能被突如其来的雨淋成“落汤鸡”。为了更低成本地解决问题,我准备做一个天气时钟,装到自行车上。

1.材料准备(以下图片资源来自百度图片https://image.baidu.com):
   1.1 硬件材料
   1.1.1 esp826601s模块(esp01s):
   [数智出行/智能家居]基于arduino框架的esp8266天气时钟图1
   1.1.2 esp01s烧写器(带引脚引出):
   [数智出行/智能家居]基于arduino框架的esp8266天气时钟图2
   1.1.3 oled显示屏ssd1306驱动i2c接口128x64
   [数智出行/智能家居]基于arduino框架的esp8266天气时钟图3
   1.1.4 杜邦线母对母x4(无图)
   1.2 软件材料
   1.2.1 ArduinoIDE_v1.8.19->点击下载压缩包
   1.2.2 库文件
   1.2.2.1 U8g2lib显示屏库:点击下载arduino安装包(github源)
   1.2.2.2 NTPClient网络时间库:点击下载arduino安装包(github源,下载可能较慢)
   1.2.2.3 ArduinoJson数据处理库:点击下载arduino安装包(github源)
   1.2.2.4 ESP8266_Seniverse心知天气信息读取库:点击下载arduino安装包(github源,下载可能缓慢)

2.功能:
   2.1 从天气信息中的最后更新时间中读取日期显示在oled(NTPClient无法读取日期)
   2.2 从NTPClient中读取格式化时间显示在oled(时:分:秒)(24小时制)
   2.3 从NTPClient中读取星期显示在oled(0-6,0代表星期日)
   2.4 从天气和天气预报信息中读取当前温湿度显示在oled(摄氏度℃)
3.代码
  1. #include<ESP8266_Seniverse.h>
  2. #include<ESP8266WiFi.h>
  3. #include<NTPClient.h>
  4. #include<U8g2lib.h>
  5. #include<WiFiUdp.h>
  6. String weather;
  7. String date;
  8. int tmp,hum;
  9. U8G2_SSD1306_128X64_NONAME_F_HW_I2C oled(U8G2_R0,U8X8_PIN_NONE,0,2);//初始化oled
  10. WiFiUDP udp;
  11. NTPClient ntp(udp,"pool.ntp.org",28800,60000);
  12. WeatherNow wther;
  13. Forecast fore;//初始化时间、天气信息读取对象
  14. String myGetday(){//把0-7的数字星期信息转换成文本
  15.   int wk=ntp.getDay();
  16.   String week[]={"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."};//星期缩写文本列表
  17.   return week[wk];
  18. }
  19. void setup(){
  20.   Serial.begin(115200);
  21.   WiFi.begin("Your ssid","Your pswd");
  22.   while(WiFi.status()!=WL_CONNECTED)delay(1);//连接WiFi
  23.   oled.begin();
  24.   oled.enableUTF8Print();
  25.   oled.setFont(u8g2_font_unifont_t_chinese2);//初始化oled字体
  26.   oled.setFontDirection(0);//初始化oled文字方向
  27.   ntp.begin();
  28.   wther.config("Your Seniverse key","hangzhou","c");
  29.   fore.config("Your Seniverse key","hangzhou","c");//初始化时间、天气信息读取类
  30. }
  31. void loop(){
  32.   Serial.println("Sending");//串口输出,可用于确保工作正常
  33.   ntp.update();
  34.   wther.update();
  35.   fore.update();//更新信息
  36.   weather=wther.getWeatherText();
  37.   tmp=wther.getDegree();
  38.   hum=fore.getHumidity(0);
  39.   date=fore.getLastUpdate().substring(0,10);//读取信息
  40.   oled.clearBuffer();
  41.   oled.drawFrame(0,1,127,15);
  42.   oled.drawFrame(0,16,127,48);
  43.   oled.drawLine(85,0,85,15);//画出边框
  44.   oled.setCursor(87,14);
  45.   oled.print(myGetday());//打印星期
  46.   oled.setCursor(30,30);
  47.   oled.print(ntp.getFormattedTime());//打印时间
  48.   oled.setCursor(30,43);
  49.   oled.print(weather);//打印天气
  50.   oled.setCursor(30,56);
  51.   oled.print(String(tmp)+"DG"+String(hum)+"%RH");//打印当前城市室外温湿度(℃)
  52.   oled.setCursor(3,13);
  53.   oled.print(date);//打印日期
  54.   oled.sendBuffer();//输送缓存给oled
  55.   delay(900);//延时<1秒,防止刷新频率过快
  56. }
复制代码
4.成品展示(拍摄时间:2024.10.4)
[数智出行/智能家居]基于arduino框架的esp8266天气时钟图4










[数智出行/智能家居]基于arduino框架的esp8266天气时钟图5





刘骏森  初级技师
 楼主|

发表于 2024-10-4 08:07:13

欢迎大家在评论区讨论
回复

使用道具 举报

罗罗罗  中级技师

发表于 2024-10-10 22:39:45

666
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail