使用 ESP32 进行 DIY 气象站

崧峻
转载
发布时间: 2025-06-14 14:51:33 | 阅读数 0收藏数 0评论数 0
封面
大家好!今天我们将介绍我建造的这个智能气象站。我建造的气象站可以测量温度、湿度、气压、风速和风向以及降雨量。所有数据均由 ESP32(一种 Arduino)收集,并通过 wifi 发送到移动应用程序。在应用程序或网页上,我们可以看到来自气象站的实时数据和图表,例如温度、每天的最低值和最高值等等.

准备工作:

材料:

  1. 带外部 WiFi 天线的 ESP32 开发板
  2. 微型 USB 电缆
  3. 电子产品塑料盒
  4. DHT22温湿度传感器
  5. BMP180压力传感器
  6. 各种电线电缆
  7. 3D打印机白色灯丝
  8. 5v 至 3,3v 电平转换器
  9. 6 个霍尔效应传感器
  10. 穿孔板
  11. M4 和 M5 螺纹杆
  12. M4 和 M5 螺栓和螺母

工具:

  1. 3D 打印机
  2. 烙铁
  3. 钻头
  4. 热胶
  5. 电脑
1

温度传感器

为了测量温度和湿度,我将使用 DHT22 传感器。我将传感器焊接到穿孔板上,并在 3.3v 和信号引脚之间使用连接器和上拉电阻。我将传感器放在 Stevenson 屏幕内。Stevenson 屏幕可保护传感器免受阳光直射和雨水的侵袭,同时允许空气通过。通过避免阳光加热传感器,可以获得更准确的温度读数。为了构建它,我 3D 打印了所有部件,并用两个螺纹杆将它们连接在一起。我将穿孔板和传感器粘在 Stevenson 屏幕内,并在下方放置了用于支撑传感器的支架。

在这里您可以找到史蒂文森屏幕的所有 3D 可打印文件

STL
Stevenson+Screen+3.stl
84.65KB
STL
Stevenson+Screen+3+(1).stl
105.26KB
STL
Stevenson+Screen+3+(2).stl
106.72KB
2

风向标

然后我们有风向标,它可以检测风从哪个方向吹来。为此,我还必须用 3D 打印机制作一些零件。风向标的背面有一个箭头形的部分,前面有一个尖端,里面有一个螺栓作为平衡的重物。旗帜可以通过我放在底座中的滚珠轴承自由旋转。为了检测风吹来的 4 个基本点(北、东、南、西),我将使用 4 个霍尔效应传感器,它们是当磁铁靠近时激活的磁传感器。

我的想法是像第二张照片中所示那样放置霍尔传感器,磁铁旋转并激活旗帜转向的基点的传感器。对于中间点,例如东北,将激活两个相应的传感器(北和东)。我已将磁性传感器放置在风向标的底座上,升高约 1 厘米,以使它们远离可能吸引磁铁的金属螺栓。在可自由旋转的上部,我粘上了磁铁。这件作品还具有保护传感器免受雨淋的功能。我将实际的风向标插入螺纹杆上,并用自锁螺母固定。霍尔传感器各有 3 根电线,它们通过小 LED 连接到其原始电路板,这对于查看传感器是否正常工作很有用。我将四块板焊接到穿孔板上。从那里我使用旧网线将 gnd 和 5v 连接到传感器,并将四个信号引脚连接到主板,我们稍后会看到。我把四个传感器板放在这个 3D 打印盒子里,上面有一块丙烯酸。

在这里您可以找到所有可打印的 3D 文件。

STL
Wind+vane+(1).stl
56.43KB
STL
Wind+vane+(3).stl
40.90KB
STL
Wind+vane+(2).stl
47.05KB
STL
Wind+vane+(4).stl
146.27KB
STL
Wind+vane.stl
109.75KB
3

风速计

现在来看看风速计。​​我去年已经在视频中谈到了这一点,你可以在这里找到。我还用 3D 打印机制作了风速计,下面你可以找到 STL 文件。风速计由底座和旋转部分组成。对于旋转部分,杯子和中心件是单独打印的,并用 3 个螺钉组装。风速计内部的底座上有一个磁霍尔传感器,旋转部分上有一个磁铁。传感器每转一圈就会发出一个脉冲。根据每分钟转数,我们可以计算出风速,但目前我不知道要将每分钟转数乘以多少才能得到 km/h。如果有人知道如何计算,请在下面的评论中写下这些计算结果。根据我在网上找到的信息,一个粗略的(可能错误的)估计是将 rpm 乘以 0.18。

