使用Raspberry Pi和Particle Cloud进行物联网控制的家庭自动化
Raspberry Pi 是最著名的低成本计算机之一,也是用于对不同类型的物联网和嵌入式项目进行原型设计的强大工具。随着树莓派在物联网领域的普及,粒子云开始在其平台上支持该板。
Particle Cloud是一个非常流行的物联网平台,它可以帮助您从您想要在物联网设备中执行的所有操作开始。Particle 是一个可靠、可扩展且安全的物联网设备平台。有许多支持物联网的粒子设备,如 Xenon、Photon、Electron 等,它们根据我们的需要具有不同的功能。
有许多物联网平台,如Blynk、ThingSpeak 等,您可以使用它们将 Raspberry Pi 连接到物联网云,但粒子云平台有一些很棒的功能,使其与众不同。就像您可以使用粒子云 IDE 在您的 Raspberry Pi 中运行您的 Arduino 代码一样,并且可以在世界任何地方对您的 Pi 进行编程,现在这很酷!此外,您可以轻松集成 IFTTT、Google Cloud 或 Microsoft Azure。
让我们通过使用 Particle Mobile 应用程序和来自世界任何地方的在线 Particle IDE 制作简单的 Raspberry Pi 应用程序来控制家用 AC 设备,开始探索 Particle 云平台。
所需组件
安装了 Raspbian 的 Raspberry PI
继电器模块
220v 灯泡
跳线
假设您的 Raspberry Pi 已经刷入了操作系统。如果没有,请 在继续之前遵循Raspberry Pi 入门教程。这里我们使用 Rasbian Jessie 安装 Raspberry Pi 3。
电路原理图
这个Raspberry Pi Home Automaton 项目的电路图很简单:
我们必须在 Raspberry Pi 中安装Particle 代理才能将其与 Particle Cloud 连接。Particle Agent 是一个在后台运行的软件服务,用于与 Raspberry pi 的 GPIO 引脚进行交互。在安装代理之前,您必须在 Particle.io 上创建一个帐户。
我们将从在粒子云上创建一个帐户并了解粒子平台的界面开始。
设置粒子云帐户和树莓派
1. 前往Particle.io并点击右上角的控制台。现在,单击创建帐户。填写所有信息,然后单击注册。
2. 现在,在树莓派终端中运行以下命令来安装粒子代理。
bash 《( curl -sL https://particle.io/install-pi )
输入您在第一步中创建的粒子云电子邮件和密码。
3. 粒子代理成功安装在 Pi 中并在后台运行。它也在听粒子云。您可以使用以下命令获取更多信息代理。
现在,让我们跳到编码部分并探索粒子平台。
使用 Raspberry Pi 和 Particle Cloud 控制 AC 设备
如果您已在 Pi 上成功安装了 Particle 代理,那么您可以在Particle 控制台上找到您的设备。如下所示
如您所见,屏幕左侧有许多选项,包括添加新设备、创建网状网络、与 IFTTT、Microsoft Azure 和 Web IDE 集成。
1.首先,点击Web IDE选项。将使用在线 IDE 打开一个新选项卡,如下所示。
2. 现在,您可以在 Raspberry Pi 中使用您的 Arduino 代码。还给出了一些示例代码。我们将在线控制 AC 灯泡,因此,单击 Web-Connected LED 示例并连接您的继电器模块,如电路图所示。代码中使用的引脚是 D7。引脚映射如下所示。
3. 现在,编译代码并点击 Flash。确保您的 Raspberry Pi 已连接到互联网。此外,您可以根据需要更改代码,但您必须分叉要使用的示例代码。
4. 正如您在代码中看到的那样,无论何时发送“on”,灯泡都会发光,而无论何时发送“off”,灯泡都会熄灭。要发出命令,请返回控制台选项卡并单击设备。单击刷新按钮,您将看到一个需要参数来执行函数调用的 led 函数。在这里你必须写“on”和“off”来打开和关闭灯泡。编写参数后单击调用。
5. 现在,使用移动应用程序控制灯泡。
在应用程序中,您将看到您的树莓派已列出,单击它。
6. 单击数据。您会在这里找到相同的 LED 功能。只需输入参数并单击发送。通过这种方式,您也可以使用智能手机控制您的设备。
7. Web IDE 中有一个特殊的代码示例,称为Tinker。在 Raspberry Pi 中上传此代码后,您可以一次控制多个引脚,而无需对其进行硬编码。此外,您无需在代码中指定引脚即可获得传感器读数。
8. 只要您 Flash 修补程序示例代码,您将在应用程序中的设备前面看到修补程序选项。点击它。
9. 现在,选择要在其上获得输出或输入的引脚。单击时,系统会要求您单击digitalWrite、digitalRead、analogRead和analogWrite。在我们的例子中,单击引脚 D7上的digitalWrite 。
分配功能后,只需单击引脚 D7。你会看到灯泡在发光。再次按下 D7 时,灯泡将关闭。同样,您可以获取不同引脚上的传感器数据,并可以同时控制电器。
// ------------------------------------
// 通过 Internet 控制 LED
// ---- -------------------------------------------
// 首先,让我们为引脚创建“速记”
// 与闪烁 LED 示例相同:
// led1 是 D0,led2 是 D7
诠释 led2 = D7;
// 上次,我们只需要在 setup 函数中声明引脚。
// 这一次,我们也要注册我们的粒子函数
void setup()
{
// 这是引脚配置,和上次一样
pinMode(led1, OUTPUT);
pinMode(led2,输出);
// 我们还将声明一个 Particle.function,以便我们可以在云端打开和关闭 LED。
Particle.function("led",ledToggle);
// 这就是说,当我们向云请求函数“led”时,它将使用此应用程序中的函数 ledToggle()。
// 为了更好地衡量,我们还要确保在启动时两个 LED 都熄灭:
digitalWrite(led1, LOW);
数字写入(led2,低);
}
// 上次,我们希望 LED 持续闪烁,
// 因为这次我们正在等待通过云输入,
// 我们实际上不需要在循环中放入任何东西
void loop()
{
// 此处无事可做
}
// 现在我们将拥有一个超级酷的函数,当发送匹配的 API 请求时调用它
// 这是我们之前注册到“led”Particle.function 的 ledToggle 函数。
int ledToggle(String command) {
/* Particle.functions 总是将字符串作为参数并返回一个整数。
由于我们可以传递一个字符串,这意味着我们可以给程序命令如何使用该函数。
在这种情况下,告诉函数“on”将打开 LED,告诉它“off”将关闭 LED。
然后,该函数返回一个值给我们,让我们知道发生了什么。
在这种情况下,它将返回 1 表示 LED 亮起,0 表示 LED 关闭,
如果我们收到一个完全虚假的命令,它没有对 LED 做任何事情,则返回 -1。
*/
if (command=="on") {
digitalWrite(led1,HIGH);
数字写入(led2,高);
返回 1;
}
else if (command=="off") {
digitalWrite(led1,LOW);
数字写入(led2,低);
返回0;
}
其他 {
返回 -1;
}
}