2015年11月3日 星期二

[Embedded] Arduino RFID 模組

前陣子到光華商場買了一個 RFID 模組,今晚比較有空,便來玩玩看,作個記錄。

測試設備
  • Arduino UNO 
  • RFID-RC522,一組$280,含兩個 RFID Card 和 RFID Reader

在 iOS 設備上使用 gSoap

本篇以 WSDiscovery 為例,說明如何在 iOS 上使用 gSOAP ,
使用的軟體版本為  gSOAP  2.8.19 與 XCODE  6.4

1. 取得軟體
gSOAP 可從 sourceforge 下載,  xcode 可從 Mac 內建的 AppStore取得。

2. 用 gSOAP 產生需要的程式碼,詳細作法可參考此篇文章


3. 可選擇使用 iOS plugin,或自行實作網路介面
iOS plugin 利用 iOS 的 NSURL 與 NSMutableURLRequest 來實作傳送與接收 HTTP 層的資料,使用範例如下: 
 #import "gsoapios.h"
struct soap *soap = soap_new();
soap_register(soap, soap_ios); // Register the iOS plugin
 ...
soap_end(soap);  // clean up allocated temporaries
soap_destroy(soap); // Free soap context 
iOS plugin 的方法簡介
  • 設定 Cache Policy
soap_ios_setchacepolicy(soap, NSURLRequestReturnCacheDataElseLoad); 
  • 設定timeout
soap_ios_settimeoutinterval(soap, 30.0); 
  • 設定帳號密碼
soap->userid = "someone";
soap->passwd = "somepass";
   
4. 以wsdiscovery 為例,實作方式摘錄如下
a.直接取得 wsdiscovery 程式碼
git clone https://github.com/alb423/wsdiscovery
b.開啟 xcode, 新增一個 project, 將 wsdiscovery 目錄內的檔案都新增至 Project (main.c除外) 
c. 新增 wsdiscovery_api.m,參考 main.c 進行小量修改 
d. 開始編譯。此時會出現幾種錯誤,主要其解決方式如下
d1. 找不到 NSString,在 gsoapios.h 加入include file 即可,如下:
#import <UIKit\UIKit.h>
d2. 找不到 DLog,在 gsoapios.h 自行定義即可,如下:
#ifdef DEBUG
#define DLog NSLog
#else
#define DLog(X, ...) ;;;
#endif         
d3. ARC (Automatic Reference Counting), 
可設定 gsoapios.m 不使用 ARC,設定方式為 Target -> Build Phases -> Compile Sources -> 選擇 gsoapios.m,輸入 -fno-objc-arc即可。如下圖

   
d4. "ARC forbids Objective-C objects in struct"
將 GSoapiOSURLData *url_data;
改為 __unsafe_unretained GSoapiOSURLData *url_data;
 
5. 本範例直接操作 socket,並不需要 HTTP,因此沒有用到 iOS plugin。接下來我將會在 iOS 上使用 gSOAP 與 ONVIF command 結合,並藉由這個範例來測試 iOS plugin。

註1: 範例程式碼可從 https://github.com/alb423/wsdiscovery 下載
註2: 針對 ARC 錯誤,也可以請 Xcode 自動將程式碼轉換成 ARC。作法是 Edit -> Convert -> Convert to Objective-C ARC...,可參考此篇文章 http://onevcat.com/2012/06/arc-hand-by-hand/

2015年9月24日 星期四

[OpenCV] Cross compilation for ARM based Linux systems (static)

本篇記錄編譯 OpenCV (static) 的過程。

2015年8月31日 星期一

[OpenCV] 鏡頭校正 Calibration

OpenCV 已經內建鏡頭校正的範例程式,並且提供了許多範例圖片,3.0版本更針對魚眼鏡頭提供了新的函數。這些功能還挺好玩的,以下作一記錄

2015年8月25日 星期二

[OpenCV] OpenCV for iOS

對於 iOS 上如何使用 OpenCV,docs.opencv.org 提供了很多參考文件。
以下對自己的測試過程,作一記錄

1. 可以直接取得 OpenCV framework,或是自行編譯 OpenCV
可至此處 http://sourceforge.net/projects/opencvlibrary/files/opencv-ios/ 直接下載。
本次測試,我選擇自行編譯,步驟如下

[OpenCV]  FAQ

此處收集自己使用 OpenCV時遇到的問題與解決方法


1. 沒有 link zlib,錯誤訊息如下
persistence.cpp:(.text.cvOpenFileStorage+0x4a8): undefined reference to `gzrewind'
persistence.cpp:(.text.cvOpenFileStorage+0x844): undefined reference to `gzopen'
persistence.cpp:(.text.cvOpenFileStorage+0xa98): undefined reference to `gzclose'
persistence.cpp:(.text.cvOpenFileStorage+0xcee): undefined reference to `gzgets' 
解法: 自行編譯compile zlib 或是找到可用的 zlib,之後加上 -lzlib 再次編譯即可

2015年8月19日 星期三

我的飛行器 -- 第一次飛行

第一次飛行,選擇住家旁邊的國小,還不太懂的怎樣控制四軸的我,玩了十多分鐘,就墜機十多次,結果最後飛機撞上操場旁的小小山丘,飛機機架就斷了.... 還好網路上各式各樣的零件都有賣,這個斷掉的機架只要台幣 55 。


我想是因為自己的操控技巧太差了,因此便找了dkck幫我接上nRF24L01高頻頭,並買了 jj-1000p 來練練手感。


練了之後,才發現飛四軸真的是需要多多練習的,第一次就直接拿著萬把元的實機練習的我,真的是太大膽了。我連500元的小小四軸都飛不好呢.... 還是先練練小台的再說。