2015/03/23

Raspberry Pi情報彙整(46)

我收集整理網路上看到的、感興趣的、跟Raspberry Pi相關的資訊,如果您發現任何新奇驚人的專案、新聞、活動等等,還請留言告知。

Pi Day is around the corner! | Raspberry Pi,假日、慶祝日永遠不嫌多,在Pi Day這一天,找個鄰近住處的活動參加,好好歡樂一番。

GCHQ's Raspberry Pi 'Bramble' - exploring the future of computing,以8塊rpi為單位,共有8個單位,再加上兩塊rpi作為中介、管理之用,嘿,總共是66塊,哇,我好想要啊。
Star Wars Episode 3.14: A New Hope | Raspberry Pi,嘿,看得出是哪個電影場景嗎?這是星際大戰中,X翼戰機攻擊死星的一景,在Minecraft裡重現了。
Nature_Box - TeCoEd (Teaching Computing Education),PIR感測器、Pi相機模組、WiFi無線網卡、電池,自行打造能捕捉動物身影的盒子吧 。
Pi-Print • Hackaday.io,熱感印表機CSN - A2加上rpi,打造一台能馬上列印你手機裡照片的藍牙印表機。
Dots Board – Developer Giveaway! | Raspberry Pi,嘿,學習電子一定要從連接一大堆線進行焊接入門嗎,那可未必,rpi基金會創意總監Rachel Rayns設計了這塊DOTS擴充板,再加上導電墨水筆,輕輕鬆鬆在SXSW中心進行教學。
Microscopy – with added Pi | STEM @ The Purbeck School,改造顯微鏡,把裡頭的感測器換成Pi相機模組,嘿。
Orange Pi SBC tempts Raspberry Pi clone fans ·  LinuxGizmos.com,來了塊新版子Orange Pi(橘子派?),嘿,這麼多派。另外也請看看比較各板子的文章或影片,比較Raspberry Pi 2 v Banana Pro的影片比較Pi 2、Orange Pi、Banana Pro的影片Banana Pro與Pi 2的官方規格比較。注意,下圖裡各塊板子的尺寸並未依照比例縮放,不可作為大小參考。
PiJuice - A Portable Project Platform For Every Raspberry Pi by PiJuice — Kickstarter,想要打造可攜式專案,卻又必須先解決許多問題嗎,譬如電池、螢幕、等等,看看PiJuice吧,幫你準備好基本的配備。
LinkIt ONE VS Edison VS Raspberry Pi VS Beaglebone Black | Seeed Studio Blog,比較四塊板子。
Observing a solar eclipse with high-altitude Pis | Raspberry Pi,在歐洲運用高空氣球拍攝日蝕。
Raspberry Pi Internet doorbell | Raspberry Pi,電鈴也要上網,能夠呼叫你的手機和傳送文字訊息,還可以即時傳送影像,看看到底是誰站在門前。這裡有完整的建構步驟
Stock Ticker for the Terminal on a Raspberry Pi · BitPi.co,使用Go語言,在命令列模式下即時觀看股價變動。嘿,趕快來護盤吧。
Lionel Train Switch Control With a Raspberry Pi,透過rpi控制Lionel Trains模型火車。
Plugging a 1986 Mac Plus into the modern Web,現在不是要萬物聯網嗎,嘿,那麼也應該讓老古董Mac瀏覽網站啊。
Building a Model Smart Home with Raspberry Pi - PubNub,智慧家庭自動化,先用模型來試試看吧,哇,真不錯。
Raspberry Pi (ARMv6)上自幹一個微小作業系統 | T & T- learning by doing,太厲害了。

其他:

2015/03/21

LinkIt ONE:初步雜想

拿到LinkIt ONE已經幾天了,也寫了幾篇簡單範例,在此記錄一些雜想事項。

★ 兩個序列埠,開發時需要不斷切換。

