2013/9/28

【樹莓派】遠端桌面的另一個選擇!

  除了使用Windows內建的遠端桌面連線工具可以顯示RPi桌面外,發現還有個滿不錯用的工具MobaXterm可以達到類似的功能(但需先開啟SSH連線功能),這工具整合了很多終端機連線功能,像是SSH、SSH Tunneling、Telnet...等。
  直接到下載頁面下載最新的軟體,目前最新版本是6.5。
  下載安裝後,開啟軟體點選左上角的New Session:
選擇Serial透過COM Port連線RPi:
選擇Serial Port並設定Speed為115200,其他維持預設按下OK按鈕即可:
給RPi接上電源,等系統完成初始程序即會停在登入階段,輸入帳號密碼登入,接著輸入sudo raspi-config開啟設定頁面:
選擇Advanced Options:
然後選擇SSH,將之設定為Enable即可:
確定RPi已連上網路(若需要透過Wifi連線可以參考這篇設定說明),使用ifconfig命令查詢RPi的IP位址:
再點選左上角的New Session,這次選擇SSH,在Remote Host輸入IP其他維持預設即可:
開啟連線後輸入帳號pi即可完成登入:
接著輸入命令lxsession&即可開啟遠端桌面,開一個Pi Store看看可以發現會用一個新視窗來呈現開啟的應用程式,這樣就可以在Windows工具列上看到對應的視窗!
整合度可以說是很高,但使用順暢度一樣不太好,這應該是RPi本身效能的限制吧!?

【樹莓派】硬體重置(Reset)接腳

  在Raspberry Pi Model B 2.0版新增了P6 Header可用來重置(Reset)硬體,位置在HDMI接孔的左邊有兩個接點:
Raspberry Pi, RPi
用途就跟一般電腦一樣當系統發生死當或是特殊狀況需要重啟時只要將這兩Pin做短路就會重新啟動電路,可以使用金屬鎳子或是用迴紋針接觸P6即可:
Raspberry Pi, RPi
怕短路到其他線路可以準備一個pin腳跟按鈕(可以找沒再用的電腦主機,開關按鈕或是Reset按鈕)稍微加工一下幫RPi做個Reset按鈕:

先將2 pins Header銲在RPI上:
再把按鈕插到Header上就完成了,之後如果遇到當機之類狀況就可以直接用這Reset按鈕完成重開機,不必再拔電 & 上電了

2013/9/16

【樹莓派】設定遠端桌面

  如果不想另外接螢幕或電視,又想使用桌面系統可以在網路設定好後使用遠端桌面連線來控制RPi,設定方法也很簡單,只要透握apt-get套件管理程式安裝xrdp就可以了。
  首先安裝xrdp:sudo apt-get install xrdp
  接著開啟Windows遠端桌面程式,輸入RPi IP接著點選連線即可
輸入帳號密碼後即可完成連線
感覺RPi的X-Window執行起來沒有很順暢,還是指令介面用起來比較順暢!

2013/9/15

【樹莓派】用omxplayer播放AVI檔案並支援繁體中文字幕

閒來無事跑到電子街晃了一圈發現RCA Cable還滿便宜的,就買回來試試樹莓派的影音播放功能,一條是兩端公接頭的黃色Cable,用來傳輸影像的:
另一條是3.5mm雙聲道音源轉成RCA左右聲道的Cable:
接線也很簡單,實驗板端的接法就照接頭外型對應接起來就好:
電視端則可以照顏色接起來:

  • 黃色:影像
  • 白色:左聲道
  • 紅色:右聲道

接線完成後就可以讓實驗板開機也把電視打開,可以看到電視會顯示開機過程最後跟用終端機連線一樣會停在登入畫面,但可以在螢幕左上方多看到一顆草莓XD:
接著可以選擇接鍵盤繼續操作或是透過RS232控制實驗板,接著使用omxplayer來播放影片omxplayer --subtitles test.cht.srt test.avi,影片很順利的可以播放聲音也沒有問題,但卻發現字幕是亂碼或是一堆方框...
  Google一下發現可以安裝中文字型解決字幕顯示問題,直接透過apt-get套件管理程式安裝字型套件,sudo apt-get install ttf-wqy-microhei
  接著撥放影片時直接指定顯示字型即可正確撥放影片,omxplayer --font /usr/share/fonts/truetype/wqy/wqy-microhei.ttc --subtitles test.cht.srt test.avi

PS. 使用omxplayer撥放影片不需要打開X-Window,直接透過指令帶起即可

【樹莓派】設定無線網路

  在網路上用LinuxWifiConnection & Command幾個關鍵字查詢怎麼透過指令讓Raspberry Pi能夠透過USB Wifi Dongle連上分享網路,得到步驟大致如下:
  1. 先用ifconfig看看有沒有出現wlanXX一般是0,但如果裝過多張無線網卡則可能會是更大的數值。
    • 若沒出現則用ifconfig -a看看無線網卡有沒有被系統正確識別,如果有的話則使用sudo ifconfig wlanX up將無線網卡帶起;若ifconfig -a也沒看到wlanX則表示系統不支援或是需要另外安裝Driver。
  2. sudo iwlist scan掃描附近可用的無線網路,會得到像下面截圖的資訊:
  3. 若上面有成功掃描到要連線的AP資訊,繼續使用指令sudo iwconfig wlanX essid NAME key KEY連接AP。
  4. 最後使用指令sudo dhclient -v wlanX動態取得IP,若一切正確下命令ifconfig wlanX查詢網卡狀態可以看到取得對應的IP與網路遮罩等訊息:
不過上述連線僅可用於WEP加密的AP連線,若使用的AP加密機制是WPA/WPA2的話,用上面的方法是沒辦法成功連線的,參考步驟如下:

  1. 修改網路連線設定文件/etc/network/interfaces
    1. 若原本有iface wlan0 inet manual敘述,則在該敘述最前面加上#變成註解
    2. 加入敘述iface wlan0 inet dhcp
    3. 加入敘述wpa-ssid "NAME"
      NAME請改成對應的ESSID名稱
    4. 加入敘述wpa-psk "KEY"
      KEY請改成對應的加密文字
    5. 若原本有wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf敘述,在該行最前面加上#變成註解
  2. sudo ifdown wlanX關閉無線網卡功能
  3. sudo ifup wlanX重新開啟無線網卡即會自動連線AP並取得IP。
  4. 最後同樣可用ifconfig wlanX查詢網卡狀態確認連線是否成功。 
PS. 使用的USB Wifi Dongle是EDUP EP-8508GS,使用上沒發現什麼問題。

2013/9/13

【樹莓派】開機、設定與關機!

  在開機之前得先確定週邊配件都齊全了才行,由於樹梅派只支援SD卡開機,因此得先準備一張SD卡,根據官方建議應該找一張4G以上的SD卡,速度上當然是越快越好,但是因為主板只支援SDHC,因此Class 10就可以了,怕會有相容性問題的話可以參考RPi SD cards網頁的相容性測試。手上用的這張是創建Class 10 8G,目前用起來沒遇到什麼問題。
  有了裝載系統的SD卡後,還得要顯示輸出設備,這邊決定採用RS232文字傳輸模式來跟板子溝通,所以得準備張USB to RS232轉卡,選購時得注意要買USB to TTL RS232的商品,若沒有TTL字樣可能會買到12V準位的RS232,樹梅派RS232準位是使用5V的。
最後需要一條Micro USB Cable做為樹梅派供電使用,底下列出這次需要用到的設備:

  1. 4G以上SD Card
  2. USB轉TTL RS232
  3. Micro USB Cable
  在開電之前必須先將OS Image載入記憶卡,首先下載Win32 Disk Imager還有RPi Image,這次選用的Image是Raspbian,這是從Debian系統改來的,先前若有用過Debian或是Ubuntu系統的人應該會對這版本Image感到熟悉。
  系統安裝十分簡單,開啟Win32 Disk Imager選擇下載好的Image並指定SD Card磁碟機路徑,最後按下Write後就會開始製作可開機的SD Card。
  開機前還得先設置好PC端的RS232視窗,這邊採用TeraTerm這個工具根樹梅派做溝通,開啟TeraTerm後點選Setup→Serial Port...,設定COM Port(安裝完USB to TTL RS232 Driver後會在裝置管理員上看到一個新的COM Port)
   開啟TeraTerm設定頁面,修改對應的COM Port並將BaudRate設為115200,其他設定為值預設即可。
  接著將USB to TTL RS232的TX、RX與實驗板的對應接腳接起來,樹梅派GPIO接腳參考如下圖
@2015/04/09補充:可參考這網頁有詳細的Pinout資訊

  最後插上MicroUSB就會自動進行開機程序,完成開機程序後會停在登入畫面,登入帳號輸入pi,密碼輸入raspberry即可完成登入動作,因為第一次啟動系統,會看到提示執行sudo raspi-config執行設定。
  執行sudo raspi-config會看到如下視窗:
