IoT 运动感应灯:集成 W5500-EVB-Pico、Adafruit IO、PIR 传感器和 IFTTT

本文介绍了使用W5500-EVB-Pico开发板、AdafruitIO和PIR传感器构建的智能照明系统,通过CircuitPython实现运动检测控制照明并记录事件。文章详细描述了如何配置AdafruitIO和IFTTT服务,以及在实际应用中的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 W5500-EVB-Pico、Adafruit IO 和 PIR 传感器的智能照明系统。 使用电路python。 该系统检测运动以控制照明并记录事件。

转发: IoT Motion Sensing Lights: Integrating W5500-EVB-Pico, Adafruit IO, PIR Sensor, and IFTTT


项目介绍

介绍

就我个人而言,我发现使用运动识别 LED 传感器很有用。 当识别到运动时,LED 会在一定时间内打开并关闭。

我家的照明按钮离前门较远,所以当我深夜进入时,我必须小心进入没有灯光的房间。 购买并安装感应灯后,感应灯通过动作识别打开,让您更安全地进入。

我决定使用 Pico 板实现类似的功能,并通过链接附加服务来留下日志。

配件

  • W5500-EVB-Pico
  • M5Stack PIR 传感器 
  • Picobricks (LED):您只能单独使用必要的模块,但这次我按原样使用它们。
  • Adafruit.io

如果您使用 Picobricks 等扩展板,则可以使用 Grove 连接器,使连接变得容易。 您所要做的就是匹配 GPIO 引脚编号。 我是这样连接的:

Adafruit IO

在wiznet5k支持的例子中,有一个叫做aio的项目,我看到有一个Adafruit支持的API,并且它支持http(非SSL)。

此外,IFTTT也支持Adafruit IO,因此我们决定使用它来链接外部服务。

开始使用

您只需在网站上输入您的信息即可注册,通过电子邮件验证后即可完成注册。

由于屏幕 UI 与文档不同,人们很困惑该手册是否是很久以前编写的。

如果你进入IO页面的我的账户页面,有一个黄色的钥匙形状的按钮。

当您按下按钮时,会发出一把钥匙,可以立即使用。

您现在可以使用 Pico 上传源,免费订阅允许您创建最多 10 个源。

初始饲料是空的。

不幸的是,wiznet5k 尚不支持 SSL,但 Adafruit IO 支持 http,因此您可以轻松传输数据。

首先,我以 Curl 为例测试了 API 操作。

我从 Windows CMD 运行它,但请求失败,所以我从 Linux Shell (WSL) 运行它,它工作正常。

curl -X POST -H "Content-Type: application/json" -H "X-AIO-Key: <key>" --data '{"feed": {"name": "New Feed"}}' http://io.adafruit.com/api/v2/<username>/feeds

现在编写Circuitpython代码。

除了主代码code.py外,私有信息还单独写入secrets.py文件中。

secrets = {
    'aio_username' : "your-aio-username",
    'aio_key' : 'your-aio-key',
}

发布的提要如下所示:

接下来,让我们连接IFTTT。

IFTTT

IFTTT(If This then That)是一个基于网络的平台,允许用户连接各种应用程序和服务来创建自动化任务。

在这里,我们将使用 Adafruit IO 作为触发器并连接服务以接收警报作为操作。

触发器(If):监视 Adafruit IO 上的提要

Adafruit - Monitor a feed on Adafruit IO

Adafruit 服务支持以下触发器。

当您单击“连接”按钮时,会出现一个权限授予弹出窗口。

作为参考,我用现有的Google帐户尝试了它,但它一直重定向到现有的APPLET并且未设置权限,因此我创建了一个新帐户并继续。 在新帐户上运行良好。

创建了一个单独的函数来创建提要。

def create_feed(name):
    data = {
        "feed": {"name": name}
    }
    endpoint = f'http://io.adafruit.com/api/v2/{secrets["aio_username"]}/feeds'
    headers = {"X-AIO-KEY": secrets["aio_key"]}
    response = requests.post(endpoint, json=data, headers=headers)
    print(response.json())
    response.close()

如上所述创建了 feed。

当您输入创建的提要时,数据会以可在提要中累积的形式出现,如下所示。

我将数据发送到这里并查看 IFTTT 是否被触发。

作为参考,如果您使用 Postman 发出请求,您可以看到格式如下的数据。

创建数据API

在同一 Feed 中发送数据时,您可以使用创建数据 API。

您可以看到数据以时间序列的形式接收到 feed 中,如下所示。

页面实时更新,无需刷新页面,监控便捷。

主代码中添加了以下更新功能。 传感器值将通过该函数更新。

def create_data(feed_name, data):
    endpoint = f'http://io.adafruit.com/api/v2/{secrets["aio_username"]}/feeds/{feed_name}/data'
    headers = {"X-AIO-KEY": secrets["aio_key"]}
    response = requests.post(endpoint, json=data, headers=headers)
    print(response.json())
    response.close()

如果执行和请求成功,您可以收到如下响应。

行动(然后)

触发器发送的数据可以发送到哪里呢?

有很多选择。

  • Twitter
  • Telegram
  • Discord
  • SMS
  • IFTTT 通知

我尝试链接一个相对简单的项目,称为“通知”和“Slack”,我目前正在使用它。

IFTTT 通知

IFTTT 提供智能手机应用程序,您可以在其中接收推送通知。

如上所述,设置已完成。

收到警报如下。

Slack

我还尝试连接到 Slack 服务并发布消息。

要向 Slack 发送消息,您必须授予 IFTTT 权限。 (第一次)

设置并测试后,警报工作正常。

PIR 传感器和 LED

我使用 PIR 传感器来识别运动,并且由于有 M5Stack 单元模块,因此我通过使用 GROVE 电缆将其连接到 Picobricks 来使用它。 比跨接电缆更容易连接。

使用的 LED 是 Picobricks 的 WS2812。

接下来,我分别编写和测试运动识别和 LED 控制代码,然后合并这些代码。

运动传感器代码

import board
import digitalio

PIR_PIN = board.GP17   # Pin number connected to PIR sensor output wire.

# Setup digital input for PIR sensor:
pir = digitalio.DigitalInOut(PIR_PIN)
pir.direction = digitalio.Direction.INPUT
print('Check')

# Main loop that will run forever:
old_value = pir.value
while True:
    pir_value = pir.value
    if pir_value:
        if not old_value:
            print('Motion detected!')
    else:
        if old_value:
            print('Motion ended!')
    old_value = pir_value

LED控制代码

import board
import neopixel
import time

pixel = neopixel.NeoPixel(board.GP6, 1)
pixel.brightness = 0.1

pixel.fill((0, 255, 0))
time.sleep(3)
pixel.fill((0, 0, 0))

代码

整个代码,包括每个基本代码,可以在下面的Github链接中引用。

问题

蜂拥而至的警报存在问题。

我想知道原因是否是两个小程序使用相同的触发器,因此我断开其中一个并进行测试,但延迟是相同的。 我需要进一步研究这个问题。

参考

Circuitpython 代码示例和库

https://github.com/adafruit/Adafruit_CircuitPython_Bundle 

文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值