亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Alexa 的智能家居监控

组件和用品

Arduino UNO
× 1
乐鑫 ESP8266 ESP-01
× 1
DHT11 温湿度传感器(4 针)
× 1
ControlEverything.com 用于 I2C 的 4 通道继电器控制器
× 1
红外障碍传感器
× 1
相机
× 1
跳线(通用)
× 1

应用和在线服务

Arduino IDE
亚马逊 Alexa Alexa 技能套件
亚马逊 Alexa echosim.io
ThingSpeak API
无后端
Pushingbox

关于这个项目

简介:

在当今世界,人们花更多的时间在工作场所而不是家中。因此,需要家庭监控系统,人们可以在工作时了解房屋的状况。如果能在工作时间就问“某人”关于他们家的事,那就更好了。这可以通过使用亚马逊 Alexa 作为助手来实现,它可以为用户提供有关他们家的需求信息。

不仅是Work Place,只要有互联网连接和亚马逊Alexa设备,用户就可以了解世界任何地方的房屋状况。

本项目实现了以下功能:

1) 控制风扇、灯等家用设备

2) 告知设备状态

3) 告诉房子的天气状况(温度和湿度)

4) 需要时通过Gmail将房屋内部的快照发送给用户。

5) 在 -

的情况下发送通知

* 入侵者(也发送照片)

* 火

* 客人(也发照片)

项目涉及的步骤:

第 1 步:对 Arduino 和 ESP8266 进行编程

从官网下载Arduino IDE:https://www.arduino.cc/en/Main/Software

打开 Arduino IDE 并转到文件-> 首选项-> 附加板管理器 URL 类型 - http://arduino.esp8266.com/stable/package_esp8266com_index.json

进入工具 -> 板 -> 板管理器 -> 安装最后找到的 esp8266 包。

对arduino进行编程 只需将 USB 电缆从 arduino 插入计算机,然后在工具-> 板中选择 Arduino/Genuino UNO。还要确保您在工具中选择了正确的 COM 端口(可以在设备管理器中找到 COM 端口号)。编写所需的程序,编译,如果没有错误,点击上传。

对 ESP8266 进行编程 如图所示进行连接

将 USB 从 arduino 连接到计算机。在工具-> 开发板-> 选择 Generic ESP8266 并选择正确的 COM 端口。编写所需的程序,编译它,如果没有错误点击上传。确保将 Arduino RST 连接到 GND(arduino 就像程序员到 ESP8266)。

在这个项目中,首先对 ESP8266 进行编程,然后移除电路连接。然后重新连接电路,如名为“电路连接”的图所示。然后 arduino 是 编程

第 2 步:配置 thingspeak.com

在 thingspeak.com 上创建一个帐户。

我们利用thingspeak中的通道来存储设备控制信息并将其路由到arduino/alexa。我们还将温度和湿度值存储在通道中。它就像是信息的存储位置。

转到频道--> 我的频道并创建新频道。为您的频道提供名称和说明。

在我们的项目中,我们需要 8 个通道(您可以使用更少的通道来完成这项工作,但在编程时会有点复杂)。此外,thingpeak 在更新频道时有时间限制。特定频道的连续更新之间必须有 10-15 秒的间隔。

下面给出八个通道及其值和含义

频道名称(value1-meaning、value2-meaning等):

1) 设备控制 (0 -lightON, 1- lightOff, 2- fan ON, 3- Fan Off)

2)灯状态(0-灯灭,1-灯亮)

3) 风扇状态(0-风扇关闭,1-风扇开启)

4)湿度(湿度值)

5)温度(温度值)

6)入侵者通知(1-入侵者警报)

7)火灾通知(1-火灾警报)

8)客人通知(1-客人提醒)

当您单击任何频道时,您可以看到其频道 ID 并在 API 密钥选项卡中写入 API 密钥。需要频道 ID 才能获取频道中的信息/值。并且需要写入密钥才能在通道中存储值。

更新频道的http请求是:

https://api.thingspeak.com/update?api_key=&field1=

替换为通道对应的write key,取值可以是(0/1为设备控制或温湿度值)

从通道读取值的http请求是:

https://api.thingspeak.com/channels//field/field1/last.html

被我们想要读取的通道的特定通道 id 替换。

第 3 步:程序

该程序分为 3 个部分:

A) Arduino 程序 :arduino 的程序非常简单。它串行接收来自 ESP8266 的数据,并根据接收到的数据控制设备。有关该程序的更多信息,请参阅该程序本身的注释。

B) ESP8266 程序 ESP8266的程序涉及3件事

1) 使用http请求更新温湿度

client.print(String("GET ") + "/update?key=&field1="+humity+" HTTP/1.1\r\n" + "Host:" + host + " \r\n" + "连接:关闭\r\n\r\n"); //更新湿度 client.print(String("GET ") + "/update?key=&field1="+temperature+" HTTP/1.1\r\n" + "Host:" + host + "\r \n" + "连接:关闭\r\n\r\n"); // 更新温度 

被分别在thingspeak 通道中找到的湿度和温度对应的写入键替换。和主机是 api.thingspeak.com。

从以下位置下载 dht 库:https://github.com/adafruit/DHT-sensor-library

2) 根据得到的值读取thingpeak的相应通道和控制设备:

client.print(String("GET ") + "/channels//field/field1/last.html HTTP/1.1\r\n" + "Host:" + host + " \r\n" + "连接:关闭\r\n\r\n"); 

其中 替换为在 thingspeak 中找到的相应频道 ID。

3) 推箱高温报警

String host1="api.pushingbox.com";client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host :" + host1 + "\r\n" + "连接:关闭\r\n\r\n"); 

其中 被 pushbox 中的设备 id 替换。

第 4 步:配置 linkit smart 7688 duo 和网络摄像头

在这个项目中,网络摄像头和linkit smart 7688 duo 用于捕获所需的照片并将其发送给用户。您也可以使用arduino摄像头模块并与arduino接口或使用可以使用任何IP摄像头。

按住 linkit smart 7688 上的 wifi 按钮 20 秒以重置电路板。然后在重置 wifi 设置后,您将能够在无线网络连接中看到其接入点名称。现在将计算机连接到该网络。

连接后打开浏览器并在地址栏中输入 192.168.100.1。您将能够看到它的门户。

设置密码以登录其门户。

登录后,转到网络选项卡并选择站模式(我们需要它(linkit smart 7688 duo)来访问互联网)并将其连接到您的 Wifi 网络,然后按配置并重新启动。

板子重新启动后,它会被分配一个本地 IP 地址。使用任何 IP 工具或路由器门户找出地址。就我而言,它是 192.168.1.4。

现在在浏览器的地址栏中输入本地 IP 地址。确保计算机与 linkit smart 连接到同一网络。您将被要求再次登录。

要启用来自网络摄像头的流媒体,您应该启用 MJPG 流媒体(mjpg-streamer 是一种命令行应用程序,可将 JPEG 帧从一个或多个输入插件复制到多个输出插件)。要在门户中执行此操作,请转到右上角的 OpenWrt 位置。您需要重新登录。

登录后,转到服务选项卡并选中启用 MJPG 流媒体并为此服务分配端口号。我已经分配了4440。点击保存并申请。

设置完成后,您可以通过 OTG 电缆将网络摄像头连接到 linkit smart 7688 duo usb 主机。

现在要查看流,请打开浏览器并在地址栏中键入 <本地 IP 地址>:<端口>。就我而言,它是 192.168.1.4:4400

要拍摄快照,请键入命令 :?action=snapshot

现在这个图像在本地可用,但我们需要使其可用于推送框服务。为此,我们需要进行端口转发。 端口转发可以在路由器门户中完成。不同路由器的进程id不同。只是谷歌知道如何为特定路由器端口转发。通常在NAT服务下可用。

端口转发后,使用可以从您的外部 IP 访问此端口(即 .. 4440)。外部 IP 可以通过在 google 中绑定“whats my ip”来找到。

你需要把这个地址 ie.. http://:?action=snapshot 放在 pushbox 中(这在下一步中解释),以便pushbox 可以访问这个图像并将它附加到邮件和需要时发送给您。

您也可以将图像存储在 sd 卡中,因为 Linkit smart 7688 duo 还带有一个用于存储信息的 sd 卡插槽。

有关这方面的更多信息,请访问:https://docs.labs.mediatek.com/resource/linkit-smart-7688/en/get-started/get-started-with-the-linkit-smart-7688-duo -开发板/

第 5 步:配置 PushingBox

pushbox 用于将项目中不同警报的通知发送到gmail。

使用谷歌账户登录pushbox:https://www.pushingbox.com/

转到我的服务--> 添加服务。有许多服务可供选择,例如 Gmail、推特、Android 推送通知等......

选择 Gmail(因为我们需要将照片作为附件发送)并填写相应的 Gmail 名称配置和必须向其发送警报的用户的 Gmail id。

转到我的场景并创建一个新场景。为场景命名(例如:ALERT)添加之前创建的服务。

写下合适的邮件主题和正文并输入网址以获取网络摄像头的屏幕截图以附加照片。为不同的警报创建不同的场景。

执行推箱子场景的api是:http://api.pushingbox.com/pushingbox?devid=

第 6 步:使用 Backendless 创建 Alexa Skill

backendless 用于创建 alexa 技能。这是一个简单的拖放编程 用于创建可通过后端 API 访问的 alexa 技能(或任何程序)。

在 backendless 中创建一个帐户:https://backendless.com/

  • 使用 backendless 帐户登录您的帐户。单击创建应用程序并为您的应用程序命名/
  • 单击位于左侧图标栏中的业务逻辑图标。您将看到 API 服务屏幕。
  • 点击“+”图标创建一个新服务。确保在“新服务”弹出窗口中选择 CODELESS。输入“AlexaService”作为服务名称。单击“保存”按钮:
  • Backendless 创建 API 服务并提示您为该服务创建方法。这将是处理来自 Alexa 请求的方法。为方法名称输入“handleRequest”。确保为 REST 操作选择 POST,并声明名称为“req”的参数并键入“Any Object”,如下所示:

Backendless 为方法的无代码逻辑创建了一个占位符。单击 EDIT 按钮开始切换到 Codeless Logic Designer。

在创建的函数占位符块中,单击显示“doSomething”的区域并将其更改为“sendAlexaResponse”。此函数用于让 alexa 说出一些可以作为参数传递的内容。点击 SAVE 按钮保存函数:

单击位于“功能”一词旁边紫色块中的齿轮图标。通过拖动输入块来添加两个参数,如下图所示。将参数的名称指定为“whatToSay”和“waitForResponse”。请注意,当您添加参数时,上下文块区域会自动填充代表参数值的块:

修改函数的逻辑,使其如下图所示。对于“创建对象”块,使用齿轮图标更改对象属性的名称。不要忘记单击“保存”按钮来保存您的工作。

既然已经构建了自定义函数,请切换回 AlexaService 服务的 handleRequest 方法。单击左侧工具栏中的 Custom Functions 类别并拖动 sendAlexaResponse 块以连接您的服务方法的返回连接器:

以上步骤也可以在他们的网站上找到:https://backendless.com/developing-alexa-skill-without-writing-any-code-part1-codeless-in-backendless-mbaas/

https://backendless.com/developing-an-alexa-skill-without-writing-any-code-part2-slots/

单击浏览器部分中函数下的“添加新”节点。在创建的函数占位符块中,单击“doSomething”区域并将其更改为“getIntentName”

修改块,使函数看起来像这样:

这将根据示例话语获得意图名称。回到浏览器部分的api services->-->handle request。变量和逻辑是从系统部分创建的。创建以下变量:

接下来我们将意图名称存储到请求变量中。然后与意图进行比较。例如,如果请求是“介绍”,则响应变量设置为“嗨!我可以控制.......”,这个响应最终被 alexa 朗读。

修改块如下图:

如果请求是 LightsOn 意图,那么我们使用 http get 请求将 thingspeak 通道更新为“0”,同时我们更新设备状态(1/0 取决于开/关)。 LightsOff、FanOn和FanOff重复同样的事情。

对于天气,我们从温度和湿度通道读取并将结果存储在响应变量中。由于通道只提供值,我们附加文本以使响应有意义:

对于客厅的快照,我们运行 pushbox 场景:

对于设备状态,我们从thingspeak的状态通道中读取信息:

对于我们从警报渠道(火灾、入侵者和访客)中读取的通知和警报:

根据我们从通知字段获得的值,相应的警报消息存储在 respond0 变量中。如果没有通知则不存储通知消息。

一旦通知被读出,通知通道中的“0”就会更新,这样 alexa 就不会再次读取相同的通知。然后最后根据请求,将 response0/respond 变量读出。

PS:在backendless中创建好需要的模型后,点击codeless界面右上角的deploy model来部署模型。

第 7 步:在 Amazon Developer Console 中配置 Alexa 技能:

转到亚马逊开发者控制台并使用亚马逊帐户登录。 https://developer.amazon.com/

转到开发人员控制台并单击 ALEXA 选项卡。点击alexa技能包开始使用。

创建自定义技能类型,为技能指定名称和调用名称。

各自的意图和示例话语在下面的代码中给出。

{ "languageModel":{ "intents":[ { "name":"AMAZON.CancelIntent", "samples":[] }, { "name":"AMAZON.HelpIntent", "samples" :[] }, { "name":"AMAZON.StopIntent", "samples":[] }, { "name":"Camera", "samples":[ "请发送我客厅的快照", "请发一张我家的快照", "请发一张我家的照片", "请发一张我家的照片"], "slots":[] }, { "name":"FanOff", "samples ":[ "关闭风扇", "关闭风扇", "关闭风扇", "关闭风扇" ], "slots":[] }, { "name":"FanOn", "samples" :[ "打开风扇", "打开风扇", "打开风扇", "打开风扇" ], "slots":[] }, { "name":"Introduction", "samples":[ "你能做什么", "你能做什么", "你能为我做什么" ], "slots":[] }, { "name":"LightsOff", "samples":[ "关闭灯”,“关灯”,“关灯”,“关灯”],“插槽”:[] },{“名称”:“LightsOn”,“样本”:[“开灯” ", "开灯", "开灯", "开灯" ], "slots":[] }, { "name":"通知", "samples":[ "我的通知是什么", "是否有任何通知", "是否有任何更新" , "读出我的通知"], "slots":[] }, { "name":"Status", "samples":[ "what is my device status", "what is the status of my devices"], "slots":[] }, { "name":"Weather", "samples":[ "我家天气怎么样", "我家天气怎么样", "天气怎么样", "我家的温度是多少", "温度是多少" ], "slots":[] } ], "invocationName":"我的家" }} 

在配置选项卡中选择 HTTPS 作为服务端点类型,使用来自 backendless 的 API URL 填充默认 URL。

为 SSL 证书中的默认端点选择证书中的第二个选项。您也可以使用测试模拟器测试技能。

测试完成后,您可以使用所需的发布信息发布技能。

第 8 步:最终设​​置并完成!

如下图进行电路连接

有时 ESP8266 故障 因为 不足 当前。 所以, 虽然 不是 提及 电路, 建议使用单独的 3.3v 为 ESP8266 供电 来源。 如果 使用 力量 银行 确保使用 3.3v 稳压器将电压从 5v 降低到 3.3v。

将程序上传到 ESP8266 和 arduino。我已经展示了与灯泡的连接,同样的东西可以扩展到风扇或任何设备。

最后用amazon echo或echosim.io来测试你的技能。

必须 激活 技能 使用 调用 姓名 ( 作为 我的 案例 - “我的 家”)。 有时 不会 工作 如果 使用 没有 调用 姓名 作为 显示 情侣 我的 视频。

希望你喜欢这个教程!

谢谢!

代码

  • Smart_bell_ESP8266.ino
  • Home_monitor_arduino.ino
  • Home_Monitor_ESP8266.ino
