查看: 488|回复: 1
打印 上一主题 下一主题

[Seeed BeagleBone Green学习笔记] M2M基礎設計

[复制链接] qrcode

27

主题

28

帖子

85

积分

注册会员

Rank: 2

积分
85
楼主
跳转到指定楼层
发表于 2016-1-7 03:58 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

<前言>

繼上一篇的學習,我們知道在Local端自己觸發MQTT的收發,但事實上是用在物聯網之中Machine To Machine(M2M),因此本篇將實作M2M的溝通方式,採用Intel Edison當Publisher,而BBG當Subscriber,當然,任何可以安裝node.js的開發板也能應用在本篇


<準備>

1. BBG開發板

2. MicroUSB傳輸線(BBG用)

3. Edison開發板或者另外裝有nodejs之開發板

4. MicroUSB傳輸線或者5~12V Adapter(電源) (Edison用)

5. 光敏電阻模塊


<實作>

1. M2M在物聯網之中扮演重要角色,讓訊息可以在各個裝置中傳遞,因為MQTT的特性,使得訊息輕量化,讓開發板不需要花費太多資源在接收和發送的處理上,本篇將詳述如何實作,假設的場景是您回到家中,打開了客廳的電燈,當Edison偵測到光源後,將訊息傳送給MQTT雲端Broker,再將訊息轉送給在房間內的BBG,之後也打開電燈


2. 將Edison利用MicroUSB傳輸線連接電腦或者使用電源供電,這裡我假設您已經設定好Wifi的資訊,已經可連上網路


3. 打開Serial console,這裡我使用MobaXterm,利用SSH連上Edison,輸入您設定好的帳號密碼來登入,並輸入以下指令安裝MQTT和MRAA函式庫,Edison原始鏡像已經有安裝了node.js

npm install mqtt -g 
npm install mraa -g 


4. 安裝詳細步驟可以參考上一篇,這裡不再贅述,輸入以下指令創建push.js檔案

vi push.js


5. 創建檔案後,輸入以下程式碼,按下按鍵"I"即可編輯檔案

var m = require(\'mraa\'); //require mraa
console.log(\'MRAA Version: \' + m.getVersion()); //write the mraa version to the conso

var analogPin0 = new m.Aio(3); //setup access analog inpuput pin 0
var analogValue = analogPin0.read(); //read the value of the analog pin
var mqtt    = require(\'mqtt\');
var client  = mqtt.connect(\'mqtt://broker.mqttdashboard.com\');

client.on(\'connect\', function () {
  client.publish(\'Light\', analogValue.toString());
  client.end();
});


輸入完畢後按下按鍵ESC,再按下按鍵":",輸入wq後,按下按鍵Enter,儲存並離開


6. 將Edison上的A3 Analog腳位插上光敏電阻模塊,即接線如下:

Pin A3 <=> OUT
5V <=> VCC
GND <=> GND

至此完成Publisher的設計


7. 將BBG用MicroUSB傳輸線連接電腦,之後打開Cloud9 IDE,繼上ㄧ篇的mqtt.js為基礎來修改,修改好的程式碼如下

var mqtt = require(\'mqtt\');
var b = require(\'bonescript\');

var client  = mqtt.connect(\'mqtt://broker.mqttdashboard.com\');
var timer;

b.pinMode("USR0", b.OUTPUT);
b.pinMode("USR1", b.OUTPUT);
b.pinMode("USR2", b.OUTPUT);
b.pinMode("USR3", b.OUTPUT);

client.on(\'connect\', function () {
  client.subscribe(\'Light\');
});
 
client.on(\'message\', function (topic, message) {
  // message is Buffer
  console.log(message.toString());
  if(parseInt(message.toString()) >= 600)
  {
    console.log("Do LED Blinking!");
    doNothing();
    timer=setInterval(periodicActivity, 1000);
  }
  else
  {
    console.log("Do Nothing!");
    doNothing();
  }
});


function periodicActivity()
{
  b.digitalWrite("USR0",  level(Math.random()*10)); //if ledState is true then write a \'1\' (high) otherwise write a \'0\' (low)
  b.digitalWrite("USR1",  level(Math.random()*10)); //if ledState is true then write a \'1\' (high) otherwise write a \'0\' (low)
  b.digitalWrite("USR2",  level(Math.random()*10)); //if ledState is true then write a \'1\' (high) otherwise write a \'0\' (low)
  b.digitalWrite("USR3",  level(Math.random()*10)); //if ledState is true then write a \'1\' (high) otherwise write a \'0\' (low)
}

function doNothing()
{
  clearInterval(timer);
}

function level(x)
{
  if(x>=5)
    return b.LOW
  else
    return b.HIGH
    
}
其中週期觸發改為setInterval方式,此方式可以設定成Timer來開啟跟關閉,避免重複觸發造成LED越閃越快,clearInterval負責關閉Timer的觸發,此外,當Edison將光敏電阻的讀值送上Broker時,BBG去接收資料,並將讀值做判定,當光照高時候就開啟程式中的Timer,以此Callback LED閃爍函式periodicActivity,另外一方面,光照低的時候就關閉Timer,停止LED閃爍函式

至此完成Subscriber設計


<實測>

8. 完成修改後,儲存並運行,按下功能選單上的RUN按鈕即可,如下圖:

執行mqtt.js


9. 回到Edison的Serial  console,輸入以下指令來運行,將讀值送上MQTT Broker

node push.js

輸出MRAA版本資訊只是辨認程式正常運行


10. 再度切回Cloud9 IDE,觀看BBG接收到的訊息

其中757代表接收到的光敏電阻讀值,因為大於600,所以觸發LED閃爍


11. 將光敏電阻遮蔽,在Edison的Serial console再次輸入以下指令,輸入完畢後回到Cloud9 IDE,觀看輸出結果

node push.js

遮蔽光敏電阻


因為遮蔽後的讀值為118,未滿600,故關閉Timer,使得LED停止閃爍,完成實測


<小結>

本篇利用M2M的技巧,來達到真正的裝置之間的溝通,這在物聯網之中被廣泛運用,您可以利用此技巧設計出千變萬化的應用產品


作者:MOP 發布於:ICKEY社區

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

79

帖子

6

积分

新手上路

Rank: 1

积分
6
沙发
发表于 2016-3-4 05:39 PM | 只看该作者
顶一个。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表