開發時,將會不斷地重複步驟「修改程式-切換序列埠-上傳-切換序列埠-開啟序列埠監控視窗-...」,需要不斷地在Arduino IDE選單「Tools-Port」 裡,在兩個序列埠之中反覆切換,甚為麻煩。

(話說回來,為什麼COM1也標示著(LinkIt ONE)的字樣?)

一個是MTK USB Debug Port,用於燒錄程式時;另一個是MTK USB Modem Port,用於一般序列傳輸時。
★ 每次都重頭編譯。

這不是LinkIT ONE的問題,而是Arduino IDE的問題,明明1.0.1版與1.5.6r2版可以做到「只編譯更動過的原始程式檔」,但我試了1.5.7與1.6.1卻不行,每次都會重頭編譯,浪費時間。當然啦,也可以想辦法繞過Arduino IDE,自己在命令列模式下進行開發作業,但不是每個人都做得到。

★ API文件不夠詳細,範例不夠好不夠多。

雖然有API的說明文件,但不夠詳細,很多資訊都要到原始程式碼檔裡的註解去挖掘;範例程式通常都很短,不足以稱作範例。

★ 有三個指撥開關。

這點似乎無可奈何,板子功能多,自然需要開關讓使用者切換。

★ 腳位功能非完全相容於Arduino UNO。

雖然腳位排列與Arduino板子相同,但卻有諸多差異,畢竟做不到無痛轉移;不過擴充板若不會使用那些差異處,應可相容。嗯,個人認為能做到這樣已經相當不錯,畢竟底層硬體完全不同,LinkIt ONE已經實作移植了Arduino的API(軟體部分)。

★ 看不到草稿碼裡setup()函式的Serial.print輸出。

一般的Arduino板子,開啟序列埠監控視窗的話,會重置板子,也就會執行setup(),便可看到輸出,但LinkIt ONE並不會。拔插電源或按下重置鍵的話,序列埠會消失再出現,也必須重新開啟序列埠監控視窗,到那時候已經看不到setup()裡Serial.print的輸出。

有個不完美的解決辦法,在loop()裡加入底下的程式碼:

while(!Serial)
  delay(100);

那麼便會停在該處,直到你開啟序列埠監控視窗。


雖然拉拉雜雜抱怨了一堆,但總合而言,LinkIt ONE是塊非常不錯的開發板,更是一套很棒的物聯網與穿戴式裝置的電子原型設計平台,定價為$79美金,以其硬體規格而言,非常划算,希望它會越來越好,越來越紅。最後再小小聲發個牢騷,個人覺得LinkIt ONE這個名字取的不夠好,ONE?Xbox One、HTC One、Android One、海賊王One Piece、到處都是one;LinkIt也很普通,lt與It傻傻搞不清楚。話說回來,我也深知取名很困難,既要響亮也須獨特,很多好名字都被拿走了,嗯,只是個小小牢騷,不必在意。

參考資料:

2015/03/20

LinkIt ONE:透過MediaTek Cloud Sandbox存取LED

LinkIt ONE不僅有硬體與軟體,聯發科還提供雲端服務MediaTek Cloud Sandbox,底下簡稱MCS。

這一篇要試著練習使用,在MCS上建立一台虛擬裝置,透過網頁介面可把LED設為ON,而實體裝置(LinkIt ONE板子)讀取後便會點亮真正的LED,並且會把LED狀態上傳到MCS的虛擬裝置,從網頁介面觀看顯示LED的狀態。

主要內容與程式碼,都來自於官方文件Implementing using Linkit ONE connecting to MediaTek Cloud Sandbox,並參考分享文[LinkIt One 教學] 連接 LinkIt ONE 到 MediaTek Cloud Sandbox | CAVEDU教育團隊技術部落格;關於MCS的網站操作介面,並不會詳細介紹,還請自行參閱MCS說明文件Getting StartedKey concepts

流程如下:

