Tag Archives: 物聯網

[ 教學技術文 ] MCS事件觸發功能進階教學——如何用更新後的 Webhook 功能連動外部服務?

作者/攝影

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

文章分類教學技術文

 

在之前的文章中,聯發科技的工程師介紹了在原型開發階段,事件觸發功能的最佳化,包含支援觸發條件的資料通道新增網頁警告的視覺化提示,以及如何自行定義該警告提示的嚴重性名稱而在這一篇文章,他們要教讀者們如何使用最佳化的 Webhook 功能,並以一個實例進行教學。若您尚未閱讀之前的文章,建議可看完後再回本文閱讀,以利交互搭配新功能一起使用。一起來閱讀吧!

延續之前的介紹,讀者們可看見連接MCS的工廠機台,在分別發生警告嚴重性為橘色 / 警告名稱為 Medium,以及警告嚴重性為紅色 / 警告名稱為High 兩種事件時,在測試裝置頁面的呈現,請參考下面2張圖:

圖1 顯示各別資料通道的網頁警示 | mcs.mediatek.com

 

圖2 在裝置列表頁面,僅顯示該裝置所有資料通到中警告嚴重性最高的警示燈號。 | mcs.mediatek.com

 

現在,除了網頁警告提示外,如果讀者們希望在事件發生的同時,能更進一步連動到某個遠端的實體裝置,例如智能音箱、無線燈泡⋯⋯等等,以提示在該地點的管理者,能否透過MCS實現呢?答案是可以的。

 

首先,我們必須選擇想要連動的物聯網裝置。除了挑選情境適合的裝置外,這個物聯網裝置在技術上必須滿足以下條件:

  1. 有對外開放的 API 接口

  2. API 支援 HTTP Restful 的通訊協定

 

讓我們假設情境設定如下:

工廠機台發生上述兩種事件觸發的緊急狀況時,透過 MCS 連動到管理者家中臥房的無線燈泡,而且燈泡直接顯示紅色或橘色燈光。在這個案例中,我選擇使用彩色的Wifi LED智能燈泡——美國LIFX 燈泡(也可選擇較常見的Philip Hue,只是筆者 2 年多前剛好為嘗鮮而購入)。從該公司網站上,我們可以確定產品都支援HTTP Restful的 API 接口,以利外部服務並與其整合。

圖3 截圖來源:美國LIFX 官網 https://www.lifx.com/

 

回到MCS,我們以設定橘色警告燈的Medium 觸發事件1為例。回到原型下事件觸發設定的步驟三進行編輯,在動作類型的選項,下拉新增 Webhooks。

圖4

 

如果過去曾用過Webhook這個功能,眼尖的讀者應該發現目前的Webhook 設定介面,我們新增了三個欄位:動作(Actions)標頭(Headers)內文(Body),這樣的格式也是今日普遍的HTTP Restful 請求格式。

圖5 上圖左為舊版 Webhook功能設定,上圖右為新版 Webhook功能設定。 | mcs.mediatek.com

 

