Tag Archives: 物聯網

[MCS雲端服務] 如何透過 Scene (場景)功能快速打造物聯網應用情境 (二)

作者/攝影

本文改編自聯發科技Cloud Sandbox(MCS)官方部落格上的文章,特此感謝聯發科技的授權,圖文版權均屬於聯發科技。

文章分類教學技術文
時間
成本
難度
材料表

上一篇文章,我們介紹了如何透過上傳物聯網的場景圖,使裝置可在圖片上呈現。

但如果這個場域很大,或整個場域有多層式的關係時,無法透過一張場景圖呈現所有裝置的話,該怎麼做呢?以下,我們繼續以上篇文章的養殖場為範例:

假設這個魚塭養殖場的業主有多個魚池且彼此相連,而業主需要一次管控多個魚池,那麼業主可先上傳一張俯瞰多個魚池的圖片,如下圖:

圖1 一個魚塭養殖區的俯瞰圖 | mcs.mediatek.com

 

上篇文章中有提到,由於每個場域圖的網址本身皆為獨立的Url,所以我們可將某多個場景嵌入至這個俯瞰圖上。點擊左側的網址項目,貼上該場景的Url 連結,以及其顯示在這個俯瞰圖中的名稱,將這個場景的「網址元件」,一樣透過拖拉的方式,拉至這個俯瞰圖上。

圖2 將上一篇建立的場景網址嵌入到此俯瞰圖內 | mcs.mediatek.com

 

圖3

 

圖4 圖3、4說明,使用者可透過多個網頁Tab切換場景,或將不同場景個別顯示於多重螢幕上,做到中央控管。 | mcs.mediatek.com

 

應用至智慧產線上會像這樣:

圖5

 

點擊填充機台的 Url項目,可進一步看見該填充機台的場景。

圖6 可點擊右上角的展開圖示,觀看整個場景圖(若再按F11使瀏覽器變全螢幕,就會只剩下完整的場景圖了)。 | mcs.mediatek.com

 

當然,Url 項目的功能也提供更多客製化的彈性。假設某位業主希望進一步看見「原料容器」這個裝置的歷史資料,整合進公司內部的物流程系統,或以其它第三方的軟體呈現(例如Google Sheet、Tableau等),則使用者可將透過MCS API,以其它方式收集的長期數據圖表的Url連結,嵌入至該裝置的附近(如下圖),以利業主做進一步查看。

圖7

 

然而,使用者也需注意在不同場景鏈結中,各個使用者針對不同場景是否皆具有權限。

透過這兩篇的介紹,讀者們是否更了解場景的功能了呢?快回MCS建立屬於你自己的場景吧!

Thanks to Michael Hsu.

 

相關文章

[2017年度大回顧] 看看我們做了哪些計畫吧!

2017年團隊們挑戰了大大小小的嘗試,包含開立新課程、新書籌備、物聯網專案計畫、企業夥伴們的合作、參與世界各地Maker Faire、籌辦華山展覽以及年度合作活動等等(開創活動新品牌-放課後Fun School),2018我們也會持續提供優質服務內容給大家,還請多多支持哦。

作者/攝影 曾吉弘/Cavedu教育團隊各同仁
時間 2017整年度

2017年做了很多好玩的事情也有新嘗試,首先要說的是我們提供的服務內容:

  • 教師研習及學習課程(CAVEDU)
  • 專題設計製作(CAVEDU,可委託外包)
  • 物聯網空間/功能規劃(CAVEDU,可委託外包)
  • IoT雲服務應用(CAVEDU)
  • 書籍撰寫/出版(CAVEDU、翰吉,可委託出版)
  • 工作坊活動及合作策展(放課後)
  • 開發板與周邊商品販售(機器人王國)

新課程研發

教學場域一直在變化,但初衷不變。我們從小學、國中高中及大學相關課系(資訊、機械及電子與數位互動藝術等)到成人學習都有對應的科技動手做課程。也在T客邦創客基地與 Fablab Taipei 開設晚間的帶狀課程。主題從簡易程式概念培養、基礎電子電路設計、手機app、機器人控制與雲端應用開發等等,相當豐富喔!

課程分類請按我

 

新合作夥伴

1+1 > 2,很高興能與DFRobot、Intel、Mouser與RS Components 推廣相關產品服務,也密切與MTK、QNAP、Zyxel 針對物聯網教室提供規劃方案,老師們不用再為了新程式、新開發板傷腦筋,問我們就對了!(公司名稱按字母順序排列)

 

全產品研發計畫

 

針對108課綱,我們推出了[物聯網教學箱]與[RK物聯網擴充板],兩者都是針對教室情境使用,元件管理非常方便。

另外RK物聯網擴充板則可同時支援LinkIt Smart 7688 Duo與 LinkIt 7697這兩套我們這兩年開課最熱門的物聯網開發板,接腳可外接麵包板、Seeed Studio Grove接頭的感測器(擴充板中央區域),以及3 pin接頭(擴充板右側)。

 

新書出版

今年完成了五本書:出版一本書:[實戰物聯網:LinkIt Smart 7688 Duo],另外翻譯了四本書籍。明年預計出版的書籍主題有物聯網(使用LinkIt 7697)、基礎電路設計(使用Mouser MultiSIM BLUE)以及AI等主題。

 

翻譯書籍列表:

CAVEDU書籍列表

 

創辦活動品牌「放課後」

2017年5/27, 28我們在華山文創園區舉辦放課後,邀您重拾下班下課後的快樂。攤位總覽影片請點我

也參加了香港、新加坡、西安與東京等Maker Faire,並受邀分享與辦理許多工作坊向很多人見證台灣的能量。

 

阿吉老師赴MIT擔任訪問學者

CAVEDU與 MIT App Inventor小組(屬於CSAIL(電腦科學與人工智慧實驗室)下)一直有密切的合作。阿吉老師於今年十月受邀擔任訪問學者,協助整合物聯網開發板至App Inventor中、元件測試與教材編寫等等。大家可以關注阿吉老師的MIT生活日誌以及12/17 FabLab Taipei的分享影片

 

阿吉老師@MIT App Inventor team list

 

新成員招募中

為擴大各式計畫2018年度團隊將招募開發工程師及課程講師等新血,如果您想為台灣的教育出一份力並喜歡我們的風格,歡迎加入我們!