STL
Base.stl
64.34KB
STL
Cup.stl
66.98KB
STL
Center+piece.stl
77.04KB
4

雨量计

最后,还有雨量计。我在之前的 Instructable中展示了这个,所以你可以在那里找到所有细节,包括 3D 可打印文件。然而,这也使用磁传感器,传感器状态的每次变化意味着一定量的水已经通过。雨量以毫米高度为单位进行测量。

5

铝框架

为了便于最终安装气象站,我将把各种传感器放在一个结构上。为此,我使用了一个矩形铝型材。我在中心固定了雨量计,在两侧放置了风速计和风向标。为了支撑所有东西,我又切了两块铝型材。在其中一侧,我打了一个大洞,这样我就可以固定它们,而不用让螺栓从下面伸出来。将所有东西用螺栓固定在一起后,结果就是这样。此步骤是可选的,因为如果您愿意,您可以将单个传感器安装在您已有的结构上,例如屋顶的一侧。

6

电子设备和压力传感器

但现在我们有了所有电子设备,它们将放在这个接线盒中。为了使连接更容易,我买了这块电路板,它在端子上带有 ESP32 引脚。我不知道为什么,但我的 ESP32 不适合这块电路板。所以我不得不用穿孔板制作适配器来移动引脚。我把 ESP32 拧进盒子里,在下面我放了用于 WiFi 连接的天线。

我几乎忘记了大气压力传感器,也就是 BMP180。我把它放在盒子里,为了让空气通过,我在底部做了这个网格。该传感器通过 i2c 通信,因此除了 3.3v 和 GND 之外,它还需要两根电线连接到 ESP32。

现在,我们将所有其他传感器连同它们的电线都连接在这里。温度传感器只有一根信号线,它直接连接到 ESP32 的引脚。问题在于风速计、雨量计和风向标的霍尔传感器,它们的工作电压为 5v,而 ESP32 的工作电压为 3.3v。因此,为了将信号从 5v 转换为 3.3v,我将使用一些电平转换器,例如这些。为了让一切更整洁,我将它们焊接到穿孔板上。为了在电路板和 ESP32 之间建立连接,我使用了 JST 连接器,它比传统跳线更牢固。最后,我将 gnd、5v 和 3.3v 的电线连接在一起,并用电缆扎带整理好电线。

上面您可以找到传感器所有电气连接的示意图。

7

家庭助理

气象站将连接到 Home Assistant,这是一种本地服务器,用于控制我们家中的各种家庭自动化设备。Home Assistant 可以在 Raspberry Pi 或虚拟机上的计算机上运行,​​就像我一样。要将气象站连接到 Home Assistant,我将使用 ESPhome,它允许您将 ESP32 连接到 Home Assistant。设置好一切后,我可以从网页或应用程序实时查看气象站数据。此外,数据会被记录下来,我还可以看到长期趋势的图表。

步步:

  1. 如果你还没有安装 Home Assistant,请先在 Raspberry 或带有虚拟机的计算机上安装(网上有很多针对不同系统的教程)
  2. 从官方附加组件商店安装 ESPhome
  3. 在 ESPhome 中添加新设备并选择 ESP32
  4. 在 ESPhome 代码空间中,将以下代码粘贴到ESPhome 提供的代码后面,并在需要的地方插入 wifi ssid 和密码
i2c:  sda: 21  scl: 22  scan: true  id: bus_asensor:  - platform: dht    pin: 4    temperature:      name: "Temperatura esterna"    humidity:      name: "Umidità esterna"    update_interval: 10s          - platform: pulse_counter    pin: 23    count_mode:      rising_edge: INCREMENT      falling_edge: INCREMENT    unit_of_measurement: 'mm'    name: 'Pioggia istantanea'    filters:      - multiply: 0.173    total:      unit_of_measurement: 'mm'      name: 'Pioggia'      accuracy_decimals: 3      filters:        - multiply: 0.173    update_interval: 5s            - platform: bmp085    temperature:      name: "Temperatura centralina"    pressure:      name: "Pressione esterna"    update_interval: 10s           - platform: pulse_counter    pin: 19    unit_of_measurement: 'Km/h'    name: 'Velocità del vento'    filters:      - multiply: 0.18    update_interval: 5s                 - platform: uptime    name: Uptime   binary_sensor:  - platform: gpio    pin: 33    name: "Vento direzione NORD"      - platform: gpio    pin: 25    name: "Vento direzione OVEST"      - platform: gpio    pin: 26    name: "Vento direzione SUD"      - platform: gpio    pin: 27    name: "Vento direzione EST"


  1. Click install and on plug into computer, and connect the ESP32 to the computer with the micro usb cable
  2. Follow the instructions on screen to install the code on the ESP32