1. 註冊MCS帳號,會寄一封確認郵件到你填寫的email信箱,點按其中的網址後便可啟動,然後輸入帳號密碼登入,進入MCS的Dashboard,如下圖。
2. 點按上方選單「Development」,新增Prototype。可把所謂的Prototype想像成是張藍圖,之後會以Prototype為樣板建立實際的裝置。
你可以建立多個Prototype,分別代表不同的應用,譬如收集氣溫數據、心跳讀數等等,此範例建立能存取板子內建LED的Prototype,命名為LED Commander。進入Prototype的細節頁面,上半部如下。
下半部才是重點,有Data channel,代表雲端服務與實體裝置之間想要溝通傳輸的資料;Notification可設定條件發出通知,譬如發出email,此篇不使用;User privileges設定不同使用者存取同一Prototype的權限,此篇不使用;Firmware管理韌體版本,是否進行空中更新,此篇不使用;Test device則是建立裝置,想像成存在於雲端中的虛擬裝置,與實體裝置(真正的板子)進行溝通。
3. 增加Data channel,此篇範例需要兩個,一個從實體裝置上傳LED狀態到雲端上的Test device,另一個由Test device設定LED狀態,讓實體裝置抓取並設定。目前可用的Data channel如下,其中Display是「顯示」,Controller則是「控制」,此篇分別需要一個。
建立Display的Data channel,如下,其中Data type設為On / OFF,代表LED亮滅;Data Channel Id非常重要,此範例命名為LED,之後程式碼必須使用此Id來指出想存取哪個Data channel。
再建立Controller的Data channel,如下,Data type同樣也是ON / OFF,經由網頁介面操作後,讓實體裝置抓取。Data Channel Id命名為LED_CONTROL。
Data channel建立完成後,便可看到如下的樣子。

4. 然後是建立Test device,隨便取個名字。
建立後,進入細節頁面,請記下DeviceId與DeviceKey,非常重要,代表實體裝置的身分,程式碼裡須使用,才能存取MCS雲端服務。
5. 以上便是MCS雲端介面需要做的操作動作,接下來便是程式,其中須使用程式庫HttpClient,可到此下載。底下程式碼,來自於MCS提供的範例,而我稍作修改,此處僅列出大概模樣,原始碼請到GitHub下載

共有兩支檔案,其中settings.h記錄一些設定值:

#define WIFI_AP "__SSID__" // 填入WiFi網路名稱SSID
#define WIFI_PASSWORD "__PASSWORD__" // 填入WiFi密碼
#define WIFI_AUTH LWIFI_WPA // LWIFI_OPEN, LWIFI_WPA, LWIFI_WEP

#define SITE_URL "api.mediatek.com"
#define SITE_PORT 80
#define DEVICEID "__DeviceId__" // 填入你的DeviceId
#define DEVICEKEY "__DeviceKey__" // 填入你的DeviceKey

#define LED_ID "LED" // 填入顯示LED狀態的Data channel ID
#define LED_CONTROL_ID "LED_CONTROL" // 填入控制LED的Data channel ID


另一支檔案是主程式碼,概略如下:

// 方便輸出Serial的輔助函式
void pf(const char *fmt, ...){ /* 省略 */ }

// 初始化,連接WiFi網路
void setup(){ /* 省略 */ } 

// 取得MCS雲端服務網站的IP與連接埠
void getconnectInfo(){ /* 省略 */ }

// 建立連線,此連線負責取得控制LED的Data channel
void connectTCP(){ /* 省略 */ } 

// 上傳LED狀態
void uploadStatus(){ /* 省略 */ }

// 避免TCP斷線
void heartBeat(){ /* 省略 */ }

// 不斷上傳LED狀態,接收控制LED的資料
void loop(){ /* 省略 */ }

燒錄程式並重置開機,記得開啟序列埠監控視窗,才會開始動作;然後開啟瀏覽器進入MCS的Test device細節頁面,看到畫面如下。
點按控制頁面的LED_CONTROL,便可控制實體裝置(板子)內建的LED,其狀態會上傳到LED;可一邊觀察序列埠監控視窗的輸出訊息。

呼,完成囉。

參考資料: