別讓小朋友沈溺於電動,教你動手做 IoT 互動式遊戲

多數人對 Intel® Edison 模組的第一印象都是安裝在 Arduino 擴充板上,而 Arduino 擴充板的尺寸看起來實在大到不適合行動裝置使用。因此許多開發者會認為 Edison 對於小型設備或穿戴式裝置並不實用。
評論
評論

多數人對 Intel® Edison 模組的第一印象都是安裝在 Arduino 擴充板上,而 Arduino 擴充板的尺寸看起來實在大到不適合行動裝置使用。因此許多開發者會認為 Edison 對於小型設備或穿戴式裝置並不實用。

不過如照片所示,Intel® Edison 模組其實不佔空間,但使用上並不容易,因為用來連接週邊設備的針腳太小了:Intel Edison 開發板上的 Hirose 接頭有 70 個針腳,而長度僅約 1 公分。解決此問題的辦法之一便是使用 Seeed 出品的 Xadow 穿戴式套件 Intel® Edison 版。此套件所囊括的配接器和小型感應器,可滿足小型穿戴式裝置的所有必備需求。

套件內含不同功能的小型擴充板,所有的擴充板均是由柔性扁平排線 (FCC) 連接。可用菊輪鍊方式來連接擴充板,為裝置提供必要的功能。

以下為套件的內容物:

本文將在<穿戴式套件組件>一節介紹各項組件。

o 電池
o Xadow – Edison:插入 Intel® Edison 開發板的主要接頭。
o Xadow – Edison Programmer::用 USB 將 Intel® Edison 開發板與電腦連接的模組。
o Xadow – Edison SD:用來連接 SD 記憶卡的模組。
o Xadow – OLED:128 x 64 黑白 OLED 顯示器。
o Xadow – Buzzer
o Xadow – Vibration Motor
o Xadow – Q Touch Sensor:觸控按鈕
o Xadow – NFC:NFC 讀取器。
o NFC Tags – 三個 NFC 標籤 (照片內有一個)。
o Xadow – 3Axis Accelerometer
o Xadow – Barometer BMP 180:氣壓計與溫度計。
o Digital RGB LED Flexi-Strip:此款燈條配備五個可控制的 RGB LED 燈。
o FFC 線材套件
o 電源線 (沒拍照)

說明事項

在開始說明流程之前,我想先談談進行專案時所發現的特點和問題,以及相應的解決方法。首先,我強烈建議更新開發板韌體。
如需確認當前版本,可使用以下指令:

在撰寫本文時,開發板最新的韌體版本為 159。
同樣也建議更新所有已安裝的程式庫。更新作業需要網際網路連線。

本文中所有的程式碼範例都適用於 Arduino* IDE。Seeed 套件的開發人員並未提供其他 IDE 範本。

我試過以 IoT 版本的 Intel® XDK 和 С++ 來使用開發版,不過無法運作。一項可能的原因是開發板電路不同於標準 Arduino 擴充版的電路。I2C 介面也有相同問題,加速度計的運作有時不穩定。不過在遊戲設置中,加速度計在 OLED 顯示器之後連接,此時運作一切正常。我無法啟動氣壓計和溫度計擴充板。

有時候開發板無法連線到 Arduino* IDE;編譯和 sketch 之間的傳輸也可能失敗。若發生這種情況,請終止開發板上執行的 sketch。

之後請清空 /sketch 資料夾,並關閉所有在電腦上執行的 Arduino* IDE。關閉 Intel® Edison 開發板的電源 (使用 shutdown now),再按住 PWR 按鈕直到 LED 亮起,將電源重新打開。

若需要在供電狀態下用 Edison 開發板執行 sketch,則可建立一個檔案來執行開機:建立資料夾 /etc/init.d。在資料夾中建立一個名為「automateSketch.sh」的檔案,其中需包含:

建立並儲存好 automateSketch.sh 之後,使檔案成為可執行:

然後在啟動清單內加入 automateSketch.sh:

入門介紹

應先在電腦上安裝所有 Intel Edison 驅動程式。此套件與模組的一切互動都透過 Arduino Sketch 進行,如果還沒安裝 Arduino IDE,請務必安裝。可至 www.arduino.cc 下載。

