> For the complete documentation index, see [llms.txt](https://cavedu.gitbook.io/linkit-7697/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cavedu.gitbook.io/linkit-7697/linkit-7697-arduinoide/kai-fa-zhi-nan/shi-yong-mcs-han-shi-ku/lian-jie-dao-mcs.md).

# 連接到 MCS

## MediaTek已經於 **2021.4.16** 停止 MCS 服務，如要使用請使用MCSLite <a href="#usingmcslibrary-shen-me-shi-mediatekcloudsandboxmcs" id="usingmcslibrary-shen-me-shi-mediatekcloudsandboxmcs"></a>

以下範例將介紹如何使用 MCS 函式庫提供的 MCSDevice 類別連接到 MCS 伺服器，並透過 MCS 網頁控制介面操縱 LinkIt 7697 板上的 USR LED。

### 建立 MCS 測試裝置 <a href="#connectingtomcs-jian-li-mcs-ce-shi-zhuang-zhi" id="connectingtomcs-jian-li-mcs-ce-shi-zhuang-zhi"></a>

開啟 [MCS 網頁控制介面](https://mcs.mediatek.com/)建立新的產品原型、資料通道、以及測試裝置。在本範例中，需要建立兩個資料通道：

1. 一個 "**開/關**" 類型的**控制器**通道。
2. 以及一個 "**開/關**" 類型的**顯示器**通道。&#x20;

{% hint style="info" %}
若不清楚如何產生產品原型、資料通道、以及測試裝置，請參考 [MCS 入門導覽](http://mcs.mediatek.com/resources/zh-TW/latest/tutorial/getting_started)頁面。
{% endhint %}

完成設置後，會產生如下的測試裝置頁面。需特別留意 **Data channel Id**、**DeviceId、和** **DeviceKey** 欄位 (如下圖箭頭所指)，後續撰寫程式碼的過程中會使用這些資訊。

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FJm77CM2bxVykk959HAhm%2Fimage2017-5-24%2B11_13_45.png?alt=media\&token=5ada0f26-7778-49e0-8177-ab9174daaca0)

### 使用 MCS 函式庫連接 MCS <a href="#connectingtomcs-shi-yong-mcs-han-shi-ku-lian-jie-mcs" id="connectingtomcs-shi-yong-mcs-han-shi-ku-lian-jie-mcs"></a>

下列步驟將說明如何在程式裡，使用 **device key** 和 **device ID** 產生 **MCSDevice** 物件，並設置對應的資料通道，以連接到 MCS 平台服務。

1.點選 Arduino IDE 的 **File >** **Examples >** **MCS** > **LED\_control** 選單。

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FTtgH20NZZxPKhMIJ22xD%2Farduino_example.png?alt=media\&token=18b6ce7d-f9bb-432c-ae6d-daf88fffa071)

2.由於需要 Wi-Fi 網路以連接 MCS，請依照使用的 AP 設定修改程式中的 Wi-Fi **SSID** 與 **password** 資訊

```
// Assign AP ssid/password here
#define _SSID "your_ssid"
#define _KEY  "your_password"
```

3.將 **device ID** 與 **device key** 填入 MCSDevice 類別的建構函式中：

```
// Assign device id/key of your test device
MCSDevice mcs("your_device_id", "your_device_key");
```

Device ID 和 device key 可從上述的 MCS 測試裝置頁面取得：

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FbikJBlISdoeT8WVovkQJ%2Fimage2017-5-24%2B11_16_0.png?alt=media\&token=8c0b780e-0736-4be4-95eb-7ca5a9c7c0cb)

4.同樣地將 channel ID 填入資料通道類別的建構函式：

```
// Assign data channel ID 
MCSControllerOnOff led("your_channel1_id");
MCSDisplayOnOff    remote("your_channel2_id");
```

Channel IDs 可在 MCS 測試裝置頁面的資料通道資訊下方取得：

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FY4FfnOYyPc1S3Qkwxapt%2Fimage2017-5-24%2B11_17_41.png?alt=media\&token=ddde8b1d-86e9-43c9-9f16-470199dceabe)

