[ Raspberry Pi ] 透過 Python 傳送溫溼度資訊到 MediaTek Cloud Sandbox (MCS) - API

與 IoT 相關的雲端服務為數眾多,例如:ThingSpeakWoT.CityAWSIBM BluemixMediaTek MCSGoogle Firebase 等,並在透過這些雲端服務可在對資料進行資料視覺化、資料分析與其它的應用,而本文透過 Raspberry Pi 將溫溼度資料傳送到 MediaTek Cloud Sandbox (MCS) 。


執行步驟


前置準備作業

1.準備 Raspberry Pi 3 Model B 開發板

2.準備 Micro SD (已安裝 Raspbian) - 【 透過 MacOS 安裝 Raspbian 教學 】

3.將 Micro SD 裝入到 Raspberry Pi 中

4.已設定網路

5.安裝 GrovePi+

6.安裝 Grove – Temperature and Humidity Sensor (D4)

7.安裝 GROVE - LCD RGB BACKLIGHT (I2C-2)

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

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

10.其它前置作業
請參考 [ Raspberry Pi ] 透過 Python 顯示溫溼度資訊到 Grove LCD


Sensor 、 LCD 、 GrovePi+ 與 Raspberry Pi 連接圖


MediaTek Cloud Sandbox (MCS) 端

Step 1. 到 MediaTek Cloud Sandbox (MCS) 網站申請帳號


Step 2. 登入 MediaTek Cloud Sandbox (MCS) 網站

Imgur


Step 3. 點擊 開始

Imgur


Step 4. 點擊 創建

Imgur


Step 5. 輸入 產品原型名稱、產品原型版本、硬體平台、產業、應用程式 再按儲存


Step 6. 點擊 Last updated prototype 中的 Raspberry Pi


Step 7. 點擊 馬上新增資料通道 ! 中的 新增


Step 8. 點擊 顯示器 中的 新增


Step 9. 輸入 Temperature 的 資料通道名稱資料通道 Id資料型態單位 再按 儲存


Step 10. 點擊 顯示器 中的 新增


Step 11. 輸入 Humidity 的 資料通道名稱資料通道 Id資料型態單位 再按 儲存


Step 12. 點擊 測試裝置 ➙ Linkit Smart 7688 Duo 取得 DeviceId 與 DeviceKey

  • 點擊 測試裝置

  • 點擊左下角 新增測試裝置

  • 輸入 裝置名稱

  • 點擊下方 裝置 中的 Raspberry Pi


Raspberry Pi

Step 1. 透過 Python 讀取溫溼度資訊並傳送到 MediaTek Cloud Sandbox (MCS)

  • 更新程式中的 DeviceId 與 DeviceKey
#**************************************************** 
# Import Package                                                                           
#**************************************************** 

import time  
import httplib, urllib  
import json  
import sys  
sys.path.append('/home/pi/rpi/code/Package')  
import grovepi  
from grove_rgb_lcd import *

#**************************************************** 
# Set Pin No, MediaTek Cloud Sandbox (MCS) Key                                                                          
#**************************************************** 

sensor = 4  
blue = 0    # The Blue colored sensor.  
white = 1   # The White colored sensor.

deviceId = "D2WKWKcr"  
deviceKey = "LcWuC5DykgbM5fqS"

#**************************************************** 
# Set MediaTek Cloud Sandbox (MCS) Connection                                                   
#**************************************************** 

def post_to_mcs(payload):  
    headers = {"Content-type": "application/json", "deviceKey": deviceKey}
    not_connected = 1
    while (not_connected):
        try:
            conn = httplib.HTTPConnection("api.mediatek.com:80")
            conn.connect()
            not_connected = 0
        except (httplib.HTTPException, socket.error) as ex:
            print "Error: %s" % ex
            time.sleep(10)  # sleep 10 seconds

    conn.request("POST", "/mcs/v2/devices/" + deviceId + "/datapoints", json.dumps(payload), headers)
    response = conn.getresponse()
    print( response.status, response.reason, json.dumps(payload), time.strftime("%c"))
    data = response.read()
    conn.close()

#**************************************************** 
# Post MediaTek Cloud Sandbox (MCS)                                                  
#**************************************************** 

while True:  
    [temp,humidity] = grovepi.dht(sensor,blue)  
    print("temp = %.02f C humidity =%.02f%%"%(temp, humidity))
    payload = {"datapoints":[{"dataChnId":"Humidity","values":{"value":humidity}},{"dataChnId":"Temperature","values":{"value":temp}}]}
    post_to_mcs(payload)
    time.sleep(5)


Step 2. 將 Python Code 傳送到 Raspberry Pi


Step 3. 執行剛傳到 Raspberry Pi 中的 Python Code

python 檔名.py  

Step 4. Console 執行畫面


Step 6. MediaTek Cloud Sandbox (MCS) 畫面


Step 7. 透過 Postman 來執行 POST 與 GET 的 API 呼叫

[GET]

GET https://api.mediatek.com/mcs/v2/devices/:deviceId/datachannels/:datachannelId/datapoints  
Request Header  
deviceKey:  
Content-Type: application/json  

e.g.,
https://api.mediatek.com/mcs/v2/devices/DjpJIckU/datachannels/Temperature/datapoints

[POST]

POST https://api.mediatek.com/mcs/v2/devices/:deviceId/datapoints  
Request Header  
deviceKey:  
Content-Type: application/json  
Request Body  
{
  "datapoints": 
  [
    {"values": {"value": ""}, "dataChnId": ""}
  ]
}

e.g.,
http://api.mediatek.com/mcs/v2/devices/DjpJIckU/datapoints
Request Body
{ "datapoints": [ {"values": {"value": "48.00"}, "dataChnId": "Humidity"}, {"values": {"value": "27.00"}, "dataChnId": "Temperature"} ] }

將上面 Request Body 的資料放到 jsoneditoronline 來觀看 Imgur

Postman - POST


GitHub
參考資料
List of blogs

Archer

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

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