【LinkIt 7697教學】MCS雲端RGB LED類比控制-Blocklyduino圖形化開發環境

作者/攝影   曾吉弘
時間   3小時
難度

★★★☆☆

材料表

本文要介紹如何使用Mediatek Cloud Sandbox (聯發科技實驗室推出的雲服務)來控制LinkIt 7697上的 RGB LED 的個別顏色亮度。程式使用Blocklyduino圖形化開發環境開發板製作的小型電路專題。您可由此比較與一般Arduino IDE的類C語法的異同。請參考我們上課的投影片(超過100頁喔)!:

 


 

MCS端設定

        請登入MCS雲服務,建立新的原型,其下有三個整數(integer)型態的控制器,channel id 分別是 red, green, blue,下限0上限255,這是對應於Arduino的 analogWrite語法的參數。詳細建立資料通道畫面如下:

View post on imgur.com

建立好三個資料通道之後,請為這個原型建立一個測試裝置,完成如下圖:

View post on imgur.com

硬體線路

請將Linkit 7697插上麵包板,並根據下圖將RGB LED負極(最長腳)接到GND腳位。左到右分別代表R G B三個顏色的腳位,請分別接到LinkIt 7697的P10、P8與P6腳位。

View post on imgur.com

Blocklyduino程式碼

初始化/setup()

在此會先連上指定的Wi-Fi AP、MCS伺服器並新增所指定的通道id。請注意相關資訊不要打錯

View post on imgur.com

重複執行/loop()

在此會持續與MCS保持同步,如果任一通道有更新(使用者在MCS輸入新的數值)的話,就會根據新的數值來控決定對應的RGB LED顏色強度。最後則是把MCS的數值顯示於Serial Monitor

View post on imgur.com

7697程式碼

上述BlocklyDuino轉出來的Arduino程式碼如下,請直接上傳到7697之後就可以執行,重要的指令都以註解方式寫在程式碼中。

 

操作

請先檢查相關資料是否都正確,執行7697端程式。確認7697已連上MCS之後,請在各個控制器通道輸入0~255之間的數值,即可看到RGB LED顏色產生變化,也會把相關數值顯示於Serial Monitor

由於BlocklyDuino目前尚未提供MCS的PWM控制器資料通道的指令,但您可以自行在轉為Arduino code之後將 MCSControllerInteger red(“red”);     改為 MCSControllerPWM red(“red”);   這樣就能在MCS端使用PWM控制器資料通道的拉桿來控制LED亮度。

#include <LWiFi.h>
#include "MCS.h"

char _lwifi_ssid[] = ""; //Wi-Fi 帳號
char _lwifi_pass[] = ""; //Wi-Fi 密碼
MCSDevice mcs("", ""); //MCS測試裝置的 deviceId, deviceKey

MCSControllerInteger red("red"); //新增 channelId 為 red 的整數型控制資料通道
MCSControllerInteger green("green"); // green
MCSControllerInteger blue("blue"); // blue

void setup()
{
mcs.addChannel(red); //將這三個channel 加入測試裝置
mcs.addChannel(green);
mcs.addChannel(blue);
while (WiFi.begin(_lwifi_ssid, _lwifi_pass) != WL_CONNECTED) {
delay(1000); //每隔1秒試著去連上指定的 Wi-Fi AP
}
while (!mcs.connected()) { //持續與MCS保持連線
mcs.connect();
}
Serial.begin(9600);
pinMode(10, OUTPUT);
pinMode(8, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
}

void loop()
{
while (!mcs.connected()) { //檢查與MCS的連線狀態,如果斷線會在此重連
mcs.connect();
if (mcs.connected()) {
Serial.println("MCS Reconnected.");
}
}
mcs.process(100);
if (red.updated()) { //如果各控制資料通道更新
analogWrite(10, red.value()); //根據該值來控制LED亮度
} else if (green.updated()) {
analogWrite(8, green.value());
} else if (blue.updated()) {
analogWrite(6, blue.value());
}

Serial.print(red.value());
Serial.print(", ");
Serial.print(green.value());
Serial.print(", ");
Serial.println(blue.value()); //顯示各資料通道數值於Serial monitor
}

 

 

相關文章:

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *