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

與 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 paho.mqtt.client as mqtt  
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"  
dataChnId1 = "Humidity"  
dataChnId2 = "Temperature"  
MQTT_SERVER = "mqtt.mcs.mediatek.com"  
MQTT_PORT = 1883  
MQTT_ALIVE = 60  
MQTT_TOPIC1 = "mcs/" + deviceId + "/" + deviceKey + "/" + dataChnId1  
MQTT_TOPIC1 = "mcs/" + deviceId + "/" + deviceKey + "/" + dataChnId2

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

mqtt_client = mqtt.Client()  
mqtt_client.connect(MQTT_SERVER, MQTT_PORT, MQTT_ALIVE) 

#**************************************************** 
# Publish 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}}]}
    mqtt_client.publish(MQTT_TOPIC1, json.dumps(payload), qos=1)
    payload = {"datapoints":[{"dataChnId":"Temperature","values":{"value":temp}}]}
    mqtt_client.publish(MQTT_TOPIC1, json.dumps(payload), qos=1)
    time.sleep(1)

Imgur


Step 2. 將 Python Code 傳送到 Raspberry Pi


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

python 檔名.py  

Step 4. Console 執行畫面

Step 5. 透過 MQTTLens 來執行 Publish 與 Subscribe

[Config]

Hostname: mqtt.mcs.mediatek.com  
Port: 1883  

[Subscribe]

訂閱特定資料通道的訂閱主題 -> mcs/:deviceId/:deviceKey/:dataChnId
可訂閱特定裝置下全部資料通道 -> mcs/:deviceId/:deviceKey/+

e.g.,
mcs/D7fDOASh/eqGDzbxWsKyJqkl7/+

[Publish]

發佈主題的格式 -> mcs/:deviceId/:deviceKey/:dataChnId
Request Body  
{
  "datapoints": 
  [
    {"values": {"value": ""}, "dataChnId": ""}
  ]
}

e.g.,

{ "datapoints": [ {"values": {"value": "27.00"}, "dataChnId": "Temperature"} ] }

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

MQTTLens - Publish

  • Step 8. 透過 Python 來執行 Subscribe 更新程式中的 DeviceId 與 DeviceKey
import paho.mqtt.client as mqtt  
import re  
import httplib, urllib  
import socket  
import sys  
import time

deviceId = "D7fDOASh"  
deviceKey = "eqGDzbxWsKyJqkl7"  
MQTT_SERVER = "mqtt.mcs.mediatek.com"  
MQTT_PORT = 1883  
MQTT_ALIVE = 60  
MQTT_TOPIC = "mcs/" + deviceId + "/" + deviceKey + "/+"

def on_connect(client, userdata, flags, rc):  
    print("MQTT Connected with result code "+str(rc))
    client.subscribe(MQTT_TOPIC)

def on_message(client, userdata, msg):  
    print("mqtt payload=%s" %(msg.payload))

mqtt_client = mqtt.Client()  
mqtt_client.on_connect = on_connect  
mqtt_client.on_message = on_message

mqtt_client.connect(MQTT_SERVER, MQTT_PORT, MQTT_ALIVE)  
mqtt_client.loop_forever()  


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