如何為Arduino設(shè)備構(gòu)建遠(yuǎn)程配置
如果你只能在本地控制一個(gè)智能設(shè)備,那么它并不能被稱之為智能。那有什么用呢?你需要的是遠(yuǎn)程控制設(shè)備的功能。而這正是遠(yuǎn)程配置發(fā)揮作用的地方。
遠(yuǎn)程配置能夠讓開(kāi)發(fā)人員和用戶觸發(fā)行動(dòng),進(jìn)而在任何地點(diǎn)控制他們的設(shè)備。設(shè)備狀態(tài)解析通過(guò)網(wǎng)絡(luò)(在本案例中為PubNub)傳送的信號(hào),并根據(jù)信號(hào)指令永久地改變裝置的狀態(tài)(如燈泡從關(guān)到開(kāi))。
A 遠(yuǎn)程配置的消息傳遞層
在本教程中,我們將展示如何在[基于Atmel的]Arduino聯(lián)網(wǎng)設(shè)備上實(shí)現(xiàn)遠(yuǎn)程配置。在開(kāi)發(fā)的過(guò)程中,我們遇到了兩個(gè)問(wèn)題。
1. 網(wǎng)設(shè)備的狀態(tài)(如在線/離線狀態(tài))
2. 連接到云的設(shè)備的狀態(tài)
通過(guò)使用Presence API,第一個(gè)問(wèn)題迎刃而解,因此,我們將著重關(guān)注第二個(gè)問(wèn)題。我們將采用存儲(chǔ)和回放的方法,存儲(chǔ)并檢索用于家庭自動(dòng)化解決方案的聯(lián)網(wǎng)設(shè)備的狀態(tài)。如此,我們就能夠遠(yuǎn)程控制智能設(shè)備,實(shí)時(shí)發(fā)送信號(hào)。
JSON對(duì)象就是一個(gè)典型的示例,如下所示:
{"狀態(tài)":[
{"通電":"真"},
{"咖啡量: 一半"},
{"溫度":""}
]}
遠(yuǎn)程配置的整體流程
● 注冊(cè)一個(gè)免費(fèi)的PubNub賬戶。如此便可獲得獨(dú)特的發(fā)表/訂閱鍵,用于激活PubNub。這些鍵位于開(kāi)發(fā)人員控制臺(tái)。
● 利用Arduino通過(guò)PubNub物聯(lián)網(wǎng)網(wǎng)絡(luò)發(fā)布消息,控制智能設(shè)備。
● 通過(guò)web瀏覽器,訪問(wèn)這些消息。
了解教程!
步驟一:連接PubNub
例如,控制冰箱的溫度。如下參數(shù)可存儲(chǔ)為設(shè)備的狀態(tài),如查看冰箱門的開(kāi)啟狀態(tài)、溫度、功耗,甚至還有冰箱的容積。
在Arduino IDE上運(yùn)行,并查看步驟二中關(guān)于連接PubNub至Arduino的教程,獲得更多詳情。
步驟二:在Arduino中創(chuàng)建JSON對(duì)象
為在Arduino中創(chuàng)建json對(duì)象,我們需要使用JSON.h庫(kù)。創(chuàng)建上文所述的JSON對(duì)象可參照如下步驟:
aJsonObject *msg = aJson.createObject();
aJson.addStringToObject(msg, "姓名", "Arduino");
aJson.addNumberToObject(msg, "外部溫度", 34);
步驟三:向設(shè)備發(fā)送信號(hào)
除此之外,只需再利用Arduino IDE發(fā)布消息即可。要做到這一點(diǎn),可參照如下代碼:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char pubkey[] = "demo";
char subkey[] = "demo";
char channel[] = "設(shè)備狀態(tài)";
//setup
void setup()
{
Serial.begin(9600);
Serial.println("串口設(shè)置");
while (!Ethernet.begin(mac)) {
Serial.println("以太網(wǎng)設(shè)置錯(cuò)誤");
delay(1000);
}
Serial.println("以太網(wǎng)設(shè)置");
PubNub.begin(pubkey, subkey);
Serial.println("PubNub 設(shè)置");
}
// establishing internet connection to the Arduino and publishing the state建立Arduino網(wǎng)絡(luò)連接并發(fā)布狀態(tài)
void loop()
{
Ethernet.maintain();
EthernetClient *client;
client = PubNub.publish(channel, msg);
if (!client) {
Serial.println("發(fā)布錯(cuò)誤");
} else {
client->stop();
}
delay(5000);
}
另外,如果只能在web瀏覽器上查看設(shè)備狀態(tài)怎么辦?在瀏覽器控制臺(tái)中粘貼如下代碼,并查看狀態(tài)填寫。
// 發(fā)布和訂閱鍵初始化
var pubnub = PUBNUB.init({
publish_key: 'PUBLISH_KEY_HERE',
subscribe_key: 'SUBSCRIBE_KEY_HERE',
uuid: 'devices_state設(shè)備狀態(tài)'
});
// 通過(guò)歷史記錄檢索已經(jīng)發(fā)布到該渠道的消息。
pubnub.history({
channel: '歷史記錄_渠道',
callback: function(m){console.log(JSON.stringify(m))},
});
就是這樣!還有一點(diǎn):PubNub并不限制你發(fā)布或通過(guò)歷史記錄檢索消息的數(shù)量。你可以利用多個(gè)Arduinos進(jìn)行嘗試,并遠(yuǎn)程查看其狀態(tài)。
遠(yuǎn)程配置的用例數(shù)之不盡,從農(nóng)業(yè)到運(yùn)輸和物流,再到家庭自動(dòng)化。它使你能夠在地球上的任何地方完全控制你的智能設(shè)備,功能異常強(qiáng)大。
遠(yuǎn)程配置能夠讓開(kāi)發(fā)人員和用戶觸發(fā)行動(dòng),進(jìn)而在任何地點(diǎn)控制他們的設(shè)備。設(shè)備狀態(tài)解析通過(guò)網(wǎng)絡(luò)(在本案例中為PubNub)傳送的信號(hào),并根據(jù)信號(hào)指令永久地改變裝置的狀態(tài)(如燈泡從關(guān)到開(kāi))。
A 遠(yuǎn)程配置的消息傳遞層
在本教程中,我們將展示如何在[基于Atmel的]Arduino聯(lián)網(wǎng)設(shè)備上實(shí)現(xiàn)遠(yuǎn)程配置。在開(kāi)發(fā)的過(guò)程中,我們遇到了兩個(gè)問(wèn)題。
1. 網(wǎng)設(shè)備的狀態(tài)(如在線/離線狀態(tài))
2. 連接到云的設(shè)備的狀態(tài)
通過(guò)使用Presence API,第一個(gè)問(wèn)題迎刃而解,因此,我們將著重關(guān)注第二個(gè)問(wèn)題。我們將采用存儲(chǔ)和回放的方法,存儲(chǔ)并檢索用于家庭自動(dòng)化解決方案的聯(lián)網(wǎng)設(shè)備的狀態(tài)。如此,我們就能夠遠(yuǎn)程控制智能設(shè)備,實(shí)時(shí)發(fā)送信號(hào)。
JSON對(duì)象就是一個(gè)典型的示例,如下所示:
{"狀態(tài)":[
{"通電":"真"},
{"咖啡量: 一半"},
{"溫度":""}
]}
遠(yuǎn)程配置的整體流程
● 注冊(cè)一個(gè)免費(fèi)的PubNub賬戶。如此便可獲得獨(dú)特的發(fā)表/訂閱鍵,用于激活PubNub。這些鍵位于開(kāi)發(fā)人員控制臺(tái)。
● 利用Arduino通過(guò)PubNub物聯(lián)網(wǎng)網(wǎng)絡(luò)發(fā)布消息,控制智能設(shè)備。
● 通過(guò)web瀏覽器,訪問(wèn)這些消息。
了解教程!
步驟一:連接PubNub
例如,控制冰箱的溫度。如下參數(shù)可存儲(chǔ)為設(shè)備的狀態(tài),如查看冰箱門的開(kāi)啟狀態(tài)、溫度、功耗,甚至還有冰箱的容積。
在Arduino IDE上運(yùn)行,并查看步驟二中關(guān)于連接PubNub至Arduino的教程,獲得更多詳情。
步驟二:在Arduino中創(chuàng)建JSON對(duì)象
為在Arduino中創(chuàng)建json對(duì)象,我們需要使用JSON.h庫(kù)。創(chuàng)建上文所述的JSON對(duì)象可參照如下步驟:
aJsonObject *msg = aJson.createObject();
aJson.addStringToObject(msg, "姓名", "Arduino");
aJson.addNumberToObject(msg, "外部溫度", 34);
步驟三:向設(shè)備發(fā)送信號(hào)
除此之外,只需再利用Arduino IDE發(fā)布消息即可。要做到這一點(diǎn),可參照如下代碼:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char pubkey[] = "demo";
char subkey[] = "demo";
char channel[] = "設(shè)備狀態(tài)";
//setup
void setup()
{
Serial.begin(9600);
Serial.println("串口設(shè)置");
while (!Ethernet.begin(mac)) {
Serial.println("以太網(wǎng)設(shè)置錯(cuò)誤");
delay(1000);
}
Serial.println("以太網(wǎng)設(shè)置");
PubNub.begin(pubkey, subkey);
Serial.println("PubNub 設(shè)置");
}
// establishing internet connection to the Arduino and publishing the state建立Arduino網(wǎng)絡(luò)連接并發(fā)布狀態(tài)
void loop()
{
Ethernet.maintain();
EthernetClient *client;
client = PubNub.publish(channel, msg);
if (!client) {
Serial.println("發(fā)布錯(cuò)誤");
} else {
client->stop();
}
delay(5000);
}
另外,如果只能在web瀏覽器上查看設(shè)備狀態(tài)怎么辦?在瀏覽器控制臺(tái)中粘貼如下代碼,并查看狀態(tài)填寫。
// 發(fā)布和訂閱鍵初始化
var pubnub = PUBNUB.init({
publish_key: 'PUBLISH_KEY_HERE',
subscribe_key: 'SUBSCRIBE_KEY_HERE',
uuid: 'devices_state設(shè)備狀態(tài)'
});
// 通過(guò)歷史記錄檢索已經(jīng)發(fā)布到該渠道的消息。
pubnub.history({
channel: '歷史記錄_渠道',
callback: function(m){console.log(JSON.stringify(m))},
});
就是這樣!還有一點(diǎn):PubNub并不限制你發(fā)布或通過(guò)歷史記錄檢索消息的數(shù)量。你可以利用多個(gè)Arduinos進(jìn)行嘗試,并遠(yuǎn)程查看其狀態(tài)。
遠(yuǎn)程配置的用例數(shù)之不盡,從農(nóng)業(yè)到運(yùn)輸和物流,再到家庭自動(dòng)化。它使你能夠在地球上的任何地方完全控制你的智能設(shè)備,功能異常強(qiáng)大。





