與 IoT 相關的雲端服務為數眾多,例如:ThingSpeak、WoT.City、AWS、IBM Bluemix、MediaTek MCS、Google 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) 網站
Step 3. 點擊 開始
Step 4. 點擊 創建
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 來觀看
Postman - POST