未分類

Linkit One 開發心得

前言

感謝MTK聯發科提供機會讓我有幸能參予Linkit One的測試

這是我在這一段時間的體驗,其中包含了很多我自己的看法,若有不足之處還請多包涵~

因為已經有相當多的開箱文及介紹 所以我大多只紀錄一些比較印象深刻的地方囉!

希望能藉由這篇心得快速的來帶大家認識Linkit One及上手開發~

如果有任何問題或指教歡迎來信: [email protected]

本篇心得

  • 優點

  • 定位

  • 問題

  • LinkitOne & Socket

  • 總結

11402357_673406076122602_6614117976044936312_o.jpg

> Linkit One

過去有玩過Arduino Uno所以當發現Linkit One時,有種很親切的感覺

可以說是衝著廣大Arduino族群來的,能否獲得青睞還有待觀查

絕大多數能在Arduino執行的範例都能相容到Linkit One執行

少數專案只需要小量修改(部分library)便可以無痛轉移~ 甚至連IDE都可以相容~

Code可能只微調25%左右 然而底層的實作可能大不相同 (這句話最近有點耳熟…? 錯覺吧?)

不過Linkit One核心因為涉及商業機密所以沒辦法完全 Open Source 這點要知道一下~

優點

上述提到大多數的code與IDE相容之外

Linkit One有的還提供一些進階lib讓你可以做更細膩的操作

以呼吸燈會用到的analogWrite為例:

analogWrite        只提供 0~255的調整

**analogWriteAdvance** 可以   0~1023

目前正式支援了Windows & OSX已有人實際hack出Linux的開發環境(非官方)

不過相信不需要太長的時間三大平台就都能夠加入Linkit One的開發

螢幕快照 2015-08-05 上午1.53.48.png

> Linkit One 支援OSX開發環境

使用Linkit One的好處之一就是,大部分在開發的情況下我可能會使用到的模組

已經在開發版上,所以開發版一到手上,接上感測元件就可以進行資料傳輸~ 這相當方便

有點像是All in One的感覺,列出一些玩過後比較有印象的部分~

- GSM: 發簡訊、行動上網、打電話

- Wifi上網

- 藍芽傳輸

- GPS

- SD卡

上述提到的部分都是已經附帶在Linkit One之中(附贈模組要接上)

IMG_20150805_022225.jpg

> 背面: 可供SIM卡、SD卡插入

另外也是MTK一直想強調的點XD 就是記憶體比較大,連SSL加密傳輸都可以支援!

定位

開發者們往往容易忽略了硬體實際產品化的問題及難度,所以MTK推廣Linkit One最主要的目的

並不是要打造MTKLab的自我品牌,而是希望能夠透過聯發科的資源協助開發者們尋找廠商,

能夠做到小量的產品化並進行創業,讓實際問題的解決方案變的可行

這也是為什麼在Linkit One上,像是把電流壓低至手環能接受的程度等等的做法

可是對開發者來說呢?

Linkit One的一些設計可能不見得是部分開發人員想要的

就像有人會覺得電流太小 需要外接電源,而非是以手環為準,可能是其它物聯網裝置

通訊功能是MTK的強力主打,雖然人手一機,但現階段需要有多的SIM卡來插在物聯網裝置上,可能不是使用者樂見

不過能藉機把玩一下通訊功能也是一個不錯的經驗啦XD

說到這個倒讓我想到大二曾經在Server端或APP上用Python玩過發送電話及簡訊

Python-Kivy-Nexmo

下面有兩家比較有名的服務商:

Nexmo: https://www.nexmo.com/pricing/

Twilio: https://www.twilio.com

申請後可以拿到約200封免費的簡訊扣打,不過一封頂多換算約台幣0.3~0.5 所以也不太痛~

這頂多算是我預想得到要用上通訊的硬幹玩法XD 應該不太可能真的這樣搞…

Linkit One可能被擺在天邊某一角又沒網路不過電信服務剛好有訊號 需要透過Server跟它溝通去觸發某件事

或許最終手段就是發簡訊來讓它收到XD 當然是少量間隔長適用…不然簡訊送太多心會痛

期待也許有人有其它惡趣味的玩法也說不定 哈

Linkit One的CP值很高,主打Arduino相容,但對於廣大的Arduino族群或不少Maker來說

目前Linkit One許多的功能要在Arduino上做到也不算太難,再加上價格相對高些,

反而使得Linkit One處在一個相當尷尬的狀況下,這就得看未來MTK是否能讓Linkit One的定位有所區別

當然相容於Arduino也會伴隨著開發環境問題跟包袱存在,好不好就看人了

或許將Linkit One最小化到極致是個不錯的選擇,我妄想著開發可能超級麻煩,開發時什麼都要外接,

麻煩歸麻煩,開發者只要不是bug就不是問題,可能3D列印外殼然後直接將Linkit One包裏至其中

就直接當作成品來向大家穿戴展示,一般DEMO其實也都這麼做,也許可能與最終產品有所出入、看起來稍為大點,

但是至少在穿戴展示不會那麼大一塊,”看起來”似乎那麼可行,或許DEMO就更有說服力

不過這都只是癡人說夢XD 可能都有考量過跟其它難度在,總之MTK加油吧!

問題

1

一般接觸新的技術與事物我習慣直接去看Document與Tutorial

然而Linkit One的Developer Guide仍然停在相當舊的版本,這也使得我最初碰上相當多的問題…快更新啦T_T

我目前的環境是 OSX Yosemite 10.10 Arduino IDE 1.6.4 LinkIt SDK 1.1.09 Beta

下述狀況皆以OSX環境為例

那最初參照Developer Guide在OSX上裝Linkit SDK及驅動 都有狀況發生,後來才在MTK討論區找到可行解法

建議新加入的朋友對Linkit One有任何問題或者第一次使用,不如就直接到這裡去找最新的解決辦法

任何的最新進度或者還是測試階段的SDK都會在置頂文章

https://labs.mediatek.com/forums/posts/list/559.page

不過一段時間後其它OSX使用者在安裝上發生了 因為產生302跳轉導致讀不到而驅動裝不起來Orz

我相信之後會陸續修正這些狀況,希望MTK能夠盡處理及穏定開發環境

2

螢幕快照 2015-08-05 上午4.19.38.png

> code:9600, console:19200

鮑率不管是設多少 第一次打開資源監控預設狀況下都看得到…就算不一樣也ok(好貼心XD)

除非監控去做切換才回復正常,不過如果記得沒錯,切換到當初的debug port就沒有這個問題

3

螢幕快照 2015-08-05 上午4.20.50.png

> 最早有分 Debug & USB Modem Port 現在只要選(Linkit One) 即可

不過既然不需要了 可以的話拿掉比較好…XD 應該也不會有點錯或混淆的問題(?

Linkit One & Socket

不曉得Linkit One或Arduino資料傳輸上大家會選用何種方式、協議來實作

最基本的當然就是https、httpsS,也許你也有其它方式(Like:mqtt),不過我在這邊選擇用socket的方式來處理~

畢竟socket對我來說比較熟悉,而Websocket協定也已經趨近成熟~ 動手玩看看吧

這邊Casear Chu已經fork了原Arduino-Websocket的專案,並已經修改成LinkitOne-Websocket

可以讓我們直接使用! 以OSX為例,只要到 ~/Documents/Arduino/libraries

用git將專案複製下來就搞定

1
2
git clone [email protected]:Casear/LinkitOne-Websocket.git

如果是Windows的用戶 直進點選右邊的Download ZIP 解壓縮到你的library資料夾就ok

https://github.com/Casear/LinkitOne-Websocket

不過範例code還尚未修改,其實只要將WiFly的library換成Linkit One的就可以了

以下面簡單的範例來玩玩~ 這邊要注意的是Linkit One Wifi只支援2.4Ghz並不支援5Ghz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <LWiFi.h>
#include <LWiFiClient.h>
#include <WebSocketClient.h>
#define Server_IP "Host_OR_IP" //Host or IP
#define WIFI_AP "AP_Name" //所要連的名稱
#define WIFI_PWD "AP_Password" // 密碼
LWiFiClient client;
WebSocketClient webSocketClient;
void setup() {
Serial.begin(9600);
LWiFi.begin();
Serial.println();
Serial.print("Connecting to AP...");
if(LWiFi.connectWPA(WIFI_AP, WIFI_PWD) < 0)
{
Serial.println("FAIL!");
return;
}
Serial.println("ok");
Serial.print("Connecting to websocket server...");
if(!client.connect(Server_IP, 8124))
{
Serial.println("FAIL!");
return;
}
webSocketClient.path = "/";
webSocketClient.host = Server_IP;
if (webSocketClient.handshake(client)) {
Serial.println("Handshake successful");
} else {
Serial.println("Handshake failed.");
while(1){
}
}
}
void loop() {
if (client.connected()) {
webSocketClient.sendData(String(random(1000)));
} else {
Serial.println("Client disconnected.");
while (1) {
// Hang on disconnect.
}
}
}

你可以將隨機數替換成感測模組將所得的數據送出

不過如果剛好你的Linkit One與電腦是在同一個區網下,透過ipconfig,ifconfig查詢內網ip

就可以透過socket將資料送到你的電腦上~ 等到要正式發佈再丟到遠端Server就好

既然Linkit One的部分搞定了 再來你就可以使用自己喜愛的語言、framework來撰寫

Websocket Server的code對送來的資料做處理囉~~ 這邊我以Node.js為例

ws: https://github.com/websockets/ws

WebSocket-Node: https://github.com/theturtle32/WebSocket-Node

上述兩種module或framework已經自帶websocket 就隨你處理囉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({ port: 8124 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
});

結果大概會長的像這樣~

螢幕快照 2015-08-05 下午9.37.07.png

而接收到的資料看是要存到mongodb,或像是rethinkdb這類的real time db也都是不錯的選擇

回到了平常開發網站或是寫原生APP的環境之後,再來就可以來大顯身手料理這些資料了 (所以我說那個醬油呢 逃~

看是要透過圖表的方式,用Web或著APP來呈現還是資料處理分析,就看愛怎麼做就怎麼玩囉~

總結

物聯網、穿戴裝置其實給我的感覺一直相當的微妙

在人人都有智慧型手機的情況下,現階段我們真的需要有穿戴裝置嗎?

至於物聯網,家裡家電舉凡像冰箱、電燈、冷氣連上網又要做什麼呢? 還是這些東西會淪為駭客的跳台設備呢?

可以期待Maker們要如何去創造需求,並能在這過程中做見證的我們還真是幸福

MTK或許想再未來嘗試更多可能性,並希望從中掌握市場動向才誕生了Linkit One

早期MTK給人有種封閉的感覺,透過Lab的成立希望能跟社群與眾多Maker交流

雖然說目前還有許多需要加強的地方,不過既然踏出了第一步,除了給予肯定還希望他們能持續走下去

過去一年之中不僅只是在Maker的社群,連同開發者者忘年會或SITCON等等的學生社群 都有看見Linkit One的影子

就學習及懶人的角度而言,我認為Linkit One算是相當不錯的平台了

而MTK也希望能透過這個平台來幫助人們一圓創業夢,這或許就是去讓人使用它且後續問題處理的最大誘因

所以除了繼續推坑之外,做好穩定的開發環境讓人們能更容易接受,相信會有越來越多人願意使用 :)

分享到