簡單描述各個選項功能:
  1. 延展檔案系統,如果選用的SD Card大小大於2G可以使用這選項讓系統檔案延展,預設Image檔案系統是2G,若執行完此選項,可用空間將可延伸至整個SD Card大小。
  2. 更改登入密碼。
  3. 開啟系統進入桌面功能,這部分若沒有透過RCA / HDMI Cable接電視 / 電腦螢幕,將看不到效果。
  4. 設定語系相關選項。
  5. 啟用Camera模組。
  6. 加入Rastrack,若有讓實驗板連網,可以加入連網登記,其功能是統計樹梅派分散在世界的哪些角落。
  7. 超頻選項,建議加上散熱機制再做超頻選項。
  8. 進階設定,裡面可以開啟SSH連線功能、切割記憶體使用、更新系統等選項。
  做完上述設定,基本上就可以開始想想該怎麼使用手上的樹梅派啦!若要關機可以選擇直接拔掉Micro USB Cable或是謹慎一點的人可能會想下完sudo poweroff命令確定完成關機程序後再拔除USB Cable。

【樹莓派】Raspberry Pi UK版開箱


  最近發現個有趣的小玩具:Raspberry Pi,中文翻為樹莓派,英國教育學家為了讓小孩子可以從趣味的小專案實做過程中學習相關知識而設計的實驗開發板,詳細的來龍去脈可以參考網路上維基的介紹→樹梅派
  直接進入開箱吧!這次買的是英國生產的。
在網路上有看到一些討論當機問題,看到有人歸結為中國版本打板上件較不精細導致容易有當機現象,為了避免之後把玩時遇到奇怪現象決定多添些錢買英國版,不過說實話我覺得應該是沒差吧,因為不巧手上這塊版子也是有打件歪斜的問題...囧。
包裝盒內除了一塊Raspberry Pi板子還附上一張使用警告,然後就麼都沒有了!沒錯,就真的沒有其他額外的東西,因為當初這塊板子的設計目的就是要讓使用者能自行摸索找尋答案,因此電源、網路線、USB Cable都省了,希望使用者能依循自己的需求尋找對應的材料。
  拆開主板包裝先看看是什麼版本吧!手上這快板子是Model B(Model A是比較省電的版本,但犧牲掉Ethernet、一個USB孔,RAM則是256MB),RAM是512MB,在早期版本是256MB,現在買到的應該都會是512MB才對,價錢都是35美元。
  區別RAM的大小看CPU上面的雷射打印字樣就可以區別了:手上這塊是K4P4G324EB,4G是說4 Giga Bits,換算成Byte除以8則是512MB。
怕這小玩具不好保護因此買了個透明保護殼,拆開包裝共有六片透明板子,每塊板子兩邊都有透明膜得先撕掉。
先組好三片,架子就初步立起來了,外殼都是用卡榫相嵌扣住,沒有說很穩固,但也不會脫落。
裝上第二塊側邊長板,長板一定要先裝好才行。
接著先把上蓋給裝上,靠近電源那邊的屁屁最後再裝上就完成了。
買殼有另外附上三塊散熱片,分別裝在CPU,USB & Ethernet與電源轉換IC上,固定善熱片後的樣子如下。

2013/3/31

【C語言】亂數

  閒來無事突然好奇random()函數是不是真的能產生很均勻的數值來,就寫了個小程式將產生的亂數值做餘數處理分配到四個變數,在將最後結果印出來,結果竟然十分均勻,直接先看程式內容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char **argv) {
 int value[4] = {0, 0, 0, 0};
 int max = INT_MAX;

 srand(time(NULL));
 for(int i = 0; i < max; i++) {
  value[rand() % 4] += 1;
 }

 for(int i = 0; i < 4; i++) {
  printf("%d => %d\n", i, value[i]);
 }

 printf("Total: %d\n", max);
 return  0;
}

執行幾次結果大致相同
1
2
3
4
5
0 => 536870911
1 => 536870912
2 => 536870912
3 => 536870912
Total: 2147483647

母體設小一點就比較不那麼均勻

1
2
3
4
5
0 => 14
1 => 10
2 => 9
3 => 17
Total: 50

  說實話這樣的結果其實讓我有點懷疑亂數太過造假,也就是說顯得不自然,雖然這樣的結果符合機率告訴我們的只要母體夠大在公平的條件下大家機會是相等的,不過軟體產生的亂數本來就是依據演算公式不斷疊代產生,因此對於這樣的結果好像也就不需要太意外了!

PS. 環境說明

  • 編譯器:Visual Studio Express 2012 for Windows Desktop
  • 執行環境:Windows 7 SP1

2013/04/02 補充
  同樣程式碼放在Linux下跑,得出來的亂數值有比較符合原先預期的結果,先看執行結果:
第一次執行
1
2
3
4
5
0 => 536849545
1 => 536888948
2 => 536882094
3 => 536863060
Total: 2147483647
第二次執行
1
2
3
4
5
0 => 536877294
1 => 536896031
2 => 536864732
3 => 536845590
Total: 2147483647
不曉得linux下的library在實作此亂數函數時是否也有把一些硬體外在環境因素也加入演算,像是/dev/random/dev/urandom有把硬體訊號元的變因加入亂數產生演算因子,所以才會得到比較貼近實際的結果?