当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]你将构建一个小型气候传感器,用于向你的PNeX服务器报告室内温度和湿度,并在温度过高时向你的手机发送通知。无需云账户,也无需物联网订阅:数据留在本地。

你将构建一个小型气候传感器,用于向你的PNeX服务器报告室内温度和湿度,并在温度过高时向你的手机发送通知。无需云账户,也无需物联网订阅:数据留在本地。

在过程中,你将使用PNeX的三个功能:

- 自定义固件IDE:通过浏览器编写电路板代码,PNeX自动编译并为你添加Wi-Fi、加密功能以及空中升级支持;

- 使用Starlark语言编写函数,Starlark是一种基于Python语法的沙盒化语言;

- 通过流程读取传感器数据、运行函数并发送警报。

1:安装PNeX服务器

PNeX可在Raspberry Pi 4或5(64位Raspberry Pi OS Lite)或任何搭载Docker的Linux系统上运行。在Pi上打开终端(ssh pi@pnex.local),并执行以下命令:

检查:确认你在浏览器中已登录PNeX。

2:连接传感器

将ESP32-C6-Zero插入面包板中央位置。AM2301传感器有三根引线:

•红色(VCC):3V3引脚(或5V,传感器可接受两种电压)

•黑色(GND):地线引脚

•黄色(DATA):GP0引脚

在黄色线路的柱子和3V3之间加一个10 kΩ电阻。这能确保两次读取之间数据线保持高电平。

仔细数一下引脚。USB接口侧面的引脚顺序为:5V、GND、3V3、GP0。GP0是第四个引脚,不是第三个。

大多数Zero开发板出厂时的引脚头未焊接。请务必焊接好,否则引脚将无法接触面包板。该开发板仍可通过USB供电,因此在尝试读取传感器之前,一切看起来都正常。

3:创建固件项目

打开Edges → 自定义固件 → 新建项目。命名为“气候传感器”,选择芯片家族ESP32-C6,然后创建。

编辑器会打开一个初始示例代码。PNeX所需的所有功能(Wi-Fi、与服务器的加密连接、空中升级)都位于PNeX库中。你的文件仅包含你的逻辑代码。

4:添加传感器库

点击“+ Lib”并选择DHT传感器库。AM2301属于与DHT21相同的传感器系列。该库会显示为一个芯片,位于src/main.cpp旁边。

只能使用此列表中的库。它们的版本被固定,因此每次编译结果都相同。

5:粘贴代码,保存并验证

将编辑器中的全部内容替换为以下草图:

点击“保存并验证”。服务器将为ESP32-C6编译代码(首次构建需要几分钟)。

注意代码中缺少的内容:没有Wi-Fi密码、没有服务器地址、没有密钥。PNeX会在为您的板子构建固件时自动注入这些信息。

检查:状态栏会显示“Revision r2 编译完成”。

6:注册板子

打开 Edges → Devices / Agents → Register。为该板子命名,例如 climate-1。此名称将在 PNeX 的所有地方用于识别设备,包括流媒体服务。

7:选择型号和固件

选择通用 ESP32-C6(Waveshare C6-Zero)。在固件选项下,选择 Climate sensor 而不是通用的 PNeX 固件。

8:Wi-Fi 网络

选择您的 Wi-Fi 网络,或点击 + 添加一个:SSID 和密码。使用 2.4 GHz 网络:ESP 板子无法识别 5 GHz 网络。

您添加的 Wi-Fi 网络将保存在 Edges → Referentials 中,并在下次使用其他板子时再次提供。密码仅用于编译固件。

9:PNeX 服务器地址

该板子需要您 PNeX 服务器的地址。如果 PNeX 服务器为空,请点击其旁边的 +:该字段会预填入您当前使用的地址。点击“添加”。在局域网中检测 PNeX 服务器,若不确定可自动为您找到服务器。

使用 pnex.local 安装时,板子将连接到 Pi 的 IP 地址(例如 192.168.1.20):ESP 板无法解析 .local 域名。如果您使用真实域名安装了 PNeX,则此字段已固定,无需选择。

10:创建并构建

检查摘要,然后点击“创建并构建”。PNeX 将为该板子编译固件:包括您的代码、Wi-Fi 地址和密钥。

检查:在设备列表中,固件列会变为“成功”。

11:通过浏览器进行闪存

使用USB数据线将板子连接到电脑。在设备列表中,点击“Flash”,然后再次点击“Flash”,选择板子的端口。它会显示为一个USB串行或“USB JTAG/串行调试单元”设备。

使用Chrome、Edge或其他Chromium浏览器:闪存功能使用Web Serial。如果未显示端口,请按住BOOT按钮,按下并松开RESET,再松开BOOT,然后重试。

您只能通过USB进行一次闪存。后续版本的代码可通过空中更新(Update over the air)安装。

检查:几秒钟后,设备会在列表中变为“Active”。

12:查看读数

打开可视化 → 快速图表。选择温度指标,传感器气候-1,点击添加,然后对湿度重复相同操作。

每10秒会出现一个新的数据点。向传感器吹气:湿度值会在几次读数内迅速变化。

检查:两条曲线都随房间环境变化而移动。

13:编写函数(Python语法)

打开自动化 → 函数 → 新建函数,命名为Climate – comfort check,选择Starlark并创建该函数。

Starlark是一种小型语言,采用Python语法:def、if、字典、#注释。它运行在沙箱环境中,仅能执行计算操作:无文件、无网络。粘贴以下代码:

@input 和 @output 行并非普通注释。每个 @input 都会成为流程中函数节点的输入,每个 @output 都会成为输出。handle 会为每个输出返回一个值,且名称相同。

点击保存。

14:测试功能

点击“运行测试”,输入 31.4 作为温度,然后点击“运行”。

检查结果:输出应为 too_hot = true,celsius = "31.4",fahrenheit = "88.5"。

将 THRESHOLD_C 修改为您认为重要的温度值,例如温室、服务器机柜或婴儿房的温度,然后保存。

15:将手机添加为通道

在手机上安装 ntfy 应用程序,并订阅一个名称较难猜测的主题:以 pnex-climate- 开头,后跟您自己设置的几个随机字母和数字。任何知道该主题名称的人都可以读取它,因此切勿重复使用教程中的名称。

在 PNeX 中,打开“自动化”→“通知”→“新建通道”→选择 ntfy: server https://ntfy.sh,即相同的主题,然后创建。使用该通道的“测试”按钮:您的手机上会弹出一条测试消息。

电子邮件、Telegram、Slack 或 Discord 的操作方式相同。参见“通过电子邮件或手机接收提醒”。

16:编写消息内容

打开“模板”选项卡,然后选择“新建模板”:

•名称:气候——太热

•主题:[climate-1] 太热

•身体:

声明两个变量 celsius 和 fahrenheit(添加变量),为它们设置示例值,然后点击“预览”。

17:发送测试消息

在模板底部,选择“向频道发送测试”选项,模板将使用示例值并立即发送。选择你的 ntfy 频道,然后点击“测试”:消息会弹出到你的手机上。接着点击“保存更改”。

18:在流程中读取传感器数据

打开 Automation → 流程 → 新建流程,并将其命名为“气候——过热提醒”。

a. 选择画布上已有的 Inject 节点,并将间隔时间设置为 300 秒:该流程每 5 分钟运行一次。

b. 添加一个 Device (read) 节点,选择 climate-1 并勾选温度(公制)。将新鲜度窗口设置为 120 秒,这样断电的传感器永远不会因旧数据触发警报。

19:添加函数和通知

c. 添加一个 Function 节点,选择“气候——舒适度检查”。

d. 添加一个 Notification 节点,输入你的 ntfy 频道(如果希望,也可在应用内添加),并选择模板“气候——过热”。

20:连接并部署

拖动线路:

•注入 → 设备(读取)

•设备(读取)· 温度 → 功能 · 温度

•功能 · 过热 → 通知 · 触发器

•功能 · 摄氏度 → 通知 · 摄氏度

•功能 · 华氏度 → 通知 · 华氏度

只有当触发器为真时,才会发送通知。点击“保存更改”,然后“部署”。

检查:流程状态显示“已部署”。

21:测试警报

你无需等待热浪来袭:

将函数中的 THRESHOLD_C 设置为当前温度以下的值,保存后,在流程的“功能”节点中选择新版本,再次部署;

或者将传感器在手中保持一分钟。

下次运行时(最多5分钟内),你的手机会震动。

检查:通知“房间内温度为……°C(……°F)”会出现在你的手机上。

22:查看交付日志

每条消息都会在“自动化 → 通知 → 事件”(或通道行中的“日志”)中列出:日期、通道、状态(已发送、失败、被阻止(反垃圾邮件))以及发送该消息的流程。点击某一行可查看发送失败的详细错误信息。

23:在你的手机上

ntfy 应用(或你主题的 ntfy 网页)会显示使用模板渲染后的警报内容。

只要温度过高,每5分钟就会收到一条消息。调整注入间隔以减少消息数量。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