簡言之,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
Raise your cup, say cheers to the moon, look down on the ground, the shadow is also drinking with me. I'm not a lonely drinker.
2016/05/31
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、遠端遙控、自行建立資源檔、接電視棒、錄影、等等,可參閱網路上的分享文章,或是各書籍著作。
先到OpenELEC網站,下載映像檔。
有分成Raspberry Pi builds與Raspberry Pi 2 builds(也適用於Pi 3)。版本有Stable穩定版、Beta測試版、Legacy舊版。
首先會擴展檔案系統空間,佔滿整張記憶卡,然後自動重開機。
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
先更新套件清單並升級既有套件。
$ 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,支援各種作業系統,如下所示。
新增檔案,
$ 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
若無誤,重開機就應該會自動掛載。
插入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
(請根據你的網路組態,更換上面的設定。)
然後重開機即可。
而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連線組態。
首先是藍牙,在桌面上方工具列、右上角有個藍牙圖示。
軟體更新: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等字元,玩家要按下矩陣鍵盤相對應的鍵,才能消掉,消得越快,分數越高。有點類似遊樂場裡的打鱷魚(或打地鼠)。
所需零件:
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個腳位)。
然後是草稿碼,需要兩套程式庫,Keypad與LiquidCrystal_I2C。若直接從Arduino IDE的程式庫管理員安裝LiquidCrystal_I2C,LCD只會出現方塊,不知為何,所以我從網路上找了一套可正常運作的。
遊玩時,LCD上一列會不斷出現字元,玩家要按鍵盤消去;下一列有倒數時間,以及分數,消得越快,分數越高。
你能得幾分呢?
成品是個打字小遊戲,LCD會不斷出現1、2、3、*、#、A、B等字元,玩家要按下矩陣鍵盤相對應的鍵,才能消掉,消得越快,分數越高。有點類似遊樂場裡的打鱷魚(或打地鼠)。
所需零件:
- Arduino Uno板。
- I2C介面文字型LCD,相容Hitachi HD44780,之後將使用Arduino內建程式庫LiquidCrystal。
- 4x4矩陣鍵盤。
- 5V蜂鳴器或小喇叭(0.5W、8Ω)。
LCD的SCL接到Arduino的A5(SCL)。
LCD的GND,接地。
LCD的GCC,接5V。
蜂鳴器(長腳)或小喇叭(紅線),接到Arduino的5。
蜂鳴器(短腳)或小喇叭(黑線),接地。
4x4矩陣鍵盤,針腳從左到右(共8針、最後一針無用)、接到Arduino的13~6(8個腳位)。
然後是草稿碼,需要兩套程式庫,Keypad與LiquidCrystal_I2C。若直接從Arduino IDE的程式庫管理員安裝LiquidCrystal_I2C,LCD只會出現方塊,不知為何,所以我從網路上找了一套可正常運作的。
遊玩時,LCD上一列會不斷出現字元,玩家要按鍵盤消去;下一列有倒數時間,以及分數,消得越快,分數越高。
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軸的情況也類似。
此感測器由Memsic生產,Parallax弄成分線板,可測二軸,±3 g,輸出訊號需以pulseIn讀取。
據說裡頭有地方會發出熱氣,四周有溫度感測器,藉此測量傾斜程度。
Mx2125正面照與接線圖。
右邊中間腳位是X軸輸出,接到Arduino的2。
左邊中間腳位是Y軸輸出,接到Arduino的3。
平放時,輸出約為5000,往+x傾斜時,X軸的輸出值會變小,傾斜九十度時,約為3800。往-x傾斜時,X軸的輸出值會變大,傾斜九十度時,約為6200。
Y軸的情況也類似。
2016/05/15
【作品分享】德霖李老師之水舞鋼琴
注意,這不是我的作品!
因為覺得很棒,徵得同意後,在此代為發表。
製作者德霖李老師,演奏者曾同學。
這項專題,結合水、燈光、鋼琴三個元素,實做水舞鋼琴,使用Arduino微控制器開發板來控制水舞馬達,藉由輸出不同音高使得相對應的水舞馬達產生水舞效果。
運用智慧型手機手機,透過藍牙把訊號傳給Arduino,讓Arduino輸出不同的音高訊號,致使馬達轉動、營造出水舞效果。除此之外,也可以讓鋼琴演奏者將不同音高輸出給Arduino去控制水舞馬達,使得鋼琴演奏者與水舞之間產生互動。
實作出來的水舞鋼琴,可以讓鋼琴演奏者結合水舞與燈光,以達到鋼琴演奏者與觀眾身歷情境的效果。
共有三份影片,上傳到Facebook,敬請欣賞:第一份、第二份、第三份。
因為覺得很棒,徵得同意後,在此代為發表。
製作者德霖李老師,演奏者曾同學。
這項專題,結合水、燈光、鋼琴三個元素,實做水舞鋼琴,使用Arduino微控制器開發板來控制水舞馬達,藉由輸出不同音高使得相對應的水舞馬達產生水舞效果。
共有三份影片,上傳到Facebook,敬請欣賞:第一份、第二份、第三份。