請備妥履歷寄到 service@cavedu.com

2017 活動紀錄請按我

 

相關文章:

[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在有人的時候自動開啟風扇!

 

相關文章:

 

 

 

 

10/17開始上課,10/16報名截止!物聯網運用與開發​【臺北市職能發展學院 X CAVEDU教育團隊】

$1133元,21小時物聯網精彩課程,整套LinkIt 7697設備帶回家,這次錯過我只能說太可惜啦…  10/17晚上開始上課,先把報名頁面點開吧!

Acupass報名請點我

以下為本次物聯網運用與開發課程招生簡章(詳細報名簡章請按我)

一、主辦單位:臺北市職能發展學院

二、培訓單位:翰尼斯企業有限公司

三、訓練班別與課程資訊:物聯網運用與開發

班別名稱人數時數訓練起迄日期上課時間報名截止日錄取公告自行負擔費用
物聯網運用與開發30人21小時106/10/17

106/11/7

週二、四

18:30-21:30

線上報名;106年10月16日中午12:00截止106/10/161,133元
製表日期:106.10.06

上課地點:台北市中山區長安東路一段18號6F (長安東路 / 林森北路交叉口附近)

四、參訓資格與訓練費用負擔:

(一)年齡:年滿15歲以上民眾有意願參加進修訓練者(自行負擔個人訓練費用之20%)。

(二)性別:男女兼收

(三)開班條件:具特殊身分參訓者人數,須佔每班次實際開訓人數10%(含)以上,如特定對象不足額方開放一般民眾參訓。

 

五、報名方式與繳交文件:

(一)先完成線上報名,報名網址:https://www.accupass.com/event/1710031605591491104938

(二)經培訓單位通知後,請繳交下列文件:

  1. 身分證(正反面影本)
  2. 1吋相片2張
  3. 特定對象身分證明文件(無者免附)

資料不齊或欠缺者,恕不接受報名。

六、錄訓機制:

(一)甄試方式:採「甄選審查錄訓」方式。

甄選審查錄訓將以筆試跟面試兩階段進行。筆試主要針對基礎知識了解程度做評鑑,將其評鑑結果跟面試成績做加總,占甄選審查標準20%。

面試主要針對申請人參與意願、基礎知識了解程度、學經歷及證照進行分數計算作為評鑑標準,占甄選審查標準80%。

筆試以是非題跟選擇題為主,使其學員了解物聯網基礎知識。口試將針對參與意願(50%)、基礎知識了解(25%)、學經歷簡述(25%)為評鑑標準。

【甄試日期】106年10月16日

甄試成績達錄訓標準70分者為合格,依甄試總成績高低順序排列後,分列正取、備取,錄取名單於各班錄取公告日公佈於CAVEDU教育團隊首頁(http://www.cavedu.com/),並以E-mail與簡訊方式通知錄取學員,未錄取者不另通知。

106/10/17開訓後(含開訓當日)如尚有缺額,將於開訓後3日內依備取序號依順序遞補學員。

八、課程大綱   

課程名稱課程內容
教務說明

Linklt7697相見歡

教務管理規定說明

1.  職訓計畫介紹

2.  出缺勤管理辦法與退訓規定

3.  學員應盡權利與義務

4.  申訴管道

Linklt 7697 規格介紹、使用環境設定。

數位控制控制實習

基本電子輸入輸出控制實習基本電子輸入輸出控制實習
雲端服務運用認識  MediaTek Cloud Sandbox 雲服務

上傳感測器資料至 MCS 雲服務

MCS 雲端智慧居家控制

手機程式設計編寫 Android app 使用 App Inventor

Android 裝置透過 BLE 與 7697 互動

擴充裝置電路設計實作使用電路設計軟體設計與製作擴充電路板
開源時代-認識開放政府認識資料格式 JSON

使用 Opendata 開放資料平台抓取 PM2.5 空氣汙染資料

讓 LINE 與 7697 對話吧!認識 LINE API 使用 Python/NodeJS

架設 LINE回音機器人透過 Line API 與 7697 互動

九、注意事項:

1.受訓期間膳宿自理,受訓期滿全期訓練成績合格者,由本單位發給結訓證書。於進修課程期間,除公假、病假、喪假外,其餘請假事由一律以事假認定。未依規定辦理請假時,均以曠課論。

扣除公假及喪假外,請假時數累積達全期課程總時數1/5(含)以上者、曠課時數達全期課程時數1/10(含)以上者或參訓期間行為不檢,情節重大者,勒令退訓。

2.已報名繳費學員因故無法參訓,得於開訓前申請退還所繳費用,未於開訓前申辦者,已繳交之訓練費用,除該班次停辦外,一概不予退還。

更多課程詳情,請參閱CAVEDU教育團隊首頁(http://www.cavedu.com)。

[LinkIt 7697開發板教學]BLE藍牙簡介

本文要介紹聯發科技實驗室7697開發板的BLE藍牙4.0通訊機制,包含central、iBeacon 以及 peripheral 等三種角色。

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

LinkIt 7697的BLE

LinkIt 7697支援藍牙低功耗通訊協定Bluetooth Low Energy),但不支援傳統的 profile 像是 Bluetooth BR 或 EDR。Bluetooth Low Energy 裝置可作為 central 或 peripheral 裝置。peripheral裝置(像是心跳計) 會把關於本身的資料廣播出去。central裝置則會尋找附近的peripheral裝置,並可進一步連到peripheral 來存取其屬性,例如服務(service)或特徵(chracteristic)。

*BLE peripheral 與 Central   001

LinkIt 7697 提供了以下 Arduino 函式庫類別:

  • LBLE:用來初始化 Bluetooth Low Energy子系統subsystem
  • LBLECentral:提供central裝置的基本功能,例如掃描鄰近的peripheral
  • LBLEPeripheral:提供peripheral裝置的基本功能:
    • 設定advertisement package
    • 設定 characteristic與service(UUID).

7697 可用作 Central、iBeacon 以及 peripheral,請看以下介紹:

 

7697作為Central

7697的LBLE 函式庫可讓 7697 成為一個central裝置來掃描附近的BLE裝置。如以下程式中的scanner

LBLE.begin();
while(!LBLE.ready())
{
delay(10);
}
Serial.println(“BLE ready”);

//開始掃瞄鄰近的廣播資料
LBLECentral scanner;
scanner.scan();

呼叫scan()之後,central裝置就會不斷蒐尋附近的Blueotooth裝置,掃描結果會更新在LBLECentral類別,後續可呼叫 getPeripheralCount() 來取得掃瞄到的 peripheral 裝置數量。

for(int i = 0; i < scanner.getPeripheralCount(); ++i)
{
Serial.println(scanner.getName(i));
}

請注意藍牙 peripheral 的廣播內容會因不同的裝置而異,例如,一台 iBeacon 裝置丟出來資料可能會有 connectivity flag 以及製造商資料,但心跳計則可能包含 service UUID 與裝置名稱。

常見的情境是 central 去掃描附近的 iBeacon 裝置,在此會用到兩個方法isIBeacongetIBeaconInfo,用來解析iBeacon廣播資料相當好用。有掃到裝置的話,就可由Arduino IDE 的 serial monitor 畫面看到該裝置的基本資料。

 

File > Examples > LBLE > ScanPeripherals

#include <LBLE.h>
#include <LBLECentral.h>

LBLECentral scanner;

void setup() {
  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(10);
  }
  Serial.println("BLE ready");

  //開始掃瞄鄰近的廣播資料
  scanner.scan();
}

void printDeviceInfo(int i) {
  Serial.print("Addr: ");
  Serial.println(scanner.getAddress(i));
  Serial.print("RSSI: ");
  Serial.println(scanner.getRSSI(i));
  Serial.print("Name: ");
  Serial.println(scanner.getName(i));
  Serial.print("UUID: ");
  if (!scanner.getServiceUuid(i).isEmpty()) {
    Serial.println(scanner.getServiceUuid(i));
  } else {
    Serial.println();
  }
  Serial.print("Flag: ");
  Serial.println(scanner.getAdvertisementFlag(i), HEX);
  Serial.print("Manu: ");
  Serial.println(scanner.getManufacturer(i));

  if (scanner.isIBeacon(i)) {
    LBLEUuid uuid;
    uint16_t major = 0, minor = 0;
    uint8_t txPower = 0;
    scanner.getIBeaconInfo(i, uuid, major, minor, txPower);

    Serial.println("iBeacon->");
    Serial.print("    UUID: ");
    Serial.println(uuid);
    Serial.print("    Major: ");
    Serial.println(major);
    Serial.print("    Minor: ");
    Serial.println(minor);
    Serial.print("    txPower: ");
    Serial.println(txPower);
  }
}

void loop() {
  delay(3000);

  //顯示找到的peripheral裝置
  Serial.println(scanner.getPeripheralCount());
  for (int i = 0; i < scanner.getPeripheralCount(); ++i) {
    Serial.println("---");
    printDeviceInfo(i);
  }

  Serial.println("----------------------");
}

 

7697作為iBeacon

iBeacon是一個只會廣播(advertise)資料的BLE裝置,廣播的資料格式可以自訂。請注意做為 iBeacon 的 BLE 裝置無法被連接。

請用LBLEAdvertisement類別就能產生所需的iBeacon廣播資料。並可呼叫configAsIBeacon方法將廣播資料設定為iBeacon格式,如以下程式碼所示:

LBLEAdvertisementData beaconData;
beaconData.configAsIBeacon(“E2C56DB5-DFFB-48D2-B060-D0F5A71096E0”, 01, 02, -40);

  • E2C56DB5-DFFB-48D2-B060-D0F5A71096E0是您的 iBeacon UUID。這個值您可以自行產生。E2C56DB5-DFFB-48D2-B060-D0F5A71096E0因為是iOS AirLocate iBeacon example 中所用的UUID,因此許多 iOS 工具程式都有內建設定來搜尋這組UUID。
  • 01與02是 major ID 與 minor ID,可用來區別不同的iBeacon裝置。例如,您可能會在會議室或辦公室放置多台7697。您可把 major number 設為樓層,minor number 則是房間編號等。這樣一來iBeacon scanner只要透過這兩個數字就能知道使用者現在是在哪一層樓的哪一間房間了。
  • 最後一個數字Tx Power,-40,代表該裝置的發送功率。beacon scanner只要去比較這個數值與實際的訊號強度就能約略估算距離。實際的發送功率會根據天線設定方式而有異,所以建議這個數值要與 scanner 一併校正。

廣播資料設定完成之後,只要呼叫LBLEPeripheral的 advertise方法就能開始廣播資料:

LBLEPeripheral.advertise(beaconData);
LinkIt 7697 會馬上開始廣播資料,呼叫 stopAdvertise() 即可停止廣播。

7697 有現成的範例(BeaconAdvertisement),您可運用Locate Beacon這類的 ibeacon 工具來搜尋。以下是這個 app 的搜尋畫面擷圖:

File > Examples > LBLE > BeaconAdvertisement

#include <LBLE.h>
#include <LBLEPeriphral.h>

void setup() {
  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  //將廣播資料設定為iBeacon.
  LBLEAdvertisementData beaconData;

  //以下是AirLocate通用的UUID.
  LBLEUuid uuid("E2C56DB5-DFFB-48D2-B060-D0F5A71096E0");
  beaconData.configAsIBeacon(uuid, 01, 02, -40);

  Serial.print("Start advertising iBeacon with uuid=");
  Serial.println(uuid);

  //開始廣播
  LBLEPeripheral.advertise(beaconData);
}

void loop() {
  // The underlying framework will advertise periodically.
  // we simply wait here.
  // You can use iBeacon apps such as
  // "Locate Beacon" by Radius Networks on iOS devices to locate this beacon.
  delay(3000);
}

7697作為peripheral

第三種應用是將 7697 作為周邊,這時我們就能從別的裝置去連接它。這也是CAVEDU之前在使用LinkIt ONE較常用的方式,搭配手機來與開發板互動。

 

peripheral device裝置上需要先建立一個 GATT 伺服器,才能讓其他的 BLE central 連到這個peripheral。GATT伺服器包含了一組屬性:service與characterstic。像是心跳帶這類的服務就是用UUID來區分。一個服務可能包含多個具有數值(value)的特徵(characteristic),例如心跳帶服務就應該會有一個heart rate measurement value特徵。BLE central裝置就可以發送需求來讀寫這些數值。

關於GATT屬性,請參考Bluetooth.com 或 https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt#services-and-characteristics

啟動GATT伺服器之前,需要定義這個服務以及我們要用到的特徵。由於服務與特徵都是永久性(persistent),並且應該會被其他central裝置頻繁讀寫,在此把service與characteristic定義為global是比較好的做法,如下所示:

#include <LBLE.h>
#include <LBLEPeriphral.h>

//定義具備一個特徵GATT服務
LBLEService ledService(“19B10010-E8F2-537E-4F6C-D104768A1214”);
LBLECharacteristicInt switchCharacteristic(“19B10011-E8F2-537E-4F6C-D104768A1214”, LBLE_READ | LBLE_WRITE);

  • 19B10010-E8F2-537E-4F6C-D104768A1214是服務UUID,可供其他central裝置尋找到它。
  • 19B10011-E8F2-537E-4F6C-D104768A1214是特徵UUID。. GATT通訊協定會把特徵視為一個緩衝器,長度最大可到512位元組。 LBLECharacteristicInt可用來定義整數型別的特徵,您再用setValue() 去設定其整數參數即可,不必去動到緩衝器內部。

定義好服務與特徵之後,接著要定義它們的關係,再把這些服務加入peripheral裝置,如下所示:

void setup() {
//將特徵加入ledService
ledService.addAttribute(switchCharacteristic);

//將服務加入GATT伺服器(即一個 BLE peripheral)
LBLEPeripheral.addService(ledService);
使用以下語法來初始化GATT伺服器:

LBLEPeripheral.begin();
請注意一旦呼叫begin()之後,就無法加入更多service,也無法修改service與characteristic之間的關係了。

peripheral裝置現在已準備好由central裝置來連線,並可藉由isWritten()檢查特徵值是否有被外部裝置來修改:

 

File > Examples > LBLE > SimplePeripheral

 

為了安全性起見,裝置的addr 不會直接寫在板子上(當然也是有這麼做的)。本範例透過以下語法將 7697 addr 顯示於 serial monitor 中,您再修改 App Inventor 即可。

 

Serial.println(LBLE.getDeviceAddress());

 

#include <LBLE.h>
#include <LBLEPeriphral.h>

// Define a simple GATT service with only 1 characteristic
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");
  Serial.print("device address is:");
  Serial.println(LBLE.getDeviceAddress()); //顯示7697 BLE addr

  //設定廣播資料
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE LED");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE LED");

  // Add characteristics into ledService
  ledService.addAttribute(switchCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(ledService);

  //啟動GATT伺服器,此時已可被連線
  LBLEPeripheral.begin();

  //開始廣播
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(100);
  if (switchCharacteristic.isWritten()) {
    const char value = switchCharacteristic.getValue();
    switch (value) {
      case '1':
        digitalWrite(LED_BUILTIN, HIGH); //7697就是D7, 其他Arduino為D13
        break;
      case '0':
        digitalWrite(LED_BUILTIN, LOW);
        break;
      default:
        break;
    }
  }
}

Android端(App Inventor)

要寫一個小程式來與7697互動,在此推薦使用App Inventor來編寫Android端程式,一方面是圖形化介面開發非常快,另一方面則是手機端有許多豐富的資源,可以讓您的專題更完整。別忘了參考CAVEDU所開發的App Inventor中文學習網喔!

請登入App Inventor (http://ai2.appinventor.mit.edu) 之後建立一個新的專案,或由此下載本範例所需之 .aia 檔

 

Designer 頁面

本範例用到的元件有多個按鈕、顯示訊息用的 Labe; 當然也需要用到最新的 BluetoothLE 元件。Designer 頁面完成如下圖,您只要做得差不多就好,不需要一模一樣。

 

Blocks 頁面

STEP1:

宣告 addr 變數,代表所要連線的7697 藍牙位址。

Screen1初始化時,要求 BluetoothLE元件開始掃瞄,連線成功的話會自動呼叫BluetoothLE.Connnected事件,並修改相關元件的設定。

STEP2:

按下連線按鈕時,根據按鈕的文字來決定要連線或斷線。您也可以使用兩個獨立的按鈕來做到這件事。

STEP3  :

斷線時呼叫BluetoothLE事件,並將元件回復到初始狀態等候下一次連線。

 

STEP4  :

按下按鈕時,透過 WriteIntValue 方法分別發送 1 與 0 出去,7697 接到這兩個整數值之後就會執行對應的動作。您可以依照這樣的架構加入更多按鈕或其他二元觸發條件(例如Google語音辨識、感測器值等等)。別忘了 7697 端也要加入更多case 來接收您新增的控制碼。

操作

請先上傳7697端的程式並開啟serial monitor來看看狀態,在此7697是一個peripheral。請點選App端的 Connect按鈕就會連線,連線成功即可點選ON/OFF按鈕(在連線成功之前不可按)來控制7697的 D7 USR LED燈亮滅。

 

相關文章:

[LinkIt 7697開發板教學]BlocklyDuino圖形化介面 – 環境建置與介面

本文要介紹可用於LinkIt 7697開發板之圖形化開發環境 – BlocklyDuino,包括環境建置與基礎I/O控制。

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

什麼是Google Blockly

Google Blockly (wiki) 是 Google 開發的圖形化程式介面。並可讓使用者自行包裝成更多指令,非常方便。下圖是 Google Blockly 主頁面,您很快抓到它的使用方法,並由畫面右側轉成JavaScript、Python、PHP、Lua與Dart 等其他語言,就看您喜歡哪一種了。

阿吉老師說:這樣的兩階段開發可以兼顧初學者與進階玩家。初學者只要拉拉方塊就能完成許多應用,進階玩家則可進一步轉乘其他程式語言之後做到更多功能,不會受限於積木指令本身的功能限制,反而可以快速驗證想法是否可行。

國內的 webduino 也有提供這樣的開發介面,可以把 block 轉成 java script,周邊指令也非常豐富。

什麼是BlocklyDuino

顧名思義,BlocklyDuino 是以 Google Blockly 為基礎,也因為可以轉成 Arduino code,也就代表了 Blockly 並不只限於 LinkIt 7697 才能使用,其他Arduino相容開發板也可以使用(回頭看看 LinkIt ONE、LinkIt Smart 7688 Duo 與 Arduino UNO等等…   真是太好了!)

您有3 種使用方式: 1. 離線使用 2. 匯入成 Google Chrome extension  3. 線上版

github: https://github.com/x43x61x69/BlocklyDuino

下載 .zip 檔解壓縮之後,打開您的 Google Chrome瀏覽器,

對,就是把這個資料夾拖到網頁上,就會匯入成一個 extention,完成如下圖:

點選啟動之後就會跳出一個視窗是 BlocklyDuino的主畫面,如下圖:

來看看目前提供了什麼?畫面左側可看到有以下主選項:

  • Logic:
  • loops
  • Array
  • Math
  • Text
  • Variables
  • Function
  • Initializes
  • In/Out
  • Time
  • Serial
  • Interrupt

由於In/Out底下相關功能與後續操作 7697 息息相關,在此特別拉出來介紹。各位讀者日後如果有哪邊覺得不足,除了可以透過github 自行修改,也可以把您的意見告訴我們,一起來向7697開發團隊許願吧!

不只這樣呢,請點選畫面右上角的齒輪[設定],可以看到 Seeed studio(7697生產商) 與 adadruit 的常用套件、第三方雲服務()都有!把想要用的項目勾起來就可以使用了。

值得一提的是,除了自家的MCS雲服務之外,BlocklyDuino也為7697寫好了 IFTTT、M2X與Blynk等其他雲服務的指令,太感動啦!

如何存檔與上傳

BlocklyDuino 可與 Arduino IDE 同步,也就是說您的積木指令不但可轉成Arduino code 還會自動根據修改而轉換,不必擔心不同步的問題。

請開啟 Arduino IDE file/Preferences,找到 External Editors(使用外部編輯器)選項並勾選起來,代表可使用外部編輯程式。

隨便新增一些方塊之後存檔,存檔時您會發現有 .ino 與 .xml 兩個檔案,ino 自然就是 Arduino 草稿碼,但 .xml 是什麼呢?

用瀏覽器來檢視一下,這就是積木指令的定義格式

或直接點選畫面右上角選單中的 Export,BlocklyDuino會把目前這一堆積木指令以 xml 格式匯出。您當然也能反向利用 Import 功能來匯入其他以 xml 格式定義好的積木指令集。

存檔完成之後只要修改任何積木指令,都可以看到Arduino IDE中對應的程式碼也會一併修改喔,不用再擔心漏東漏西了。

後續專題會介紹如何使用 BlocklyDuino 控制 LinkIt 7697 的基礎I/O、BLE藍牙通訊與MCS雲服務,敬請期待喔

 

相關文章:

[課程紀錄]170615,16 國中小自造者教育師資培訓營@日新國小

作者/攝影 曾吉弘/趙偉伶
課程時間 2017 6/ 15 16 
課程講師 徐豐智、趙偉伶、陳煜倫
課程場地  台北市日新國小 / 台北市自造教育示範中心

l來自台北市二十多位國小教師齊聚一堂,一起來認識如何將新的物聯網開發板 LinkIt 7697 應用於國小教學,為此聯發科技實驗室特別開發了以 Google Blockly 為基礎的 Blocklyduino 圖形化介面,不僅具備了圖形化介面,相關周邊如各種感測器的指令,還有Wi-Fi / BLE / 雲服務的指令也都有了,可以說是相當完整。

Blocklyduino 各作業系統版本下載頁面

106年度臺北市政府教育局與財團法人聯發科技教育基金會自造者教育合作計畫之夏令營報連結(請點選報名)

本次課程除了感謝台北市日新國小暨台北市自造教育示範中心聯發科技教育基金會的大力支持,讓所有老師都能有一套完整的設備帶回去慢慢研究。最感謝的當然就是兩天超認真上課的各位老師囉,期待各位能實際運用LinkIt 7697 x Blocklyduino於課堂中。

這兩天課程上了什麼呢?

6/156/16
  • 安裝程式環境
  • 接線讓LED亮
  • 組裝搶答器按鈕
  • 寫程式
  • 組裝搶答器外殼
  • 光線感測器程式講解
  • 組裝繼電器
  • 講解繼電器程式
  • 溫溼度感測器程式講解
  • 物聯網教室/物聯網屋demo

 

投影片:


來看課程花絮吧~

日新國小徐臺屏老師,近年推廣maker教育不遺餘力,本次活動很高興能在日新國小舉行,場地非常專業,相信上課的老師們都有同感。

(聯發科技教育基金會 Alan & Cynthia)


第一天:Blocklyduino 環境應用與搶答器製作

動手做就是快樂,哪怕手上都是雷切灰~

慢慢有樣子出來了

 

第二天:使用 :Blocklyduino 結合 MCS雲服務

第二天的課程內容是將7697的資料上傳到MCS雲服務,對小朋友來說就能從網頁上去監測某些感測器數值的變化。在此有請聯發科技基金會Alan來分享開發祕辛。

上傳之後除了可以看到最新一筆資料,也可以用折線圖的方式來呈現歷史資料,馬上知道數值的變化趨勢喔!

當然有了手機app,就可以設定當感測器值滿足我們所設定的條件時,自動推播訊息給您(這位老師的訊息有點… 但我想小朋友發的推播訊息內容應該會更勁爆吧)

樂高物聯網小屋示範

CAVEDU針對教學場域的物聯網應用也是很積極在推動的,除了有比較貼近生活情境的應用之外,還有一個比較整合性的思考。學生可以去構思在一個場域(教室、家庭或百貨公司)需要應用哪些技術可以解決現實生活中的問題。使用Blocklyduino 編寫 LinkIt 7697 板子的程式,再搭配 MCS 雲服務,看起來是相當不錯的選擇。可以從雲端控制電器狀態,也可以多人透過網頁/app 來觀看場域狀態。如果滿足某些條件的話,還可以寄發email / app 推播或經由 webhook 觸發其他應用程式,非常方便!

 

(更多資訊請參考,可以名正言順買樂高了![物聯網屋專題實作計畫]用LEGO®製作物聯網屋)

透過手機就能控制家中各種簡易電器開關,是不是很方便呢?

更多照片請參考台北市自造教育示範中心的Facebook粉絲頁,本文部分照片經中心同意使用之,特此感謝。

註:台灣如 webduino, iFrog 以及 Motoduino 也有類似的Blockly 圖形化環境並針對自家產品最佳化,也請點選上述連結來看看喔!

相關文章:

[課程紀錄]物聯網大專教師研習-使用LinkIt 7697@經濟部通推小組

作者/攝影 曾吉弘
課程時間  2017 5/12
課程講師 曾吉弘
課程場地 經濟部通訊產業發展推動小組會議室

台北市中山區長安東路一段18號6F

通訊大賽物聯網組的大專教師研習開跑,2015年是LinkIt ONE, 2016是 LinkIt 7688,今年則是一片可愛的LinkIt 7697 (具備 Wi-Fi, BLE 的 Arduino相容板)。

7697的投影片在此(還有學習筆記),快100頁喔,喜歡就幫忙分享出去吧!


當天上課內容如下:

  • 7697 硬體介紹以及當作 Arduino使用
  • 基礎電路操作 – 使用 BlocklyDuino 與 Arduino IDE
  • BLE 基礎介紹,使用App Inventor 編寫Android app 來控制 7697
  • 由MCS雲服務來控制7697腳位
  • 上傳感測器資料到 MCS 雲服務指定之資料頻道
  • 如何外部取得 MCS channel 的資料點 (JSON format)

這次有個重要的亮點是 BlocklyDuino 圖形化介面(離線執行,載點請按我),除了基本的I/O指令之外,Seeed Grove套件、Adafruit 套件甚至 IFTTT, Blynk 等雲端服務等都寫好了。請一定要試試看。

對於小朋友來說,拉拉方塊就能寫好當然是最棒啦。但如果是會Arduino IDE 語法的朋友,可以轉成Arduino 語法之後再進行最佳化。不管怎樣,聽起來都是很棒的東西呢。

BlocklyDuino 主畫面

上圖之積木方塊轉為Arduino 語法

BlocklyDuino 之設定畫面

其實像是 IFrog ICblockwebduino 或是 Motoduino慧手科技的motoblockly 都有類似的服務。 

上課實況,感謝諸多老師參加喔!

上課會使用 7697 搭配簡易電子元件來做到各種互動功能,不過物聯網系列的課程重點都是在資料聯網之後的應用,能夠正確控制周邊應該是最大公因數,在此也感謝許多廠商努力提供好用的軟硬體。

使用App Inventor 藉由 BLE 通訊來與 LinkIt 7697 互動

下圖是上傳光敏電阻資料到 MCS 的資料頻道上:

LinkIt 7697(數大就是美)

Motoblockly.com 主畫面

webduino (轉 javascript) 主畫面

 

相關文章:

 

App Inventor IoT 新元件 – Arduino 101 與 BBC Microbit

App Inventor 新元件測試版釋出!看來BLE是大勢所趨,並新增了兩個主要的平台:Arduino 101 與 BBC Microbit不用再透過BLE元件去收發 integer, char 這麼底層的指令,直接有對應的感測器元件可以使用,上課更方便啦!

本文將以介紹App Inventor 結合 Arduino 101 為主,請參考MIT目前提供的植物監控App教學請由以下載點來匯入各個 aix 檔:

BLE藍牙元件 aix 載點

Arduino 101元件 aix載點

BBC® Micro:bit元件 aix載點

請由App Inventor 主站建立一個新專案,並由 Designer 頁面左下方的 Extension -> Import extension 來匯入上述的 aix 即可使用。我們會依序寫完各個範例,敬請期待喔~

Arduino 101 元件 (MIT說明),Grove 是指 Seeed Studio 的 Grove 套件

  • 加速度計(本身)
  • 按鈕
  • 陀螺儀(本身)
  • 溫濕度(Grove)
  • LED(可指定腳位)
  • 光感測器(Grove)
  • 土壤濕度(Grove)
  • PWM馬達控制
  • 腳位控制
  • 接近度感測器(Grove)
  • RGB LCD(Grove)
  • Servo(一般servo)
  • 錄音機(Grove)

Continue reading

[課程紀錄]7688物聯網研習@大仁科技大學

作者/攝影 曾吉弘
課程時間  2017 3/10
課程講師 曾吉弘
課程場地  屏東大仁科技大學

3/10 來到了屏東大仁科大辦理一天的物聯網研習,使用LinkIt Smart 7688 搭配 MCS雲服務。參加對象是大仁科大資訊工程與娛樂科技系的同學與來自中國寧夏的短期交換生。感謝曾系主任大力促成本次研習,期待有機會再去分享。

 

一天的課程就是做到 MCS控制7688 Duo 腳位狀態以及上傳感測器(光感測器) 到 MCS,這是最基礎的控制/顯示功能。說真的還是有點趕,但也一趟到屏東了,總是要把精華教給大家。

 

有趣的現象:中國的同學普遍都算認真,有的還是聽說今天的主題是物聯網應用就專程請假來上課。台灣的同學就比較兩極,認真的很認真,也有些人中午之後就消失了。中國畢竟還在創客(中國maker) 與萬物互聯等一些超火紅的浪頭上,任何事情感覺都興致勃勃。台灣的同學可能要等到出社會之後才知道競爭對手來自哪裡吧。大陸的朋友總羨慕台灣香港在內容上還是走得比較前面,但我總擔心還能領先多久?(個人觀察不代表全貌,大家理性討論喔)

 

當天課表的 Google doc 在這邊,請和我們一起學習吧!

https://docs.google.com/document/d/1tZFeQLECCXwX_FdS7rqMbbzptG8HY4tvB8P2RQ66yPU/edit#heading=h.9na8cfi8e9mc

簡列大綱如下:

   上午   7688 Duo 硬體介紹以及當作 Arduino使用

   下午   7688 網路設定與 openWRT 操作 (檔案系統,以及如何執行Node.js / python)

             Mediatek Cloud Sandbox 介紹 -> 繼電器(數位輸出) 控制

             上傳感測器資料 (Node.js + Arduino)

             (MCS影像串流 / 照片上傳只 demo) 

 

感謝曾系主任大力促成本次研習 

和同學一起討論,介紹各種物聯網常見的卡關點

教室的網路環境相當不錯,40片7688都聯網跑起來都沒問題。一次10多片串流影像到MCS也還算順暢。

全班40多位同學一起上課,真熱鬧啊

 

相關文章:

[好用的物聯網開發工具] 使用Node-RED工具,讀取聯發科雲端感測器資料(MediaTek Cloud Sandbox資料通道數值)

大家好!我是偉和

繼上次成功在Node-RED中顯示「當下時間」,既然Node-RED是讓開發者有更方便的環境去撰寫關於物聯網應用的程式,在眾多的雲服務中,本篇選用Mediatek Cloud Sandbox(以下簡稱MCS)作為資料傳輸、讀取的對象。

本篇要教導各位如何透過Node-RED將MCS裡的資料通道數值讀取,並且顯示至Node-RED的Debug上。

作者/攝影  偉和
時間  依個人而訂
成本  無
難度  * * *
材料表
  • 個人電腦(無系統限制)

1. 從方塊區的input中將Inject拉至程式撰寫區,此方塊控制我們讀取MCS的頻率

2. 快速點擊timestamp二下設定重複執行的條件

3. 勾選「Inject once at start?」

4. 從方塊區function中將function拉至程式撰寫區

5. 快速點擊二下function
在Name中輸入「header」、在Function中輸入 (將紅字更改為自己MCS的deviceKey)

msg.headers = {'deviceKey' : ':Your deviceKey'};
return msg;

6. 將「Function(header)」的左邊點點與「timestamp」右邊點點相接起

7. 從方塊區function中將「http request」拉至程式撰寫區

8. 快速點擊二下http request將下列網址輸入至URL欄中(將紅字更改為自己MCS的deviceID及datachannel)

http://api.mediatek.com/mcs/v2/devices/:Your deviceID/datachannels/:Your datachannel/datapoints.csv

9.在「Name」輸入想要的名稱,本篇使用「request」,完成後按下Done鈕就會變成如下圖的樣子

10.將「header」右邊的點點與「request」的左邊點點相接起來

11.從方塊區output中將「http response」拉至程式撰寫區

12.將「request」右邊的點點與「http(http response)」的左邊點點相接起來

13. 為了觀看從MCS中讀取到的資料通道之訊,我們從方塊區output中將「debug」拉至程式撰寫區,並與「request」相接

14. 點擊 執行,就可以在除錯區看到讀取到的資訊了!

 

相關文章:

[LinkIt One 教學] 連接 LinkIt ONE 到 MediaTek Cloud Sandbox

[IBM Watsonbot ] Facebook粉絲頁聊天機器人

有了線上客服與聊天機器人結合不孤單!!

本文將介紹WatsonBot,這是一個Facebook粉絲頁聊天機器人(當然不需要實體的機器人啦),由台灣IBM所開發。

 

作者/攝影  曾吉弘
時間  馬上開始
成本  $0
難度  * (簡單,別上癮)

您想和他講什麼都可以,他能回覆天氣,搜尋電影美食還有分析照片內容喔。更多內容就一起來玩玩看吧。想了解這項技術的朋友,歡迎報名3/17 的 [IBM x AI 機器人實作坊],帶您用Raspberry Pi 做出一台語音輸入(麥克風)來控制語音輸出(外接喇叭)與LED的機器人,當然會用到 IBM 的相關雲服務啦~   請參考以下影片:

請打開Watsonbot的頁面,開始閒聊吧~ 基本的天氣與關鍵字都沒問題,講一些有的沒的也不至於雞同鴨講。

也會提示使用者如何輸入,例如[地點 + 美食],但我用南機場夜市沒成功。鋼彈倒是有不錯的結果。

可以請WatsonBot幫你找電影,直接回傳網頁連結,但搜尋來源是豆瓣網(https://movie.douban.com/

上傳照片也沒問題,會回傳 image tag 以及基本顏色分析(感謝阿吉老師家的發發當model)

 

相關文章:

 

[ MakeNTU_MTK 研習營 ] 課程記錄&常用的7688Duo作品教學分享

作者/攝影 徐豐智/薛皓云、洪卉君
課程時間  2017 2/17 4hr
課程講師  徐豐智
課程場地  台大-新生教學館

大家好,這周六日即將進行MakeNTU,今天想先跟大家分享一些MTK企業獎主題OpenData的網站,作為製作作品的參考

寒假依然努力不懈的各位

最近佑緣助教也有試一個不錯的API,可以用python抓溫度資料,推薦給大家DarkSky API。六日早上會出現在三創園區,大家可以把握機會捕獲他~

 

其他的助教與老師還在確認時程,我們預計周六周日早上到下午會在各位的場區擺攤,有需要可以來問問題喔。當天上課資料在這裡

 

正在推眼鏡的皓云助教

附上雷虎遙控車 – 使用LinkIt Smart 7688 改裝成FPV第一人稱視角載具一枚

 

台大電機土生土長的宗穎助教

有些操作小技巧可以看這邊

 

在台上抓著麥克風獨唱的我

在大家背後默默付出的阿倫助教

 

以及本團隊的藏鏡人阿吉

 

最後還是寒假也努力學習的各位囉!

打完收工,下台一鞠躬,下次再見。

[課程紀錄]物聯網實作工坊-7688教師研習@TQC

作者/攝影 曾吉弘
課程時間  2017 1/12,13
課程講師 曾吉弘
課程場地 TQC電腦技能基金會

新年新氣象,1/12 13 兩天於TQC電腦技能基金會舉辦了7688物聯網講師研習,

兩天課表的 Google doc 在這邊,請和我們一起學習吧!

 兩天研習的好處就是可以慢慢教,大家也有一個晚上的時間稍微緩衝一下,不然這些內容要一天全部上完,物聯網課程又比單純Arduino的課程來得複雜很多,硬體、網路

我們把 LinkIt Smart 7688 Duo 的大小秘辛都講過一遍,簡列大綱如下:

  第一天上午   7688 Duo 硬體介紹以及當作 Arduino使用

  第一天下午   7688 網路設定與 openWRT 操作 (檔案系統,以及如何執行Node.js / python)

                       Mediatek Cloud Sandbox 介紹 -> 繼電器(數位輸出) 控制

  第二天上午   MCS影像串流 / 照片上傳,這是 7688 最特別的地方,用它做一個

  第二天下午   上傳感測器資料 (Node.js + Arduino / python + Arduino)

                       如何外部取得 MCS channel 的資料點 (JSON format)

  在此需要好好說一下,在此之所以使用 1+1 的方式而非純Arduino 或 純 Node.js / Python 的原因(很多學員也很困惑):

  1. 很多電子周邊有Arduino函式庫,但不一定有 Node.js / Python 的函式庫
  2. Arduino IDE 的聯網功能與 Node.js / Python 相比弱多了,以[[LinkIt Smart 7688] MCS 上傳資料] 教學,您可以看到Arduino code < 20行,Node.js / Python code <30行,輕鬆愉快喔

下圖是上傳光敏電阻資料到 MCS 的資料頻道上:

相關文章:

[課程紀錄] CAVEDU的物聯網教學心路歷程

對於CAVEDU來說,將實用的科技以有趣的主題融入教學中一直是我們的核心價值,因此在辦理各式研習與講座中收集大家的意見與困難點就至關重要了。以下內容只代表CAVEDU這兩年多來在物聯網這個主題上的些許教學心得(可能還有一點機器人與Android app),如有偏頗還請大家不吝指正。

作者/攝影 曾吉弘
課程時間  8週 (週四 18:00-20:00)
課程講師 2015-持續努力中
課程場地 全台各地

概念很簡單:如果只是把感測器數值顯示在網頁上,這樣就真的無聊透了。相對地,如果Arduino這類型的入門 maker board 已經很普及的情況下,該如何改變學習這件事:讓小孩子覺得有趣,讓高中與大學生們學到真實可應用的第一線技術?

2015年11月2016年5月各舉辦了一場[物聯網教學應用發表會],邀請了許多朋友來參加,有趣的是在2015年參加以開發板製造商為主,到了2016年則以雲服務提供者為主。這與我們的想法相當接近,使用者對於物聯網的期待已從基礎的資料呈現與控制,進一步到希望有運算、智能服務以及串聯常用的網路服務等等。

針對物聯網教學這件事,我們大概歸納了幾個特性:

 

1. 重點在於網路品質:頻寬、連線數上的要求都會比傳統教室來得更高

  1. 以Raspberry Pi 或 7688課程來說,學員的電腦、開發板與手機都需要在同一個網段之下,這樣連線數就會是學員數的至少3倍。

2.網路端與開發板端的開發環境大不相同

  1. maker 開發板常見程式環境自然是以Arduino為主,網路端則五花八門,node.js、python或php都有。如果想要一個程式語言就打通關的話,可能會遇到某個感測器沒有python函式庫而無法讀取或是所有東西都用Arduino IDE硬幹而程式碼太長的狀況。

3.雲服務端常常改版,使用者只能被動接受

4.上課可能發生問題的地方更多,老師心臟要夠強

  1. 無法連上網路(帳號密碼錯誤)、無法連上server、意外斷線、腳位接錯、函式庫引用錯誤、呼叫次數太密集…  太多啦

5.承3.4.  教師需要花更多時間備課

而使用者對於雲服務的期待也大致整理如下:

1.免費,至少不要太貴

  1. 學校對於看不到的東西很難編列預算

2.希望可與熱門的網路服務結合,因此才會有像是IFTTTTemboo這類型的中介SDK provider 存在。

3.入門範例真的很重要,哪怕只是LED閃啊閃,對於很多人來說也是要花一段時間才能學會。

    1. 要用雲服務來進行LED hello world範例的話,代表您得做到這些事情:
      1. 讓開發板連上網路
      2. 讓開發板連上雲服務 (以上兩點需要使用者具備網路基本知識)
      3. 開發板可讀取來自雲服務的資訊
      4. 使用者可擴充,例如兩個控制頻道分別控制對應的腳位狀態,以及在雲服務上顯示開發板回傳的數值(數字、文字或布林)

真的不太簡單,對吧?

 

4.離線版或區域網路版

    1. local cloud 或 private cloud 對於網路品質不佳或是對於關注資料私密性的用戶來說相當重要,您可以參考QNAP與Arduino合作推出私有雲服務一文

對於學生來說,教學者得先建構一個情境來引起學生們的興趣,例如以下:

  • 可以自動發佈Facebook動態嗎?
  • 事件觸發後可以推播或寄郵件給我?
  • 可以結合 open data嗎?
  • 可以影音串流或影像辨識嗎?
  • 有圖形化介面可以用嗎?
  • 可以不用除錯嗎? <- 最好有這種事情

您可在App Inventor中文學習網上的範例教學頁面看到我們寫了許多讓app與各種網路服務結合,包含Goolgle map、Google 街景服務、微軟認知服務、LASS空汙地圖、政府提供的紫外線與空氣汙染open data等等。對於開發板的聯網應用,也從雲端控制家電、氣象站這類基礎應用,進一步到Facebook天氣播報機器人(IBM Bluemix + Facebook Messenger API)、7688聊天機器人(IBM Bluemix)以及串流影像中的臉孔與年齡辨識

針對大家又期待又怕受傷害的107課綱,由於[物聯網]已確定排入高職課程中,我們也接到許多學校詢問課程、師資與教室設備等等規劃上的問題,我們很樂意提供相關的建議喔!!

 

(展示用的物聯網屋,具備各種感測器、聯網開發板以及雲端控制介面)

不論是學校社團業界講師、公民營研習社群分享一般民眾課程,都很期待與您見面喔!

(2016公民營研習@彰化建國科大,彰師附工主辦)

(2016  Mobile Hero 通訊大賽物聯網教師研習研習@T客邦創客基地)

(2015 創客night分享 Raspberry Pi 影像辨識機器手臂@T客邦創客基地)

(一般民眾物聯網課程@T客邦創客基地)

 

有興趣的朋友可以參考阿吉老師在去年新北 mini Maker Faire 分享的內容:

[活動紀錄] 2016 新北Mini Maker Faire 物聯網好棒棒分享會

希望日後有機會再寫一篇關於程式教學的心得分享囉!!