Category Archives: 物聯網

[Raspberry Pi 3+] 為您介紹新版樹莓派七大特點:Raspberry Pi 3 Model B Plus

 

作者/攝影宗諭 / 英國樹莓派基金會

Raspberry Pi 3 Mode B +購買傳送門

只有信用卡一般大小的Linux系統單板電腦Raspberry Pi(樹莓派),可說是英國電腦工業史上最偉大的成功之一!因為,自從2012年Raspberry Pi開始進行商業生產後,它已經銷售超過1900萬片,並且這個數字仍在快速攀升中。

從Raspberry Pi zero、Raspberry Pi 1、Raspberry Pi 2至Raspberry Pi 3,這塊單板電腦仍在持續進化,其應用也非常廣泛,比方說,試算表、文字編輯、遊戲⋯⋯等等,還能播放高畫質視訊影片,以及控制其他硬體,例如感測器和馬達,甚至可搭配Arduino與樂高機器人進行整合式應用。可以說,只要接上鍵盤、螢幕及滑鼠,Raspberry Pi就是一台小型個人電腦。而就在今天下午(2018年3月14日),其開發者英國樹莓派基金會透過官網對外宣佈,Raspberry Pi 3 Plus正式發行囉!相信大家對此一定非常好奇,現在,就讓小編帶大家一起來看看,究竟Raspberry Pi 3 Model B Plus(以下簡稱Raspberry Pi 3 B+)與Raspberry Pi 3 Model B相較,有何更新:

圖1 最新一代的樹莓派機身

1.CPU 從BC2837升級為 BC2837B0,1.2GHz四核心升級為1.4GHz四核心

 BC2837B0Raspberry Pi 3 Broadcom應用處理器的升級版本,優化了供電迴路,並且加裝了一個金屬蓋,這使Raspberry Pi 3 B+可以降低電壓運作以減少耗電量,同時可更加準確監控晶片的溫度。

Hint:CPU的位置和原本的不一樣,如果有機構/電路和CPU位置有關的話需要做修改

 

2.Wi-Fi升級為雙頻網路 2.4Ghz + 5Ghz

 與Raspberry Pi 3相較,Raspberry Pi 3 B+的Wi-Fi功能在2.4GHz頻寬下,有較佳表現。然而,在5GHz頻寬下,表現更是沒有話說,請參考以下表格:

Tx bandwidth (Mb/s)Rx bandwidth (Mb/s)
Raspberry Pi 3B35.735.6
Raspberry Pi 3B+ (2.4GHz)46.746.3
Raspberry Pi 3B+ (5GHz)102102

(表格資料由LibreELEC developer Milhouse提供)

值得一提的是,Wi-Fi的電路封裝在一片金屬片的屏蔽之下,上面還雕有小小的英國樹莓派基金會的Logo喔!

圖2樹莓派3 B+的CPU(中)與Wi-Fi裝置(左上)

 

3.藍芽升級為4.2版本有線網路升級

Raspberry Pi 3B+的有線網路連線速率,約略是Raspberry Pi 3B的三倍,請參考以下表格:

Tx bandwidth (Mb/s)Rx bandwidth (Mb/s)
Raspberry Pi 3B94.195.5
Raspberry Pi 3B+315315

(表格資料由LibreELEC developer Milhouse提供)

4.增添PoE功能(Power over Ethernet,網路線供電)

使用了有PoE支援的magjack,把PoE所需要的電源/訊號接到4pin header方便PoE Hat使用。

Hint:4pin header在原本的reset pin位置,如果有機構/電路和reset pin位置有關的話
需要做修改

圖3樹莓派3B+新增了PoE的功能,圖中也看見4 pin接頭。

 

5.CPU效能更加優化

這次Raspberry Pi 3 B+ 改善了 BCM2837B0 的供電封裝,而且新的MaxLinear MxL7704 電源管理 IC能夠調整電壓,過去不能調整電壓,只能透過降頻的方式降低電流,現在電壓也可以調整了。

而因為比較不會碰到過熱降頻,在較長時間下的性能也能提升。CPU頻率原本是1.4GHz,在高於70度為降低發熱量以避免過熱觸發降頻保護頻率會降低至1.2GHz。請參考以下這張圖表:

圖4(以上圖表由Gareth Halfacree提供)

6.GPU沒有變化,基於原本VideoCore的東西都不用改

 根據樹莓派基金會於官網上的說明,3D繪圖在Raspberry Pi 3 B+上依舊是可行的,這一點請大家放心。

 

7.價格

 最後一個點,當然就是大家相當關心的價格問題。在這點上,這款新的樹莓派可以說是沒有任何進展,仍然跟Raspberry 3 Model B一樣,維持在35英鎊,相信大家會樂於掏出口袋中的摳摳的。

 

結語

 一直以來,CAVEDU教育團隊製作了非常多運用樹莓派的專題與專案,也開設了許多關於樹莓派的課程及工作坊,可以說,CAVEDU是樹莓派的愛用者也是積極推廣者。透過這篇文章,盼望大家對於新版樹莓派有一個初步的了解,也請大家期待即將推出的Raspberry Pi 3 Model B+開箱文喔!

