智能气象站的制作教程

电子说

1.2w人已加入

描述

第1步:

这个想法是在两个屏幕上显示各种信息,具体取决于方框。表壳呈平行六面体形状,《铺路石,带有一种皮带,可作为支撑使其静止。

加速度计检测运动和方向并触发显示。

为了节省能源,我选择了电子纸屏幕(参见下面的参考资料),即使它们不再供电,也能保持显示。同样对于ESP32,我选择 Lolin32 模块(以节俭而闻名),我必须学习如何管理深度睡眠,以及唤醒中断由加速度计生成。

屏幕通过SPI连接,在找到正确的引脚将它们连接到ESP32之前我搜索了一下,知道我还需要一个用于加速度计的I2C,一个读取DHT22的引脚和另外两个用于电池的引脚电压测量。 ESP32几乎完全充电了!知道某些引脚只读(我用过DHT传感器),其他引脚不能与Wifi一起使用,它是一个找到正确的配置有点复杂。

盒子可以朝向4个方向,加上扁平。总而言之,只需2个屏幕即可显示4 * 2 + 2 = 10种可能类型的信息。所以它允许你展示很多东西:

日期和当天的圣人

当前时间

今天的天气预报

未来几小时的天气预报

未来几天的天气预报

电池充电水平

因为我还有空间,来自专业网站的随机引用。

第2步:你需要什么?

气象站

气象站

气象站

气象站

ESP32:Lolin32模块(功率极低,配有电池连接器,可以通过USB加电池充电)

2 epaper显示:4.2英寸和2.9英寸。我选择Good Display商店的模型。

DHT22传感器

MCU6050加速度计 - 陀螺仪I2C传感器

LiPo电池

用于电池电压测量:2个10k电阻,1个100k电阻,1个100nF电容,1个MOSFET晶体管

焊锡和烙铁,印刷电路板

使用3D打印机进行外壳

附图显示了PCB上所有元件的位置:我必须节省空间以适应外壳,不应该太大。

In为了获取天气数据,您还需要在天气API上注册并将您的密钥放在‘Variables.h’文件中的正确位置(见下文)。

天气网站:

apixu

accuweather

第3步:这个项目让我思考和学习了很多。..。..

气象站

气象站

这个系统应该是低功耗的,所以你不需要每晚给电池充电。..为了节省能源,我选择了电子纸即使它们不再通电也能保持显示的屏幕。同样对于ESP32,我选择了Lolin32模块(以其节俭而闻名),我必须学习如何管理深度睡眠,以及中断唤醒呼叫通过加速度计。

盒子可以朝向4个方向,更平坦。总而言之,要显示4 * 2 + 2 = 10种可能的信息类型。所以它允许你做很多事情:日期,当天的圣人,时间,今天的天气预报,未来几小时或几天的天气预报,电池充电水平以及专业网站的随机报价。

在互联网上寻找的东西很多,如你所知: WiFi是节能的敌人。..。..

所以我们必须管理连接,以便显示最新信息,但不需要花太多时间连接。另一个相当复杂的问题:保持相当准确的时间。我不需要RTC,因为我可以在互联网上找到时间,但ESP32的内部时钟漂移了很多,特别是在睡眠期间。我必须找到一种方法来保持足够准确,同时等待通过互联网重置时钟。我每小时在互联网上重新同步它。

因此,在自治(互联网连接的频率)与所显示信息的准确性之间存在权衡。

另一个需要解决的问题是内存。当ESP32处于深度睡眠状态时,内存将丢失,除了所谓的RTC RAM。该内存宽4MB,其中只有2个可用于该程序。在这个内存中,我必须存储在睡眠阶段之后必须保持从一次执行到下一次执行的各种程序变量:天气预报,时间和日期,图标文件名,引号等。我必须学会处理它。

说到图标,它们存储在ESP32文件系统的 SPIFFS 中。关闭免费的Wunderground天气API后,我不得不寻找其他免费天气数据提供商。我选择了两个:一个用于当天的天气,有12个小时的预测,另一个用于多天的预测。图标不一样,所以它给我带来了两个新问题:

选择图标集

将这些图标与2个网站的预测代码相匹配

此对应关系也存储在RTC RAM中,因此不必每次都重新加载。

图标的最后一个问题。 无法将所有内容存储在SPIFFS中。这个空间太小,不适合我的所有文件。有必要进行图像压缩。我在 Python 中编写了一个脚本,用于读取我的图标文件并将其压缩为 RLE ,然后将压缩文件存储在SPIFFS中。在那里举行。

但是电子纸显示库只采用BMP类型的文件,而不是压缩图像。所以我必须编写一个额外的功能才能显示这些压缩文件中的图标。

互联网上读取的数据通常是 json 格式:天气数据,当天的圣人。我使用了(伟大的) arduinoJson 库。但报价不是那样的。我从一个专门的网站上拿走它们,所以我必须直接查看网页的内容来阅读它们。 我必须写一个特定的代码 t。每天午夜左右,程序进入该站点并读取大约10个随机引号,并将它们存储在RTC RAM中。当外壳朝向大屏幕时,其中一个随机显示。