讓我們到LIFX 官方的開發者頁面,找到改變燈泡行為(Set State的教學頁面(https://api.developer.lifx.com/docs/set-state),並將觸發該燈泡所需必要資訊填入MCS上的 Webhook 觸發動作頁面:

圖6

 

圖7 動作類型選取Webhook後的設定選單,填入LIFX 開發者頁面相關資訊。 | mcs.mediatek.com

 

動作:PUT

 

控制此燈泡的 HTTP 要求動作:

URL: https://api.lifx.com/v1/lights/:selector/state

其中selector為變數,可為all、label:[value]、id:[value] 任一種識別資訊指定想要連動的燈泡。

 

標頭Authorization:Bearer XXXXXXXXXXXX Content-Type:application

其中 Authorization 的值為使用者的識別碼,需在登入 LIFX cloud Home 頁面後,創建該 personal access tokens(LIFX 教學頁面有說明如何創建)。內文格式則為json。

 

內文

{
“power”: “on”,
“color”: “orange”
}

 

LIFX 的官方文件中有針對燈光的細節,例如亮度、燈光持續時間、模式等提供更完整說明,且對應的物件都可以放入內文。此情境中僅放入 power 及 color 兩個物件。接著,按下寄發 Webhook 按鈕,測試打到 LIFX服務的 Webhook 是否成功觸發燈泡開啟橘色燈光。讀者們可看見下圖中燈泡成功開啟橘光,按下儲存便完成這個事件觸發設定的更新。

圖8 按下測試按鈕,確認該燈泡有正確開啟橘色燈光。 | mcs.mediatek.com

 

依此類推,讓我們複製同樣設定在高警告嚴重性的 High事件——即當機台運轉狀態轉為弱時,同時觸發家中臥房的 LIFX 燈泡,開啟紅色燈光。在此設定中,除了內文的 「color」修改為「red」外,其餘資訊皆和事件1相同。

圖9 事件2的觸發事件設定內容 | mcs.mediatek.com

 

完成後,可看到在觸發條件和動作列表中,兩個告警事件後方的觸發動作下,已新增 Webhooks。至此,我們完成了工廠機台發生狀況時,透過 MCS 遠端連動家中臥室燈光的設定。

圖10

 

透過MCS事件觸發中的簡單設定,我們可輕鬆遠端連動除了智能燈泡外不同的物聯網裝置。除本文中的 LIFX燈泡或其它物聯網的硬體裝置外,當然也可透過 Webhook 的功能,在事件發生時連動到其他支援HTTP Restful 的軟體服務,如IFTTT、Slack 或 Line⋯⋯等等,讀者們可針對您所需的應用,選擇適當軟硬體產品,並參照該服務網站上的相關說明。

 

最後特別說明一下,這個案例是透過 MCS 本身的 Webhook功能控制 / 連動遠端軟硬體服務;相反地,若要透過第三方的軟體服務和MCS互動,則需透過申請appId及appSecret的方式,並透過該服務的webhook來和MCS互動。有興趣的讀者,可以複習此篇教學。

 

現在,馬上開始建立您的事件觸發情境吧!

 

相關文章

[ 介紹文 ] 2018.09.25- 當車子有了智慧,對我們的行車體驗有何影響?來看看Smart Car!

作者

Josh Go成功大學資訊工程系教授
黃崇明/成功大學資訊工程系博士生林士颺

圖片

pixabay

說明

轉載、改寫自「臺灣網路科教館」生活科學補給站內文章,特此致謝!原文請見

現今,車輛多半只負責運送乘客抵達目的地。然而,不久的將來,「智慧車」將提供過往未能達成的許多新功能,例如:主動式安全系統、自動駕駛系統、即時車流導航資訊系統⋯⋯等等。目前只出現在科幻電影內的許多特殊功能,即將實現於本文主角「智慧車」上。

 

什麼是智慧車?

「智慧車」不同於傳統汽車,它結合汽車、半導體、電子、資通訊及光電等科技於一身。其上整合應用多種不同感測器、雷達、無線通訊、攝影機等裝置,以達成我們需要的功能。「智慧車」的開發,通常以車輛安全、舒適便利及環保節能等三方向為主軸,可進一步探討如下:

圖1 廠商開發的智慧車

 

一、安全防護

車輛的安全性始終為車廠與駕駛關注的重要議題。以往,車廠透過許多技術提升車輛安全性,而未來的科技將更進一步於事故可能發生前,即產生安全防護。例如,在主動式防碰撞系統中,車輛利用裝配於其上裝置,提供的資訊進行運算,在事故可能發生前,即警示駕駛或產生相對應動作,例如自動減速⋯⋯等等,降低事故發生機率。

 

二、便利駕駛

未來的「智慧車」將提供更完整、豐富的功能,減輕駕駛負擔。其中一種無人駕駛的智慧車,許多科技大廠正積極研發中。無人智慧車提供語音或觸控螢幕,讓使用者輸入目的地,再依即時車流量資訊選擇最佳路線,將乘客以自動駕駛方式,安全運載至目的地。

圖2 無人智慧車提供語音或觸控螢幕(示意圖)

 

三、即時導航

以往的車輛導航系統,依全球定位系統(GPS)將車輛位置定位後,顯示於螢幕上,並依所設定目的地,找出較佳導航路線。而未來的即時導航系統,在尋找導航路線時,將同時考量車流量與擁塞⋯⋯等資訊,避免將車輛導引至塞車路段,讓駕駛可快速抵達目的地,同時降低廢氣污染,達成環保節能的目標。

 

四、車間通訊

「智慧車」能提供以往無法達成的許多功能。為達到這些功能,彼此交換車間訊息即為必須。除了行車資訊的傳遞和交換,「智慧車」更能透過車間通訊等方式,讓駕駛在車輛上連接各種不同網路。目前,車間通訊的重要發展,以結合通訊(Telecommunications)與資訊(Informatics)的車用資通訊(Telematics)技術為主。

 

五、環保要求

近年來,地球的平均溫度,因二氧化碳大量排放而日趨升高。為保護這獨一無二的地球,「智慧車」將以零汙染、零碳排的電力能源為動力系統。智慧車於日光充足時,利用太陽能電板補給電力;當日光微弱或夜晚時,可利用家用電源補足電力。此外,為便利使用者,不需電線的「無線充電系統」也將使用於智慧車上,只需將車開回車庫內(不需直接連接電源),即可自動替車子充電。

圖3 智慧車以電力能源做動力系統

 

六、延伸應用

除本身能提供的服務和功能外,「智慧車」更能擴展應用領域。例如,結合智慧型運輸系統(Intelligent Transport Systems,ITS) ,以提升先進交通管理服務、先進旅行者資訊服務、先進公共運輸服務、先進車輛控制安全服務、商車營運服務、緊急事故支援服務、電子收付費服務、資訊管理系統、弱勢使用者保護服務等九大領域。

 

小結

為更快速抵達目的地,以及有更安全、舒適的行車體驗,「智慧車」應運而生,並提供過往車輛未能具備的功能。而在不久的將來,過去只有在科幻電影中現身,車輛的種種炫麗功能,將可能一一實現在智慧車上。就讓我們拭目以待吧!

 

相關文章

[ LinkIt 7697 ] 環保的錦囊妙計:如何用LinkIt 7697搭配聯發科技MCS,製作出魚菜共生裝置

現今,由於環保意識抬頭,社會各界紛紛意識到對環境友好的農耕方法,以及永續經營的重要性。所以,魚菜共生的高用水性,以及養魚、蝦所產生廢棄物的再生利用,是非常好永續利用環境、資源的一種耕種方式。這一篇文章,就是用手把手的方式,教大家如何自己做一個魚菜共生的裝置,一起來看看!

作者/攝影

CAVEDU教育團隊 薛皓云

文章分類教學技術文
時間2小時
成本3700+元
難度***
材料表1.LinkIt 7697開發板*1

(若欲購買,請洽機器人王國商城。)

2.RK IoT EXShield擴充板*1

(若欲購買,請洽機器人王國商城。)

3.5V1A變壓器*1

4.EIC 170孔麵包板*1

5.LED點矩陣 *1

6.土壤溼度感測器*1

7.繼電器模組*1

8.臥式有刷小水泵*1

9.Gravity:Waterproof DS18B20 Sensor Kit*1

(若欲購買,請洽機器人王國商城。)

10.Gravity:類比式酸鹼值感測器模組 *1

(若欲購買,請洽機器人王國商城。)

11.發泡煉石 60兩

12.SAMLA 11/22公升收納盒專用分隔板,透明 *1

13.SAMLA 收納盒 22公升 *1

14.跳線(母對母)10p

15.跳線(公對母)10p

16.塑膠軟管 45cm

 

需要的工具:

1.電工膠帶

2.熱熔膠槍

3.螺絲起子

硬體組裝:

1.將沉水馬達線透過杜邦線延長(紅正白負)

圖1

 

2.將沉水馬達利用熱融膠,黏至SAMLA收納盒 22公升底部角落。

圖2

 

3.將沉水馬達的線,利用熱融膠沿著箱子角落固定住。

圖3

 

4.接上塑膠軟管至沉水馬達上,並放著。

圖4

 

5.將RK IoT EXShield擴充板,利用熱融膠黏至SAMLA收納盒22公升側面(寬的那一面)。

圖5

 

圖6

 

6.在RK IoT EXShield擴充板上方,黏上繼電器。

圖7

 

7.將沉水馬達的白色電線接至繼電器上NO腳位

8.從繼電器COM腳位接一條跳線,至RK IoT EXShield的GND上。

圖8

 

9.繼電器上VCC、GND、IN,分別接上RK IoT EXShield的5V、GND、D8。

10.沉水馬達的正極,接於杜邦母頭左上角數來第4腳位。

圖9

 

11.將Waterproof感測器的水下感測器的黃、紅、黑線,分別接上Waterproof感測器轉接器的A、B、C。

圖10

 

12.將Waterproof感測器轉接器黏至外箱右上角上

圖11

 

13.將Waterproof感測器轉接器,接至RK IoT EXShield擴充版的D2。

14.將Waterproof感測器,放至SAMLA收納盒 22公升中。

圖12

 

15.裁切pH計的泡棉收納盒

圖13

 

圖14

 

16.將裁切完的泡棉,黏至SAMLA收納盒 22公升側面中間(窄的那一面)。

圖15

 

17.在SAMLA收納盒 22公升側面(窄的那一面),左下角黏上pH計轉接器。

18.接上pH計並放入泡棉收納盒中

圖16

 

19.將pH計轉接器,接至RK IoT EXShield擴充版的A1。

20.土壤感測器S、+、-,分別接至RK IoT EXShield擴充版的A0、5V、GND。

圖17

 

21.將發泡煉石,裝至SAMLA 11/22公升收納盒,專用分隔板中約5cm高。

圖18

 

22.將SAMLA 11/22公升收納盒專用分隔板,放至SAMLA 收納盒 22公升上,並將塑膠軟管從SAMLA 11/22公升收納盒專用分隔板中間穿出。

圖19

 

23.將土壤感測器置入發泡煉石中

圖20

 

24.將DHT11黏至RK IoT EXShield擴充板右下角

圖21

 

25.將DHT11的VCC、DATA、GND,分別接到RK IoT EXShield擴充版的VCC、A2(P16)、GND。

這樣硬體部分就大功告成囉!!

圖22

 

接下來是程式部分:

1.申請MCS(MediaTek Cloud Sandbox,簡稱MCS,由聯發科技所推出的雲端服務)帳號。

2.新增產品原型名稱設定如圖23

圖23

 

3.新增完畢後點選詳情

圖24

 

4.新增顯示通道酸鹼值——ID:ph;資料型態:浮點數;單位:N/A。

圖25

 

5.新增顯示通道水下溫度——ID:temp_wa;資料型態:浮點數;單位:攝氏。

圖26

 

6.新增顯示通道土壤溼度——ID:Mo;資料型態:分類Key1名稱:乾;Key1值:D;Key2名稱:濕;Key2值:W。

圖27

 

7.新增顯示通道室內溫度——ID:T;資料型態:整數;單位:攝氏。

圖28

 

8.新增顯示通道室內溼度——ID:H;資料型態:整數;單位:百分比。

圖29

 

9.新增測試裝置

圖30

 

10.完成後前往詳情

圖31

 

11.記下自己的 DeviceID 及 DeviceKey

圖32

 

12.開啟程式ino

13.將第7、8行的WiFi帳號密碼,更改成為自己的WiFi帳號密碼。

圖33

 

14.第10行中的MCS DeviceID及DeviceKey改成自己的ID及Key

圖34

 

15.將程式燒入至LinkIt 7697中,並將7697裝至RK IoT EXShield擴充板上。

16.接上5V1A電源等待7697連上網

 

這樣,我們自己的魚菜共生裝置就完成了!趕快動手嘗試一下喔!

 

相關文章

[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)

 

相關文章: