[ Linkit Smart 7688 ] 傳送 Sensor Data 到 IBM Bluemix

與 IoT 相關的雲端服務為數眾多,例如:ThingSpeakWoT.CityAWSIBM BluemixMediaTek MCS 等,並在透過這些雲端服務可在對資料進行資料視覺化、資料分析與其它的應用,而本文透過 Linkit Smart 7688 Duo 將 Sensor 資料透過 MQTT 傳送到 IBM Bluemix 。

Imgur


執行步驟


前置準備作業

  1. 準備 Linkit Smart 7688 Duo 開發板

  2. 準備 Arduino Breakout for LinkIt Smart 7688 Duo

  3. 準備 Grove - Temperature & Humidity Sensor

  4. 將 Linkit Smart 7688 Duo 與 Arduino Breakout for LinkIt Smart 7688 Duo 組裝、Grove - Temperature & Humidity Sensor 裝到 A0 的位置並將 Linkit Smart 7688 Duo 連接至電腦

  5. 安裝 Arduino IDE (version: 1.6.6)
    https://www.arduino.cc/en/Main/OldSoftwareReleases

  6. 安裝 IDE ( Sublime Text or Visual Studio Code )

  7. Windows 平台,請安裝 Putty 與 FileZilla
    http://oranwind.org/-linkit/


Linkit Smart 7688 Duo 與 Grove - Temperature & Humidity Sensor 連接圖

Imgur


IBM Bluemix 端 - Publish

Step 1. 到 IBM Bluemix 網站申請帳號

https://console.ng.bluemix.net/


Step 2. 登入 IBM Bluemix 網站


Step 3. 點擊上方 型錄


Step 4. 點擊左邊 物聯網


Step 5. 點擊 Internet of Things Platform


Step 6. 點擊右邊 建立


Step 7. 點擊 啟動儀表板


Step 8. 點擊左邊 裝置


Step 9. 點擊右邊 新增裝置


Step 10. 點擊 建立裝置類型


Step 11. 點擊 建立裝置類型


Step 12. 輸入 名稱 ➙ 輸入完後點擊右下方的 下一步


Step 13. 點擊右下方的 下一步


Step 14. 點擊右下方的 下一步


Step 15. 點擊右下方的 建立


Step 16. 點擊右下方的 下一步


Step 17. 輸入 裝置 ID ➙ 輸入完後點擊右下方的 下一步


Step 18. 點擊右下方的 下一步


Step 19. 點擊右下方的 下一步


Step 20. 點擊右下方的 新增


Step 21. 將裝置認證資訊記錄下來


Linkit Smart 7688 Duo - MCU ( Arduino ) 端

Step 1. 透過 MCU 讀取 Sensor Data

// MCU To MPU
#include <Bridge.h>

// DHT
#include "DHT.h"
#define DHTPIN A0
#define DHTTYPE DHT11 
DHT dht(DHTPIN, DHTTYPE);

void setup() {  
  Serial.begin(9600); 
  dht.begin();
  Bridge.begin();
}

void loop() {  
  // Get Temperature and Humidity
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Display Temperature and Humidity Value
  Serial.print("DHT-Humidity: "); 
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("DHT-Temperature: "); 
  Serial.print(t);
  Serial.println(" *C\t");

  // MCU To MPU
  Bridge.put("Humidity", String(h));
  Bridge.put("Temperature", String(t));

  delay(1000); //每秒回傳一次資料
}

Imgur


Linkit Smart 7688 Duo - MPU ( Python ) 端 - Publish

Step 1. 透過 Python 讀取 MCU Sensor Data

  • 更新程式中 deviceOptions 的 orgtypeidauth-token 欄位
import time  
import sys  
import ibmiotf.application  
import ibmiotf.device  
import json

sys.path.insert(0, '/usr/lib/python2.7/bridge/')  
from bridgeclient import BridgeClient as bridgeclient

value = bridgeclient()

deviceOptions = {  
  "org": "組織 ID",
  "type": "裝置類型",
  "id": "裝置 ID",
  "auth-method": "token",
  "auth-token": "鑑別記號"
}

try:  
    deviceCli = ibmiotf.device.Client(deviceOptions)
except Exception as e:  
    print("Caught exception connecting device: %s" % str(e))
    sys.exit()

deviceCli.connect()

while True:  
    humidity = value.get("h")
    temperature = value.get("t")
    msg = json.JSONEncoder().encode({"d":{"Temperature":temperature, "Humidity":humidity}})
    print "send payload: " + msg
    deviceCli.publishEvent("TemperatureHumidity", "json", msg)
    time.sleep(1)


Step 2. 將 Python Code 傳送到 Linkit Smart 7688 Duo


Step 3. 安裝相關套件於 Linkit Smart 7688 Duo

opkg update  
uci set yunbridge.config.disabled=0  
uci commit  
pip install ibmiotf  
reboot  

Step 4. 執行剛傳到 Linkit Smart 7688 Duo 中的 Python Code

python 檔名.py  

Step 5. Console 執行畫面

  • IBM Bluemix 上所看到的資訊

  • 查看資料內容


IBM Bluemix 端 - Subscribe

Step 1. 點擊左邊的 應用程式


Step 2. 點擊右邊的 產生 API 金鑰


Step 3. 產生 API 金鑰

  • 記錄 API 金鑰鑑別記號 後點擊右下角的 Generate


Step 4. 透過 Python 來執行 Subscribe

  • 更新程式中 deviceOptions 的 orgidauth-keyauth-token 欄位
import signal  
import time  
import sys  
import json  
import ibmiotf.application

def myEventCallback(myEvent):  
    print("%-33s%-32s%s: %s" % (myEvent.timestamp.isoformat(), myEvent.device, myEvent.event, json.dumps(myEvent.data)))

def interruptHandler(signal, frame):  
    client.disconnect()
    sys.exit(0)


options = {  
  "org": "組織 ID",
  "id": "裝置 ID",
  "auth-method": "apikey",
  "auth-key": "API 金鑰",
  "auth-token": "鑑別記號"
}

try:  
    client = ibmiotf.application.Client(options)
    client.connect()
except Exception as e:  
    print(str(e))
    sys.exit()

print("(Press Ctrl+C to disconnect)")  
client.deviceEventCallback = myEventCallback  
client.subscribeToDeviceEvents()

while True:  
    time.sleep(1)


Step 5. 執行 Subscribe 的 Python Code

python 檔名.py  

Step 6. Console 執行畫面


GitHub
參考資料
List of blogs

Archer

Having being a full stack engineer. Experience with C, Python, Objective-C, Swift, Node.js, Lua, Linkit Smart 7688, Raspberry Pi, ARM mbed, Arduino, IoT solutions. Contact us : [email protected]

ALL RIGHTS RESERVED. COPYRIGHT © 2016. Designed and Coded by Makee.io