本世紀初 Canon 公司的一款相機產品 D30 以「第一款不到 10 萬台幣的數位單眼(DSLR)」強勢切入攝影主流市場後,單眼相機全面數位化是不可逆的趨勢,然而即便如此,並不代表數位單眼也變成數位垃圾的成分之一,因為價格相對昂貴、升級步調相對緩慢、產品相對耐候堪用、類單眼產品與手機攝影功能進步的夾擊之下,數年一次的新品上市,DSLR 用戶們不一定會跟著把器材升級。
以我個人來說,在「器材大閱兵」這篇文章紀錄 2002 ~ 2008 及 2015 年,約七年時間內陸續購入總價約六十多萬的攝影器材,DSLR 也陸續入手 Canon EOS D60 / 5D / 5D Mark II(以下稱 5D2)三台,如今絕大多數的出圖來源換成了手上的 iPhone 4s/5s 手機,畢竟手機的聯網分享與 App 修圖功能,比數位單眼方便太多了,只有在手機辦不到的狀況下,例如人像大光圈散景(拍咩)、鳥類(打鳥)、晨昏(搖黑卡)、商攝、月蝕 /星空...等場合,才會把把攝影器材搬出防潮箱。
但說實在的,手機攝影的軟硬體功能再強大方便,也無法取代 DSLR 在專業攝影的領域,但是從數位單眼拍攝到出圖與他人分享的過程,仍然是一件相對漫長的過程,稱不上方便。所幸近幾年的數位單眼產品逐漸加入聯網功能,彌補了一部分不足,但是對於跟我一樣是 Canon 牙膏的用戶來說,Wifi 聯網功能只出現在近年的中低階 DSLR 產品,中階以上得加買貴森森的無線外掛模組,新增的功能似乎永遠搔不到癢處。牙膏亂擠的結果,身邊已有不少朋友用戶紛紛「出家為尼」。(Canon 佳能 -> Nikon 尼康 / Sony 索尼)。
於是心想,有沒有辦法找到一個便宜又有效率的方法,結合手機的便利與 DSLR 的影像品質,將手邊的老機機(5D2)加入方便好用的聯網功能呢?答案,算是有的,投入費用還可以低至台幣千元有找!
這篇文章很長,有耐心的話請繼續看下去...
首先談到,讓 Canon 5D Mark II 具備聯網功能的最簡單、直接的解決方法是購入一張內建 Wifi 的 SD 卡。在 PCHome 上這類產品也不少,依照容量廠牌的差異,價位分佈在千元至 3 千元不等。這產品有個好處,就是不限相機,只要是使用 SD 卡做為儲存媒體的產品幾乎都可用,相容性高,但相容性高也是缺點之一,這類產品只能實現傳檔讀檔的動作,沒有無線控制設備的功能,而且對於 5D2 這台只能吃 CF 卡的老機機來說,仍須一張 SD 轉 CF 的轉卡才使用。
偏偏最大也最致命的問題,就是敗在這種轉卡上:
- 轉卡品質良莠不齊:Wifi SD 卡對轉卡有不確定的相容性,轉卡對 5D2 也有不確定的相容性。輕則買來不能用就算了,重則在使用的過程中,把卡片裡的檔案搞壞。
- 透過轉卡後寫入速度大幅滑落:1080P 錄影很容易只錄個十幾秒就中斷卡死,也就是說 5D2 用了這種產品後,就很難錄影了。
我之前買過 PQI Air Card 這款,綜合起來只能算勉強堪用。這產品在過電開機後的初始化過程中會自動產生三張圖檔,相機可選擇刪除哪一張圖檔而啟用對應的無線功能。三台相機(D60/5D/5D2)測試後只有 5D2 可以用,因為只有 5D2 能辨識內建的三張圖檔,其他兩台不行。這產品還有其他問題,如 App 不太好用、使用 App 時相機不能做寫入檔案的動作,否則很容易搞壞圖檔等糟糕的問題。如今 PQI 也停賣且不再出後續產品,Wifi SD 也不是這篇文章要講的重點(上面都是前言瞎扯),所以這裡也不再多談。
另一種方法是,使用無線聯網套件 ,讓 5D2 得以透過無線網路控制。
官方早期發表過 5D2 的無線控制模組 WFT-E4( I / II ),日幣定價約 100,000 羊,最後到市場的新品實賣價格約一萬五台幣上下。採電池手把設計卻只能裝一顆電池(文件)的設計就令人不解,等於是電池把手廢一顆電池功能來滿足聯網 + 拍攝動作,續航力可能不如預期。
後來 Canon 官方又出現一款更奇葩的產品「W-E1」,價格便宜許多,港幣 340 元(合台幣約一千多),不過不支援 5D2。它的外觀就一般 SD 卡,插入相機 SD 插槽後就能讓沒有聯網功能的幾款 DSLR 相機(7D2/5DS/5DSR)支援無線網路,奇葩的是這玩意兒並不像上面的 Wifi SD 的存檔功能,並不能把照片存在這張 SD 卡內,也就是說廢掉 SD 槽儲存功能(剩 CF 槽)來滿足聯網,實在搞不懂「東邊給一塊,西邊就割一刀」的設計邏輯在哪,更好笑的是,據說香港的 7D2 在出貨的時候就直接附贈這玩意,等於 7D2 的「聯網和雙卡」在出貨時就是魚與熊掌的關係,這就是牙膏亂擠的情況,令人無力吐槽。
而實現聯網的第三方套件也是有的,產品設計成可以安裝固定在熱靴上,價格也親民多了,大約 160 鎂。
這玩意也有半開放的解決方案。有一款可操控 Canon、Nikon、Sony 三大廠 DSLR 的第三方應用程式叫「qDslrDashBoard」,支援 USB 與網路兩種操控相機的方式。這款應用程式的控制界面雖然有些複雜,但功能相當強悍,並支援 Windows / macOS / Linux / Raspberry Pi 2&3 / iOS / Android 多種平台,只有 iOS / Google Play 需付費,其他平台都免費,作者可說是相當佛心!以內建 Wifi 功能的 DSLR (如 6D/6D2 )來說,應用程式端與相機有網路連線就能運作。不具備聯網功能的 5D2 也只要用 USB 線把電腦跟 5D2 連起來也能用程式操控相機,功能包含上面提到的傳檔。
對於不具備無線聯網功能的 DSLR,該程式作者也發表一支名為 ddserver 的應用服務程式,以及兩款網通產品(無線分享器)內含 ddserver 服務的韌體:TL-MR3040 與 TL-MR3020。只要將對應的韌體刷進網通設備內(EX:無線分享器),並將 5D2 以 USB 連接,qDslrDashBoard 應用程式就能夠以有線或無線 Wifi 的連接方式操控 5D2 。更佛心的是,ddserver 程式和網通設備韌體也都是免費,而且 ddserver 還有開放原始碼。
MR3040 與 MR3020 體積小且攜帶相當方便,唯一不同的地方是 MR3040 有內建鋰電池,MR3020 要在外面使用就得加帶一顆行動電源。我在 2016 年初就以 299 元的史上超低價格買入一顆 MR3040(定價約一千出頭,市場實賣約 500~800 元),再以近 300 元的價格購買 iOS 版的 qDslrDashBoard 程式,加上一條 mini-USB 的連接線,總花費才不到 700 元台幣,就實現了 5D2 聯網控制的目的,對比動輒數千上萬的解決方案來說,真的是相當超值。
在 299 入手之後 MR3040 就從此停賣,成為絕響。當時沒買到 MR3040 的同學,如今想讓 DSLR 老機機支援聯網功能的話,似乎只剩 MR3020,出門就得幫 MR3020 拉一條電池尿袋,比較不方便。
於是我心裡又浮現了另一個疑問:萬一我的 MR3040 壞了,不見了,怎麼辦?有沒有其他無線分享器也能運作 ddserver 服務呢?
答案:也許是有的!或許找不到像 MR3040 那樣便宜好用內建電池又能支援 ddserver 服務的無線分享器,但我們可以找到其他能運作 ddserver 的機器。前面寫了一大堆都是瞎扯話,這篇目的就是要教大家,怎樣製作提供 ddserver 服務,讓老機機也有聯網功能的方法!
終於要進入真正的重點了。別轉台...
前面提到 ddserver + qDslrDashBoard 程式中,ddserver 服務免費,只有 iOS / Android 版收費,可體會作者認知的真正價值是手機/平板的連線控制體驗,並開放由他人實現 ddserver 服務的商品設計。以 MR-3040 為例,當我把 qDslrDashBoard 官網上提供的韌體刷入 MR-3040 分享器之後,分享器就變成了一台運作 OpenWrt 韌體系統的網通設備,ddserver 是 OpenWrt 環境下的一支服務程序。OpenWrt 是一款支援超多種網通設備,開放原始碼並且免費的韌體專案,詳情可參考 OpenWrt Wiki。
再講得白話一點,如果有一台硬體設備能運作 OpenWrt ,有 USB 埠,也有網路埠(有線/無線),我們就有機會讓它變成 5D2 的聯網設備。
既然 OpenWrt 與 ddserver 都是開放原始碼,我們可以依照不同使用需求,找出適合使用的硬體規格,編譯對應的韌體,讓它在對應的設備上運作。
0、前置準備工作
一台電腦。用來編譯 OpenWrt 的電腦。由於編譯的時間會相當漫長,過程中還會持續自動下載不同硬體的編譯工具,所以這台電腦有些重點要注意:
- Ubuntu 作業環境:編譯 OpenWrt 只能在 Ubuntu / Debian 的環境下,建議用 Ubuntu 16+,因為 Debian 編譯時會有缺套件的問題得另行排除。
- CPU 與連接 Internet 網路的速度越快越好。
- 剩餘硬碟空間至少 10G 以上,越大越好:來回編譯了幾種硬體的韌體之後,工作目錄就高達 15G+,所以 10G 可能只能編一兩種,萬一編錯硬體,容量又滿了,得砍掉重來。
一、下載與設定 OpenWrt 編譯環境
操作不難,開個終端機視窗,依序執行指令就行了。
(1) 下載相關套件(參考來源)
$ sudo apt-get update
$ sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk zlib1g-dev
$ sudo apt-get install subversion mercurial
(2) 下載 OpenWrt 原始碼
$ git clone https://github.com/openwrt/openwrt.git
更新 feeds 內容
$ cd ~/openwrt
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
(3) 檢查套件完整性
$ make defconfig
如果到了這一步沒有顯示任何錯誤,就表示編譯的環境沒有問題設定完成,離成功很近了。
(4) 試編譯一次
這個步驟會消耗大量時間,如果想一氣呵成,這個步驟可先跳過,直接到步驟二「下載 ddserver」這一段。
$ make menuconfig
會出現一個選單。先按 Esc 離開,詢問存檔時選 Yes。
然後執行編譯
$ make V=99
接著就是漫長的等待,所需的時間由電腦 CPU 和網路速度決定。以黑蘋果為例,CPU: 四核心 i7-3770 / 網路 100M/40M 大約將近兩個小時。
若確認可順利編譯沒問題的話,可以加入 -j8 參數( 8 為 CPU 核心數)啟用多核編譯,加快編譯速度:
$ make -j8 V=99
以 i7-3770 來說,編譯時間最佳可縮短至半小時。
補充說明:多核編譯一旦發生問題導致編譯中斷,最後的訊息不一定會停在錯誤的位置,不易除錯。因此多核編譯發生錯誤時,需拿掉多核編譯參數再編譯看看,才能知道真正的錯誤在哪。
二、下載 ddserver 原始碼與修改編譯參數
(1) 下載 ddserver 原始碼
$ cd ~/openwrt
$ git clone https://github.com/hubaiz/DslrDashboardServer package/DslrDashboardServer
(2) 修改 Makefile 檔案內容:由於 ddserver 0.2-14 的編譯參數是對應 OpenWrt 15.x 版,在最新的 OpenWrt 17.x 會出現錯誤,所以要修改 ddserver 的 Makefile:
$ cd ~/openwrt/package/DslrDashboardServer
$ nano Makefile
18 行:
DEPENDS:=+libusb-1.0 +uclibcxx
改成
DEPENDS:=+libusb-1.0 +uclibcxx +libstdcpp
35 行:
LIBS="-nodefaultlibs -lgcc -lc -lusb-1.0 -lpthread -luClibc++"
改成
LIBS="-lgcc -lc -lusb-1.0 -lpthread -luClibc++"
按 Ctrl +x 詢問存檔選 Yes 再離開。
三、編譯設定
執行 make menuconfig
$ cd ~/openwrt
$ make menuconfig
出現設定選單。
由於目的只是讓老機機支援聯網功能,所以相關的設定不多,只把有相關的設定列出說明:
Target System:目標系統
Subtarget:子目標系統
Target Profile:目標預設集
Target Images:目標韌體格式
四個要怎選,後面再舉例說明。
接下來選擇必須編譯的項目,移到項目上按空白鍵讓它打 * 號。(打 M 表示只編譯套件,不加入韌體)
LuCI ---> 1. Collections ---> <*> luci
LuCI ---> 2. Modules ---> Translations ---> <*> English (en) 和 <*> Taiwanese (zh-tw)
Multimedia ---> <*> ddserver
離開詢問儲存選 Yes。
四、其他架構的設備
回到前四個怎選的問題。由於這四個項目會互相聯動,所以選擇的方式是從上面第一個開始設定,再依序挑選。
OpenWrt 支援的網通硬體很多,手邊有的設備除了 TL-MR3040 之外,連樹莓派、小米 Wifi mini 也有支援。前四項設定如下:
TL-MR3040 ver. 1 :
目前 Github 的 master 分支裡 TL-MR3040 的 Subtarget 設定似乎有錯,須把分支改成 lede-17.01:
$ cd ~/openwrt
$ git checkout lede-17.01
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
前四項設定:
Target System ---> Atheros AR7xxx/AR9xxx
Subtarget ---> Generic
Target Profile ---> TP-LINK TL-MR3040 v1
Target Images ---> 不更動
其他機型如下(不需切換分支):
樹莓派 3A+/3B/3B+/CM3/Zero2/Zero2W:
Target System ---> Broadcom BCM27xx
Subtarget ---> BCM2710 boards (64 bit)
Target Profile ---> Raspberry Pi 3A+/3B/3B+/CM3/Zero2/Zero2W (64bit)
Target Images ---> 不更動
樹莓派 4B/400/CM4 (64bit):
Target System ---> Broadcom BCM27xx
Subtarget ---> BCM2711 boards (64 bit)
Target Profile ---> Raspberry Pi 4B/400/CM4 (64bit)
Target Images ---> 不更動
樹莓派 5:
Target System ---> Broadcom BCM27xx
Subtarget ---> BCM2712 boards (64 bit)
Target Profile ---> Raspberry Pi 5
Target Images ---> 不更動
小米 Wifi mini:
Target System ---> MediaTek Ralink MIPS
Subtarget ---> MT7620 based boards
Target Profile ---> (Xiaomi MiWiFi Mini
Target Images ---> 不更動
補充:如果要清除所有的預設值(例如從 A 架構改 B 架構),可執行:
$ git clean -dfx
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
五、編譯
執行指令
$ cd ~/openwrt
$ make -j8 V=99
然後是一連串漫長的編譯過程。如果先前的步驟 一、(4) 試編有執行的話,編譯的時間會縮短些。完成時在 ~/openwrt/bin 底下會出現一堆目錄和檔案。
以樹莓派來說,真正拿來刷寫的韌體只有一個:
~/openwrt/bin/targets/brcm2708/bcm2710/openwrt-brcm2708-bcm2710-rpi-3-ext4-sdcard.img.gz
再依照樹莓派刷寫系統的通則,使用 Etcher 直接把這個檔案刷寫進 microSD 卡,再把 SD 卡插入樹莓派開機就行了,
重新編譯的話,可先執行 make clean 再執行一次 make V=99。不改設定重編的話,通常可在幾分鐘內完成。
其他種類的網通刷韌體的方式,只須透過分享器原有的 Web 管理界面,將編譯出來的韌體檔案上傳即可。
六、連線運作與 Openwrt 設定
以樹莓派例,在刷入韌體後,過電開機時 Wifi 預設是關閉的,所以第一次要先用實體網路線連接電腦和樹莓派。樹莓派開機後就變成一台分享器,預設 IP 為 192.168.1.1 並啟動 DHCP。電腦端用瀏覽器連上 192.168.1.1 會開啟 OpenWrt 的 Web 管理界面,設定完登入密碼,再到無線網路項目啟用之後,樹莓派就會產生一個名為 Openwrt 的無線 SSID 名稱。
接著 DSLR 老機機(5D2)用 USB 接上樹莓派,任何可執行 qDslrDashBoard 設備連入名稱為 Openwrt 的 SSID 之後,執行 qDslrDashBoard 程式,點擊無線連接的按鈕就會自動透過網路連接樹梅派上的老機機,開始享受老機機也有聯網控制的體驗。
老機機聯網後能做啥?傳圖檔到手機,手機遠端遙控相機,錄影即時預覽(Live View)到手機、即拍即傳,或是設定間隔拍縮時,補強一些老機機本來沒有的功能。
弄懂運作和設定之後,後續可透過 Web 管理頁面,修改 SSID 名稱與加入無線加密,
七、 x86 虛擬機
比較特別的是,Openwrt 也支援 x86 架構,也就是一般的電腦。不過我不建議用實體電腦來練習,因為得找到網卡的驅動程式,韌體映像檔案也得用空硬碟,實在不方便。由於前兩項選擇 x86 之後,第 4 項的輸出格式可以選擇 .vmdk 與 .vdi 兩種,所以我們可以用 VMWare (吃 .vmdk 格式)或 VurtualBox (吃 .vdi 格式)在虛擬機中執行 x86 的 OpenWrt 設備。
x86 虛擬機的前四項設定:
Target System ---> x86
Subtarget ---> Generic 或 x86_64
Target Profile ---> Generic
Target Images ---> Build VirtualBox image files (VDI) 與 Build VMware image files (VMDK)
x86 架構的虛擬機設定重點只有三個:
- 作業系統選擇 ubuntu
- 硬碟機選擇編譯結果的 .vmdk 或 .vdi
- 硬碟機必須模擬 IDE 界面
另外,編譯最後階段如果出現「WARNING: Install qemu-img to create VDI/VMDK images」警告後,並緊接著出現 Error 1 失敗,很可能是系統內沒有安裝 qemu-img 程式。安裝 qemu-img 的指令為:
$ sudo apt install qemu-utils
八、問題與期望
翻遍 Openwrt 的相容硬體表後發現,市售的分享器中目前除了 TL-MR3040 之外,很再找到另一個適合外出使用的老機機無線控制器。再者經過多次測試後, ddserver 除了在 x86 模擬器能以用戶端模式運作,在其他設備上還沒以用戶端模式成功過。這意味著無線控制器必須一律以 AP 模式啟動,每次要與 DSLR 老機機連線時,手機必須跳離原來的 Wifi 環境後連上 AP。如果是單純用手機抓取 DSLR 某些圖片並上傳分享的話,必須下意識切換到正確的 Wifi,進而影響操作體驗。(已解決:可設定為無線分享器的模式,解決此問題,詳情於本文 9.2 )
希望支援用戶端模式的目的是,想要傳檔時,只須開啟手機的網路分享功能,等無線控制器連上來就好了。手機變成 AP 模式,就能從 DSLR 拉圖過來後直接用 3/4G 網路把圖片傳出去,一切都完成後關閉手機的網路分享功能就好了,省去一些手動切換網路的操作,相信這樣做的體驗會更順暢方便。
九、補充說明
9.1 僅編譯特定的套件
以 DslrDashboardServer
為例,語法如下
$ cd ~/openwrt
$ make package/DslrDashboardServer/{clean,compile} V=s
9.2 Raspberry 4B 樹莓派的問題暫時解法(2020.04.26 補充)
截至目前為止,OpenWrt 只有 snapshot 版支援樹莓派 4B,也不太不穩定。反覆測試之下,只有黑蘋果能連得上 4B 的 5G AP 模式,其他通通不行,因為看不到 SSID。
不過有暫時便通得方法,讓 iOS 裝置連上 4B 的 5G 網路。原理是先設定 2.4G 網路並與 iOS 裝置連線並設定為自動連線之後,再把樹莓派 4B 的網路改為 5G 設定。iOS 端關閉 Wifi 再開啟,讓它自動去連。
以 5G 網路連接 iOS 裝置時,LiveView 傳到 iOS 裝置的畫面會明顯順暢很多。
概略說明一下整個流程:
(1) 編譯設定:
Target System ---> Broadcom BCM27xx
Subtarget ---> BCM2709/BCM2710/BCM2711 boards (32 bit)
Target Profile ---> Raspberry Pi 2B/3B/3B+/3CM/4B)
其他(如 LuCI,ddserver,nano )可參考上面文章的設定。編譯成功之後得到檔案 openwrt-bcm27xx-bcm2709-rpi-2-ext4-factory.img.gz 。
(2) 將編譯完成的 OpenWrt 韌體檔案刷寫入 microSD 卡(可以使用 Etcher 免費軟體),再將 microSD 移到樹莓派 4B。樹莓派用有線網路與電腦對接。接著將樹莓派開機。
(3) 電腦開啟瀏覽器,輸入 192.168.1.1,先設定 2.4G 網路:
一般設定 --- 模式:N,頻段 2.4GHz,頻道:7(2442Mhz),寬度:40 MHz。若需要無線加密,在底下的「無線安全」設定。
進階設定 --- 國別碼:TW,允許舊型 802.11b 頻率取消勾選。
(4) 開啟終端機,用 ssh 連線到 192.168.1.1,編輯 /etc/config/wireless 檔案。
(5) 在「config wifi-device 'radio0'」區段補上 「option short_gi_40 '0'」,Ctrl+x 存檔離開。
(6) 輸入 reboot 讓樹莓派重開機。
(7) 重開機完成之後,開啟瀏覽器連線到 192.168.1.1,到「網路」-「無線網路」,啟用無線網路。
(8) iOS 裝置連線到 OpenWrt。連線完成之後 iOS 裝置把 OpenWrt 設定為「自動加入」。
(9) 回到電腦端,將設定改為 5G :
模式:AC,頻道:36(5180MHz),寬度:40 MHz,接著按「儲存」。
(10) 按下「保存並啟動」。
(11) 手機端將 Wifi 關閉再打開,如果會自動連上 OpenWrt 就表示成功了。電腦端可以看到接收速率快了約一倍。
2024.08.04 更新:iPhone 5s/ iPad mini 2 / iPhone 13 Pro 連接樹莓派 4B / 5 的無線設定如下:
模式:AC,頻道:149(5.745 GHz),寬度:80 MHz,國碼 TW。
以目前的 SnapShot 版本(r27076-d604b2699b, 2024.08.04)實測,樹莓派 4B/5 可以和 iPhone 5s / iPad mini 2 / iPhone 13 Pro 以 5G 順利連線,不會有上述看不到 SSID 的問題,連結速度也比先前的速度還快。
若選擇其他設定時,可能會發生無線頻道無法啟用、或是 iPhone 5s/ iPad mini 2 等比較老舊的裝置看不到 SSID 的問題。
9.2 將 OpenWrt 作為無線分享器。
參考資料:【Aiden】讓你的樹莓派成為"帶著走"的路由器 | 樹莓派教學
(1) 電腦端連上 OpenWrt (有線或無線皆可) ,開啟瀏覽器輸入 192.168.1.1。初期無線網路尚未啟用,先到「網路」-「無線網路」啟用。
(2) 到「網路」- 「介面」,新增介面,設定如下:
- 名稱:任意(方便識別,取名 WAN)
- 協定:看需求,這裏設定為 DHCP 用戶端(DHCP Client)。
- 介面:已太網路卡 eth0
設定完成按下「建立介面」
(3) 接著在防火牆設定,指定 wan。
按儲存,回到介面的主畫面。
(4) 編輯 LAN,到「實體設置」頁籤,把乙太網取消選取。
最後按下儲存。回到介面的主畫面
(5) 在介面主畫面按下保存並啟用,無線分享器的設定就完成了。
接著只要把 OpenWrt 的有線網路端,連接到家裡或旅館的分享器有線端。好處是 iOS 裝置連線到這台 OpenWrt 之後,iOS 裝置不僅可以上網,也能同時運作 qDslrDashBoard 操作相機、手機不用切換網路,適合有線網路連網的室內場合。
留言列表