當NAS遇見IoT — Particle Photon

Particle公司擁有完善的開源物聯網硬體及平台,從2013年開始,就首先推出了基於TI CC3000的CORTEX M3的物聯網開發板。

目前推出的系列有:

  • Particle Core
  • Particle Photon
  • Particle Electron

其中,Particle Electron是基於3G連網為主的開發板,Core 和 Photon 都是使用wifi做為連結的方式。

Particle不管是韌體、軟體甚至硬體部份,目前都是開源的,開發者可以自行下載並客製屬於自己的物聯網硬體及平台:

首先,要讓Photon與QNAP NAS整合,需要先安裝相關的服務:

Step 1: 安裝 Container Station

Step 2: 透過 Container Station 安裝 Node-Red (原生的 Node-Red 預設並不支援 Particle 模組,需要請安裝此版本)

Step 3: 安裝完成後,可直接開啟 Node-Red 管理頁面,如下圖所示 (http://your-nas-ip:1880, 預設port為1880)

Step 4: 成功開啟 Node-Red 後,可以找到 Particle 相關的 node 模組。目前支援三種類別,event, function 和 variable

screen-shot-2016-10-20-at-10-55-25-am

Step 5: 接下來,開始設置 Particle Photon之前,需要安裝相關的設定環境 (透過command line進行flash,可參考此方式)。

# how to install the particle-cli
$ npm install -g particle-cli
$ particle login

Step 6: 更新 Photon (注意:需要進入DFU mode)

如何進入DFU mode

  1. 從裝置上找到兩個按鈕,並同時按下 RESET 和 SETUP 按鈕
  2. 先放開 RESET 按鈕,並持續按壓住 SETUP
  3. 當燈號變為閃爍”黃燈”時,代表裝置已進入 DFU mode

$ particle update

particle update info

更新成功後,可以透過下面指令查詢目前版本

$ particle identify
Your device id is 2xx02b000xxxxxxxxx30xx3x
Your system firmware version is 0.5.2

Step 7: 第一次拿 Photon 需要先設定 wifi,並且連到 Particle Cloud (如果需要直接透過手機連結 Photon,可以參考此方式)。

連結 USB 啟動 Photon,第一次使用會持續閃爍”藍燈

$ particle setup

登入 Particle Cloud → 設定無線網路 → 命名你的 Photon → 成功設定好 Photon
 一旦無線網路設定完成,可以發現從原本的閃爍的藍燈,會轉變成呼吸燈,代表已經成功連上 Particle Cloud.

particle setup

Step 8: 列出目前的 Particle 裝置,下面圖示可以看到剛剛設定完成的 Jarvis-NAS-Photon,後面的2d0xxxxxxxxxxx037是裝置id,可以先紀錄下來,等會會使用到。

 $ particle list

設定好 Particle 裝置 以及 NAS後,開始串接裝置與 Node-Red。

首先,登入 Particle Build,這邊需要做兩件事情:
 1. 放進測試用的原始碼,測試 event, function 以及 variable.
 2. 取得存取相關 API 權限的 access token,之後要放到 Node-Red 使用。

我們先來將下面的測試的原始碼放進剛剛設置好的 Photon,功能主要是能夠透過event發送LED狀態、可透過function取得控制LED狀態以及目前LED狀態為何。

int ledStatus = 0;
int ledPin = D7;
// LED function
int getLedStatus(String cmd);
int setLedStatus(String cmd);
void setup() {
pinMode(ledPin, OUTPUT);
// Set a variable let user can get LED status.
Particle.variable(“ledstatus”, ledStatus);
// Set function let user can call it.
Particle.function(“getLedStatus”, getLedStatus);
Particle.function(“setLedStatus”, setLedStatus);
}
void loop() {
ledStatus = digitalRead(ledPin);
// Publish event to Particle cloud.
Particle.publish(“ledstatus”, String(ledStatus));
delay(5000);
}
int getLedStatus(String cmd){
ledStatus = digitalRead(ledPin);
return ledStatus;
}
int setLedStatus(String cmd){
if(cmd == “true”){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}

貼上程式碼後,就可以進行燒錄的動作,如下圖:

可以順便注意一下,當燒錄過程中,裝置的 LED 狀態會有黃藍燈一起亮,然後閃爍並連線,最後轉換成呼吸燈,代表燒錄成功。

現在已經完成裝置上的設定,接下來就是要取得存取相關 API 權限的 access token,之後要放到 Node-Red 使用,如下圖:

get token

取得 access token 後,將此 token 放進 Node-Red 提供的 Particle node 裡,
 首先先建立一個新的 Particle Cloud config,接下來填入相關資料,例如:Name, Device ID, Event

Create new Particle config for Node-Red

完成後,如下圖,填上剛剛設定上去的 Event 名稱”ledstatus”,再將輸出的 node 與 Particle node 串接起來。

fill-in info

所輸出 event 的結果….

Particle 除了透過網頁的方式取得裝置相關的資訊外,也可以透過 REST API 的方式取得目前裝置的狀態資訊

# GET
https://api.particle.io/v1/devices/2d002bxxxxxxxxxx03037?access_token=e2bd9e98axxxxxxxxxxf1970916xxxxxxx
particle rest api

取得 ledstatus variable 狀態

# GET
https://api.particle.io/v1/devices/2d002bxxxxxxxxxx03037/ledstatus?access_token=e2bd9e98axxxxxxxxxxf1970916xxxxxxx

取得目前LED狀態,透過 Particle function

# POST
curl https://api.particle.io/v1/devices/2d002b00xxxxxxxxx53xx037/getLedStatus \
-d access_token=e2bd9e98xxxxxxxxxxxxx19709xxxxxxxxxx6c92c
{
“id”: “2d002b000a47353235303037”,
“last_app”: “”,
“connected”: true,
“return_value”: 1
}

設定 LED 狀態 setLedStatus

# POST, args=true -> LED On; args=false -> LED off
curl https://api.particle.io/v1/devices/2d002b00xxxxxxxxx53xx037/setLedStatus \
-d access_token=e2bd9e98xxxxxxxxxxxxx19709xxxxxxxxxx6c92c \
-d “args=true”
{
“id”: “2d002b000a47353235303037”,
“last_app”: “”,
“connected”: true,
“return_value”: 536959528
}

除了可以透過 REST API 方式取得與控制裝置外,也可以透過 Node-Red 的方式控制,透過 inject node 來控制 LED 的開關.

node-red control led

透過 Node-Red 來控制裝置並不難,如果又不想要花錢申請雲端平台的話,又剛好 NAS 又支援 docker,其實自己搞一個 IoT 的簡易服務也並不難。

之後會針對更多 Particle 相關的應用介紹,包含:
 1. 建置自己的 Particle Cloud
 2. 整合水質感測裝置,打造屬於自己的魚缸監控系統
 3. 介紹一下擁有 3G module 的 Particle Electron


Originally published at I’m RD..