文章

[模組] Microchip dsPIC30F 結合藍芽模組

圖片
        最近用 Microchip dsPIC30F4011 的開發板 (APP020 PLUS) 結合藍芽模組,如下圖所示,打算做一個馬達控制的顯示器。之前,接觸的 MCU 都是 STM32 和 NXP LPC 以 ARM 為核心的 32-bit 控制器。有機會首次使用 Microchip 的控制器,於是查詢了一下才了解 Microchip 發展很久了,過去主要以 8-bit 或 16-bit MCU 為主,目前也有 32-bit MCU。搜尋的過程中,大多數找到 8/16 bit 的資料是10年前的,這跟市場主流控制器是 32-bit 有關吧。dsPIC30F4011 系列晶片與 PIC 系列不同的地方在於一個核心有 DSP 運算指令,一個則無。目前使用的這顆 dsPIC30 相當於 ARM M0 等級的控制器,不過價格上,似乎 dsPIC30 比較貴,這就視使用者的應用而決定了。         第一次用 Microchip MCU,所以先準備一塊開發板,APP020 PLUS 是以 dsPIC30F4011 16-bit為控制器的開發板,PLUS 多了一些 I2C 和 SPI 介面的操作。另外,板子上還有一顆小控制器 PIC16F684 8-bit MCU。除了開發板之外,我們還要準備一個除錯器,也可燒錄程式之用。若預算有限,買 PICKit3 就可以了,如果開發的系統比較複雜,那最好買 Mplab ICD3,兩者的差別在於效能,PICKit3 除錯時無法設定太多斷點。因此,這個項目的硬體開發要準備的部分就是:         (1) APP020 PLUS 開發板         (2) PICKit3 或 Mplab ICD3 燒錄器         (3) 藍芽模組 HC-08 Bluetooth BLE         接下來,我們要到 Microchip 網站下載開發套件編譯器 MPLAB IDE v8.92 以上,注意一點:由於 Microchip MCU 種類分成 8/16/3...

「SipTalk 移動分機 APP」 隱私權政策

本文說明「SipTalk 移動分機 APP」的隱私權政策。請您詳細閱讀,本文不定期更新,您若繼續使用「SipTalk 移動分機 APP」,即代表您同意相關此政策。 1. 個人資料之類別 當您使用「SipTalk 移動分機 APP 」(下稱「本APP軟體」)時,會執行下列動作:讀取通訊錄、讀取手機電信狀態、使用麥克風等。 2. 資料的收集與應用 「SipTalk 移動分機 APP 」服務器端,有收集下述資料: (1) 透過APP軟體撥打網路電話時,APP會使用手機麥克風進行通話,當使用者有設定錄音要求時,服務器將會進行通話錄音。 (2) 透過APP軟體撥打網路電話時,APP會讀取手機的電信狀態,以避免影響個人手機門號的通訊。 (3) APP軟體會讀取手機通訊錄之號碼和常用號碼,讓使用者能快速撥打網路電話。 3. 本軟體不會收集的項目 凡是您手機內的個人通訊錄之資料,「SipTalk 移動分機 APP」不會做收集,以維護您的個人隱私。 4. 「SipTalk 移動分機 APP」的資料儲存與保護 「SipTalk 移動分機 APP」為方便用戶使用,提供多項個人化設定功能。包含「常用號碼 」、「通話紀錄」。這些都是儲存在手機的記憶體內,請您妥善保管手機。另建議您在新增智慧撥號規則時,不要新增有關個人隱私的資料,譬如:身分證字號、信用卡號、生日等等,以減少手機遺失或遭駭客攻擊時的威脅。 5. 同意個人資料之蒐集、處理、利用或國際傳輸: 您了解並同意本團隊依本「隱私權政策」及相關法規,蒐集、處理或利用您所提供的個人資料。 6. 除下列情形外,本團隊不會任意將您的個人資料出售、轉讓或揭露予任何第三人: (1) 本團隊/本APP軟體將因法律規定、法院命令、行政調查或其他法律程序的要求而提供您的資料,惟在此情形下,該資料只會單純提供予調查單位,並受中華民國相關應適用法律的保護。 (2) 為了調查和防止非法活動、涉嫌詐欺、對人身安全有潛在威脅的狀況、對本團隊/本APP軟體服務條款的違反,或為了對上述情形採取應對措施。 (3) 本APP軟體或本團隊被其他公司收購或合併,我們有權利將您的個人資料移轉給該公司。如果發生這種情況,本APP軟體會在您的個人資料被移轉且將適用不同的隱私權政策前通知您。 7. 個人資料之安全 本團隊將...

第一個 APP 上架 Google Play

圖片
        花了不少時間開發一個APP,不斷地在手機上 debug 、 安裝 APK 、 移除 APK 、調整頁面 ...等工作,最終的目標就是能上架 Google Play,這樣才算是完成一套 APP 的開發。上架的流程可以參考 Google support [1],當然網路上也有不少前輩留下巨細靡遺的步驟 [2],只要按圖索驥也能成功完成上架。圖二所示就是我依照前人方法最後上架的截圖。我這裡就不重複說明上架的詳細步驟,只紀錄上架時所遇到的一些問題,相信也有其他開發者遭遇下列的情況。 1. 上傳的 APK 未經壓縮校準         第一次上傳 APK 到 Google Play,上傳完畢後,Google 跳出一個視窗,告訴我說 "上傳的APK 未經壓縮校準" ,心想在開發過程中我不是都能透過 Eclipse 成功安裝到手機上嗎?怎會出現這個錯誤。原來,上傳的 APK 必須先產生 keystore,再經過 jarsigner 和 zipalign 兩道程序,所產生的 APK 才能傳給 Google。至於詳細的做法請參考 [3]。當第一次上傳成功後,我們應該能看到圖一的版本資料了。 2. 裝置與版本不相容         上傳成功後,很開心地便想從 Google Play 下載這個 APP 來安裝試試看,結果 APP 視窗上面出現一行字 "裝置與版本不相容"。奇怪了,在開發時期無論是從 Eclipse 安裝或是 copy APK 到手機安裝也沒出現什麼問題,為何從 Google Play 下載安裝卻遇到不相容的問題。於是,詢問了 Google support 後,才知道 manifest.xml 裡面宣告了硬體要求,因為 Google Play 會檢查手機裝置是否有滿足這個 APK 的硬體要求,如果沒有,便不允許安裝了。另外,也可以從圖一的 "支援裝置數" 得到相容性的答案,Google Play 會列出這個 APP 能支援的裝置與不支援的,如果遇到能支援的數量很少,那我們就必須好好檢視自己的 AndroidManifest.xml 裡的內容。盡量移除不必要的權限,選用適當的 MinSDK 版本號,移除不必要的硬體要求...

[筆記] Android 頁面 layout 的基本設計

圖片
        前陣子在開發安卓系統的 SIP 撥號功能 (參考 " SIP Voip 在 Android 系統上的開發 " 一文),底層 NDK 設計與編譯大致完成,接下來要設計使用者頁面。首先,必須在腦海中約略規劃一個使用者頁面的雛形,再根據這個雛形設計一個符合 Android 系統的 layout。我們可以思考整個頁面該如何的布局,是垂直型排列或者水平的排列?還是類似表格式的布局?         就布局而言,安卓系統的 Layout 分成三大類型,分別是 LinearLayout 、 RelativeLayout 和 TableLayout 。LinearLayout 顧名思義就是內部 Widget 元件必須是直線布局,直線的排列可分為垂直或水平 (這裡可沒有斜線喔!)。RelativeLayout 是指內部的元件屬於不規則型的布局方式,每個元件彼此間靠著相對位置來排列。TableLayout 是指元件排列方式屬於表格類型,由幾行幾列所組成。         使用者頁面可以由上述三種類型混合搭配設計而成,每個大 layout 裡面又可以由小的 layout 組成,類似一種巢狀的架構。用例子說明更容易明白,圖一的左邊所示是一個撥號頁面的使用者介面,圖一的右邊所示則為頁面的布局概念圖。這個 APP 頁面布局是由一個具有垂直排列的大型 LinearLayout 構成,裡面再包含四個小型 layout。由於是垂直排列,所以裡面這四個子 layout 從上到下依序排列。第一個子布局是具有水平排列的 LinearLayout,因此裡面的 Widget 元件由左到右排列。接著底下的子布局有四個方向鍵和兩個按鈕,因為不具有垂直或水平排列的特質,只能用 RelativeLayout 來規劃這六個按鈕的相關位置。撥號盤的排列像是表格 4 x 4 的布局,所以這裡用 TableLayout 很適合。最底下四個按鈕呈現水平排列則使用 LinearLayout 布局。 圖一:撥號頁面的 layout         安卓系統的使用者頁面以 xml 檔案語法來描述,在 IDE 打開 xml ...

[應用] 設計七彩 LED 燈與 MP3 音樂系統