### 執行 Sketch <a href="#connectingtomcs-zhi-hang-sketch" id="connectingtomcs-zhi-hang-sketch"></a>

1.點選 **Upload** 按鈕並等待 **Done Uploading** 訊息顯示完成。

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FMAZVTEprasKJz3TRsqUl%2Farduino_upload.png?alt=media\&token=fc9ed14a-8317-41f9-89d5-acd601913ddf)

2.點選工具列的 **Serial Monitor** 按鈕開啟 Serial Monitor 視窗並將 **Baud rate** 設定為 **9,600。**

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FMx8QVjjxFU3ozh6nJy8O%2Farduino_serial_console.png?alt=media\&token=968bb8ac-766e-4ee0-a6aa-a4fff77bddcd)

**3.**&#x6B64;時可操作 [MCS 網頁控制介面](https://mcs.mediatek.com/v2console/)的**開/關控制器通道**來開啟、或關閉開發板上的 LED。在開發板 LED 狀態變化的同時，**開/關顯示器通道**的顯示狀態也會隨之變化

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2Fe02GP0JMfJ1jFCNZo617%2Fmcs_test_device.png?alt=media\&token=e2dc83e4-f04c-4e6e-92bf-26436941836d)

4.對應 [MCS 網頁控制介面](https://mcs.mediatek.com/v2console/)的操縱，開發板上的 **USR LED** 將會開啟或關閉。

![](https://3972650740-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FY4gduUSLWOCI23CXUWej%2Fuploads%2FtxmnvGv1NI2v8sqluSOI%2F7697%2B-%2BCopy.png?alt=media\&token=1d7f1e91-c998-4cd8-a57a-5ddb8bbce592)

### 程式碼說明 <a href="#connectingtomcs-cheng-shi-ma-shuo-ming" id="connectingtomcs-cheng-shi-ma-shuo-ming"></a>

在以上範例中，使用了 **MCS 函式庫**處理開發板與 MCS 伺服器之間的連線。使用函式庫需先加入 MCS 的 header file：

```
#include <MCS.h>
```

接著建立 **MCSControllerOnOff** 與 **MCSDisplayOnOff** 類別實體，用來控制事先在 MCS 網頁控制介面定義的兩個**開/關**資料通道 (控制器與顯示器)。建立時需將各資料通道所對應的 channel ID 傳入類別建構函式當中。

```
MCSControllerOnOff led("your_channel1_id");
MCSDisplayOnOff    remote("your_channel2_id")
```

下一步利用 device ID 與 device key 產生 **MCSDevice** 類別實體，使開發板對應到之前在 MCS 網頁控制介面產生的**測試裝置**。

```
MCSDevice mcs("your_device_id", "your_device_key");
```

相關實體建立完成後，使用 `addChannel()` 將資料通道加入至測試裝置，並呼叫 `connect()` 來連接至 MCS 伺服器。

```
  // setup MCS connection
  mcs.addChannel(led);
  mcs.addChannel(remote);
  while(!mcs.connected())
  {
    Serial.println("MCS.connect()...");
    mcs.connect();
  }
```

在 Arduino 的 loop() 裡，呼叫 `updated()` 檢查是否有來自**開/關控制器通道**的新資料，若有新的資料，則根據該數值設定 **LED\_PIN** 所對應的 LED 明滅，並同時更新**顯示器**通道的數值，以在網頁控制介面正確呈現出開發板的狀態。

```
if(led.updated())
  {
    Serial.print("LED updated, new value = ");
    Serial.println(led.value());
    digitalWrite(LED_PIN, led.value() ? HIGH : LOW);
    if(!remote.set(led.value()))
    {
      Serial.print("Failed to update remote");
      Serial.println(remote.value());
    }
  }
```

更多 MCS 函式庫的使用說明，請參考 [MCS 函式庫 API 手冊](/linkit-7697/linkit-7697-arduinoide/kai-fa-zhi-nan/shi-yong-mcs-han-shi-ku/mcs-han-shi-ku-api-shi-yong-shou-ce.md)。