必須連接 Xadow-Edison Programmer 模組,才能使用開發板開始作業。請注意,兩個 USB 連接埠都必須插入:一個負責供電,一個負責連接 Arduino IDE。開發板的開關應設定在「Device (裝置)」的位置。請在 Arduino IDE 中使用 Boards Manager (電路板管理員) 來選取 Intel Edison 開發板。

Edison OS 作業系統開機完畢 (約 30 秒) 後,請在電腦上的 Device Manager (裝置管理員) 內找出虛擬連接埠的編號。

請在 Arduino IDE 內選取 Intel® Edison 虛擬 Com 埠 (COM25)。可使用 USB 序列埠 (COM29) 連至控制台,例如透過 Putty。

Arduino 程式庫

若要與模組互動,就少不了程式庫。可至 github.com/Seeed-Studio/Xadow_Edison_Demos 將程式庫下載為一個 ZIP 檔。很可能無法立刻安裝完成整個套件,所以必須將含有必要程式庫的資料夾加到 IDE 選單內。

連接模組

插入任何模組之前,請先切斷 Intel Edison 開發板的電源,藉以降低組件損傷的風險。若使用熱插拔模組,Sketch 將無法正確載入。

所有模組均是以柔性扁平排線 (FFC) 連接。線材的長度和寬度各不相同,傳輸線的寬度應與接頭相符。所有線材插入時都是藍側向上,針腳向下。開發板上的接頭有兩種類型。第一種須向上開啟,如同掀蓋一般。請打開接頭,輕輕將傳輸線完全置入 (大約 3 mm),然後關上接頭。

第二種接頭類型是滑動式的夾蓋,使用上較不方便。必須先從側邊撬開,然後拉出約 1 mm 的距離,一定要小心,我曾經不慎弄斷一根針腳。接著稍微用點力,將傳輸線盡可能往裡推 (大約 3 mm)。然後再用點力,將接頭推進去。傳輸線應該會牢牢固定在接頭裡。

所有模組在相對的兩端都有接頭。所有模組和主板在某一側均有切角。連接所有電路板時,應讓切角側朝同一方向。在下圖中可看到切角側全部朝左。

穿戴式套件組件

如本文開端所述,套件每一部份都可用來創造不同類型的穿戴式技術,端看結合和編程的方式。

電池

此系統的電池是標準 3.7 V 的 500 mAh 鋰離子電池。

Xadow -- Edison

這是用來連接 Edison 模組的主板,較模組本身稍大一些。若將 Edison 模組插進主板的插槽,應該能夠牢牢固定,但為了保障安全,可以拿 Arduino* 模組的螺絲來安裝。

主板配備電池用接頭,側邊還有四個接頭可供擴充板使用。上方的接頭是 Edison Programmer 擴充板專用,側面接頭供感應器和致動器使用,底端接頭則是給 SD 卡模組。

其上有兩個按鈕:PWR 與 FW_RCVR。長按 PWR 可以開/關裝置 ─ 長按 9 秒關閉電源,2 秒開啟電源。

電池接頭旁的小 LED 燈會顯示電源狀態。LED 燈閃爍時,表示是經由 USB 供電。LED 燈恆亮時,即代表電池充電中。LED 燈熄滅,則表示電池已充電完畢。

只需要主板和電池,即可讓 Edison 開發板開始運作。

Xadow -- Edison Programmer

此擴充板是用來與電腦連線,用途包括從電腦供電以及除錯功能,且配備兩個 Micro USB 接頭。
• UART 接頭可透過 COM 埠連接電腦並供電。
• 裝置/主機接頭則能從 Arduino IDE 操作擴充板。有個開關可選擇「Device (裝置)」或「Host (主機)」模式。使用 Arduino 請選擇「Device (裝置)」。

Xadow -- Edison SD

此擴充卡有一個可插入 SD 記憶卡的接頭,是以最寬的傳輸線連接到主板底端的插槽。

在裝置目錄的 /dev/mmcblk1 可找到 SD 卡。

安裝時請按照標準的 Linux 步驟。先建立一個空資料夾,如:

 再將記憶卡安裝到此資料夾:
 若想要在 Linux 開機時自動安裝記憶卡,請將下列字串加到 /etc/fstab 檔案中:

Xadow -- OLED 12864

此為套件隨附的 128×64 OLED 顯示器。

規格請參見 Seeed 網站。
此顯示器是經由 I2C 介面連接,裝置位址為 0x3C。
以下程式碼為畫面顯示用的範本:

畫面有 8 列,一列 16 個字元,幀率可每秒多個畫格。

我們使用了下列功能:
• init():初始化 Seeed OLED 的畫格,並將顯示器設為正常模式。
• clearDisplay():清空整個畫面。在全新開始之前,或是滾動停用之後,都應該使用此功能,游標也將設定在左上角。
• setBrightness(unsigned char Brightness):設定 OLED 顯示器的對比率。亮度可為 0~255 之間的任何數字。
• setNormalDisplay():將顯示器設定為正常 (非反轉) 模式。
• setPageMode():將顯示器設定為頁面定址模式。
• setTextXY(0,0):將文字的位置 (游標) 設定至第 X 頁,第 Y 列。X 可為 0~7 之間的任何數字。Y 可為 0~127 之間的任何數字。
• putString(cont char *string):將字串發佈到 OLED 顯示器上,從目前 setTextXY(X,Y) 所設定的位址指標開始。
• sendData(unsigned char Data):將一個位元組送到畫面上。
其他功能和更多資訊可參照 www.seeedstudio.com/wiki/OLED_Frame and in SeeedOLED.h 檔案。

Xadow -- Buzzer

蜂鳴器需連接到針腳 11 和 13,必須同時開啟或關閉。將 0 或 1 傳送到這兩個針腳上便會發出聲音。

依我個人經驗,最簡單的方法是將其中一個針腳預設為 1,然後改變另一個針腳的狀態,藉以發出聲音。

以下程式碼為聲音輸出的範本:

 

由於是依據軟體播放,所以聲音無法十分清楚。最好使用脈衝寬度調變。值得一提的是,我為 Intel® XDK IoT 版和 С++所製作的這個 Sketch 複製版無法運作 ─ 沒有聲音輸出。

Xadow -- Vibration Motor

可以用和蜂鳴器相同的方式來控制震動馬達:將針腳 10 和 11 設定為相同的數值,藉此開啟或關閉。方法可參考下列範例碼:

 

就和蜂鳴器一樣,預先將其中一個針腳設定為 1 後,再控制另一個針腳即可。

Xadow -- Q Touch Sensor

此擴充板的背面有三個觸控按鈕,由 I2C 連接,位址為 0x1B。

按鈕的靈敏度很高,就算隔著幾層紙或膠片也感應得到,所以可用圖片遮蔽這些按鈕。

以下的範例碼會傳回按下的按鈕編號:

Xadow -- NFC

NFC 讀取器可支援 I2C、SPI 以及 UART 連線,作業頻率為 13.56 MHz。其可支援讀寫操作、ISO14443 Type A 與 Type B 協定、以及 P2P,且配備一條隨附連接線的天線。更多資訊請見 http://www.seeedstudio.com/wiki/Xadow--NFC

套件隨附三個可寫入的空白 NFC 標籤。

此模組需要用到 NDEF、PN532、PN532_HSU、PN532_I2C 以及 PN532_SPI 程式庫。請從一般的 Seeed 範本程式庫下載上述程式庫。

如需測試標籤和讀取器,可使用 NDEF 程式庫裡的範例程序 readTag。它會讀取標籤內的資料並將之顯示在控制台上。

套件中的標籤有序號,因為尚未格式化,若經查詢將傳回下列輸出結果:

要先以 NDEF 程式庫的 FormatTag 範本將標籤格式化,才能寫入資料。

如需將資料寫進標籤中,可使用 NDED 程式庫的 WriteTag 範本。

以下是從某個標籤讀取資料的結果:

 

Xadow -- 3Axis Accelerometer

此為三軸加速度感應器。所能測量到的範圍為 ±16 G,透過 I2C 連線,位址為 0x53。感應器安裝在 ADXL345 晶片上。要使用的話需從套件安裝 DigitalAccelerometer_ADXL345 程式庫。
共有四種測量範圍,精確度和轉換率各不相同:±2 g、±4 g、±8 g、±16 g。

晶片的規格表可查看此處:pdf1.alldatasheet.com/datasheet-pdf/view/254714/AD/ADXL345.html

資料會以 16 位數字的形式回傳。程式庫回傳的數字是 int 變數,因此需如下進行修改:

若使用的範圍是 ±2 g,則各規格表的傳回數值均需除以 256。之前提過,我在加速度計這邊遇到了一些麻煩。有時候會無法偵測到加速度計,而 Linux 控制台會傳回 I2C 錯誤。不過當把螢幕連接到主模組,再將加速度計連接到螢幕時,運作就相當穩定。也許這個感應器沒有終端電組。

Xadow -- Barometer BMP 180

此擴充板上有氣壓計和溫度計。壓力測量範圍為 300~1100 hPa (即海平面上 -500 m~+9000 m)。其是以 0x77 位址連接 I2C。

不幸的是,我無法讓這個擴充板運作起來,可能是因為 I2C 介面有些錯誤。也許跟加速度計的問題是一樣的。我曾拿另一組 Xadow 套件測試過,同樣無法運作。

Xadow -- Breakout

這個擴充板是用來連接標準的感應器,有以下針腳:3.3 V、SCL、SDA、TX0、GND、SCK、MOS1、MOS0、A5。上面也有兩個接頭墊,可插入標準的「Seeed」模組。一個標為「Serial」,一個標為「I2C」。可拿來連接 LED 燈條。

Digital RGB LED Flexi-Strip

這是一條配有 5 個 RGB WS2812B LED 燈的燈條。透過一條線來控制 LED 燈。

必須要正確連接才能運作,如下圖所示。使用 Xadow-Breakout 擴充板

資料是由軟體送出,因此有時候會發生資料傳輸錯誤的情形,LED 燈可能會紊亂閃爍。

以下為「Running light」程式:

製作遊戲

我想用這個套件來做些什麼,然後就冒出了做個遊戲的想法。

在這個遊戲裡,LED 燈帶會安裝在遊戲盒的外側。當 LED 燈亮起或熄滅時,玩家要依據 LED 燈光的顏色將盒子 45 度朝某個方向傾斜。若中間的 LED 燈是綠色,就要將盒子向外傾斜 (遠離自己)。若中間的 LED 燈亮紅色,就往自己這一側傾斜。所最右邊的 LED 燈轉綠,則將盒子朝右傾,但若是亮紅燈,就要朝左斜。

這個遊戲不但能測試反應能力,還能讓玩家在動作前先動動腦。

要作出這個遊戲需要下列組件:
• 陀螺儀
• OLED 顯示器
• LED 燈條
• 連接燈條的擴充模組
• 按鈕板
• 電池

首先我在電池接頭的那側連接分線板,然後是感應器按鈕。另一端連接螢幕,再連接陀螺儀。這個盒子是用幾張彩色厚紙板黏成的。接下來開一個口讓螢幕露出來。我將按鈕板裝在螢幕下,如你所知,按鈕的感應度很高。我在正面給按鈕位置畫了幾個符號。
所有的擴充板蓋了一張紙,再用透明膠帶黏好,以防損壞。

Sketch 會自動在 Linux 中啟動。

要開始遊戲時,就長按主模組的 PWR 按鈕 9 秒左右。要結束遊戲,就將同一按鈕按 3 秒即可。

遊戲開始後會出現選單,在選單中可以選擇開始遊戲 (按下 A 鈕) 或顯示遊戲說明 (按下 B 鈕) 若要關閉說明畫面,就按下箭頭鈕。

遊戲共有五回合。每一回合會有一個 LED 燈隨機亮,玩家就得朝相對應的方向傾斜盒子。若動作正確,畫面上會顯示「You Win!」。若失敗或是時間到,畫面上顯示的就是「You Lose!」。

You may see example video

所有的遊戲程式碼都在一個檔案內。我盡可能寫得簡潔清楚,所以相當好分析。

Sketch 遊戲程式碼

關於作者

Valery Mosyagin 是 Intel 官方的軟體創新者。目前定居在俄羅斯的下諾夫哥羅德。擁有數學與電腦科學的碩士學位。在 Intel 的 OpenCV 團隊中有 6 年工作經歷,後來到日本為 Brain Research Institute 開發生物實驗用的軟體.─. 網路流量分析軟體以及無線訊號涵蓋和傳播軟體。有很長一段時間在教導小朋友編寫程式。Valery Mosyagin 的興趣相當廣泛,包括虛擬實境、遊戲開發、微控制器和 IoT 等。

更多精選文章.....


開發者享受 CI/CD 價值!運用 Amazon EKS 整合 GitLab 創建自動化部署

企業如何在 Amazon EKS(Elastic Kubernetes Services)上使用 GitLab 創建自動化部署,減輕人力負擔,提升專案服務運作效率?
評論
評論

所謂現代化智慧 IT,所有工程師最希望的境界,莫過於只要輕鬆點幾下設定,系統就會自動跑起來,管理者再也不用隨時待命在機台旁邊,從此工作悠哉又快樂!儘管這樣情境還沒到來,但隨著敏捷式開發的流行,除了 DevOps 人員,有越來越多開發者將 CI/CD 概念融入到工作流程當中,例如從 build code、執行 unit test、到部署應用程式。

打造第一個在 AWS 上的應用程式

上述種種反覆步驟自動化執行,也就能提昇服務品質、主動通知開發人員以減輕人力負擔,讓專案服務能持續運作。

其中,GitLab 是執行 CI/CD 常用的工具之一,也是開發者使用程式碼儲存庫的地方。為了讓 GitLab Runner 在雲端快速實踐 CI/CD,《AWS 開發者系列》透過影片分享,如何在 Amazon EKS(Elastic Kubernetes Services)上使用 GitLab 創建自動化部署。

以下節錄工作坊影音內容,幫助開發者快速理解如何運用 Amazon EKS 的高可用性且安全的叢集,將修補、部署節點、更新等關鍵任務,全部做到自動化設定。同時影片也會示範 Amazon EKS 搭配 GitLab 如何展開自動部署,幫助工程團隊實踐 CI/CD 價值。

Amazon EKS 對容器管理輕鬆簡單、維運省時省力

容器化服務越來越興盛,當容器(Container)越來越多,在複雜的微服務(Microservice)系統環境之下,運維團隊的管理成本可能相對會增加不少,為了有效調度容器部署, 導入Kubernetes 無疑是近年企業熱門的話題之一。

建構 Kubernetes Cluster 流主要可區分兩大塊,一是安排容器調度的Control Plane、另一則是容器運行時需要用到的 Worker Node。

Control Plane 裡面涵蓋有儲存狀態的 ETCD、CoController manager 、Scheduler 的調度管理、甚至是操作時進行互動的 APIServer,若是自己創建 的 Kubernetes Cluster ,需要自己安裝這些元件,後續仍需要對 Control Plane 進行相關管理、維護、升級工作。為了減少上述 Components 的繁複維護,在透過 AWS EKS 代管的 Kubernete Control Plane 部可以獲得以下三大好處。

透過 AWS 增加雲端技能 在組織發揮影響力

Amazon EKS 一鍵式部署,展現三大優勢

第一,Amazon EKS代管的 Control Plane實踐了跨AZ的高可用部署,使用者不需要擔心單一節點故障的風險。

第二,Amazon EKS 支持至少四個 Kubernetes版本,持續跟進每季 CNCF 的發佈,同時 EKS 也完全符合上游 CNCF 規範。

第三,部署 Amazon EKS 之後,可直接使用 AWS 平台上現成的服務工具,在安全性管理、網路設定方面,可以做到無縫整合。

最後 AWS 台灣解決方案架構師也提到,若想在容器環境進行 CI/CD 及應用程式的管理,可以進一步透過 IaC 整合部署 Amazon EKS 叢集,透過使用 Console、把 EKS 變成 Cloudformation 的模板、使用 AWS 所開發出來的 eksctl.io、或指令是採用 AWS CDK 可以讓開發者用自身熟悉的語言,在 AWS 平台整合 CI/CD 工具進行維運及部署 EKS。

了解 Amazon EKS 整合 GitLab ,獲得三面向價值

對開發者而言,想把 Amazon EKS 整合到 CI/CD 工具之一的 GitLab 平台上,可以看到那些實際的優勢?

在 DevOps 開發者示範工作坊當中,GitLab 資深解決方案架構師指出,GitLab 使用到 Kubernetes 技術,主要有三種搭配方法,包含 GitLab Server、GitLab Runner、以及創建 Deployment Environment。

本次示範教學會主要聚焦在 GitLab Runner 如何採取 Auto-scaled 方式進行 Build、Test、Package Apps;以及在 Deployment Environment 運用 Kubernetes 技術,做到 Auto Deploy、Review App。

正因為 Amazon EKS 能夠在 DevOps 過程提供所需要的彈性計算資源,幫助開發者在 GitLab 平台上面獲得以下三個層次的優勢:

  • 在 GitLab 內建的部署工作流程當中,自動生成整套 CI/CD 最佳實踐腳本。
  • Review App 過程,從 Merge Request 中可直接訪問應用程式 /App 的 UI 介面,並且根據 Git branch 名稱、專案名稱,自動生成 Review App 的 URL,以及在 Merge 前的最後防線進行 Approval 檢查。
  • 加速 CI/CD 流水線,GitLab Runner 運行時候還可藉由 Amazon EKS Cluster 進行 Auto-scaled 的支援。

Amazon EKS 整合 GitLab ,需要兩大流程

影片最後,GitLab 資深解決方案架構師示範如何把 Amazon EKS 整合至 GitLab 執行 Auto Deploy,主要可分為兩大區塊流程,第一部分聚焦在 Amazon EKS cluster 的設置,第二部分則執行 Auto Deploy 設置。

第一塊可拆分為四個階段,首先教學怎麼創建 EC2 節點的 EKS cluster,第二階段示範把 EKS Cluster 連接到開發者的 GitLab Instance、Group 或 Project,下一步則使用 Cluster Management Project Template 創建一個 Cluster Management Project,以及最後一階段透過 Cluster Management Project 自帶的 Helm Chart,安裝在 Cluster 所需要的內建 App。

第二塊執行 Auto Deploy 設置,針對需要部署的 App 創建一個 GitLab Project,接著再把 gitlab-ci.yml 添加到 Project,並從 Web IDE 選擇及導入 Auto Deploy 的 CI 模版,讓 GitLab 自動生成最佳實踐的整套流水線。

幫助開發者更了解 Amazon EKS 整合 GitLab 的 QA 系列

Q:使用 Amazon EKS 之後,如何更有效率或優化資源去配置 Worker Node 的機器數量,以及如何有效空管開發維運的成本?

A:Kubernetes 除了本身有 HPA(Horizontal Pod Autoscaling)可根據使用程度自動調整資源流量,另外也能延伸使用 AWS Auto Scaling 方案,針對可擴展資源去設定自動擴展管理。另外在成本管控,雖然 Amazon EKS 會收取額外管理費用,但可透過 AWS 平台的 Calculato r計算每個 EKS 的價格,你會發現自動化部署及管理的費用,相對工程師人力的成本更加便宜。

Q:越來越多客戶考慮把現有 Application 變成容器部署,大多是爲了加快部署的效率,那麼變成容器模式之後,對 CI/CD 的工作流程有什麽影響嗎?

A:運用容器技術最直接的效果,可以讓應用程式的環境更一致化,例如 testing 環節、stage production,讓容器避開一些差異問題。至於 CD 部分要 delivery 一些 usage 不太一樣的時候,容器會幫忙做配置,所以 CI/CD 對容器的效益是相輔相成的。

Q: 客戶在開發流程漸漸會把 Infrastructure 變成代碼或文檔,是不是可以把程式碼跟現有的應用程式的 CI/CD 流水線整合在一起,達到一套完整的 CI/CD 部署流程?

A:觀察目前市場作法,主要分成兩個階段去做整體部署。如果規模比較小的團隊,會把 Infrastructure 代碼跟 App 代碼分開,在管理上會比較靈活;如果企業規模比較大,會有另外一個 Infrastructure 團隊來控制部署事情,這種情况之下,APP 的項目會生成一個 APP package,主要做到 delivery 這個階段爲止。而 Infrastructure 的項目會指定把需要版本的文檔,部署到他們的 Kubernetes Cluster。

填寫表單 找到適合的快速上雲服務與工具!