视频
如果你只能在本地控制一个智能设备,那么它并不能被称之为智能。那有什么用呢?你需要的是远程控制设备的功能。而这正是远程配置发挥作用的地方。
远程配置能够让开发人员和用户触发行动,进而在任何地点控制他们的设备。设备状态解析通过网络(在本案例中为PubNub)传送的信号,并根据信号指令永久地改变装置的状态(如灯泡从关到开)。
A 远程配置的消息传递层
在本教程中,我们将展示如何在[基于Atmel的]Arduino联网设备上实现远程配置。在开发的过程中,我们遇到了两个问题。
1. 网设备的状态(如在线/离线状态)
2. 连接到云的设备的状态
通过使用Presence API,第一个问题迎刃而解,因此,我们将着重关注第二个问题。我们将采用存储和回放的方法,存储并检索用于家庭自动化解决方案的联网设备的状态。如此,我们就能够远程控制智能设备,实时发送信号。
JSON对象就是一个典型的示例,如下所示:
远程配置的整体流程
● 注册一个免费的PubNub账户。如此便可获得独特的发表/订阅键,用于激活PubNub。这些键位于开发人员控制台。
● 利用Arduino通过PubNub物联网网络发布消息,控制智能设备。
● 通过web浏览器,访问这些消息。
了解教程!
步骤一:连接PubNub
例如,控制冰箱的温度。如下参数可存储为设备的状态,如查看冰箱门的开启状态、温度、功耗,甚至还有冰箱的容积。
在Arduino IDE上运行,并查看步骤二中关于连接PubNub至Arduino的教程,获得更多详情。
步骤二:在Arduino中创建JSON对象
为在Arduino中创建json对象,我们需要使用JSON.h库。创建上文所述的JSON对象可参照如下步骤:
aJsonObject *msg = aJson.createObject();
aJson.addStringToObject(msg, "
姓名", "Arduino");
aJson.addNumberToObject(msg, "
外部温度", 34);
步骤三:向设备发送信号
除此之外,只需再利用Arduino IDE发布消息即可。要做到这一点,可参照如下代码:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char pubkey[] = "demo";
char subkey[] = "demo";
char channel[] = "
设备状态
";
//setup
void setup
()
{
Serial.begin(9600);
Serial.println("
串口设置
");
while (!Ethernet.begin(mac)) {
Serial.println("
以太网设置错误
");
delay(1000);
}
Serial.println("
以太网设置
");
PubNub.begin(pubkey, subkey);
Serial.println("PubNub
设置
");
}
// establishing internet connection to the Arduino and publishing the state
建立
Arduino
网络连接并发布状态
void loop()
{
Ethernet.maintain();
EthernetClient *client;
client = PubNub.publish(channel, msg);
if (!client) {
Serial.println("
发布错误");
} else {
client->stop();
}
delay(5000);
}
另外,如果只能在web浏览器上查看设备状态怎么办?在浏览器控制台中粘贴如下代码,并查看状态填写。
//
发布和订阅键初始化
var pubnub = PUBNUB.init({
publish_key: 'PUBLISH_KEY_HERE',
subscribe_key: 'SUBSCRIBE_KEY_HERE',
uuid: 'devices_state
设备状态'
});
//
通过历史记录检索已经发布到该渠道的消息。
pubnub.history({
channel: '
历史记录_渠道',
callback: function(m){console.log(JSON.stringify(m))},
});
就是这样!还有一点:PubNub并不限制你发布或通过历史记录检索消息的数量。你可以利用多个Arduinos进行尝试,并远程查看其状态。
远程配置的用例数之不尽,从农业到运输和物流,再到家庭自动化。它使你能够在地球上的任何地方完全控制你的智能设备,功能异常强大。