圖片
        近期設計一套七彩 LED 燈與 MP3 音樂播放系統,兼具照明與音樂功能。基本功能是照明,類似壁燈的概念,當光感應偵測到白天或有其他光源時,自動關閉 LED 照明。一旦處於黑暗或低光源的環境,LED 燈便會開啟。此外,遇上停電時,鋰電池會提供一段時間的照明指示。除了照明功能之外,透過模式按鈕的切換,將系統切到 MP3 音樂播放模式,同時開啟 彩色 RGB LED 燈條的控制。         圖一是系統的方塊圖,主要包含一顆控制器晶片和 MP3 晶片,與鋰電池的充電電路,再加上一些 GPIO 的控制電路。在設計中,LED 燈要做到七彩顏色變化與明暗的差別,必須選具有 PWM 功能 的微控制器。這裡,我們採用 NXP LPC1111 控制器,當然啦!用其它控制器也行,只要晶片取得容易且開發環境熟悉,一般人都能實現出上述的系統。另外一點,設計時 LPC1111沒有用外部震盪器,而是使用控制器內部的振盪器,這樣省掉一顆震盪器零件。 圖一:LED燈與音樂系統方塊圖 影片:照明與音樂系統操作過程

[應用] ESP8266 WiFi to RS485 (MODBUS TCP to RS232)

圖片
元件介紹         ESP8266 是由大陸 樂鑫科技公司 所開發的 WiFi 模組,上面有數根 GPIO 接腳和 ADC,另外 Tx/Rx 接腳用來與其他模組通訊之用。由於這塊模組價格便宜,目前吸引很多創客 Maker 使用,更重要的是在 Arduino IDE 環境下就可以開發這 WiFi 模組的程式,下載 IDE 後可找到不少 WiFi 相關的範例程式可以研究,對於初學者來說實在是非常非常的方便。同時在網路上,不少創客 Maker 已經寫下開發的經驗文章[1][2][3],並且也有 YouTube 教學影片可參考 [4]。 設計說明         筆者在規劃 MODBUS 通訊與 RS485 的過程遇到配線牽線的問題,於是上網搜尋有關無線轉 RS485 的設備,搜尋結果出現的是藍芽轉 RS232。BT to RS232 經過 MODBUS 通訊測試後,通訊的反應不是很即時,感覺有點頓頓的,放棄使用藍芽的介面。再次搜尋 WiFi 轉 RS485 的設備,似乎找不到能同時支援 MODBUS 通訊,最後決定使用 ESP8266 模組加上 TTL 轉 RS485模組,如圖一所示,索性自行開發一個 MODBUS TCP (WiFi) to MODBUS 232 (RS485) 的系統。以實體層(physical layer)而言,我用模組兜出一個 WiFi 轉 RS-485 的硬體,在鏈結層(data link layer)方面,設計一個 MODBUS TCP 轉成 MODBUS 232 的系統,讓原本沒有網路接口的控制板多出了一個無線網路的操控介面。         簡單說明系統的運作,將 ESP8266 WiFi 模組設計成一個無線 AP,當筆電連接到這模組後,筆電便從這個無線 AP 取得一組 IP address。這時候,我們可以在筆電上寫個 TCP / UDP socket 程式,與模組建立一個 socket 連線 (筆者是使用 TCP port 502 for MODBUS)。我們在 Arduino IDE 環境開發 ESP8266 模組的程式,將無線網路收到的 MODBUS TCP 封包加工調整後轉換成 M...

[筆記] SIP VoIP in Android background 避免被系統殺掉

圖片
        在前面一文 「 SIP Voip 在 Android 系統的開發 」 中,我設計了一個 SIP VoIP APP,但是遇到一個大問題 ---- 就是 APP 會被系統殺掉。為了解決這個問題,在網路上尋找各種方法,首先我們要先把 APP 拆成 Activity 和 Service 兩個部份,如下圖一所示。Service 負責透過 JNI 介面與底層的 SIP 、 Media Codec...等通訊,而 Activity 則負責使用者顯示的介面,一旦 Activity 關閉後,至少還有 Service 可以在後台繼續運行。 圖一:SIP VoIP 系統架構圖 Activity 與 Service 間的通訊         兩者之間的通訊分成 Activity 到 Service 的方向,以及 Service 到 Activity 的方向。先說 A 到 S 的方向,第一步就是 Activity bind Service,如下面的代碼。接著,建立一個與 Service 的連線,取得 mService 之後,便可以在 Activity 呼叫 Service 的函式了。可以參考網路上其他人的文章與範例說明。         Intent intent = new Intent ("com.altigen.siptalk.SipService"); bindService (intent, sc, Context.BIND_AUTO_CREATE); private ServiceConnection sc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBound = true; LocalBinder binder = (LocalBinder) servi...