(本文多數資料與圖片引用自英國樹莓派基金會官網https://www.raspberrypi.org/

Raspberry Pi 3 Mode B +購買傳送門

相關文章:

[ App Inventor + Microbit ] RGB LED控制

本文要介紹如何使用App Inventor來控制 micro:bit的 I/O腳位,以 RGB LED作為輸出應用。(原始碼下載請按我)

請務必先讓您的手機與Micro:bit進行藍牙配對,否則無法正確執行本範例。

作者/攝影  曾吉弘
時間  2小時
成本
難度 * * *
材料表
  • 個人電腦
  • App Inventor開發環境
  • 支援BLE的Android手機
  • BBC Micro:bit開發板
  • RGB LED燈

 

 

硬體清單

本範例所使用的RGB LED實際上是把紅綠藍三色的LED整合到同一個元件中,並且有陰極共用與陽極共用兩種規格。本範例使用的是共陰 RGB LED。以下是本專題的硬體清單:

  • BBC micro:bit 微控制板, 1
  • 麵包板, 1
  • 跳線, 4
  • RGB LED (共陰), 1

 

注意:如果您使用共陽RGB LED的話,最長腳要接到 micro:bit 的 3.3V腳位,並且 App Inventor 端給 1 會讓腳位變成低電位,這與共陰的行為剛好相反

 

 

範例影片

 

請根據以下資訊來連接Micro:bit RGB LED:

Micro:bitRGB LED (共陰)
GNDGND (最長腳、灰線)
P0R (紅線)
P1G (綠線)
P2B (藍線)

完成如下圖。

您可使用鱷魚夾或把線彎成U形來勾住Micro:bit腳位上的圓孔,當然後者比較容易鬆脫囉。

App Inventor

本範例要示範使用 app 來控制接在 micro:bit 腳位上的 RGB LED 發出四種不同的顏色。首先請登入 MIT App Inventor 並建立一個空白專案。.

 

以下步驟是根據App Inventor IoT分站上的基本範例開始一步步加入本專題所需的元件,當然也可以直接下載完整的 .aia。

 

首先要加入本專案所需的擴充檔。

  • 左側Palette區中,找到最下方的Extension,點選”Import extension” → “URL
    • 貼上micro:bit extension的網址: http://iot.appinventor.mit.edu/assets/com.bbc.micro:bit.profile.aix
  • 新增一個Microbit_IOpin元件,設定其BluetoothDevice屬性為”BluetoothLE1” (別忘啦!)

接著加入本範例所需的元件:

  • 新增一個TableArrangement元件
    • 設定寬度為”Fill parent“、高度為”200 pixels“,row(列數)為2,最後設定column(行數)為3
    • 設定其Visible屬性為false,我們會在與micro:bit建立連線之後讓它顯示出來,才能點選按鈕來發送藍牙指令。
  • 新增五個按鈕到tablearrangement元件,將其文字分別改為”Red“, “Green“, “Blue“, “White“與”Off“對應不同的LED動作。

調整之後,您的畫面應該會類似下圖。有一點點不同沒關係,背景顏色、位置與顏色都可以修改,喜歡就好!

 

Blocks

 

STEP 1:連線後要求更新腳位狀態

BluetoothLE1.Connected事件中,我們顯示連線確認訊息,並設定micro:bit腳位為”digital output“,這是因為我們要控制RGB LED所以得這麼作。在此會用到三個Microbit_Io_Pin.ConfigurePin指令,分別設定pinNumber為0, 1, 2 (代表micro:bit的P0, P1與P2腳位),analog欄位設為false,input欄位設為false

仔細來看看Microbit_Io_Pin.ConfigurePin指令,它有三個參數:pinNumber (腳位編號), analog (true代表類比模式,false代表數位模式),input (true代表輸入,false為輸出)。

所以下圖是把micro:bit P0腳位設定為”數位輸出(digital output)“,可連接像是LED、繼電器這種數位輸出元件。更多micro:bit I/O腳位的詳細設定請參考:http://microbit.org/guide/hardware/pins/

下圖則是設定micro:bit P2腳位為”類比輸入(analog input)“。可連接旋鈕電位計、光敏電阻等元件。o this pin.

STEP2: 更新LED狀態的副程式

為了讓程式意讀易懂,我們使用副程式來管理控制micro:bit腳位狀態的多個指令。新增一個副程式(procedure),改名為”ledControl”。

 

接著點選藍色小齒輪來新增三個參數,分別改名為”r”, “g”, “b”。顯然這三個參數是用來代表micro:bit用來控制RGB LED的腳位狀態。

在副程式中加入三個Microbit_Io_Pin.WriteOutputPinData指令,每一個分別控制micro:bit一隻腳位的狀態。因此第一個指令請設定pinNumber為0,pinValue為 r 參數值。後兩者以此類推,完成如下圖:

STEP2: Button to light up red

按下Button_R按鈕會讓RGB LED亮起紅燈,作法是呼叫ledControl副程式並設定參數為(1, 0, 0),代表P0為高電位(1),P1 / P2 為低電位(0)。

STEP3: other buttons for different colors

另外四個按鈕的差別只在於參數差異,這樣您應該可以感受到使用副程式的號處了吧:

  • Button_G: (0, 1, 0) 亮起綠色
  • Button_B: (0, 0, 1) 亮起藍色
  • Button_W: (1, 1, 1) 亮起白色
  • Button_Off: (0, 0, 0) 熄滅.

STEP4: 中斷藍牙連線

點選ButtonDisconnect按鈕會中斷藍牙連線,會讓app回到初始狀態並等候下次連線。

操作

完成啦!請確認您的Android裝置與 micro:bit 已經藍牙配對好了。接著從App端去連線到 micro:bit,連線成功後會出現五個按鈕,點選不同按鈕就可以看到RGB LED亮起紅綠藍白四種顏色與熄滅,如果亮起的顏色不對或是無法亮起請再次檢查接線是否鬆脫與腳位順序是否正確。

 

小挑戰

  1. 試著讓RGB LED更繽紛,例如紅色與藍色腳位同時點亮,就是紫色的光芒喔。
  2. 加入SpeechRecognizer元件,用語音來控制RGB LED。

 

 

相關文章:

[私下問公開答]如何提升LattePanda拿鐵熊貓的能力,從更新BIOS下手

感謝汐止的陳先生,他在使用LattePanda時,覺得裝置跑不出USB3.0應該有的速度,問我們有沒有解,這次解法我們從更新BIOS方面解決問題。

感謝鄭鴻旗先生的[私下問公開答]的梗,鄭老師表示不會付版稅給你XD

作者/攝影  豐智
時間  30分鐘
成本需要上網下載的費用
難度  * *
材料表

LattePanda是一個信用卡大小的Win10小電腦,內建一個Arduino晶片,各位可以看到LattePanda左邊偏中間的地方有一個USB3.0的接頭,如何提升它的速度呢?

LattePanda相關的Arduino、驅動程式、BIOS更新都在GitHub上-連結

這次實驗成果,是透過更新BIOS,提升USB3.0的功能。

首先點選[Star]→[ LattePandaTeam / LattePanda-Win10-Software]-連結

點選進[Bios]的資料夾之後有好幾個版本的Bios:

  • [LattePanda V1.2 for CR200 Z8350 only]
  • [LattePanda v1.0 for Z8300 only]
  • [LattePanda v1.1 for CR110 Z8350 only]

 

應該要裝哪一個呢?初學者會有一個迷思,裝越高版本的越好,首先請各位確認手上的LattePanda的出廠型號,型號裡有幾個關鍵字可供參考。

  • 首先是型號的最後方有Z8300、Z8350、兩個版本。
  • Z8350在型號的前面有R100、R110兩種不同型號。
  • Z8350在型號的前面有R110、R200兩種不同型號。

 

型號對應的Bios版本如下:

S70CR110/S70CR100 Z8300 -> V1.0

S70CR110 Z8350 -> V1.1

S70CR200 Z8350 -> V1.2

 

我使用的LattePanda是R110xxxxxx/Z8350的型號,直接對應資料夾[LattePanda v1.1 for CR110 Z8350 only]

 

接著請各位確認手上LattePanda的硬體/記憶體的規格是哪一個版本?目前有32GB/2GB、64GB/4GB兩個版本。

我使用的是64GB/4GB的版本,將/default BIOS/4G version/路徑下的資料夾內容下載下來。

 

請各位準備一個FAT32格式的隨身碟,將剛剛下載的資料複製到隨身碟的跟目錄並解壓縮LattePanda v1.1 4G default bios-J.zip

 

LattePanda更新Bios的的方法,是趁LattePanda重開機時,優先讀取隨身碟的資料,更新Bios,請把隨身碟接至LattePanda的USB接頭。

  • LattePanda剛開機時尚未開始讀取Win10系統之前,按著鍵盤上的[Esc]或[Del]即可進入
  • 還沒更新Bios之前螢幕上方的版本應該是2016年的版本[Aptio Setup Utility – copyright (c) 2016 American Megatrend, Inc]
  • 更新之後是2017年[Aptio Setup Utility – copyright (c) 2017 American Megatrend, Inc]

 

更新Bios之前需要調整兩個選項,以R110xxxxxx/Z8350的型號為例:

  • 首先到Boot選項,將Machine Status AC/Battery In從[Power off]-→[Power on]
  • 接著將Boot Option #1的選項[Windows Boot Manager]→[你的隨身碟]

 

 

最後儲存設定並重開機即可。到Save & Exit選擇[Save changes and Reset]

 

重新開機後,LattePanda首先讀取隨身碟資料,出現下圖的畫面就成功了,成功之後在鍵盤按下Ctrl+Alt+Del進行重開機,並且把隨身碟拔出來,進入到Bios看到更新年限為2017年即為成功。

 

感謝Scanace的工程師提供建議的USB測試軟體[USB Device Tree Viewer],大家可以下載來試試看,你的隨身碟是否在電腦上被認知為真的USB3.0的傳輸介面。

 

將LattePanda的USB3.0接頭,接上USB3.0的隨身碟

 

將LattePanda的USB3.0接頭,接上USB2.0的隨身碟

 

希望能帶給大家幫助,小智到此一遊。

 

相關文章:

[Micro:bit] 使用DFROBOT BOSON套件設計智慧小屋

在本篇文章中,我們將介紹如何用micro:bit和DFROBOT BOSON套件打造智慧小屋,套件上安裝孔位與樂高相容,組裝上更方便了。

我們將實做三個特別的功能,第一個是能夠根據環境光源自動調整亮度的LED燈,第二是設計一個可以按鈕控制吊扇,第三則是做出一個地震警報器。

作者/攝影  袁佑緣
時間  3小時
成本 放課後的製作時間便是我的成本
難度  * * *
材料表
  • Micro:bit
  • 樂高積木
  • Micro:bit Boson 擴充板

準備工作

Microbit and Boson Kit

 

在這篇文章中,我們將使用BBC推出的Micro:bit開發板來當作是我們智慧屋的控制器。

為了要能夠控制智慧屋中的電子元件,也就是上面的感測器與制動器,除了原本的Micro:bit之外,我們還要額外裝上一塊DFRobot推出的Boson擴充板來控制Boson Kit中的電子模組。

如果讀者想獲得關於 Boson Kit更進一步的資訊的話,不妨去以下的網站觀看詳細的介紹喔。 (https://www.dfrobot.com/boson).

以下是我們在本篇文章中,我們將會用到的Boson電子積木有LED、按鈕、傾斜、風扇、聲音、光感應。

1.Light Sensor Module
2.LED Module
3.Button Module
4.Fan Module
5.Tilt Sensor Module
6.Buzzer Module

Mu editor

接下來,為了要撰寫micro:bit的micro python 程式碼,我們需要去下載以下的編輯器:Mu Editor(https://github.com/mu-editor/mu/releases).

此外,我們也建議讀者可以去官方的文件查看Micro Python API for Micro:bit (https://microbit-micropython.readthedocs.io/en/0.9/)的詳細使用說明,裡面還有許多的範例教學可以參考喔!

硬體

以下的圖片是本文所使用的雙層樂高屋以及樂高屋內部的構造。

注意到除了一般水平放置的Boson元件可以接在樂高的平板上,一些懸掛的Boson元件可以用其他的方式固定在樂高小屋上面,例如下圖中使用BOSON的中間積木,我們使用金屬螺絲與螺絲帽固定,底座固定之後,Boson電子元件就可以用磁力吸附在上面。

範例教學

 

接下來我們就來在 Mu Editor中撰寫 Micro Python吧!

 

1. 小夜燈

在第一個範例中,我們將原本的LED燈擴充成可以自動調整亮度的LED燈,更進一步它能根據環境光的亮度適當地調整LED燈亮度。

於是我們要在LED燈上再加上一個光源感測器,如下圖。

首先,我們必須先用以下的程式碼來去偵測光源感測器的最大最小值,而為了要讓數值更精確一點,我們讓程式在一段時間內的對光感值進行取樣,將光感值加總後再依取樣的次數做平均,經過計算就能得我們想要的平均值。

 

night-light-measure.py

from microbit import *

light_sensor = pin1.read_analog()
counter = 0
timer = running_time()

while (running_time() - timer) <= 3 * 1000:
    light_sensor += pin1.read_analog()
    counter += 1

light_sensor /= counter
print("mean light sensor value: ", light_sensor)

打開Mu Editor的REPL視窗,並在有環境光跟沒有環境光的情況下執行程式,你將會得到如下圖的光源平均值,當環境光很亮時的平均亮值是900多,環境光很暗時的平均暗值10多。

接下來,我們將前面求出的平均亮值跟平均暗值,帶入到變數ligjt跟dark中,將這兩個數值作為最大值與最小值,是按照比例換算成Micro:bit的類比角為數值,控制LED燈的亮度。

 

算式:

((light – light_sensor)/(light – dark)*1023)

比如:light=966、dark=14,數值範圍為952。現在讀到一個光感數值為500,帶入算式((966-500)/(952))*1023 = 500,最後micro:bit的類比輸出值為500。

 

night-light.py

from microbit import *

light_sensor = pin1.read_analog()
counter = 0
timer = running_time()

light = 966.4033
dark = 14.81614

while True:
    light_sensor = pin1.read_analog()
    LED = int((light - light_sensor)/(light - dark)*1023)

    if LED > 1023:
        LED = 1023
    elif LED < 0:
        LED = 0

    print("LED lightness: ", LED)

    pin2.set_analog_period(1)
    pin2.write_analog(LED)
    sleep(0.5)

 

範例影片:

 

2. 吊扇設計

在第二個範例中,我們用以下簡單的程式碼來打造一個可以用按鈕控制的電風扇。

在程式中,我們用一個switch的布林變數紀錄開關的狀態,我們希望使用開關時,每次按下開關再放開,switch的狀態就會切換成相反的狀態。

注意到我們在以下的程式碼中會多加一些延遲,例如sleep(0.5),這是為了要確保可以正確的判斷到一次的開關按壓。

ceiling-fan.py

 

from microbit import *

switch = False

while True:
    if pin12.read_digital() is 1:
        while pin12.read_digital() is 1:
            sleep(0.5)
        switch = not switch
        if switch:
            pin16.write_digital(1)
            print("Turn ON")
        else:
            pin16.write_digital(0)
            print("Turn OFF")

 

3.地震警報器

 

在第三個範例中我們將實做一個安裝在小屋的地震警報器。

為了要偵測到小屋的晃動,我們使用一個傾斜感測器,並在每一次的迴圈中,觀察一小斷時間中的傾斜變化。

如果說屋子靜止不動的話,隨著時間的傾斜變化量應該是完全是零,所以我們只要去計算一段時間的變化是否為零的話,就能推出此時是否有地震的發生。

 

而如果偵測到有地震發生的話,程式會播放一段音樂作為地震的警報,播放音樂的方式直接使用Micro Python內建的music函式庫,music函式庫預設輸出聲音為0號腳位,驅動蜂鳴器發出聲音。

 

如果想自己設計音樂的話,不妨去以下網址查看micro python的範例(https://microbit-micropython.readthedocs.io/en/0.9/music.html),裡面有介紹如何用指定的音符做特定的旋律。

alarm.py

from microbit import *
import music

status = pin8.read_digital()

def detect_shake():
    old_tilt_status = pin8.read_digital()
    sleep(0.1)
    new_tilt_status = pin8.read_digital()
    return abs(new_tilt_status - old_tilt_status)

while True:
    counter = 0
    timer = running_time()
    shake = detect_shake()
    while (running_time() - timer) <= 500:
        shake += detect_shake()
        counter += 1

    status = shake/counter
    print(status)

    if status is not 0.0:
        print("Alarm!!!")
        music.play(music.DADADADUM)

 

範例影片:

 

相關文章:

 

 

[LattePanda] 使用LattePanda打造Line機器人

本文章將來介紹一下如何在LattePanda上面部署一個LINE智慧對話機器人,並拿它來控制LattePanda上的Arduino IO。

作者/攝影  袁佑緣
時間  3小時
成本 時間就是成本
難度  * * *
材料表
  • LattePanda
  • 手機

STEP1. LINE開發者帳號與取用LINE Message API

首先, 我們需要先在 LINE 的開發者官方網站 (https://developers.line.me/en/) 註冊一個LINE開發者帳號。

請點選右邊的 Start using Message API, 接下來系統將會提示使用者完成三個設定步驟以完成新增一個通道。

首先,你必須先選取一個提供者,也就是告訴系統是誰提供這個APP的服務。

接下來,請填上關於取用Messaging API 的必要資訊。

最後一步,確認玩設定都沒錯後,按下confirm,你將會看到一個新增的通道出現在一開始的console頁面。

STEP2. 安裝Node.js與下載 line-bot-sdk-nodejs library

在我們繼續完成 LINE Bot細部設定之前,我們必須先安裝一下LINE Bot的軟體開發環境。 我們開發LINE Bot所使用的程式語言是 node.js,所以請點選以下網址(https://nodejs.org/en/download/) 將Windows版本的node.js下載下來並安裝在LattePanda上面。

安裝完後,我們還需要用到LINE Bot SDK ,請到以下的github 網址(https://github.com/line/line-bot-sdk-nodejs) 下載並解壓縮官方的node.js 版 LINE Bot SDK。

如果有讀者想要查這個LINE Bot SDK的詳細使用資訊的話,可以點選此網址 (https://line.github.io/line-bot-sdk-nodejs/) 到官方的gitbook上看進一步的API使用說明,以及如何去用javascript來撰寫機器人的對話功能。

最後請打開命令提示字元(按下快捷鍵 <Win+R> 並輸入”cmd”叫出command prompt), 並輸入以下的命令將工作目錄移動到方才解壓縮的LINE Bot SDK資料夾下的echo-bot範例(line-bot-sdk-nodejs/examples/echo-bot)。

cd THE_ECHO-BOT_EXAPMLE_FOLDER(ex: C:\Users\lattepanda\line-bot-sdk-nodejs\examples\echo-bot)

接下來請輸入以下的指令來安裝需要用到的node.js套件,在這個範例中,我們會需要安裝兩個額外的套件,一個是用來開啟伺服器的express套件,另外一個則是LINE Bot的SDK函式庫。

npm install

 

STEP3. 用ngrok來將本地伺服器開放到網路上

在前面的步驟中,我們雖然可以開啟一個本地的伺服器,但是為了要能夠取用網路上的 LINE Messaging API,我們必須使用一些工具來將LattePanda上的服務開放到雲端上。

 

請點選此網址(https://ngrok.com/download)來下載ngrok,這套軟體可以讓使用者在本地伺服器與網際網路建立一個加密的網路通道。

下載完成後,請將壓縮檔解壓縮,並點選ngrok.exe,呼叫出一個命令提示字元。

請在上面輸入以下的指令在localhostport 3000開啟一個http的通道。

ngrok http 3000

成功開啟後,將會看到如以下的畫面。你將會得到兩個開放的網址,一個是走HTTP,另外一個則是走有加密的HTTPS,請記住這個連結,待會我們將要把這個連接填到LINE Bot上的回呼位址上。

STEP4. 設定Channel Secret/Webhook/Token

請點選剛剛在 STEP2 新增的APP,我們將要完成LINE Bot上最後三個主要的溝通憑證。

第一個是設定頻道的金鑰,請按下issue並複製這段的金鑰到echo-bot的範例資料夾中的index.js檔中。

接下來,同樣地也請點選issue並把channelaccess token貼到index.jsconfig中。

// create LINE SDK config from env variables
const config = {
  channelSecret: 'PASTE_YOUR_CHANNEL_SECRET',
  channelAccessToken: 'PASTE_YOUR_ACCESS_TOKEN',
};
index.js

最後,我們的APP需要設定一個webhook網址,請填上你在STEP3 中開啟的ngrok所得到的網址,並在最後面加上 “/callback” 。例如: “20c21167.ngrok.io/callback”.

STEP5. LineBot 測試

請用智慧型手機打開LINE APP並掃描這個機器人的QR code來加好友。

接下來回到LattePanda上輸入以下的指令執行echo-bot程式並確認ngrok通道已經正確開啟了且webhook的網址也有設定在LINE Bot console 頁面了。

node .

請在上面手機上用LINE打上一些文字看看LINE Bot會有什麼反應吧!

 

STEP6. 使用 serial來與Arduino做溝通

請下載以下的Arduino程式碼到 LattePanda上的 Arduino Leonardo核心。

這個程式中,我們時做了一個簡單的serial控制的LED開關,如果使用者在序列埠監控視窗中輸入一個大寫的T,LED燈就會被打開,如果輸入大寫的F,LED燈則會被關閉。

void setup()
{
    Serial.begin(9600);
    pinMode(LED_BUILTIN, OUTPUT);
    
}

void loop()
{
    if(Serial.available())
    {
        char cmd = Serial.read();
        if(cmd == 'T')
            digitalWrite(LED_BUILTIN, HIGH);
        else if(cmd == 'F')
            digitalWrite(LED_BUILTIN, LOW);
        else
            Serial.println("Enter T/F to turn ON/OFF LED");
    }
}

STEP7. 在LattePanda上使用LineBot 來控制LED

我們想在LattePanda上使用node.js取用serial來控制LED燈,所以我們必須再新增一個新的node.js函式庫。請在範例echo-bot中的資料夾中打開 package.json ,並如以下的範例加上 serialport 這個套件來讓node.js可以使用Serial來與Arduino做溝通。

package.json

{
  "name": "echo-bot",
  "version": "0.0.0",
  "description": "An example LINE bot just to echo messages",
  "main": "index.js",
  "scripts": {
    "start": "node ."
  },
  "dependencies": {
    "@line/bot-sdk": "^5.0.0",
    "express": "^4.15.2",
    "serialport": "^6.0.4"
  }
}

改完之後別忘了輸入以下的指令來更新node.js的套件。

npm install

現在我們要在原本的 echo-bot 中的index.js 程式中加入Serial的溝通功能。

首先,請如以下的範例加入serialport的設定,並注意設定好指定的COM Port,也就是在LattePanda上的Arduino Leonardo連接到的COM Port,例如:COM2。

 

index.js

'use strict';

const line = require('@line/bot-sdk');
const express = require('express');
const SerialPort = require('serialport');
const serialPort = new SerialPort('COM2', {
    baudRate: 9600
});

最後請修改echo-bot預設的handler函式中的功能,加入以下的程式碼好讓node.js根據不同的情形透過Serial送出大寫的T跟F到Arduino 。

 

 

index.js

// event handler
function handleEvent(event) {
  if (event.type !== 'message' || event.message.type !== 'text') {
    // ignore non-text-message event
    return Promise.resolve(null);
  }

  if(event.message.text == 'ON') {
      serialPort.write('T');
      const echo = {type: 'text', text: 'Turn ON LED'};
      return client.replyMessage(event.replyToken, echo);
  } else if(event.message.text == 'OFF'){
      serialPort.write('F');
      const echo = {type: 'text', text: 'Turn OFF LED'};
      return client.replyMessage(event.replyToken, echo);
  } else {
      // create a echoing text message
      const echo = {type: 'text', text: event.message.text};
      return client.replyMessage(event.replyToken, echo);
  }
}

現在請重新執行index.js並確認ngrok有正確打開(STEP3),接下來就可以在手機上測試看看是否在LINE上輸入ON/OFF,LINE Bot就會去自動開關LattePanda上的LED燈囉!

以下是本文章的範例LINE Bot範例影片。

 

相關文章:

[ LattePanda] 結合雲端服務-MCS與ThingSpeak

這次向各位介紹常用的雲端服務,分別是台灣聯發科技公司搭配旗下LinkIt系列開發板之MCS與ThingSpeak,我們透過LattePanda實作。你可以從遠端來控制板子的腳位狀態或是檢視板子狀態與感測器的數值變化。類似的雲服務近年來如雨後春筍般冒出來,對於想找尋免費方案的使用者或教學單位來說是相當好的事呢。

作者/攝影  阿吉/豐智
時間  1小時
成本
  • 光感測器約NT200
  • 溫溼度感測器約NT160
難度  * * *
材料表

第一個範例是上傳LattePanda之Arduino的A0類比輸入腳位狀態到MCS雲服務,可以根據我們所設定的條件來觸發手機推播訊息。這裡使用DFRobot套件包中的環境光感測器(或可以改用一般常見的光敏電阻)。

 

一、認識MCS雲服務

MediaTek Cloud SandBox(MCS)是聯發科技創意實驗室為旗下LinkIt系列開發板所提供的專屬網頁介面雲端平台,具有物聯網裝置最需要的資料儲存及裝置管理服務。MCS可以很快速地建立雲端應用程式,對於有意將裝置原型快速商品化的人來說,是一套相當便利的系統。它可以讓使用者專注在取得最重要的實體運算資料,不需要處理網路協定。而在MCS所提供的各種資料通道(Data channel)中,你可以輕易的為物聯網裝置建立一個控制面板,還能夠使用專屬的Android手機應用程式來檢視喔!

 

二、MCS操作說明

接下來會依序介紹如何在MCS上建立原型(prototype)建立資料通道(Data channel),以及透過REST API進行溝通。完成後就可以從網頁或手機應用程式來觀看我們所上傳到MCS的資料啦!

請先到MCS網站(https://mcs.mediatek.com)註冊一個帳號,登入後的首頁如圖10-1。

01-MCS主畫面

 

MCS專有名詞介紹

在開始進入專案之前,介紹一下常見的MCS的專有名詞:

  • 原型(Prototype):裝置原型,具備各種資料通道。
  • 資料通道(Data channel):帶有時間資訊的資料串,分為控制器與顯示器,並根據不同的資料型態有不同的外觀。
  • 資料點(Datapoint):每筆上傳的資料。
  • 測試裝置(Test Device):某一時間點的原型,具備自動產生的DeviceId與DeivceKey。
  • DeviceId、DeviceKey:這組資訊無法修改,用於鎖定測試裝置,需要寫在程式碼中。

圖10-2 MCS雲服務架構(圖片來源:https://github.com/Mediatek-Cloud/MCS)

 

MCS選單功能介紹

  • 開發(Development):
    • 原型(Prototype):新增修改原型、資料通道與測試裝置
    • 測試裝置(Test Devices):已建立之測試裝置清單,可以與開發板互動
  • 管理(Management)
  • 資源(Resources):教學文件、API參考資料、手機端程式下載與更新日誌等。
  • 幫助(Help):常見問題、論壇、回饋
  • 個人檔案:設定使用者大頭照、系統語系以及開啟用於接收App推播訊息的手機(須先安裝MCS Android程式)。

資料通道(Data channel)

資料通道根據其動作分成兩種:用來發送訊息給開發板的控制器(Controller)跟接收開發板回傳的資料的顯示器(Display)。本範例將使用一個整數資料型態的顯示介面來接收來自LattePanda的資料。

表說:資料通道內容比較

三、MCS設定

接下來要帶各位在MCS上建立一個整數資料型態的顯示介面來接收來自LattePanda的資料。

  1. 登入MCS之後,請點選畫面左上角的「開發」,選擇「原型」
  2. 在畫面中點選「Create prototype」來建立新的原型。請按照以下設定完成原型設定:
    • 產品原型名稱:LattePanda
    • 產品原型版本:0
    • 硬體平台:Others
    • 產業:其他
    • 應用程式:其他

View post on imgur.com

創建原型

 

3.進入這個原型之後,請點選建立資料頻道,先選擇顯示器。並按照以下設定完成原型設定:

請注意實際上要填入程式的是資料通道Id,但由於實際上課時多數學員容易搞混,為求簡潔,建議資料通道名稱與Id可以使用相同名稱。

  • 資料通道名稱:sensor
  • 資料通道Id:sensor
  • 描述:隨意填入
  • 資料型態:在此請選整數

單位:在此請選「其他」,後續您可根據所使用的感測器來選擇正確的單位

View post on imgur.com

新增整數型顯示器資料通道

 

4.這樣具有一個顯示器資料通道的原型就建立完成了,請回到原型頁面可以看到方才所建立的原型,由於在此尚未建立測試裝置與裝置,因此兩個數字都是0。請點選其右上角的「…」,可以編輯、複製、匯出以及刪除。其中匯出之後的JSON檔可以讓別人直接匯入來建立原型,這個做法在原型已經很複雜時非常好用。

編輯原型

5.接著是要建立測試裝置(test device)。請點選畫面右上角「創建測試裝置」,在此請輸入裝置名稱即可。

建立測試裝置

 

6.建立測試裝置之後,請進入測試裝置頁面。與原型頁面有點像,但是您可以在頁面右上方看到DeviceId與DeviceKey兩筆參數。這兩筆資料也要填入程式中。

建立測試裝置完成

7.測試裝置設定完成後,就能將建好的測試裝置透過DeviceIdDeviceKey與別人分享,也可以自行設定觸發條件,讓MCS寄信給你。接著在原型頁面下點選「Trigger&Action」標籤,再點選「+ Add trigger & action」來加入新的觸發條件與動作。在此需要三個步驟:

  • 觸發條件名稱請隨意輸入,這會成為手機推播訊息標題或是電子郵件標題。

 

編輯觸發條件

  • 這時會根據既有資料通到來建立觸發條件,請選擇方才建立的資料通道:sensor,條件請設定為大於800

  • 最後一步是選擇觸發動作。動作類型請選擇「手機推播」(另外還有電子郵件與觸發其他網路服務的Webhook選項)。內容請輸入:

LattePanda’s A0 value exceeded: ${deviceName} / ${value}」,其中${deviceName}與${value}可以自動代出裝置名稱與觸發條件時的數值。

選擇觸發動作

8.請注意如果要使用手機推播功能,先到個人檔案中(MCS畫面右上角)打開所要接收推播訊息的手機,如下圖。手機需要先安裝MCS app(目前只有Android版)。

在個人檔案頁面打開要接收推播訊息的手機

 

View post on imgur.com

在測試裝置的「觸發條件與動作」標籤中檢查

在Google Play安裝「 MediaTek Cloud Sandbox」手機程式

程式說明

先安裝Python2.7(https://www.python.org/download/releases/2.7/),建立一個mcs.py檔之後貼入下方的程式碼,修改對應資訊之後使用以下指令執行:

   python mcs.py

執行順序1、先上傳Arduino端的程式之後,2、再執行Python或Node.js任一程式即可。Python或Node.js會透過我們在程式中所設定的序列埠號向Arduino要資料,即類比腳位A0的資料。

之所以使用這樣的架構,雖然使用了兩種程式語言,但是可以發現程式的總行數簡化很多。如果後續改用Raspberry Pi搭配Arduino或是7688 Duo的話,也可以看到這樣的混搭應用。

Python

#1~#3匯入了本程式所需的Python函式庫,其中serial是用來與序列裝置通訊,也就是Arduino。

#05是指定LattePanda上的Arduino晶片所取得的COM埠號,例如「COM4」。

#07 08 則是您先前辛辛苦苦在MCS上取得的測試裝置DeviceId / Key

#10   MCS所設定的資料通道ID

#22   無窮迴圈

#23   抓到來自Arduino丟來的第一筆資料’a’,這等於是標頭檔,以避免封包遺失對於通訊品質的影響。

#24 使用ser.read()取得來自Arduino的資料

#30 上傳資料到MCS

 

mcs.py範例

import serial
import time
import requests

ser = serial.Serial('COMX',9600) 

device_id = "Your device ID"
device_key = "Your device Key"

data_channel = "sensor"
data_channel +=",,"
url = "http://api.mediatek.com/mcs/v2/devices/" + device_id
url += "/datapoints.csv"

def MCS_upload(value,length):
        data = data_channel+str(value)
        r = requests.post(url,headers = {"deviceKey" : device_key,'Content-Type':'text/csv'},data=data)
        print r.text

print "Start"
while True:
        if ser.read()=='a':
                IncommingNum = ser.read()
                sensor = int(ser.read(int(IncommingNum)))
                a = 8
                a += int(IncommingNum)
                MCS_upload(sensor,a)

Node.js

Node.js也是相同的概念,我們可以比較一下與Python的異同,然後選一個喜歡的程式語言來開發。記得先安裝Node.js(https://nodejs.org/en/)。

請建立一個mcs.js檔之後貼入下列內容,修改對應資訊之後使用以下指令執行:

   node mcs.py

mcs.js範例:

var mcs = require('mcsjs');
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("COMX",
{baudrate: 9600
});

var myApp = mcs.register({
        deviceId: 'your device ID',
        deviceKey: 'your device Key',
});

serialPort.on("open", function () {
        receivedData ="";
        serialPort.on('data',function(data)
        {
                receivedData =data.toString();
                a = receivedData.length;
                myApp.emit('sensor','', receivedData.substring(2,a));
                //從字串的2號位置取長度a,即可取得資料本身
        });
});

 

Arduino

Arduino端程式很單純,主要是多開了一個序列連線(#5的Serial1,代表LattePanda對Arduino的序列通訊)。進入loop()函式之後,#11~#13為搭配標頭a、資料長度與資料本體結合成一個封包之後發送給LattePanda端的Python、Node.js或其他程式。

Arduino端程式

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

#define sensorPin A0

 

void setup() {

Serial.begin(9600);   //Serial monitor

Serial1.begin(9600); //LattePanda對Arduino的序列通訊

}

 

void loop() {

int Sensor = analogRead(sensorPin);

Serial.println(Sensor);   //顯示A0腳位狀態

Serial1.print(‘a’);

Serial1.print(String(Sensor).length());

Serial1.print(Sensor);

//#11~#13為搭配標頭a、資料長度與資料本體

//結合成一個封包之後發送給LattePanda

delay(1000);

}

實際執行

請先將Arduino端程式上傳到LattePanda的Arduino上,接著開啟Windows的命令提示字元來執行Node.js或Python(兩者任一)即可透過序列埠取得來自Arduino端的資料之後上傳到MCS雲服務,我們可以看到數值變化,並點選該資料通道的右上角即可看到歷史數值變化,如下圖。

也可由MCS手機端App檢視資料。

當數值超過我們所設定的上限時, Android手機會收到來自MCS手機端程式的推播訊息,如下圖。

View post on imgur.com

上傳溫溼度感測器資料到ThingSpeak雲服務

這次使用的是DFrobot之DHT11溫濕度感測器-連結

ThingSpeak雲服務與設定

ThingSpeak是另一個好用的雲服務,可以接收來自各種開發板或單一程式傳上去的資料,在網站上可以找到很多熱門開發板的現成範例,包含Arduino、ESP8266與Raspberry Pi等。請開啟ThingSpeak網站(https://thingspeak.com/)註冊一個帳號之後登入,登入之後主畫面如下圖:

ThingSpeak端設定

登入ThingSpeak網站之後點選「Channels」來建立新的Channel,並如下圖填入相關資訊,我們要把DHT11溫濕度感測器的溫度與濕度執分別傳上去,因此請將Field1填入temperature,Field 2則填入humidity

建立Channel之後,點選API Keys 標籤,請把上圖中的Channel ID與Write API Key記下來,後續要把這兩筆資料填入Visual Studio程式中。

於Visual Studio中讀取溫濕度感測器資料

糗確認在LattePanda上是否安裝Microsoft Visual Studio 2015(或以上)。

Arduino

  1. 在Arduino IDE中匯入Adafruit DHT11函式庫,請由函式庫管理員中搜尋「DHT11」後點選Install按鈕即可。

  1. 接著下載Arduino程式碼-連結,找到ino後上傳到LattePanda Arduino上即可。

本範例主要是如何透過Visual Studio取得Arduino的資料之上傳到ThingSpeak雲服務。架構與上一個範例使用Python是一樣的,看各位在PC端喜歡用什麼樣的程式語言。當然在ThingSpeak網站上也可以找到Python結合Arduino的範例,這樣做法就與上一個專題差不多了。

請開啟一個新的Visual Studio C#專案,並於Program.cs中貼入以下程式碼:

program.cs範例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using LattePanda.Firmata;

namespace DHT
{
    class Program
    {
        const string WRITEKEY = "THINGSPEAK_KEY_HERE"; //ThingSpeak Key
        const int DELAY = 20;          //Delay time for send packet to ThingSpeak
        const int GET_TEMPERATURE = 0x47;
        const int GET_FAHRENHEIT = 0x48;
        const int GET_HUMIDITY = 0x49;
        static void Main(string[] args)
        {
            Arduino arduino = new Arduino();
            while (true)
            {
                Console.WriteLine("Receiving sensor data...");
                arduino.DHT(GET_TEMPERATURE); 
//For Fahrenheit : GET_FAHRENHEIT
                Thread.Sleep(2000);
                string temp = arduino.STRING_DHT;
                //
                arduino.DHT(GET_HUMIDITY);
                Thread.Sleep(2000);
                string hum = arduino.STRING_DHT;
                try
                {
                    string rec = "";
                    string strUpdateBase = "http://api.ThingSpeak.com/update";
                    string strUpdateURI = strUpdateBase + "?key=" + WRITEKEY;

                    strUpdateURI += "&field1=" + temp;
                    strUpdateURI += "&field2=" + hum;

                    HttpWebRequest request = WebRequest.Create(strUpdateURI) as HttpWebRequest;
                    request.Timeout = 5000;
                    request.Proxy = null;
                    //request.Accept = "application/xrds+xml";  
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    WebHeaderCollection header = response.Headers;
                    var encoding = ASCIIEncoding.ASCII;
                    using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
                    {
                        rec = reader.ReadToEnd();
                        Console.WriteLine("The data was successfully sent. Node Number: " + rec);
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy - HH:mm:ss") + "      Temperature: " + temp + " °C" + "       Humidity: " + hum+" %");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                }
                Thread.Sleep(1000);
                for (int i = 0; i <= DELAY; i++)
                {                 
                    Console.Write(".");
                    Thread.Sleep(1000);
                }
                Console.WriteLine();
            }
        }
    }
}

實際執行

存檔之後點選 Start 按鈕,會看到Visual Studio執行畫面:

這時請開啟ThingSpeak網站,進入剛剛設定好的Channel,應該會看到類似下方的畫面,試著對感測器呵氣來改變溫度與溼度吧!

於ThingSpeak網站檢視溫度與濕度資料變化

這次介紹兩種雲服務:MCS與ThingSpeak,雖然功能上比Microsoft Azure來得少多了,但使用流程也因此簡化許多,功能上大致上還是可以滿足我們從雲端控制板子腳位或顯示板子資料等兩大訴求。請根據大家的使用需求來選用合適的雲服務。

 

相關文章:

[LinkIt 7697] WiFi 控制RGB三色LED

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Wi-Fi 來控制LinkIt 7697開發板上所接的 RGB 三色LED燈。在此會把7697作為 web server,App Inventor則是透過 IP 搭配指定字元來與它互動。

作者/攝影  曾吉弘
時間  3小時
成本
難度  * * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板
  • RGB LED (共陰)
  • 或三顆不同顏色的LED

本文要介紹如何將LinkIt 7697 作為一個簡易的web server (修改自MTK原廠範例),可透過網頁與App Inventor 來控制它。CAVEDU 2017年已經執行了超過30場的 LinkIt 7697研習,請參考我們的教學投影片,也歡迎找我們去上課啦~

LinkIt 7697超詳細教學投影片請按我

硬體組裝

請將LinkIt 7697與共陰RGB LED接上麵包板後,按照以下對應來接線:

RGB LEDLinkIt 7697
RP11 (D11)
GP9
BP7 (也是板載的USR LED)
GND任一GND即可

 

完成如下圖

App Inventor

請登入MIT App Inventor之後,建立一個新專案。或直接App Inventor中文學習網匯入本專案原始檔,唯一要修改的地方就是LinkIt 7697於您所指定網路所取得的IP位址。

Designer

  1. 新增一個HorizontalArrangement,其中放入一個按鈕與Label,按鈕是用於設定IP,label則是用於顯示各種訊息。
  2. 新增一個Textbox,Text設為空,Hint則設為”check 7697 ip in serial monitor”,用於輸入7697的實際IP
  3. 新增一個TableArrangement,寬度設為Fill parent,高度為200像素。Row=2。Column=3。接著放入五個按鈕,寬度各為33%,高度則為100像素。這些分別用於讓RGB LED亮紅色(R)、綠色(G)、藍色(B)、白色(W)與熄滅。
  4. 新增一個

 

完成後如下圖:

STEP1 IP變數與設定IP按鈕

 

在此宣告一個變數,內容為”http://192.168.1.73”,這是LinkIt 7697於您所指定網路中所取得的IP。後續會把這個變數值用於Web元件的Url屬性。如果您只有一片LinkIt 7697或已經確定其IP的話,可以在此把它寫死不用修改。

不過為了方便起見,我們可以透過Textbox來設定新的IP,這在您現場有多片LinkIt 7697要控制時很方便。按下Button_setIP按鈕,會先檢查Textbox是為空,如果已輸入內容就將設定結果顯示於Label,否則將顯示錯誤訊息於Label。

STEP2   副程式用於設定URL與顯示訊息

在此宣告一個副程式來管理每次按下按鈕時所發送的字元與顯示訊息。請新增一個procedure,並點選藍色方塊來新增參數,點選副程式與參數名稱即可修改名稱。在此副程式名稱改為sendData,參數名稱為message / command

在sendData副程式中,我們會把送進來的參數分別用於7697的網址(組合結果:http://192.168.1.73/R,不同字元對應不同動作)與要顯示的訊息。最後再呼叫Web.Get來呼叫LinkIt 7697所產生的網址即可。

STEP3   各顏色燈光按鈕

這樣做程式是否變的很清爽呢?每個按鈕的差別只在於參數不同而已,當然如果我們要發送/W出去的話,LinkIt 7697也要有對應的程式才行。簡列如下:

Button_R(紅燈):Red 與 /R

Button_G(綠燈):Green 與 /G

Button_B(藍燈):Blue 與 /B

Button_W(白燈):white 與 /R

Button_off(紅燈):Red 與 /o   (小寫的o~)

LinkIt 7697Wifi範例:

本範例修改自LinkIt 7697的SimpleWebServerWifi範例(就是多加幾個字元而已),重點段落

1.連上指定網路

while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status

2.於7697簡易網頁中網頁顯示訊息,您可在7697所產生的網頁上編寫簡易的html。在此使用超連結可以直接點選。當然目標是透過App Inventor來發送囉。

client.print("Click <a href=\"/R\">here</a> to light red<br>");
client.print("Click <a href=\"/G\">here</a> to light green<br>");
client.print("Click <a href=\"/B\">here</a> to light blue<br>");
client.print("Click <a href=\"/W\">here</a> to light white<br>");
client.print("Click <a href=\"/o\">here</a> to light off<br>");

3.檢查網址並呼叫自定義函式來控制LED。如果我們檢查到某次client request(手機或透過網頁點選)的結尾等於我們所指定的字元,就呼叫led()函式,並透過參數來決定哪一個顏色亮起。1,0,0就是紅色,0,0,1是藍色等。

 

在此我們並沒有調整每一種顏色的亮度,所以只有亮暗兩種狀態,您可以思考一下如何透過這樣的架構把參數送進來給analogWrite()函式來調整RGB LED的亮度,例如(128, 130, 255),這樣顏色的變化會更繽紛喔!

// Check client request
        if (currentLine.startsWith("GET /R")) {  // GET /R to light red
          led(1,0,0);     
        }
//其餘省略

void led(int R, int G, int B) {
  digitalWrite(11, R);
  digitalWrite(9, G);
  digitalWrite(7, B);
}

操作

請先確認7697端程式已經執行,並開啟Serial Monitor來看7697的IP為何。將App Inventor中的ip變數值改好之後執行(由於本範例並非使用藍牙,所以模擬器也可執行)。

確認好IP之後,先開啟瀏覽器,您所使用的裝置需與7697位於同一個網段之下才行喔,如以下的192.168.1.73。

開啟app吧,設定IP成功畫面如下圖左,點選各個按鈕可以看到畫面右上角的label會顯示對應的訊息,您的RGB LED順利亮起來了嗎?

 

Simple:13

/*
  WiFi 7697 LED control
  If the IP address of your shield is yourAddress:
  http://yourAddress/R to light red
  http://yourAddress/G to light green
  http://yourAddress/B to light blue
  http://yourAddress/W to light white
  http://yourAddress/o to turn off LED

  Circuit:
    LinkIt 7697 HDK
    RGB LED (common cathode) 
    R - LinkIt D11
    G - LinkIt D9
    B - LinkIt D7

  created 25 Nov 2012
  by Tom Igoe
  modified 3 Nov 2017
  by CAVEDU
*/
#include <LWiFi.h>

char ssid[] = "ssid";      //  your network SSID (name)
char pass[] = "pass";   // your network password
int keyIndex = 0;                 // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
WiFiServer server(80);

void setup() {
  Serial.begin(9600);      // initialize serial communication
  pinMode(LED_BUILTIN, OUTPUT);      // set the LED pin mode
  pinMode(11, OUTPUT);  //R
  pinMode(9, OUTPUT);   //G
  pinMode(7, OUTPUT);   //B

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);

    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status
}


void loop() {
  WiFiClient client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println("new client");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // the content of the HTTP response follows the header:
            client.print("Click <a href=\"/R\">here</a> to light red<br>");
            client.print("Click <a href=\"/G\">here</a> to light green<br>");
            client.print("Click <a href=\"/B\">here</a> to light blue<br>");
            client.print("Click <a href=\"/W\">here</a> to light white<br>");
            client.print("Click <a href=\"/o\">here</a> to light off<br>");

            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          } else {    // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check client request
        if (currentLine.startsWith("GET /R")) {  // GET /F to light red
          led(1,0,0);     
        }
        if (currentLine.startsWith("GET /G")) {  // GET /G to light green
          led(0,1,0); 
        }
        if (currentLine.startsWith("GET /B")) {  // GET /B to light blue
          led(0,0,1);
        }
        if (currentLine.startsWith("GET /W")) {  // GET /W to light white
          led(1,1,1);
        }
        if (currentLine.startsWith("GET /O")) {  // GET /O to light off
          led(0,0,0);
        }
      }
    }
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
}

void led(int R, int G, int B) {
  digitalWrite(11, R);
  digitalWrite(9, G);
  digitalWrite(7, B);
}

 

相關文章:

[Micro:bit ] I/O腳位控制

本文要介紹BBC Micro:bit上的I/O腳位,讀取類比輸入腳位的變化之後來控制開發板上的LED matrix。做出類似長條圖的效果。

作者/攝影  曾吉弘
時間  3小時
成本
難度  * *
材料表
  • 個人電腦
  • BBC Micro:bit開發板
  • LED x1
  • 麵包板 x1
  • 跳線 x2

Micro:bit I/O腳位介紹

Microbit除了明顯的五個腳位(原廠稱為pad)之外,另外還有十多隻腳位,功能定義如下圖。在使用上就如同Arduino或其他的開發板一樣,數位I/O,類比I/O(PWM)、I2C與SPI功能,該有的都有。

在使用上,我們可以用鱷魚夾去夾住pad (0, 1 ,2, 3V GND這五個大的pad),但比較小的腳位在操作上就不是很方便,因為Microbit端建議使用DFRobot BOSON kit for Micro:bit,或是Seeed StudioGrove Inventor kit for micro:bit。如下圖是DFRobot BOSON kit for Micro:bit,您可以看到常用的腳位都做好防呆接頭,其他的腳位也有母座,直接接杜邦線就可以使用了。如果想要用Micro:bit來輸出音效的朋友,左下角的音源接頭,您一定會喜歡的啦。

硬體接線

請將可變電阻先插上麵包板,接著將中間腳位接到Micro:bit0號腳位(#0 pad),接著一側接地(GND)一側接電。

 

請注意Miro:bitGND腳位相當多,但在此使用比較好接的GND pad

Micro:bit程式

寫一個簡單的程式,按下A按鈕之後,會不斷讀取P0類比腳位的狀態(0~1023),如果P0<300的話,亮起 LED matrx 第一列,反之亮起1~4列。您可以自由修改這個判斷值與呈現的效果。

Javascript code

 

有興趣的朋友也可以轉成JavaScript來比較看看,慢慢就會進步喔

input.onButtonPressed(Button.A, () => {
   while (true) {
       if (pins.analogReadPin(AnalogPin.P0) < 300) {
           basic.showLeds(`
               . . . . .
               . . . . .
               . . . . .
               . . . . .
               # # # # #
               `)
       } else {
           basic.showLeds(`
               . . . . .
               # # # # #
               # # # # #
               # # # # #
               # # # # #
               `)
       }
       basic.pause(100)
   }
})

完工了!來試試看吧。確認腳位都沒接錯之後,請慢慢轉動可變電阻,看看LED matrix有沒有變化吧。

 

相關文章:

 

[App Inventor+Microbit小專題 ] 按鈕控制畫面小球

作者/攝影  曾吉弘
時間  3小時
成本
難度  * * * *
材料表
  • 個人電腦
  • App Inventor開發環境
  • 支援BLE的Android手機
  • BBC Micro:bit開發板

本文要介紹如何透過BBC Micro:bit開發板上的按鈕來控制App Inventor畫面上的小球左右移動,碰到畫面邊緣還會在Micro:bit LED matrix 上顯示對應的字樣。

 

範例 aia檔下載請按我

 

藍牙配對

 

Micro:bit端設定:

  1. 同時按住Microbit 正面A、B按鍵,不要放掉
  2. 按住A、B鍵時,把背面的Reset 鍵按下後再放開。
  3. 這時應該可以看到 “PAIRING MODE!” 以跑馬燈方式出現在Microbit LED 螢幕上,若看到這訊息,便可以放開A、B鍵。
  4. PAIRING MODE! 結束後,會看到一個圖形出現在Microbit LED 螢幕上,不同的Microbit 出現的圖案也不同,這是Microbit 不同裝置獨特的”簽名” (Signature) 。

  1. 這時候的Microbit 已經準備好跟其他裝置配對,請看以下影片教學

 

 

 

Android手機端設定:

  1. 進入Android手機的設定–>藍牙
  2. 確認Micro:bit 已進入配對模式
  3. 當Micro:bit上的‘PAIRING MODE!’ 顯示完,搜尋(每隻Android手機這個選項的文字不一定相同,但意思差不多),應該會看到類似 micro:bit [XXXXX]的選項,其中XXXXX 會根據每片micro:bit而不同。點選該裝置來配對。

4.micro:bit 會出現向左的箭頭,然後Android裝置上會跳出畫面要求輸入配對PIN碼的視窗。

5.按住Micro:bit 的按鍵A ,這時microbit 會連續出現六個數字,這就是配對碼。

6.回到Android裝置上,輸入這六個數字。如果Microbit 出現[V],代表配對成功。如果是[X]代表沒成功,請再試一次

 

編寫程式

匯入BLE 與 micro:bit extension

 

請登入MIT App Inventor官方網站,建立新專案,在Designer頁面中點選Palette左下角的Extension,再點選”Import extension“與”URL:

  1. 貼入以下兩個 extension link:

 

2. 請加入 Microbit_LedMicrobit_Button這兩個Microbit元件。兩者的BluetoothDevice 屬性設為 “BluetoothLE1″。這步驟很容易忘記,別漏掉了

  1. 加入四個按鈕放入 horizontalArrangement元件中,分別用於掃描、停止掃描連線與斷線

 

  1. 新增Canvas畫布元件(寬高各為320像素,底色隨意),再放入一個Ball元件。完成後Designer頁面如下圖(可以不用一模一樣)

Blocks頁面

 

本範例的基本概念是按下Micro:bit板子上的兩個按鈕可以控制小球左右移動,碰到Canvas邊緣會在LED矩陣上顯示對應的文字。開始吧:

STEP1: BLE連線成功後啟動Clockl元件

在BluetoothLE1.Connected事件中,首先啟動Clock.Timer(timer Interval 設為100),並顯示相關訊息,最後要求Micro:bit開始更新兩個按鈕的狀態。

STEP2:按下Micro:bit左側A按鈕

Microbit_Button1.ButtonAStateReceived事件中:

○如果按下了左側的A按鈕(Button_State_Value為true),則讓ball_X 變數值累減10。

○讓Ball1元件移動到(ball_X, 100),也就是左移10像素。

STEP3:按下Micro:bit右側B按鈕

現在看到右側的B按鈕,所做的事情幾乎一模一樣但是Ball1元件的移動方向是相反的。

Microbit_Button1.ButtonBStateReceived事件:

○如果按下了右側的B按鈕(Button_State_Value為true),則讓ball_X 變數值累加10。

○讓Ball1元件移動到(ball_X, 100),也就是右移10像素。

STEP4 Ball reached canvas’ edge

當小球碰到Canvas畫面四邊時,我們希望在Micro:bit的LED矩陣上顯示對應的文字。

Ball1.EdgeReached事件中,使用 if / else if 來檢查到底碰到了哪一邊,根據App Inventor的文件,1是北方,所以要透過Microbit_Led1.WriteLEDText指令來顯示’N’。其餘類推,請看下圖:

完工了!來試試看吧。請確認您的Micro:bit與Android已經配對好了。按下Microbit板子上的按鈕應該讓畫面上的小球左右移動,試試看讓小球去撞牆吧,看看有沒有顯示對應的文字。試試看用 Micro:bit LED 搭配 App Inventor 做出更多功能吧

 

 

相關文章:

[ Micro:bit開箱文] 手勢辨識Grove也有Micro:bit的擴充板套件了Grove Inventor Kit

Micro:bit 為英國廣播公司(BBC) 為推廣學齡兒童程式邏輯教育給所推出的簡潔版卡式開發硬體;外形小巧便於攜帶,在程式教學上的特點有著簡單好上手的介面,硬體上有內含幾款感測器可供單獨使用,以及其可擴充性接腳的設計可將其教育應用的觸角更加延伸。

作者/攝影  林德昀
時間  拆開包裝紙的時間
成本 約NT:1,900
難度  * * *
材料表
  • Grove Inventor Kit

本套件由創客界知名的 Seeed 為 Micro:bit 所推出符合 Grove 標準的模組化套件,一般在物聯網的學習上通常使用的麵包板及杜邦線會有較多接線上的出錯機會,而對於硬體較不熟悉的軟體初學者若使用此套件學習可事先排除很多上述的問題而可更直接專注於程式學習上。

本套件包含:

  1. 擴充母板
  2. 迷你喇叭模組
  3. 角度感測模組
  4. 超音波感測器模組
  5. 光感測器模組
  6. 防水三色發光二極體條
  7. 手勢感應器模組 (筆者認為最有可玩性的模組)
  8. 4 位數字顯示器
  9. 紅光 LED 模組
  10. micro USB 線
  11. 五色鱷魚夾線各2條 (黑、白、紅、綠、黃)
  12. 使用手冊

 

手勢辨識

Micro:bit 上 5×5 LEDs 顯示手勢方向

 

以手勢控制彩虹燈走向

(程式實作部分請期待另篇應用教學文)

 

1.擴充母板

將Micro:bit 的擴充腳位拉出,有給 Grove 4-pin 接頭×4, 以及可供鱷魚夾或香焦棒使用的接點:P0,P1,P2,P8,P12,P13,及3.3V和GND,左方還有PWR的電源指示LED,及僅使用於供電使用的Micro USB接頭 (無法寫入程式);右方中間有廷伸用的接頭目前尚未有其資料,待有新資訊後補充。

 

下圖為Micro:bit 放入後週邊使用其他配線的示意圖

  1. 迷你喇叭模組

可由此喇叭發出汽車,門鈴⋯⋯等,經由不同的頻率的輪入訊號,可得出多樣變化的聲音;此模組中有可供調整輪出音量的可變電阻。

 

  1. 角度感測模組

由10k 歐姆可變電阻組成的角度感測模組,變化角度可由0~300度。可在學習專案中控制音量或馬達轉速⋯⋯等。

 

4.超音波感測器模組

可由此模組以非接觸的方式測量距離,可學習依據不同的距離變化將變量經由Micro:bit轉化為光或聲音的不同變化。

 

5.光感測器模組

可檢測出光度的變化而輸出相對應的訊號,可學習依照訊號強弱的不同而控制LED閃爍⋯⋯等應用。

 

  1. 防水三色發光二極體條

由30顆3色LED 所組成1公尺長的LED 條,每一LED 可由程式獨立控制顯示不同色彩,其封裝具有防水性,可使用於戶外而無需擔心下雨淋溼的影響。

 

7.手勢感應器模組

具有識別 上、下、左、右、前、後、順時鐘、反時鐘及揮手共9種手勢的感測模組。其感測範圍於前方5~15公分,視角60度內的區域內。由於未有詳細資料,筆者猜其工作原理可能為以紅外光加上脈波調變及都卜勒效應所作的感測器。可由本模組實作手勢操作各項目應用,如切換音樂,調整音量,開關燈⋯⋯等。

 

脈波調變:以脈波的形態將訊號改變為所需要的波形,創客界常用的PWM即為一種工作時間寬度上的脈波調變;在實際生活中,各遙控器不相互干擾也是一種脈波調變的應用。

 

都卜勒效應:當接近或遠離時,會對觀察者造成測量頻率的變化;如火車接近時的鳴笛聲會較尖銳,而遠離時會較低沉。

 

  1. 四位數字顯示器

可於學習專案中用作顯示時間或實驗數值。

 

  1. 紅光 LED 模組

需注意LED腳位,若不亮時請檢查是否接反。

  1. 使用手冊

內含12種對於以上模組的基礎程式應用

 

相關文章:

[LattePanda] 使用Google Assistant玩互動語音助理

作者/攝影  袁佑緣
時間  1小時
成本
難度  * * * * *
材料表
  • LattePanda
  • 螢幕
  • 鍵盤
  • 滑鼠
  • 喇叭
  • 麥克風

本文說明如何使用 LattePanda搭配Google推出的Google Assistant服務,來打造一個智慧助手,一起來看看是如何完成的吧!

 

STEP0. 事前準備

為了要能夠使用語音服務,除了我們的小電腦LattePanda外,請額外再準備USB麥克風以及喇叭,另外本次的範例會需要連到Google 雲端的服務,所以請確認LattePanda能夠連到網路。

 

STEP1. 首先我們要到先設定一個Google Developer Project

請點選以下的網址到Google Cloud Platform,如下圖。

https://console.cloud.google.com/project

接著請點選”CREATE PROJECT”,建立一個新的專案,如下圖,建立一個新專案名稱為my-google-assistant。

初始設定完成後,要等幾分鐘才會建立完成,回到Platform的右上角可以看到正在建立新專案。

 

STEP2. 接著我們要完成Google Assistant API的設定

首先,請連到Google API的設定網頁(https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview),並把Google Assistant API設定為”ENABLE”。

接著,為了要取用Google雲端的API,我們必須先有一個認證的client端,所以請連到以下的網址來建立一組oauth client ID。

https://console.developers.google.com/apis/credentials/oauthclient

而如果還沒有設定過Consent Screen的話,系統會提示您填上必要的設定,請點選”Configure consent screen”,設定如下圖。

最後回到”Create client ID”這一步,在Application Type填上Other即可。

到這裡,我們就已經完成了Client ID的設定囉!

最後,請把這個Client ID資訊下載到電腦上(請點選右方的下載箭頭),待會在進行Google Assistant認證的時候會用到。

STEP3.設定Google Acitvity

 

在進到安裝Google Assistant 的程式之前,我們要先設定一下這個Google帳號的

Activity,請連到以下的網址進行設定。

 

https://myaccount.google.com/activitycontrols

 

至於什麼是Activity呢?簡單說就是允許Google能否取用某些個人資訊,例如聲音、App資訊等,為了要能夠讓Google助手能正常運作,請將以下三個Activity設為Enabled。

 

Web & App Activity

Device Information

Voice & Audio Activity

STEP4.安裝Google Assistant SDK Python函式庫

我們使用的Google Assistant SDK是基於Python這個程式語言下去實做的,所以必須先在電腦上安裝Python的執行環境。

請到Python的官網(https://www.python.org/downloads/windows/)下載最新版的安裝檔。

接下來執行下載的Python安裝檔,並記得將勾選”Add Python to PATH”的選項,讓Python的執行位址加到Windows的系統變數中。

再來,請按下Windows的快捷鍵<Win>+R,啟動Windows快速開啟,並打上cmd呼叫Windows Command Prompt。

請在開啟的Command Prompt中輸入以下指令

 

pip install –upgrade setuptools

 

呼叫Python的套件管理員更新setuptools這個套件。

接著再輸入以下指令

 

pip install –upgrade google-auth-oauthlib[tool]

 

把Google認證oauth client的工具安裝到系統中。

還記得我們在STEP2中下載的Client ID JSON檔嗎?請將下載的JSON檔的位址複製起來,並改到以下指令中的”path/to/client_secret_XXXXX.json”

 

在Command Prompt中輸入以下指令以完成認證。

 

google-oauthlib-tool –client-secrets path/to/client_secret_XXXXX.json –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save

 

Google會自動提示您在瀏覽器中完成認證,認證完成如下圖。

認證完的credential.json會自動存在電腦的系統上,Windows環境中預設會存在AppData中,使用者以後在啟動Google Assistant時不用擔心需要再次認證。

最後我們看到Google Assistant SDK的source,前面有說過這個SDK是基於Python這款程式語言去實做的,使用上非常容易上手,而官方的github網址在這邊(https://github.com/googlesamples/assistant-sdk-python)。

裡面有紀錄如何安裝SDK,以及如何去使用提供的函式庫功能,另外還有一些現成的範例可以讓入門的使用者去做體驗,如果讀者想要擴充、修改自己的Google Assistant的功能,可以下載(Download ZIP)整個專案來去修改,有興趣的朋友不妨去嘗試看看!

 

而本文章為了快速的demo,在這邊直接使用包好的assistant-sdk範例套件,讓使用者可以省去下載、手動安裝的過程,所以請在Command Prompt中輸入以下指令

 

pip install google-assistant-sdk[samples]

 

最後我們輸入以下的指令來執行一個簡單的範例pushtotalk。

 

googlesamples-assistant-pushtotalk

 

這支pushtotalk會提示使用者按下Enter鍵並開啟Google Assistant的語音對談功能,請確定您的麥克風與喇叭都有接到LattePanda上,並確認前面的步驟都設定正確,接下來就可以來玩玩看Google Assistant有什麼功能吧!

 

 

相關文章:

 

 

 

[App Inventor+Microbit小專題 ] LED控制

作者/攝影  曾吉弘
時間  3小時
成本
難度  * * *
材料表
  • 個人電腦
  • App Inventor開發環境
  • 支援BLE的Android手機
  • BBC Micro:bit開發板

本文要介紹如何讓App Inventor 透過 BLE 來與最近非常熱門的BBC Micro:bit開發板互動。Micro:bit板子上已經具備了BLE藍牙通訊功能,搭配app Inventor寫好的micro:bit extesion,就能有更多互動的效果。本範例修改自 MIT App Inventor IoT網站之 Micro:bit範例

範例 aia檔下載請按我

藍牙配對

 

Micro:bit端設定:

  1. 同時按住Microbit 正面A、B按鍵,不要放掉
  2. 按住A、B鍵時,把背面的Reset 鍵按下後再放開。
  3. 這時應該可以看到 “PAIRING MODE!” 以跑馬燈方式出現在Microbit LED 螢幕上,若看到這訊息,便可以放開A、B鍵。
  4. PAIRING MODE! 結束後,會看到一個圖形出現在Microbit LED 螢幕上,不同的Microbit 出現的圖案也不同,這是Microbit 不同裝置獨特的”簽名” (Signature) 。

  1. 這時候的Microbit 已經準備好跟其他裝置配對,請看以下影片教學

 

 

 

Android手機端設定:

1.進入Android手機的設定–>藍牙

2.確認Micro:bit 已進入配對模式

3.當Micro:bit上的‘PAIRING MODE!’ 顯示完,搜尋(每隻Android手機這個選項的文字不一定相同,但意思差不多),應該會看到類似 micro:bit [XXXXX]的選項,其中XXXXX 會根據每片micro:bit而不同。點選該裝置來配對。

4.micro:bit 會出現向左的箭頭,然後Android裝置上會跳出畫面要求輸入配對PIN碼的視窗。

5.按住Micro:bit 的按鍵A ,這時microbit 會連續出現六個數字,這就是配對碼。

6.回到Android裝置上,輸入這六個數字。如果Microbit 出現[V],代表配對成功。如果是[X]代表沒成功,請再試一次

編寫程式來控制Micro:bit LED matrix

匯入BLE 與 micro:bit extension

 

請登入MIT App Inventor官方網站,建立新專案,在Designer葉面中點選Palette左下角的Extension,再點選”Import extension“與”URL:

  1. 貼入以下兩個 extension link:

 

2. 請加入 Microbit_Led 這個元件,這是一個非可視元件。並把它的 BluetoothDevice 屬性設為 “BluetoothLE1″。這步驟很容易忘記,別漏掉了

  1. 加入四個按鈕放入 horizontalArrangement元件中,分別用於掃描、停止掃描連線與斷線
  2. 加入一個說明訊息用的 label
  3. 加入一個 ListVeiw,當掃描到鄰近的BLE裝置時會顯示在這裡
  4. 新增一個 TextBox,在此輸入我們希望 micro:bit呈現的英文字(中文不行喔)
  5. 新增兩個按鈕,一個是 [Write to LED] 把 Textbox 內容丟給 micro:bit ,一個是[DrawSmiley],讓 Micro:bit 呈現我們所指定的點陣圖案。

Blocks頁面

  1. 掃描與連線

  1. 畫笑臉副程式

在此用一個副程式 DrawSmiley 來代表,我們會用一個 5 x 5 的數字陣列發給 Micro:bit,就能藉此顯示我們想要的圖形。

在此用到的是 Microbit_Led1.WriteLEDMatrixState指令搭配 binary to base 10 指令組合起來的 0101 陣列,1代表 LED亮起,0則是熄滅。仔細看看,這樣就是一個笑臉呢

0 1 0 1 0

0 1 0 1 0

0 0 0 0 0

1 0 0 0 1

0 1 1 1 0

  1. 發送Textbox內容到 Micro:bit

沒錯,就這麼簡單,直接把 Textbox內容透過 Microbit_Led1.WriteLEDText指令發送出去就好,但不能打中文喔

斷線

斷線時會呼叫 bluetoothLE元件來中斷藍牙連線,確認斷線之後則顯示相關訊息。

完工了!來試試看吧。請確認您的Micro:bit與Android已經配對好了。按下按鈕應該可以看到您在 Textbox 中輸入的文字(中文不行喔)以跑馬燈的形式出現在micro:bit 的 LED matrix 上。按下 smilley 按鈕應該也能看到笑臉圖案, 試試看用 Micro:bit LED 搭配 App Inventor 做出更多功能吧

 

相關文章:

 

完成如下圖:

[Micro:bit] 使用MicroPython與Boson套件設計智慧風扇

本篇文章將帶領讀者使用Microbit輕鬆打造一台小型的智慧風扇,有興趣的朋友不妨參考一下本文,一起來動手DIY吧!

作者/攝影  袁佑緣
時間  3小時
成本
難度  * * *
材料表
  • Micro:bit
  • 樂高積木
  • Micro:bit Boson 擴充版

 

介紹

本篇文章的主角是BBC推出的微型電腦micro:bit,有興趣的朋友不妨參考一下micro:bit的官方網站(http://microbit.org/),裡面有許多適合入門又豐富有趣的應用喔!

而為了要打造一台電動風扇,我們需要加裝額外的擴充版跟電子元件,本文所使用的是DFRobot推出的Boson擴充版,Boson是DFRobot 所推出的一系列電子套件,外型就像積木一樣,除了相容於LEGO之外,還可以用金屬羅絲固定,並且附有磁吸式的底座,容易組裝也容易拆卸,且電路的接口都有經過特別的設計,隨插及用,非常適合沒有電路基礎的小朋友們入門電子實做的世界!

 

想了解更多boson kit相關資訊的朋友,不妨去參考一下DFRobot的官方網站說明喔(https://www.dfrobot.com/blog-630.html)!

準備

經過前面的介紹,接下來我們就要來正式進入我們的實做部份了,首先我們在軟體以及硬體上做一些準備。

 

組裝擴充版

準備我們的micro:bit以及Boson擴充板,組裝圖如下,記得micro:bit的logo朝下面,有LED陣列的那面朝上喔,如果說到時候燒錄程式失敗的話,就會用LED陣列顯示出錯誤訊息。

micro:bit控制板

組裝micro:bit boson擴充板

組裝完成!

 

風扇製作

本範例的硬體主要是用LEGO來做,請參考下方的圖片,零件上用LEGO動力機械的基本套件就能完成囉,當然有興趣的朋友也可以自己DIY設計一個獨特風格的電風扇底座,只要記得上面要有四個boson的座,在待會的實做部份我們會慢慢放入感測器以及馬達、風扇。

軟體安裝

Micro:bit 預設的程式撰寫環境有兩種,一種是圖形化的JavaScript Blocks Editor,另外一種則是我們接下來用的MicroPython Editor。

Microbit let’s code 網站:http://microbit.org/code/

MicroPython 線上編輯器

 

 

MicroPython是將原本就容易學習的程式語言Python實做到為微控制板的架構上,好比說是micro:bit,以下是micro:bit MicroPython的詳細說明文件(http://microbit-micropython.readthedocs.io/en/latest/tutorials/introduction.html),裡面有詳細敘述許多的功能,以及API取用的方法,比起圖形化的Block Editor 來說雖然難度上升了一點,但是彈性也增加了,可以讓我們程式撰寫的功能範圍變得更廣!

MicroPython for micro:bit文件

 

除了使用剛剛在官網看到的線上版,也可以下載MicroPython文件中推薦的Mu Editor(https://codewith.mu/#download),這款編輯器主打簡單、易學,初學者只要專心在學習如何撰寫MicroPython上就好。

Mu 編輯器

 

除此之外,這個編輯器還是跨平台的,不只Windows平台上可以執行,macOS或者是Linux也可以,請讀者依照自己的作業系統環境來下載。

下載Mu Editor

 

下載完成後,打開來之後就會有如下圖的編輯器,當我們要上傳程式碼的時後,請先將micro:bit用usb線接到電腦上,再按下flash的按鈕就行囉!

實做

STEP1:控制馬達 

首先我們先加入Boson套件中的馬達,請裝在基座的正中間,組裝如下圖。

裝完馬達跟風扇之後,接下來請把Boson的訊號線接到micro:bit Boson擴充板的8號腳位上,也就是右上角的那個插座,如下圖。

再來請打開我們的Mu Editor,並打上以下的範例程式碼。

from microbit import *

mode = [700, 900, 1023]
while True:
    for speed in mode:
        print(speed)
        pin8.write_analog(speed)
        sleep(1000)

 

程式碼解說

首先從microbit這個Python函式庫中引入所有的函式,也就是把我們所需要的工具都加進這支程式當中。

接下來再宣告一個變數mode,為三個數字的串列(list),其實就是建造一個三段變速的電風扇,而裡面的數字大小代表的則是馬達的輸出馬力,數字越大就會越強,風力也越大,注意到1023是最高的馬力,而最低馬力700則是個建議的數值,太低的話有可能馬達會轉不到風扇,這點要特別注意喔!

最後我們有一個大大的while迴圈,裡面在包著一個for迴圈,所謂的迴圈就是會在某種條件下一直執行動作的意思,好比說while True就是一直迴圈,for speed in mode就是在三段變速中各執行一次的意思。

至於for迴圈裡面的所執行的動作,就是很直接的把我們的馬達設成三段變速中的速度囉!其中要注意的是,我們所使用是函式(function)是write_analog,意思就是用類比(analog)電壓去驅動我們風扇的馬達,因為用數位的模式就只有開跟關的模式,為了要做到變速的模式,才需要用到類比控制喔!

 

 

 

STEP2:開關控制 

有了馬達之後,我們學會了撰寫程式碼來控制電風扇,但是這樣在使用上可能還不夠直接,如果說我們要像生活中的電風扇一樣,可以有個按鈕來開關電風扇呢?這時候就需要加裝感測器(sensor)啦,請依照下方的組裝圖加上一個Boson套件的按鈕,並把它接到擴充版上的腳位12上。

以下是這個範例的程式碼。

from microbit import *

fan_switch = False
while True:
    if pin12.read_digital():
        fan_switch = not fan_switch
        print('ON' if fan_switch else 'OFF')
        pin8.write_digital(int(fan_switch))
        while pin12.read_digital():
            sleep(100)

 

程式碼解說

在這個範例中,我們把重點放在風扇的開關上,所以在控制轉動風扇的馬達時,我們使用的就不是像前面變速式的類比(analog)方式,而是開跟關兩種模式互相切換的數位(digital)方式,所以用的函式是用write_digital。

在程式中,我們有宣告一個變數fan_switch,用來儲存現在使用者控制風扇的按鈕狀態(第12號腳位),每當使用者按下開關又放開之後,就會改變一次fan_switch的狀態,有可能是從開的狀態轉成關(ON->OFF),或者是相反,只要我們把這個fan_switch變數轉成數字後丟到控制馬達的函式上,就能夠達到開關風扇的功能囉!

請參考下面的示範影片,讀者是否能能順利做到開關風扇呢?

https://youtu.be/QeR3TxfTs5g)

 

STEP3:風量調整

 

接下來我們來整合一下前面兩步的範例,除了要能夠開關之外,還要加入一個旋鈕來調整風力大小,讓這個風扇更加的貼近使用者!

請按照下圖,加裝一個Boson 旋鈕套件到風扇的基座上,並把訊號線接到擴充板的0號腳位上,也就是板子的左上角。

以下是這個範例的程式碼。

from microbit import *

fan_switch = False
fan_mode = ["slow", "medium","fast"]
fan_power = [700, 900, 1023]

def fan_mode_switch(value):
    interval = int(1023/3)
    for i in range(3):
        if value >= i * interval and value < (i+1)*interval:
            break
    return fan_mode[i], fan_power[i]

previous_mode, power = fan_mode_switch(pin0.read_analog())

while True:
    if pin12.read_digital():
        fan_switch = not fan_switch
        print('Fan status: ' + ('ON' if fan_switch else 'OFF'))
        while pin12.read_digital():
            sleep(100)
    if fan_switch:
        mode, power = fan_mode_switch(pin0.read_analog())
        if mode is not previous_mode:
            previous_mode = mode
            print("Fan mode: ", mode)
            pin8.write_analog(power)
    else:
        previous_mode = 'OFF'
        pin8.write_analog(0)
    sleep(300)

程式碼解說

程式好像比起前面兩個程式碼加起來多了不少,就讓我們慢慢來拆解看看是怎麼實作的吧!

首先我們比起STEP1中的三段變速又更明確的定義了馬力(fan_power)跟風速模式(fan_mode)了,並且我們用def定義了一個自己的函式出來,這個fan_mode_switch函式主要會從吃進來的value值,也就是我們旋鈕轉到的數值,來決定我們現在風扇的模式,並輸出對應的馬力值。

而我們是如何判斷風扇馬力的模式呢?其實就是把我們的旋鈕數值(0到1023)分成三等份,然後看看當下使用者轉到的數值是落那一個區間上,就把它對應到三種不同的風力模式(slow, medium, fast)。

最後,這隻範例程式碼還有一個小細節是值得初學者去注意的,當我們在切換模式的時候,我們都必須要注意只有當前一刻風力模式跟此刻轉到的風力模式時才需要去改變我們馬達的轉速,同時顯示的馬力大小才需要去更新,所以我們會用一個previous_mode變數來儲存上一刻的模式喔!

以下是我們的示範影片。

 

STEP4:智慧風扇

最後,我們還想要加入一些常見的風扇沒有的功能,來讓我們的小風扇更加的智慧化,並貼近使用者的使用環境。請依照下面的組裝圖加上一個Boson套件的motion 感測器,並把訊號線接到1號腳位上。

而什麼是motion sensor呢?其實就是所謂的PIR(Passive Infrared Sensor),常見的用途就是用來偵測人體的接近(靠著生物體的紅外線),有時候我們在逃生梯上下樓時,電燈自動會開啟其實就是因為有這種感測器,它會自動偵測有人在走動來自動打光。

而我們想要實做的功能就是除了STEP3中有的功能以外,還要加入一個情境,如果偵測到有人的話,例如說偵測到人的手,就會自動開啟電風扇,而不需要特地去壓按鈕還開電風扇,一起來看是如何實做的吧!

以下是這個範例的程式碼。

from microbit import *

fan_switch = False
fan_mode = ["slow", "medium","fast"]
fan_power = [700, 900, 1023]

def fan_mode_switch(value):
    interval = int(1023/3)
    for i in range(3):
        if value >= i * interval and value < (i+1)*interval:
            break
    return fan_mode[i], fan_power[i]

previous_mode, power = fan_mode_switch(pin0.read_analog())

while True:
    if pin12.read_digital():
        fan_switch = not fan_switch
        print('Fan status: ' + ('ON' if fan_switch else 'OFF'))
        while pin12.read_digital():
            sleep(100)
    if fan_switch:
        mode, power = fan_mode_switch(pin0.read_analog())
        if mode is not previous_mode:
            previous_mode = mode
            print("Fan mode: ", mode)
            pin8.write_analog(power)
    elif pin1.read_digital():
        fan_switch = True
        print('Fan status: ' + 'ON')
    else:
        previous_mode = 'OFF'
        pin8.write_analog(0)
    sleep(300)

程式碼解說

比起STEP3的程式碼,我們延伸了主結構中的if…else…,將fan_switch的狀態以外,再新增(elif)了一個motion sensor的狀態(pin1.read_digital),注意到motion sensor只能偵測是否有人靠近,所以使用的是數位的訊號(digital),它無法偵測距離多寡,而且如果身體靜止一段時間的話,也不會觸發motion sensor喔!

以下是我們最後完成的智慧風扇影片,可以用按鈕開關風扇,還可以用旋鈕調整轉速,並且還能用motion sensor在有人的時候自動開啟風扇!

 

相關文章:

 

 

 

 

[LattePanda] 作品發表:中文手指閱讀器

這次跟各位讀者分享的作品,是淡江大學電機系CILAB實驗室朱永龍同學發表的專題,CILAB在互動式學習、人機互動、嵌入式系統、影像分析與辨識 、模式識別是主要研究方向,近年在小朋友學習、弱勢族群、MAKE領域發表相當多作品,更多作品可以到這裡

作者/攝影 徐豐智/朱永龍

本次作品為中文手指閱讀器,希望提供視障者一個輕巧且易於攜帶的閱讀器;將閱讀器穿戴在視障者的食指上,協助他們閱讀紙本書籍上的中文文字。視障者使用手指閱讀器時,系統首先會利用震動提示的方式,來引導視障者將食指移動到適當的閱讀位置(觸覺回饋)。系統辨識書籍上的中文文字完成後,透過朗讀文字提供視障者聽覺上的回饋。

 

來認識一下視障者的相關資訊吧

一般日常生活中閱讀文字是不可或缺的事情,除了閱讀書籍外,包括閱讀藥物罐上的說明,操作家電(例如微波爐)上的按鈕,閱讀車站內看板上相關訊息(例如位置、樓層)時,都需要辨識這些文字訊息。對視障者來說,理解這些文字訊息是一件困難的任務。對「中途失明者」來說更是如此,所謂的「中途失明者」是指年齡為15歲以上之視障者,他們原本擁有正常的視力,後來因為疾病或意外傷害導致失明。這些視障者未曾接受過特殊教育,他們普遍呈現摸讀速度緩慢、連續性不足、缺乏效率等問題。(*註解[1]-[5])

 

為了協助視障者閱讀文字,近年來國內外許多研究者提出許多研究成果。主要可分為穿戴式裝備或是手持式裝置兩大類型的輔具。(*註解[6]-[13])

  • 穿戴式輔具:

將身體當為攝影機或相機的載具,並在攝影機擷取影像後,搜尋影像中可能存在的文字區塊加以辨識。學者Yi與Tain將小型攝影機架設在眼鏡上,並透過影像分析與文字辨識技術,辨識出書寫在物品上的文字。Hanif與Prevost 同樣將小型攝影機架設在眼鏡上的方式,來辨識招牌上的文字,並提供一個震動回饋來與視障者互動。Mattar等人[8]設計一個頭戴式攝影機,來辨識招牌上的文字。Ezaki等人將攝影機架設在肩膀上,來辨識招牌上的文字。

  • 手持式輔具:

手持式裝置的特色就是視障者透過PDA或智慧型手機作為影像擷取裝置。學者Peters 等人[10]以PDA的相機擷取影像來辨識鈔票、條碼與商品上的標籤。Shen等人[11]使用智慧型手機辨識門牌或路標,並提供震動回饋來與視障者互動。

 

現在技術上常遇到的問題

  • 在擷取影像時,影像品質容易受到光源、焦距、反光等影響。
  • 在複雜背景中尋找文字區域也不容易。
  • 需要耗費大量的運算資源(處理時間可能需要數秒至數十秒)。
  • 很難辨別出哪些文字資訊才是視障者真正關心的資訊。

由MIT多媒體實驗室Shilkrot等人在2014與2015年所提出的穿戴式手指閱讀器。協助視障者閱讀紙本書籍上的英文文字。當系統辨識書籍上的英文文字後,利用語音朗讀文字的方式,讓視障者得知書籍上的文字內容為何。

這次主題以辨識繁體中文為主,將閱讀器套在食指上並指向書籍,閱讀器將透過震動提示引導視障者閱讀書中文字,閱讀器也將透過攝影機逐一朗讀出書籍上的文字內容,閱讀器也可以幫助外籍人士學習中文字。

View post on imgur.com

裡面的硬體裝置包含(1)小型攝影機、(2)震動馬達、(3)電容式觸控開關,(4)控制馬達的微控制系統。我們利用小型攝影機擷取影像資訊來判斷手指與書本文字的相對位置,並進一步擷取文字字元的影像。

 

我們來看看硬體

閱讀器裡面安置一個(5)電容式觸控開關,手指可藉由觸摸開關來切換閱讀器的中文閱讀模式、閱讀器內部也安置四個具震動功能之微型馬達,電腦端的控制系統可以即時控制馬達震動,並透過震動的提示資訊,引導食指移動到適當的閱讀位置。(6)LattePanda做我們文字辨識的後端處理系統,配合閱讀器可以隨時做文字處理,並隨時提供給使用者語音回饋。

View post on imgur.com

View post on imgur.com

情景一 單字閱讀模式

閱讀器擁有中文單字閱讀模式,使用者手指指向文字時,閱讀器將只偵測手指上方所指到的中文單字,單字閱讀模式不使用振動馬達,並且關閉其它跳行偵測和引導換行等震動提示功能。

View post on imgur.com

單一字閱讀

 

情景二 文章閱讀書籍文字

視障者在閱讀文章時並無法順利的將手指指在適當的文字位置上,文章閱讀模式在閱讀書籍時,閱讀器會透過震動馬達的震動來提示視障者,並引導食指移動到適當的文字位置,方便閱讀器做文字辨識。

我們在手指閱讀器內部安置了四個具震動功能之微型馬達。電腦端依據不同的使用情景設計了三種主要的引導機制(A)引導使用者到距離手指最接近的文字段落,並引導手指移至該行文字的開頭位置(圖4(a))。(B) 當手指出現跳行或偏移到其他橫行文字的情況時,閱讀器透過震動提示的方式,引導手指移回原本的閱讀的位置(圖(b))。(C) 當手指移動到此橫行文字段落的結尾邊界時,將提示回到行頭並到達下一行從頭開始閱讀(圖(c))。

View post on imgur.com

(a) 引導至開頭

View post on imgur.com

(b) 跳行提醒

View post on imgur.com

 

(c) 閱讀至結尾邊界時(震動引導機制

 

中文字元切割

當手指閱讀器將指尖前方的影像資訊傳送至電腦端後,CILAB開發一套中文字元擷取與辨識演算法來辨識影像中的文字。下圖是系統流程圖,這個系統利用影像前處理(灰階、Otsu、Opening、Closing)等演算法,找出指尖位置與傾斜角度,再偵測出行高等相關資訊來做文字擷取切割出單一的文字圖,透過中文字元辨識以及文字轉語音讓閱讀器念出中文。

View post on imgur.com

系統流程圖

 

若是針對整張影像做二色化處理,其二色化結果非常容易受到光源以及其他因素影像,經常出現文字破損的情況,也進一步影響文字切割以及中文字元辨識(OCR)的準確性。設計者採用區域式(local-based)的二色化處理擷取出完整度較好的文字影像,並提升文字切割以及中文字元辨識(OCR)的準確性。

另外採用投影掃描線法來偵測橫行,圖的灰色區域代表掃描線經過文字區塊(圖6a)。當系統偵測橫行並計算出行高後,我們會根據指尖位置,往上方延伸兩倍行高的高度,以及四倍行高的寬度,進行區域影像的切割(如圖(a)之紅色矩形區域),並針對此矩形區域使用Otsu threshold再次進行二色化處理,圖7(b)為此矩形區域進行二色化處理後之結果。

View post on imgur.com

橫向投影掃描線法

View post on imgur.com

View post on imgur.com

 

 

接著使用垂直投影的方式來切割中文字元(圖(a)),此種方式相較於切割英文字元會有較為複雜的問題,對於某些中文字來說(例如:化、川),以垂直投影進行文字切割時,一個完整的中文字元會被分割成兩個或三個獨立的文字區塊。

我們發現中文字的外觀都非常接近方正型,我們根據中文字的行高資訊,在做文字切割時,將部分寬度較小的且鄰近的中文字元合併成一個中文字元,圖 (b)為成功切割出一中文字元。

View post on imgur.com

圖(a)垂直投影掃描線

View post on imgur.com

(b)切割獨立元

 

註解

[1] 柯明期, 中途失明者適應與重建之研究。師範大學特殊教育所碩士論文, 2004。

[2] 李佳玲, 中高齡視障者電腦使用動機及對圖書館電子化資源服務需求之研究。臺灣大學圖書資訊學研究所碩士論文, 2013。

[3] W. Jeong, “Emotions in information seeking of blind people,” in Diane Nahl and Dania Bilal (Eds.), Information and Emotion: The Emergent Affective Paradigm in Information Behavior Research and Theory pp. 267-278, 2007.

[4] 陳怡佩。視覺障礙兒童及青少年的資訊需求。臺灣圖書館管理季刊, 2(3), pp. 32-43, 2006.

[5] K. Carey, “The opportunities and challenges of the digital age: a blind user’s perspective,” Library Trends 55(4): 767-784, 2007.

[6] C. Yi, and Y. Tian, “Assistive text reading from complex background for blind persons,” in Camera-Based Document Analysis and Recognition. Springer, 15–28, 2012.

[7] S. M. Hanif, and L. Prevost, “Texture based text detection in natural scene images-a help to blind and visually impaired persons,” In CVHI, 2007.

[8] M. Mattar, A. Hanson, and E. Learned-Miller, “Sign classification using local and meta-features,” in IEEE CVPR Workshops, pp. 26–26, 2005.

[9] N. Ezaki, M. Bulacu, and L. Schomaker, “Text detection from natural scene images: towards a system for visually impaired persons,” in Proc. of ICPR, vol. 2, pp. 683–686, 2004.

[10] J.-P. Peters, C. Thillou, and S. Ferreira, “Embedded reading device for blind people: a user-centered design.” in Proc. of IEEE ISIT, pp. 217–222, 2004.

[11] H. Shen, and J. M. Coughlan, “Towards a real-time system for finding and reading signs for visually impaired users,” In Proc. of ICCHP, pp. 41–47, 2012.

[12] R. Shilkrot, J. Huber, C. Liu, P. Maes, and S. C. Nanayakkara, “Fingerreader: A wearable device to support text reading on the go,” in CHI EA, ACM, pp. 2359–2364, 2014.

[13] R. Shilkrot, J. Huber, M. E. Wong, P. Maes, and S. C. Nanayakkara, “Fingerreader: A wearable device to explore printed text on the go,” in ACM CHI 2015, pp. 2363–2372, 2015.

 

相關文章:

 

 

 

 

 

 

 

 

 

 

 

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

作者/攝影  曾吉弘
時間  3小時
成本
  • LinkIt 7697開發板
  • RGB LED
  • 麵包板
  • 線材
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697開發板
  • RGB LED
  • 麵包板
  • 線材

本文要介紹如何使用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
}

 

 

相關文章: