使用 ESP32 进行 DIY 气象站





准备工作:
材料:
- 带外部 WiFi 天线的 ESP32 开发板
- 微型 USB 电缆
- 电子产品塑料盒
- DHT22温湿度传感器
- BMP180压力传感器
- 各种电线电缆
- 3D打印机白色灯丝
- 5v 至 3,3v 电平转换器
- 6 个霍尔效应传感器
- 穿孔板
- M4 和 M5 螺纹杆
- M4 和 M5 螺栓和螺母
工具:
- 3D 打印机
- 烙铁
- 钻头
- 热胶
- 电脑
温度传感器






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









然后我们有风向标,它可以检测风从哪个方向吹来。为此,我还必须用 3D 打印机制作一些零件。风向标的背面有一个箭头形的部分,前面有一个尖端,里面有一个螺栓作为平衡的重物。旗帜可以通过我放在底座中的滚珠轴承自由旋转。为了检测风吹来的 4 个基本点(北、东、南、西),我将使用 4 个霍尔效应传感器,它们是当磁铁靠近时激活的磁传感器。
我的想法是像第二张照片中所示那样放置霍尔传感器,磁铁旋转并激活旗帜转向的基点的传感器。对于中间点,例如东北,将激活两个相应的传感器(北和东)。我已将磁性传感器放置在风向标的底座上,升高约 1 厘米,以使它们远离可能吸引磁铁的金属螺栓。在可自由旋转的上部,我粘上了磁铁。这件作品还具有保护传感器免受雨淋的功能。我将实际的风向标插入螺纹杆上,并用自锁螺母固定。霍尔传感器各有 3 根电线,它们通过小 LED 连接到其原始电路板,这对于查看传感器是否正常工作很有用。我将四块板焊接到穿孔板上。从那里我使用旧网线将 gnd 和 5v 连接到传感器,并将四个信号引脚连接到主板,我们稍后会看到。我把四个传感器板放在这个 3D 打印盒子里,上面有一块丙烯酸。
在这里您可以找到所有可打印的 3D 文件。
风速计





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





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







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





但现在我们有了所有电子设备,它们将放在这个接线盒中。为了使连接更容易,我买了这块电路板,它在端子上带有 ESP32 引脚。我不知道为什么,但我的 ESP32 不适合这块电路板。所以我不得不用穿孔板制作适配器来移动引脚。我把 ESP32 拧进盒子里,在下面我放了用于 WiFi 连接的天线。
我几乎忘记了大气压力传感器,也就是 BMP180。我把它放在盒子里,为了让空气通过,我在底部做了这个网格。该传感器通过 i2c 通信,因此除了 3.3v 和 GND 之外,它还需要两根电线连接到 ESP32。
现在,我们将所有其他传感器连同它们的电线都连接在这里。温度传感器只有一根信号线,它直接连接到 ESP32 的引脚。问题在于风速计、雨量计和风向标的霍尔传感器,它们的工作电压为 5v,而 ESP32 的工作电压为 3.3v。因此,为了将信号从 5v 转换为 3.3v,我将使用一些电平转换器,例如这些。为了让一切更整洁,我将它们焊接到穿孔板上。为了在电路板和 ESP32 之间建立连接,我使用了 JST 连接器,它比传统跳线更牢固。最后,我将 gnd、5v 和 3.3v 的电线连接在一起,并用电缆扎带整理好电线。
上面您可以找到传感器所有电气连接的示意图。
家庭助理

气象站将连接到 Home Assistant,这是一种本地服务器,用于控制我们家中的各种家庭自动化设备。Home Assistant 可以在 Raspberry Pi 或虚拟机上的计算机上运行,就像我一样。要将气象站连接到 Home Assistant,我将使用 ESPhome,它允许您将 ESP32 连接到 Home Assistant。设置好一切后,我可以从网页或应用程序实时查看气象站数据。此外,数据会被记录下来,我还可以看到长期趋势的图表。
步步:
- 如果你还没有安装 Home Assistant,请先在 Raspberry 或带有虚拟机的计算机上安装(网上有很多针对不同系统的教程)
- 从官方附加组件商店安装 ESPhome
- 在 ESPhome 中添加新设备并选择 ESP32
- 在 ESPhome 代码空间中,将以下代码粘贴到ESPhome 提供的代码后面,并在需要的地方插入 wifi ssid 和密码
- Click install and on plug into computer, and connect the ESP32 to the computer with the micro usb cable
- Follow the instructions on screen to install the code on the ESP32
风向标配置




风向标分别以二进制传感器(开或关)的形式给出四个传感器的状态。要将这四个值转换为更易于阅读的格式(例如北或西南),我们必须在 Home Assistant 中创建一个自定义传感器。有一些代码,但非常简单。
- 要创建自定义传感器,我们必须编辑configuration.yaml文件
- 为此,我们需要安装文件编辑器插件或类似的东西
- 将以下代码粘贴到传感器下:
- 然后,检查配置,如果有效则重新启动 Home Assistant。
雨量计配置




雨量计通过 ESPhome 发送降雨总量,该总量每增加一步都会增加。如果重新启动 ESP32,该值将变为零。因此,为了获得只能增加并在经过一定时间后重置的值,我们可以使用Home Assistant 提供的实用仪表。有了它,我们可以在仪表板上显示总降雨量、当天的降雨量等。
- 转到设备然后转到助手
- 创建新的助手并选择公用设施仪表
- 选择雨量计实体并插入对象名称
- 选择每隔多少时间重置一次计数器(例如 24 小时或 1 个月)
为想要显示降雨量的每个时间间隔创建其他计数器。
仪表板

一旦气象站最终上线,我们就可以创建自定义仪表板来显示传感器读数和图表。对于图表,我建议使用迷你图表卡集成,可以通过 Home Assistant 社区商店安装。如果您想为您的仪表板获取灵感,您可以在顶部找到我的仪表板的屏幕截图。如果您想通过文本编辑器编辑它,我在下面上传了我的仪表板的代码文件。
要记录数据,您可以在 Home Assistant(记录器集成)中配置数据库。我没有发布有关如何配置它的详细信息,因为我仍在学习很多有关 Home Assistant 的知识,而且我还没有完成它的配置。
要查看智能手机上的数据,您可以下载 Home Assistant 应用。要从本地网络外部进行连接,我使用 Nabu Casa Cloud,这是最简单的解决方案,但不是免费的。还有其他解决方案,但它们并不完全安全。
附件
完成!




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