8

风向标配置

风向标分别以二进制传感器(开或关)的形式给出四个传感器的状态。要将这四个值转换为更易于阅读的格式(例如西南),我们必须在 Home Assistant 中创建一个自定义传感器。有一些代码,但非常简单。

  1. 要创建自定义传感器,我们必须编辑configuration.yaml文件
  2. 为此,我们需要安装文件编辑器插件或类似的东西
  3. 将以下代码粘贴到传感器下:
sensor:- platform: template  sensors:    direzione_vento:      friendly_name: Wind direction      value_template: >-        {% if states('binary_sensor.vento_direzione_ovest') == 'off' and states('binary_sensor.vento_direzione_nord') == 'off' %}        NORTH-WEST        {% elif states('binary_sensor.vento_direzione_est') == 'off' and states('binary_sensor.vento_direzione_nord') == 'off' %}        NORTH-EAST        {% elif states('binary_sensor.vento_direzione_ovest') == 'off' and states('binary_sensor.vento_direzione_sud') == 'off' %}        SOUTH-WEST        {% elif states('binary_sensor.vento_direzione_est') == 'off' and states('binary_sensor.vento_direzione_sud') == 'off' %}        SOUTH-EAST        {% elif states('binary_sensor.vento_direzione_nord') == 'off' %}        NORTH        {% elif states('binary_sensor.vento_direzione_est') == 'off' %}        EAST        {% elif states('binary_sensor.vento_direzione_sud') == 'off' %}        SOUTH        {% elif states('binary_sensor.vento_direzione_ovest') == 'off' %}        WEST        {% endif %}
  1. 然后,检查配置,如果有效则重新启动 Home Assistant。
9

雨量计配置

雨量计通过 ESPhome 发送降雨总量,该总量每增加一步都会增加。如果重新启动 ESP32,该值将变为零。因此,为了获得只能增加并在经过一定时间后重置的值,我们可以使用Home Assistant 提供的实用仪表。有了它,我们可以在仪表板上显示总降雨量、当天的降雨量等。

  1. 转到设备然后转到助手
  2. 创建新的助手并选择公用设施仪表
  3. 选择雨量计实体并插入对象名称
  4. 选择每隔多少时间重置一次计数器(例如 24 小时或 1 个月)

为想要显示降雨量的每个时间间隔创建其他计数器。

10

仪表板

一旦气象站最终上线,我们就可以创建自定义仪表板来显示传感器读数和图表。对于图表,我建议使用迷你图表卡集成,可以通过 Home Assistant 社区商店安装。如果您想为您的仪表板获取灵感,您可以在顶部找到我的仪表板的屏幕截图。如果您想通过文本编辑器编辑它,我在下面上传了我的仪表板的代码文件。

要记录数据,您可以在 Home Assistant(记录器集成)中配置数据库。我没有发布有关如何配置它的详细信息,因为我仍在学习很多有关 Home Assistant 的知识,而且我还没有完成它的配置。

要查看智能手机上的数据,您可以下载 Home Assistant 应用。要从本地网络外部进行连接,我使用 Nabu Casa Cloud,这是最简单的解决方案,但不是免费的。还有其他解决方案,但它们并不完全安全。

附件


TXT
Dashboard.txt
13.50KB
11

完成!

这个项目已经完成了,我希望你觉得它很有趣。当然,你也可以构建一些传感器,但不是全部。如果你有任何问题,请在评论中写下来。如果你想了解更多细节,请查看你可以在顶部或 此处找到的视频。它是意大利语的,但别担心,它也有英文字幕。非常感谢您阅读我的指南,再见!

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载