我告诉你显示重音字符的问题(抱歉,但引号是法语)。..。

当小屏幕亮起时,《显示strong》电池电压,并使用图纸更好地查看剩余电量。有必要制作一个电子组件来读取电池电压。由于测量不应该对电池放电,我使用了互联网上的图表,该图表使用 MOSFET晶体管作为开关,以便仅在测量时消耗电流

为了能够制作这个电路并将所有东西都安装到盒子中,我想要尽可能小的,我必须制作一个PCB来连接系统的所有组件。 这是我的第一个PCB 。我很幸运,因为这一方面第一次运作良好。..

参见植入图:“禁区”是保留用于连接USB线的区域。 Lolin32模块允许您通过USB为电池充电:如果连接USB电缆,电池充电,模块同时工作。

最后一点:字体。不同大小,不管是否大胆,都必须创建和存储它们。一旦您在正确的目录中安装了字体文件,Adafruit GFX库就可以很好地处理这个问题。为了创建文件,我使用了字体转换器网站,非常方便!

请确保选择:

预览显示:TFT 2.4“

图书馆版本:Adafruit GFX字体

所以总结:一个大项目,让我学到了很多东西。

步骤4:使用电子纸显示

这些屏幕的主要缺点在视频中清晰可见:显示的更新需要一到两秒,并通过闪烁(两个屏幕的正常和反转版本的替代显示)完成。这对于天气信息是可以接受的,因为我不经常更新(每小时除了更改盒子的方向)。但不是时间。这就是为什么(并限制消费)我仍然使用HH:MM显示(不是秒)。

所以我不得不寻找另一种更新显示的方法。这些屏幕(其中一些)支持部分更新(应用于屏幕区域或整个屏幕。..。..)但对我来说不好,因为我的大屏幕(显示时间)保持被替换像素的重影。例如,当从10:12到10:13时,‘2’在‘3’内部稍微可见,并且在‘4’,‘5’等之后变得更加明显。我想要指出我的屏幕就是这种情况:我与电子纸显示库 GxEPD2 的作者讨论了这一点,他告诉我他没有用他自己的屏幕观察这种现象。我们试图改变参数而没有成功狩猎幽灵。

所以我们必须找到另一个解决方案:我建议做一个部分双重刷新,这解决了问题(至少这对我来说是令人满意的)。时间过去没有屏幕闪烁,没有鬼魂。但是,转换不是立即的:更改时间需要一秒多一点。

步骤5:实现

气象站

为了确保方向改变时内部没有任何东西移动,不同的组件(显示器,电子模块,PCB,电池)被胶合用胶枪。为了在PCB下面布线,我将它安装在用垫片制成的支腿上,电池也是如此。

很快我将安装一个外部USB麦克风连接器,所以我不必打开机箱给电池充电。

也许我也有兴趣通过OTA进行更新来完善它。..。..

第6步:代码和文件

提供了三个存档文件:

Weather station.zip:使用Arduino IDE上传的Arduino代码

Boite ecran.zip:案例的CAD和3D打印机文件

data.zip:要在ESP32的SPIFFS中上传的文件。

如果你不知道如何将文件上传到ESP32的SPIFFS,只需阅读本教程,它提供了一个非常有用的插件以及如何在Arduino IDE中使用它。

深度睡眠编程与Arduino的标准编程完全不同。对于ESP32,这意味着ESP32唤醒并执行设置,然后进入睡眠状态。所以,循环函数为空,永远不会执行。

某些初始化阶段必须在第一次执行时只运行一次(例如获取时间,天气数据,引号等),所以ESP32需要知道当前的唤醒是否是第一个:为此,解决方案是将变量存储在 RTC RAM 中(即使在深度睡眠阶段),每次唤醒时都会增加。如果它等于1,则它是第一次执行,ESP32运行初始化阶段,否则跳过此阶段。

要唤醒ESP32,有几种可能性:

定时器唤醒:代码计算睡眠前深度睡眠的持续时间。这用于更新时间(每1,2,3或5分钟)或天气数据(每3或4小时)和当天的圣人(每24小时)。

中断唤醒:加速度计发送一个用于唤醒ESP32的信号。这用于检测方向变化并更新显示屏

触摸传感器唤醒:ESP32配备了几个用作触摸传感器的引脚,但它们不能用于定时器唤醒,所以我没有‘使用它。

在代码的其他地方有其他编程技巧,以保持时间准确,同时节省能源(即每分钟不连接NTP服务器) ),删除Adafruit GFX库不支持的重音,以避免在没有必要时更新显示,设置加速度计参数尤其是中断唤醒,准确计算定时器唤醒时的睡眠时间 - 如果没有连接到IDE,请避免使用串行控制台(为了节省能源),在不需要时断开wifi等等。..。..代码中充满了评论,有助于理解函数。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分