2016/05/31

Raspberry Pi:Samba伺服器

簡言之,Linux裝了Samba(含SMB/CIFS實作)之後,就能和Windows互相分享檔案。

安裝Samba:
$ sudo apt-get install samba

多了群組sambashare,讓帳號pi加入該群組:
$ sudo usermod -a -G sambashare pi

把帳號pi設定為Smaba的帳號:
$ sudo pdbedit -a -u pi
會要你設定密碼。

修改設定檔:
$ sudo nano /etc/samba/smb.conf

在最後加入
[pi]
  comment=pi's home
  path=/home/pi
  read only=no
  guest ok=no
  browseable=yes
  create mask=0750
  directory mask=0750

然後重新啟動Samba:
$ sudo /etc/init.d/samba restart

然後從其他電腦登入,帳號pi、以及剛剛設定的密碼。

我的rpi的位址是192.168.1.16,請改成你的。

若是Windows:
\\192.168.1.16

若是Mac或Linux:
smb://192.168.1.16/pi

2016/05/29

Raspberry Pi:安裝OpenELEC

試著在Raspberry Pi 3上安裝OpenELEC,這篇只是隨意記錄,照片也很不清楚(應該抓圖、而不是用相機拍)。

先到OpenELEC網站,下載映像檔

有分成Raspberry Pi builds與Raspberry Pi 2 builds(也適用於Pi 3)。版本有Stable穩定版、Beta測試版、Legacy舊版。

我下載的Stable穩定版,檔案是OpenELEC-RPi2.arm-6.0.3.img.gz(約106 MB)。
解壓縮後,Windows系統可使用Win32 Disk Imager燒錄到SD記憶卡。插入rpi,然後開機。