Smart_bell_ESP8266.inoArduino
ESP8266 获取入侵者和访客警报的代码
/* * 此草图是智能铃和家庭安全的实现 * */#include #include//----- -------------------------------------// 变量//-------- ----------------------------------int intruder=0,guest=2; // pin 0 作为入侵者警报和 pin2 作为访客 alertconst char* ssid ="SSID"; //你的WIFIconst的SSID char* password ="password"; // Wifi密码//-------------------------------------------------------- -const char* host ="api.thingspeak.com";void setup() { Serial.begin(115200);延迟(10); // 我们首先连接到 WiFi 网络 Serial.println(); Serial.println(); Serial.print("连接到"); Serial.println(ssid); /* 明确地将 ESP8266 设置为 WiFi 客户端,否则,默认情况下,它会尝试同时充当客户端和接入点,并可能导致 WiFi 网络上的其他 WiFi 设备出现网络问题。 */ WiFi.mode(WIFI_STA); WiFi.begin(ssid, 密码);而(WiFi.status()!=WL_CONNECTED){延迟(500); Serial.print("."); Serial.println(""); Serial.println("WiFi 已连接"); Serial.println("IP地址:"); Serial.println(WiFi.localIP());}int value =0;int x,y=0,z,k=0;void loop() { delay(1000); } ++值; Serial.print("连接到"); Serial.println(主机); // 使用 WiFiClient 类创建 TCP 连接 WiFiClient 客户端; const int httpPort =80; if (!client.connect(host, httpPort)) { Serial.println("连接失败");返回; Serial.print("请求地址:"); //============================================================================================================// 入侵者警报 //==========================================================================================================x=digitalRead(intruder);//Serial.println(x);如果(x==0){y=0; } if(x==1&&y==0) { Serial.println("发送警报请稍等.....");延迟(1000); String host1="api.pushingbox.com"; client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host:" + host1 + "\r\n" + "Connection:close\r\ n\r\n"); // 执行推箱api client.print(String("GET ") + "/update?api_key=&field1=1 HTTP/1.1\r\n" + "Host:" + host + "\r\n " + "连接:关闭\r\n\r\n"); //更新入侵者通知延迟(1000); y=1; } //==============================================================================================================// 入侵者警报结束//============================================================================================================//==========================================================================================================// 客人提醒 //=============================================================================================================长t1; z=digitalRead(guest); if(z==0 &&(millis()>=t1+300000)) // 等待 5 分钟以避免由于多次按门铃而发送多次警报 { k=0; } if(x==1&&k==0) { t1=millis(); // 将当前时间戳存储在 t1 Serial.println("Sending Alert Pls Wait.....");延迟(1000); //延迟发送警报和切换去抖动 String host1="api.pushingbox.com"; client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host:" + host1 + "\r\n" + "Connection:close\r\ n\r\n"); // 执行推箱api client.print(String("GET ") + "/update?api_key=&field1=1 HTTP/1.1\r\n" + "Host:" + host + "\r\n " + "连接:关闭\r\n\r\n"); //更新客人通知延迟(1000); k=1; } //==============================================================================================================//客人提醒结束//============================================================================================================无符号长超时 =毫秒(); while (client.available() ==0) { if (millis() - timeout> 5000) { Serial.println(">>> 客户端超时!");客户端停止();返回; } } //Serial.println("关闭连接");}
Home_monitor_arduino.inoArduino
Arduino 控制电器的代码
//家庭自动化实现中的这个草图#include // 导入串行库#include//--------- --------------------------------// 引脚定义//------------ -----------------------------#define Light 2 // pin 2 to control light#define fan 3 // pin 3 to control风扇//-------------------------------------------// 变量// ------------------------------------------char e;int p=0, q=0; //这些变量防止打开/关闭已经打开/关闭的设备SoftwareSerial home_monitor(10, 11); // RX, TXchar control_data; // 通过 Bluetoothvoid setup() 传输的数据 { // 把你的设置代码放在这里,运行一次:home_monitor.begin(115200); Serial.begin(9600); pinMode(13,OUTPUT);}void loop() { // 把你的主要代码放在这里,重复运行: if (home_monitor.available()){ control_data=home_monitor.read(); // 从 ESP8266 串行获取控制信息 e=control_data;串行打印(控制数据); //============================================================================================================// Device Control //============================================================================================================// Performing required operations based on the value of channel //------------- ------------------------------------------------ // LIGHT //----------------------------------------------- -------------- if(e=='0'&&p==0) //Light ON { digitalWrite(Light,LOW); p=1; } if(e=='1'&&p==1) //Light off { digitalWrite(Light,HIGH); p=0; } //------------------------------------------------------------- // Heater //------------------------------------------------------------- if(e=='2'&&q==0) { digitalWrite(fan,HIGH); q=1; } if(e=='3'&&q==1) { digitalWrite(fan,LOW); q=0; } }}
Home_Monitor_ESP8266.inoArduino
Code For ESP8266 to update humidity and temperature in thingspeak and also retrieve control information from thingspeak
/* * This sketch updates wheather information in thingspeak.com and also retrieve control information from thingspeak.com * It send the control information to arduino serially */#include #include#include "DHT.h" // including the library of DHT11 temperature and humidity sensor#define DHTTYPE DHT11 // DHT 11#define dht_dpin 2 // define GPIO2 as data input DHT dht(dht_dpin, DHTTYPE); //------------------------------------------// variables//------------------------------------------//dht DHT;char c,e; // stores the bytes coming from the serverfloat temp,h; //stores float value of temp and humididtyString humidity,temperature,line; //stores string value of temp and humididtyint co=0; //control the sending of Alertconst char* ssid ="SSID"; //your SSID of WIFIconst char* password ="password"; // password of Wifi//--------------------------------------------const char* host ="api.thingspeak.com";void setup() { dht.begin(); Serial.begin(115200);延迟(10); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default, would try to act as both a client and an access-point and could cause network-issues with your other WiFi-devices on your WiFi-network. */ WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() !=WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address:"); Serial.println(WiFi.localIP());}int value =0;void loop() { delay(1000); ++value; Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort =80; if (!client.connect(host, httpPort)) { Serial.println("connection failed");返回; } Serial.print("Requesting URL:"); //============================================================================================================// Mini Weather Station //============================================================================================================h =dht.readHumidity(); //reads humidity and temperature temp =dht.readTemperature(); if(temp<50.0) { co=0; } if(temp>
=50.0&&co==0) // send alert if temperature is above 50 degrees and co is used to avoid multiple alert sending { Serial.println("Sending Alert please wait.......");延迟(1000); String host1="api.pushingbox.com"; client.print(String("GET ") + "/pushingbox?devid= HTTP/1.1\r\n" + "Host:" + host1 + "\r\n" + "Connection:close\r\n\r\n"); //pushingbox api to send alert delay(1000); client.print(String("GET ") + "/update?key=&field1=1 HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); //updating thingspeak fire alert channel co=1; } humidity=String(h); temperature=String(temp); Serial.println(h); Serial.println(temp); client.print(String("GET ") + "/update?key=&field1="+humidity+" HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); //update humidity in thingspeak channel client.print(String("GET ") + "/update?key=&field1="+temperature+" HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); ////update temperature in thingspeak channel //============================================================================================================// End of Weather Station//============================================================================================================//============================================================================================================// Sending Control info to arduino Serially//============================================================================================================// This will send the request to the server client.print(String("GET ") + "/channels//field/field1/last.html HTTP/1.1\r\n" + "Host:" + host + "\r\n" + "Connection:close\r\n\r\n"); // get information about device control unsigned long timeout =millis(); while (client.available() ==0) { if (millis() - timeout> 5000) { Serial.println(">>> Client Timeout !"); client.stop();返回; } } // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line =client.readStringUntil('\r'); } Serial.print(line); // received by arduino serially //Serial.println("closing connection");}

示意图


制造工艺

  1. 家庭自动化应用
  2. 使用 RFID 标签进行家庭安全监控
  3. 基于 LoRa 的智能城市空气质量监测
  4. 多温度传感器
  5. 使用 K30 传感器监测二氧化碳
  6. Alexa,打开这盏灯:Amazon Echo 的智能 3D 传感器
  7. 家庭植物浇水系统
  8. 由 Alexa 激活的 Arduino 家庭控制器
  9. 学校的智能温度监测
  10. 当地气象站
  11. SmartWristband
  12. 监测健康站