2014年8月12日 星期二

聯發科LinkIt平台研討會


今日去參觀聯發科總部,主要是因為最近聯發科舉辦了許多競賽,其中一個是「穿戴式暨物聯網競賽」,這一個競賽使用的是聯發科心研發的 Aster 晶片,而該晶片整合了需多常用的模組,下面我將會稍微分享一下這次的研討會(其實算是發表會)的一些記錄。

2014 通訊大賽:
http://www.mobilehero.com/mediatek2014/index1.asp


LinkIt 平台研討會:
http://mobilehero.kktix.cc/events/linkit0812


廢話就不多說了,直接進入主題:

由於當天接駁車有 Delay,所以進去時已經講到一半了

一開始在介紹 LinkIt 這一個開發平台,他主要是使用 Arduino 相容的開發模式去開發,以達到開發簡易的目的。


整合 Arduino 作為開發平台


而在這一次所介紹的開發平台名稱叫做 LinkIt One,是聯發科跟 Seeed 公司所合作的一個產品,這一塊版子整合了 Wi-Fi、GSM、Bluetooth 4.0、GPRS、GPS 等通訊模組。

但事實上大多數的模組/功能都是封裝在 Aster 晶片當中,而 Aster 中使用了 ARM7 EJ-S 做為處理器架構。

如果拿它跟 Arduino UNO做一個比較,會發現他的大小比 UNO 還要在大一些些,主要是因為有多了三個外接天線的接頭(在背面)需要接,但整體來說不會大太多。

不過跟 Arduino 不同的是,LinkIt 在設計上因為有一些限制,所以每一個腳位能輸出的電流量都相當的微小(據說是 0.3mA),所以有很多電器都無法直接去驅動,必須要另外在透過其他電路去放大他所能提供的功率,其他也有一些限制,例如該平台不支援 Analog Reference等。

LinkIt 的價為 79 美金,在有這麼多可以用的無線模組之下算不差,而實際開派的時間大約是九月中旬。


LInkIt ONE

再來是軟體/韌體的部份

絕大多數的 Arduino 函式庫,例如 Serial、Analog、Digital 都可以正常使用,除此之外,由於 LinkIt 上有提供許多不同的功能,所以他們有開發專門給 LinkIt ONE 使用的函式庫,其中函式庫前面都會帶一個「L」作為前最字,例如 LGSM.h、LGPRS.h 等,且大多數的 LinkIt ONE Library 都會比照 Arduino Library 設計方式去撰寫。

在執行程式方面,不像是一般 AVR 系列的處理器,我們撰寫完程式之後,Arduino IDE 會將 Arduino sletch 先轉換成 VXF 可執行檔案,在將這個 VXF 置放到 LinkIt 中,之後 LinkIt OS 會去尋找是否有 VXF 檔案,並且去執行他。

在 LinkIt OS 運作上支援多執行緒,不像是一般的 Aduino 只有單執行緒執行,所以會遇到一些執行緒優先權問題,各優先權如下表:

優先權最低優先權最高
idle threadArduino main loopLinkIt OSDeviceGSM Modem


也因為這樣,導致 Arduino main loop 在執行時有很大的機會被打斷,導致有一些功能不會正確的運作,舉例來說 Arduino 中所使用的 delay(),就會因為本身有可能被其他的執行緒中斷,而造成誤差,其他的例子包含了 SoftwarePWM、SoftwareSerial、1-wired 等這些在實作上都會遇到困難。



再來是 LinkIt Run-Time Environment 的部份,大多數的基本 C Library 都不支援,但是可以用許多內建的函式庫作為解決方案,多執行緒方面,並不支援 POSIX 介面,但是他們有提供自己的 threading api 可以使用。

此外,有鑑於部分裝置的問題,所以在 C run-time static initialization 階段,並非所有的 API 都可以很順利的去使用,所以他們會建議還是在 Arduino 所制定的 setup() 函式中去定義會比較好。

而如果要移植 Library 的話,需要另外把一些東西都轉換成 LinkIt ONE 所提供的 API,例如需要用到多執行緒時就必須要另外去使用他們的多執行緒 API等。

不支援的功能
在撰寫的時候,還需要注意記憶體用量,依據官方說明,Code + RO + RW + heap + stack 必須小於 2MB 才行。

開發套件所提供的函式庫如下:

  1. GSM:
    1. 在 LinkIt 憑胎上面插入 SIM 卡即可使用
    2. 不過現在的問題是,如果 SIM 卡有使用 PIN 去鎖,則 LinkIt 不能使用他
    3. 目前只有簡訊搜送的功能,預計在九月份加入撥打電話的功能。
  2. GPRS:
    1. 使用 2G 網路連線並支援 TCP Socket
    2. 目前的缺點是他不支援 APN 自定 Proxy以及不支援 https 協定
    3. 還沒開發出相對應的 http 函式庫,必須要透過 Socket 去組合出 http request
  3. Bluetooth:
    1. 目前僅支援 Serial port profile
    2. 並且沒有通過 MFi,所以 iOS 裝置不能夠之接去使用
    3. 目前也沒有支援 HID/AVRCP,GATT 預計九月份會釋出,並支援 EDR/BLE dule mode
    4. 目前 SDK 並沒有支援 multi link。
  4. Wi-Fi:
    1. 支援 WEP, WPA1/2
    2. 掃描最多只能掃描 12 台 AP,如果超過的話就會看不到
    3. 不支援 username 欄位驗證
    4. SDK 提供的函式庫無法取得基地台加密方式
    5. 不支援靜態網路設定,需要 AP 支援 DHCP 才可以
    6. 使用 TCP/Socket 的方式去傳輸,且沒有開發好特定的 http 函式庫
    7. 目前 SDK 不支援 https 功能
  5. GPS:
    1. 只需要呼叫 getData 即可獲得 NMEA 結構的資料,開發者需自行解析內容
  6. Audio:
    1. 可從 Micro SD 或是 Flash 去讀取聲音檔案並播放
  7. SD/Flash:
    1. 目前僅支援 FAT32 格式,最大支援 32GB
    2. 用法跟一般檔案系統相同
  8. EEPROOM:
    1. 提供 1KB 大小的記憶體,並且能確保在斷電之後資料不會消失


在這次競賽中,官方也首次開始測試他們以後將與這一個開發套件整合的雲端平台 -- MediaTeck Cloud Sandbox,這一個雲端平台主要功能如下:

  1. Data Store
  2. Monitor & Notification
  3. Device Remote Control
  4. Protocol support
其中他的運作原理如下,透過這一個運作方式,在雲端上的資料會跟 LinkIt 上的資料相同
MTK Cloud Sandbox
其他的特色如下:
  1. 資料視覺化
  2. 全縣管理
  3. 裝置管理
  4. 遠端控制
在本次的 Workshop 中,他們展示了一個氣象站的範例:




最後他們也展示了他們所製作的 Mobile Web 拖拉是控制器,可以方便開發者直接在網頁上面製作手機版本的頁面,並直接產生出可使用的手機網頁,但由於功能甚少,且還在開發階段,在這邊就不闡述。











2014年6月19日 星期四

用 Arduino 製作四軸飛行器(四之二)PID 理論 之 P

接下來這一篇我會提一下如何去使用 PID 理論來達到控制平衡的目的

不過我們要先從 PID 是什麼東西開始講起

先不負責的把 Wiki 連結丟上來~

http://zh.wikipedia.org/wiki/PID
http://en.wikipedia.org/wiki/PID_controller

另外也可以參考這一篇:
http://www.tabbymeow.com/pid%E6%8E%A7%E5%88%B6%E7%90%86%E8%AB%96-%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%B4%B9/

看完這一篇也不用看我這一篇了 XD

2014年6月18日 星期三

用 Arduino 製作四軸飛行器(四之一)Arduino 控制程式初始化


終於要來到程式實作的部份了

首先我們需要了解我們的實際程式運作流程

我目前所設計出來的流程如下(初始化部分):


我們使用的感測器是 GY-80 模組,他是整合三個感測模組的一個模組(好繞舌XD)

我們先從加速度模組開始,加速度模組我們使用的是 ADXL345 模組,為了方便,使用別人寫好的函式庫,載點如下:


初始化程式如下:

可以看到程式中在取得加速度的方法變得相當簡單,不過由於他是透過 Wire 函式庫(用I2C 作為通訊協定)去抓取數值,所以請務必先引入 Wire.h 檔案

用 Arduino 製作四軸飛行器(三)組裝



其實我有在想要不要寫這一篇

因為組裝其實並沒有相當困難

可是後來有想到說其實我可以來撰寫一下在組裝上所遇到的事情

還有一些經驗,例如香蕉頭的焊接,電池的裝法,以及一些簡單的東西等等

不過由於我的支架已經裝好了,所以只會稍微題一下而已

但是我相信支架組裝應該是不會對各位太難啦 XD

那我們就開始吧!

組裝之前有一些前置作業需要先做

在購買馬達時,賣家不一定會幫你把香蕉頭焊接好,通常要另外在買或是他會附上

一般來說,建議買香蕉頭時順便買一下熱縮管,熱縮管住要是要保護香蕉頭不會太快損壞

香蕉頭與熱縮管如下圖(取自網路)

香蕉頭(左邊是公頭,右邊是母頭)

熱縮管

2014年3月23日 星期日

用 Arduino 製作四軸飛行器(二)飛行原理

在組裝以及製作之前,我們先來了解一下飛行原理


這篇只會提到 X 型四軸的飛行原理,其他的可能要請朋友們去網路上在翻閱了

首先,我們大家都知道,單軸直升機的飛行原理吧?

見下圖(來源:http://zh.wikipedia.org/wiki/File:Antitorque.jpg)


簡單來說,最基本的直升機就是透過單一螺旋槳給予直升機升力,那後面的小螺旋槳是幹嘛的?