桌面天气显示站

2020-05-264819
AI 快速预览详细 收起
本教程介绍如何使用ESP32、SHT35传感器和1.54寸LCD制作一个桌面天气显示站。首先,准备材料包括ESP32、SHT35传感器、1.54寸LCD以及一些线材和泡沫板。硬件连接方面,将屏幕的SPI连接到ESP32上的SPI,SHT-35的IIC连接到ESP32上的IIC。软件部分涉及向中国天气网请求数据并进行JSON解码,以显示天气信息。最后,制作一个美观的外壳来包裹整个装置。这个项目不仅美观实用,还能实时显示室内外温湿度及天气信息,非常适合桌面美化和智能家居应用。


每当从繁忙的工作中停下来小小的休息一会的时候;总会觉得自己的桌面是不是太枯燥无味;于是自己就想添加一些美观的配件,让自己的左面美观。今天就教大家做一个桌面天气显示站。


制作思路:
   用一个ESP32获取网络的天气和时间;再用一个SHT35传感器来收集室内的温湿度;最后将所有的数据显示在屏幕。最后在做一个好看的外壳。


准备材料:

1.ESP32
桌面天气显示站图1

2.SHT-35
桌面天气显示站图2

3.1.54" 240x240 LCD

4.线材若干

5.泡沫板一张,黑色包装纸一张


硬件原理图
这个应用只有三个主要的硬件,只需要把屏幕SPI连接到ESP32上的SPI,SHT-35的IIC连接到ESP32上的IIC即可;下面就是其原理图:
桌面天气显示站图3


软件代码的书写

代码部分相对来说比较麻烦,该应用是向中国天气网请求数据,然后得到返回的数据;由于返回的是一个Json的数据包的格式,所以需要对其进行
一次数据解码,才能正常的调用其数据。我会把所有用到的软件库放在文章末尾,提供给大家使用。

外形的制作:
用泡沫板做一个小盒子,将其包裹起来。
正面(1.54" 显示屏)
桌面天气显示站图4
侧面(microUSB口)
桌面天气显示站图5
背面(有一个SHT-35)
桌面天气显示站图6



最后的演示效果:
桌面天气显示站图7


ino代码:
[mw_shl_code=c,false]#include "mPython_Weather.h"
#include "DFRobot_SHT3x.h"
#include "DFRobot_GDL.h"


/*M0*/
#if defined Arduino_SAM_ZERO
#define TFT_DC  7
#define TFT_CS  5
#define TFT_RST 6
/*ESP32 and ESP8266*/
#elif defined(ESP32) || defined(ESP8266)
#define TFT_DC  D3
#define TFT_CS  D4
#define TFT_RST D5
/*AVR Series Board*/
#else
#define TFT_DC  2
#define TFT_CS  3
#define TFT_RST 4
#endif

//填写WiFi名称和密码
const char* ssid="xxxxx";
const char* password="hxxxxxx";

mPython_Weather myweather;
DFRobot_SHT3x sht3x;
DFRobot_ST7789_240x240_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);

void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
delay(10);
while (sht3x.begin() != 0) {
    Serial.println("Failed to initialize the chip, please confirm the chip connection");
    delay(1000);
  }
screen.begin();


Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid,password);
while(WiFi.status() != WL_CONNECTED){
  delay(500);
  Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

Serial.println(myweather.connectServer());


}

void loop() {
  screen.setTextSize(3);
  screen.fillScreen(COLOR_RGB565_BLACK);
  screen.setFont(&STHUPOFont36pt);
  delay(500);
  
  screen.setCursor(0,20);
  screen.setTextColor(COLOR_RGB565_GREEN);
  screen.setTextWrap(true);
  screen.print(myweather.getWeather("cityname","101270101"));
  delay(500);

  screen.setCursor(90,20);
  screen.setTextColor(COLOR_RGB565_GREEN);
  screen.setTextWrap(true);
  screen.print(myweather.getWeather("weather","101270101"));
  delay(500);

  screen.setFont(&STHUPOFont24pt);
  screen.setCursor(60,60);
  screen.setTextColor(COLOR_RGB565_BLUE);
  screen.setTextWrap(true);
  screen.print(myweather.getWeather("temperaturLow","101270101"));
  delay(500);

  screen.setCursor(110,70);
  screen.setTextColor(COLOR_RGB565_BLUE);
  screen.setTextWrap(true);
  screen.print("~");
  delay(500);
  
  screen.setCursor(130,60);
  screen.setTextColor(COLOR_RGB565_BLUE);
  screen.setTextWrap(true);
  screen.print(myweather.getWeather("temperaturHigh","101270101"));
  delay(500);

  screen.setCursor(85,90);
  screen.setTextColor(COLOR_RGB565_RED);
  screen.setTextWrap(true);
  screen.print(myweather.getWeather("time","101270101"));
  delay(500);

  screen.setCursor(0,140);
  screen.setTextColor(COLOR_RGB565_RED);
  screen.setTextWrap(true);
  screen.print("室内温度:");
  delay(500);
  
  screen.setCursor(140,140);
  screen.setTextColor(COLOR_RGB565_RED);
  screen.setTextWrap(true);
  screen.print(sht3x.getTemperatureC());
  delay(500);

  screen.setCursor(0,180);
  screen.setTextColor(COLOR_RGB565_RED);
  screen.setTextWrap(true);
  screen.print("室内湿度:");
  delay(500);

  screen.setCursor(140,180);
  screen.setTextColor(COLOR_RGB565_RED);
  screen.setTextWrap(true);
  screen.print(sht3x.getHumidityRH());
  delay(3000 );

}[/mw_shl_code]



下载附件Weather.zip
下载附件DFRobot_CHfont.zip

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
铁熊
铁熊
这款彩屏还没上市吧?
小LZY
小LZY
作者
回复铁熊
对的;快上市了
- 没有更多了 -