首先會擴展檔案系統空間,佔滿整張記憶卡,然後自動重開機。
還滿快的,進入後,會先做一些基本設定,譬如主機名稱,可改可不改。
網路組態。
還可以啟動Samba與SSH,SSH預設帳號root、密碼openelec,
然後就進入主畫面,從左上角可看到Kodi字樣。
預設的音訊輸出是HDMI,可到選單System、Settings、System、Audio output、Audio output device,改成Analogue,便可從TRRS插孔輸出。
預設語言是英文,必須先到System、Settings、Appearance、Skin、Fonts,把字型改成Arial Based,然後再到System、Settings、Appearance、International、Language,把顯示語言改成Chinese (Traditonal),介面就會變成中文。
四處晃晃,可安裝各種附加元件(外掛),譬如YouTube。
另外,可到網頁(http://forum.kodi.tv/showthread.php?tid=64250),下載額外的中文資源,我下載的是「New install file: repository.xbmc-addons-chinese-1.2.0.zip(New site)」,想辦法放進rpi的SD記憶卡,然後從選單系統、系統設定、附加元件,設法找到「從zip檔案安裝」。
選擇剛剛下載的zip檔。
然後就可以看見更多的附加元件,譬如bilibili。
安裝後,可看看二次元的動畫。
也可觀看三次元的電視劇。
隨便晃晃吧,譬如安裝圖片的附加元件,觀賞別人的攝影作品。
嗯,能玩的東西好多啊,譬如UPnP、遠端遙控、自行建立資源檔、接電視棒、錄影、等等,可參閱網路上的分享文章,或是各書籍著作。

2016/05/24

Raspberry Pi:VNC伺服器之TightVNC

試著在Raspbian(2016-05-10)上安裝TightVNC伺服器。

先更新套件清單並升級既有套件。
$ sudo apt-get update; sudo apt-get dist-upgrade -y

然後安裝TightVNC伺服器,
$ sudo apt-get install tightvncserver

然後執行,第一次執行時會要求你設定密碼,
$ tightvncserver

輸出訊息裡,會看到「:1」字樣,什麼意思呢?一般當你坐在rpi連接的實體螢幕前,所開啟的X視窗會是:0,而TightVNC伺服器會另開一個,所以是:1。

若想關閉的話,指令如下,

$ tightvncserver -kill :1

執行tightvncserver時,可加上參數,譬如-geometry 1024x768指定解析度,-depth 24指定顏色深度,-pixelformat rgb565等等。

若要修改密碼,指令是vncpasswd。

然後到另一台電腦,安裝VNC客戶端,譬如RealVNC Viewer,支援各種作業系統,如下所示。

根據你的作業系統,下載RealVNC Viewer,然後執行,輸入rpi的IP位址,記得加上「:1」。
輸入剛剛設定的密碼,
成功啦。
再介紹另一個客戶端,TightVNC Java Viewer,需要Java,下載後執行,輸入rpi的IP位址,若剛剛是:1,那麼Port應填入5901。若是:0,則Port應填入5900。
輸入密碼,
成功啦。
接下來要讓系統開機時自動執行TightVNC伺服器。參考文章Remote GUI access to a Linux computer using Tightvnc (systemd) - Linux tutorial from PenguinTutor

新增檔案,
$ sudo nano /etc/systemd/system/tightvncserver.service

內容如下:
[Unit]
Description=TightVNC Server
After=sshd.service

[Service]
Type=dbus
ExecStart=/usr/bin/tightvncserver :1
User=pi
Type=forking

[Install]
WantedBy=multi-user.target

更改擁有人與群組,更改檔案權限:
$ sudo chown root:root /etc/systemd/system/tightvncserver.service
$ sudo chmod 755 /etc/systemd/system/tightvncserver.service

手動啟動:
$ sudo systemctl start tightvncserver.service

手動停止:
$ sudo systemctl stop tightvncserver.service

開機時自動啟動,指令如下:
$ sudo systemctl enable tightvncserver.service

若想移除,指令如下:
$ sudo systemctl disable tightvncserver.service

2016/05/21

Raspberry Pi:自動掛載USB隨身碟

記錄一下自動掛載USB隨身碟所需步驟,我的USB隨身碟才128 MB、檔案系統是FAT16。

插入USB隨身碟後,下指令:
$ sudo fdisk -l
...省略...
Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        8192   137215   129024   63M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      137216 31116287 30979072 14.8G 83 Linux

Disk /dev/sda: 125 MiB, 131072000 bytes, 256000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe82db69c

Device     Boot Start    End Sectors   Size Id Type
/dev/sda1  *       32 255487  255456 124.8M  6 FAT16

發現USB隨身碟對應的裝置檔是/dev/sda,只有一個分割區/dev/sda1。

建立資料夾當做掛載點,並且修改擁有者:
$ sudo mkdir /media/usbstick
$ sudo chown pi:pi /media/usbstick

試著手動掛載:
$ sudo mount -t vfat -o uid=pi,gid=pi /dev/sda1 /media/usbstick

然後就應該能存取USB隨身碟。

解除掛載的指令:
$ sudo umount /media/usbstick

若想開機時自動掛載,先查詢USB隨身碟的UUID:
$ sudo blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="0EF2-CA4B" TYPE="vfat" PARTUUID="661c3263-01"
/dev/mmcblk0p2: UUID="e093a5bb-b180-4f87-9d60-467b3e79811d" TYPE="ext4" PARTUUID="661c3263-02"
/dev/sda1: SEC_TYPE="msdos" UUID="F840-AAE1" TYPE="vfat" PARTUUID="e82db69c-01"
/dev/mmcblk0: PTUUID="661c3263" PTTYPE="dos"


查知我的USB隨身碟的UUID是F840-AAE1。然後修改設定檔:
$ sudo nano /etc/fstab

在最後加入這一行:
UUID="F840-AAE1"  /media/usbstick vfat   rw,defaults 0 0

然後下指令測試:
$ sudo mount -a

若無誤,重開機就應該會自動掛載。

2016/05/20

Raspberry Pi:固定私有IP與dhcpcd

本篇假定rpi位於路由器之後,路由器會使用DHCP分配私有IP位址。

而Raspbian預設會向DHCP拿動態IP,但如果每次重開機後IP可能會變,非常麻煩。至於如何查知rpi的IP位址,請參閱「Raspberry Pi:查詢IP位址」。

作法一是修改路由器的IP分配設定,譬如可根據MAC硬體位址來分配固定的私有IP位址。

作法二是修改Raspbian的設定。

以前,可修改/etc/network/interfaces,把其中
iface eth0 inet dhcp

改成
iface eth0 inet static
address 192.168.1.177
gateway 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
(請根據你的網路組態,更換上面的設定。)

不過新版Raspbian(大約是2015年5月之後),改由dhcpcd管理,/etc/network/interfaces裡相關的那一行已變成:
iface eth0 inet manual
就算改成上述設定,也沒用。

應該要修改/etc/dhcpcd.conf,在最後加上:
interface eth0
static ip_address=192.168.1.177
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

(請根據你的網路組態,更換上面的設定。)

然後重開機即可。

Raspberry Pi 3:Raspbian新版(2016-05-10)

試試Rasbian新版本(2016-05-10),主要改變為支援Pi 3的藍牙與Wi-Fi。

首先是藍牙,在桌面上方工具列、右上角有個藍牙圖示。

按下Add Device...,便會搜尋周遭的藍牙裝置,下圖裡,一個是藍芽耳機,一個是iPhone。
配對藍牙耳機後,也會出現在清單裡。
再點按旁邊的音訊圖示,修改輸出裝置。耶,開始聽音樂吧。但因為種種原因,Scratch與Sonic Pi無法從此處輸出。
新軟體SD Card Copier,備份系統更加方便,移轉到另一張記憶卡,而且大小不限,真棒。據說僅側試過Raspbian與NOOBS,其他作業系統未知。
新編輯器Geany,專為程式碼設計。
新程式庫pigpio。

軟體更新:Scratch、Sonic Pi、Node-RED、BlueJ、PyPy。

Linux核心升級到4.4。

新Shutdown選項、鍵盤與滑鼠有新的設定選項、Raspberry Pi Configuration可控制1-Wire介面。

新版Raspbian第一次開機時,就會自動擴展檔案系統佔滿整張卡。

若有/boot/wpa_supplicant.conf,會自動搬移到/etc/wpa_supplicant/,這麼一來,我們便可預先放進Wi-Fi連線組態。

Arduino練習:打字小遊戲,使用矩陣鍵盤和文字型LCD

這一篇講的很簡略,沒有詳細介紹。

成品是個打字小遊戲,LCD會不斷出現1、2、3、*、#、A、B等字元,玩家要按下矩陣鍵盤相對應的鍵,才能消掉,消得越快,分數越高。有點類似遊樂場裡的打鱷魚(或打地鼠)。

所需零件:

  • Arduino Uno板。
  • I2C介面文字型LCD,相容Hitachi HD44780,之後將使用Arduino內建程式庫LiquidCrystal。
  • 4x4矩陣鍵盤。
  • 5V蜂鳴器或小喇叭(0.5W、8Ω)。
LCD正面照。
LCD背面照,I2C介面的針腳在右上方,旁邊有個微型可變電阻,作用是調整對比。
4x4矩陣鍵盤,雖有9針,但其實只8針有用。
電路圖如下,另可下載,注意,我的板子是Uno。
LCD的SDA接到Arduino的A4(SDA)。
LCD的SCL接到Arduino的A5(SCL)。
LCD的GND,接地。
LCD的GCC,接5V。

蜂鳴器(長腳)或小喇叭(紅線),接到Arduino的5。
蜂鳴器(短腳)或小喇叭(黑線),接地。 

4x4矩陣鍵盤,針腳從左到右(共8針、最後一針無用)、接到Arduino的13~6(8個腳位)。

然後是草稿碼,需要兩套程式庫,KeypadLiquidCrystal_I2C。若直接從Arduino IDE的程式庫管理員安裝LiquidCrystal_I2C,LCD只會出現方塊,不知為何,所以我從網路上找了一套可正常運作的。

遊玩時,LCD上一列會不斷出現字元,玩家要按鍵盤消去;下一列有倒數時間,以及分數,消得越快,分數越高。
你能得幾分呢?

Arduino練習:三軸陀螺儀L3G4200D

簡單試用三軸陀螺儀L3G4200D

正面照與線路,注意,我用的是Arduino Uno板,所以SDA接A4,SCL接A5。

背面照。
草稿碼在此,需要L3G這套程式庫。

輸出如下。
收工。

Arduino練習:二軸加速計Mx2125

簡單試用二軸加速度感測器Mx2125(Memsic 2125 Dual-axis Accelerometer)。

此感測器由Memsic生產,Parallax弄成分線板,可測二軸,±3 g,輸出訊號需以pulseIn讀取。

據說裡頭有地方會發出熱氣,四周有溫度感測器,藉此測量傾斜程度。

Mx2125正面照與接線圖。
右邊中間腳位是X軸輸出,接到Arduino的2。
左邊中間腳位是Y軸輸出,接到Arduino的3。

X軸與Y軸。
程式碼在此。不斷讀取,並輸出到序列埠。

平放時,輸出約為5000,往+x傾斜時,X軸的輸出值會變小,傾斜九十度時,約為3800。往-x傾斜時,X軸的輸出值會變大,傾斜九十度時,約為6200。

Y軸的情況也類似。

2016/05/15

【作品分享】德霖李老師之水舞鋼琴

注意,這不是我的作品!

因為覺得很棒,徵得同意後,在此代為發表。

製作者德霖李老師,演奏者曾同學。

這項專題,結合水、燈光、鋼琴三個元素,實做水舞鋼琴,使用Arduino微控制器開發板來控制水舞馬達,藉由輸出不同音高使得相對應的水舞馬達產生水舞效果。

運用智慧型手機手機,透過藍牙把訊號傳給Arduino,讓Arduino輸出不同的音高訊號,致使馬達轉動、營造出水舞效果。除此之外,也可以讓鋼琴演奏者將不同音高輸出給Arduino去控制水舞馬達,使得鋼琴演奏者與水舞之間產生互動。
實作出來的水舞鋼琴,可以讓鋼琴演奏者結合水舞與燈光,以達到鋼琴演奏者與觀眾身歷情境的效果。

共有三份影片,上傳到Facebook,敬請欣賞:第一份第二份第三份