星期五, 2月 24, 2017

Raspberry Pi 筆記(三十二):4路 TTP224 電容式觸控模組

[2017/02/23]
觸控的應用非常普遍,從手機到電燈、飲水機開關等,都是觸控方式的應用。一般在販售電子零件的商店,可看到幾種不同的電容觸控模組,有單鍵、4鍵、8鍵及16鍵等,我買了一個 4鍵的模組TTP224來試看看他的應用。
TTP224 是一款 4鍵的電容式觸控模組,透過觸摸檢測 IC (TTP224) 來感測該位置是否有被觸摸。我們可以將 TTP224 模組安裝在非金屬材料如塑料、玻璃的表面,另外將薄薄的紙片(非金屬)覆蓋在模組的表面,只要觸摸的位置正確,即可做成隱藏在牆壁、桌面等地方的按鍵。當手指觸摸到相對位置時,模組會輸出高電位。我們就來試試如何透過電容式的觸控作為 LED 燈的開關。

• 接線完成的照片

• TTP224  4鍵的電容式觸控模組

[材料]

• Raspberry Pi 2 Model B x 1
• TP224 模組  x 1
• LED 紅, 綠 各 1 個
• 10K 電阻 x 2
• 排線 x 15 條

[線路連接與電路圖]

• LED 連接線路
LED
Raspberry Pi
黃色 LED
GPIO23  Pin 16
紅色 LED
GPIO24  Pin 18
綠色 LED
GPIO25  Pin 22

• TTP224模組連接線路
TTP224模組
Raspberry Pi
GND  (Ground)
Pin 6 (Ground)
VCC   (5V)
Pin 2 (3.3V)
OUT1
GPIO17  Pin 11
OUT2
GPIO18  Pin 12
OUT3
GPIO27  Pin 13
OUT4
GPIO22  Pin 15




[程式]

#!/usr/bin/env python
import RPi.GPIO as GPIO
from time import sleep

Pin1   = 17
Pin2   = 18
Pin3   = 27
Gpin   = 23
Rpin   = 24
Ypin   = 25

GPIO.setmode(GPIO.BCM)
GPIO.setup(Pin1, GPIO.IN)
GPIO.setup(Pin2, GPIO.IN)
GPIO.setup(Pin3, GPIO.IN)
GPIO.setup(Gpin, GPIO.OUT)
GPIO.setup(Rpin, GPIO.OUT)
GPIO.setup(Ypin, GPIO.OUT)

while True:
   if GPIO.input(Pin1):
      GPIO.output(Rpin, 1)
   else:
      GPIO.output(Rpin, 0)

   if GPIO.input(Pin2):
      GPIO.output(Gpin, 1)
   else:
      GPIO.output(Gpin, 0)

   if GPIO.input(Pin3):
      GPIO.output(Ypin, 1)
   else:
      GPIO.output(Ypin, 0)

GPIO.cleanup()

[程式說明]


TTP224有 4 個按鍵,接到 Pi 的三個 GPIO:17、18 及 27,程式迴圈讀取這個三個 GPIO是否被按下,如被按下,分別將個別的 LED 接腳設為高電壓。

[實作結果]

[參考資料]

• TTP224 Data Sheet

Share:

星期四, 2月 23, 2017

Raspberry Pi 筆記(三十一):建立個人雲端儲存系統 (二) Owncloud

[2017/02/23]
想要比較一下 Tonido 跟 ownCloud 的差異,在前一篇完成 Tonido 安裝之後,就繼續看一下如何安裝 ownCloud ,比較一下兩個系統安裝的方便性。

ownCloud 的安裝有兩種方式,一種是手動安裝,需個別安裝所需程式,如 Apache、Mariadb、PHP套件等,另一種是自動安裝,在安裝 ownCloud 時,自動判斷其相依性,將相關套件都安裝進來,以下說明第二種安裝方式:

[安裝程序]

先到 owncloud.org 網站,點選 [Download] -> [Download ownCloud Server] -> [Packages For auto updates] -> [Continue to the Packages],或是直接 按這裡 開啟此畫面:


選擇 [Debian],可看到執行的指令與安裝各版本的方法。以下就開始進行安裝:
$ wget -nv https://download.owncloud.org/download/repositories/9.1/Debian_8.0/Release.key -O Release.key
$ sudo apt-key add - < Release.key

用 root 權限增加 repository 並執行安裝:
$ sudo sh -c "echo 'deb http://download.owncloud.org/download/repositories/9.1/Debian_8.0/ /' > /etc/apt/sources.list.d/owncloud.list"
$ sudo apt-get update
$ sudo apt-get install owncloud

安裝過程中,需要輸入 MySQL 管理者的密碼:

安裝完成後,開啟瀏覽器,輸入http://<RaspberryPi IP Address>/owncloud,以我的 Pi 為例,IP位址是: 192.168.1.112,只要輸入:
http://192.168.1.112/owncloud

就會出現 ownCloud 登入主畫面:

第一次輸入 root 帳號密碼後,即可登入到網頁版的存取檔案畫面:

這樣就完成安裝了,比起手動安裝要快許多。可是只能從內部網路存取,如要透過 Internet 存取時,需另外設定 Port Forward,才能從外部網路存取,這也是安裝 ownCloud 比起 tonido 比較不方便的地方。如果需要 SSL 加密傳輸,也需要另外設定。

另外,ownCloud 也支援手機 APP,目前僅支援 IOS 跟 Android 兩個系統,且下載 APP 需要 0.99 美金(台幣 30元)才能使用。目前有其他第三方支援 ownCloud 的APP可以免費下載使用,如Storswift ownCloud、usask ownCloud等。

如果想要在登入 ownCloud 後直接播放音樂、看影片,可下載 ownCloud 的 multimedia 類別的APP 進行安裝。除了 multimedia 類別之外,還有  Productivity、Games 及 Tools這三大類,總計將近 160 個 APP 可供下載,這是 ownCloud 比 Tonido 功能多很多的部分。下載的網址是:apps.owncloud.com ,如有興趣的人可以試用看看。

[參考資料]

• ownCloud:Install
• avoiderrors: Turn Your Raspberry Pi 3 into a Personal Cloud Storage
Share:

星期三, 2月 22, 2017

Raspberry Pi 筆記(三十):建立個人雲端儲存系統 (一) Tonido

[2017/02/22]
要建立在不同設備間存取相同檔案的雲端儲存機制,常聽到的是 Dropbox、Google Drive、百度雲等,如果要將雲端檔案分享建置給自己的親朋好友,又要不受總容量的限制,自己架設是最好的方法。

要介紹給各位的是一套評價還不錯的私有雲端系統 Tonido,以下就是安裝程序及透過手機存取檔案的方法。

[安裝程序]

建立目錄並下載程式檔: (檔案可能會隨版本不同,放置位置不同,可到 Tonido 官方網站 進行下載)
$ sudo mkdir /usr/local/tonido
$ cd /usr/local/tonido
$ sudo wget http://patch.codelathe.com/tonido/live/installer/armv6l-rpi/tonido.tar.gz

解壓縮後,執行啟動程序:
$ sudo tar -zxvf tonido.tar.gz
$ ./tonido.sh start


[開機自動啟動]
如果要在 Raspberry Pi 開機時自動啟動 Tonido,可依照下列進行設定:

首先到 這裡下載 init script,或使用 wget 下載:

將檔案放到 /etc/init.d
$ sudo cp tonido /etc/init.d/

設定執行權限
$ sudo chmod +x /etc/init.d/tonido

執行以下指令進行安裝:
$ sudo update-rc.d tonido defaults

[ 安裝媒體播放擴充功能]
如果要連上 Tonido 後可以播放音樂及影片,如 FLAC 或 M4A 等,可以選擇安裝 ffmpeg,安裝方法如下:
$ cd /usr/local/tonido
$ sudo apt-get install ffmpeg
$ sudo ln -s /usr/bin/ffmpeg ffmpeg.exe
$ sudo ln -s /usr/bin/ffmpeg ffmpegv.exe

[設定]

開啟 Tonido 網站,可以在瀏覽器列輸入 http://<RaspberryPi IP Address>:10001,即可開啟設定畫面。以我的 Pi 為例,IP位址是: 192.168.1.112,只要輸入
http://192.168.1.112:10001

即可看到以下畫面:

輸入帳號、密碼及 Email,即可在系統建立一個用戶,這個用戶可以透過網址的方式存取,以我的名字為例,未來可透過 http;//atceiling.tonidoid.com,直接使用瀏覽器存取 Pi上的檔案。

接下來設定讀取的目錄: 允許存取所有目錄或特定目錄,為了安全起見,建議選擇存取特定目錄。

這時按下右邊的 [ Add Allowed Folder],可以選擇特定目錄作為存取,顯示如以下畫面:

接下來詢問要不要索引,接著就完成了。Tonido 還支援 IOS、Android等四種手持裝置。


[手機下載APP]
打開 iphone 的 App Store,尋找並下載  Tonido (如左圖)。APP安裝完成後開啟 (如右圖)


按主畫面左上方的 [ + ] 增加一部伺服主機,只要將 URL (剛申請的網址 atceilng.tonidoid.com )、帳號及密碼輸入,即可新增一筆帳號名稱在主畫面,點選進入後即可看到如右邊的畫面,範例是我透過手機上傳三張照片的畫面:



我使用手機增加 Tonido 主機時,發生以下錯誤:

解決的方法是要到 Tonido 主畫面,按下左下方的 APP ,右方出現 Sync、Search、Explorer及Webshare等四項,每點一項,右方會出現 Application的狀態,留意是否有 Suspend的情況,將其改成 Resume 即可。



[參考資料]

• Tonido for Raspberry Pi 網tonido-for-raspberry-pi-2/


Share:

星期二, 2月 21, 2017

Raspberry Pi 筆記(二十九):MCP3008 讀取搖桿值

[2017/02/21]
先前做的實驗控制智能車,是利用鍵盤控制方向 (可參考 Raspberry Pi筆記(十四):用鍵盤透過無線網路控制智能車),操控車子的方向不是那麼便利。如果可以透過搖桿的方式操控,應該會更容易控制小車的方向。這次實做希望使用搖桿的方式來控制車子的方向,由於搖桿的特性是類比訊號,如要轉成數位,需要透過 MCP3008 讀取搖桿的位置,再轉換成數位數值,透過判斷這些數值,可以用來控制智慧小車的方向。以下就來看看如何安裝與設定搖桿與 Pi 連接。

使用 MCP3008 之前,需要先開啟 SPI,有關如何開啟 SPI,可參考:Raspberry Pi 筆記(二):GPIO接腳與 I2C 及 SPI 安裝 。

有關本篇 MCP3008 IC 規格及相關介紹,可參考另一篇文章:Raspberry Pi 筆記(二十):MCP3008 讀取類比訊號測溫度與光度 。

[材料]

• Raspberry Pi 2 Model B x 1
• 搖桿 JoyStick  x 1
• MCP3008 x 1
• 10K 電阻 x1
• 排線 x 17 條

[線路連接與電路圖]

• 搖桿 JoyStick 連接線路

搖桿
Pi / MCP3008
GND  (Ground)
Pi Pin 6 (Ground)
5V      (3.3V)
Pi Pin 1 (3.3V)
SW    (Switch)
MCP3008 Pin 1 (CH0)
VRx  (X voltage)
MCP3008 Pin 2 (CH1)
VRy  (Y voltage)
MCP3008 Pin 3 (CH2)

• MCP3008 連接 Raspberry Pi

MCP3008
Pi
Pin 1  (CH0)

Pin 2  (CH1)

Pin 3  (CH2) 

Pin 9  (DGND)
Pin 6   (Ground)
Pin 10 (CS)
Pin 24 (GPIO8)
Pin 11 (DIN)
Pin 19 (GPIO10)
Pin 12 (DOUT)
Pin 21 (GPIO9)
Pin 13 (CLK)
Pin 23 (GPIO11)
Pin 14 (AGND)
Pin 6  (Ground)
Pin 15 (VREF)
Pin 1  (3.3V)
Pin 16 (VDD)
Pin 1  (3.3V)

• 接線完成的照片

• 本實驗使用的搖桿 JoyStick

• 接線線路圖

[程式]

import spidev
import time
import os

# open SPI bus
spi = spidev.SpiDev()
spi.open(0,0)

# read SPI data from  MCP3008 , Channel must be 0-7
def ReadChannel(channel):
  adc = spi.xfer2([1,(8+channel)<<4,0])
  data = ((adc[1]&3) << 8) + adc[2]
  return data

# Define sensor channels
sw_ch = 0
vx_ch = 1
vy_ch = 2

# Define delay between readings
delay = 0.5

while True:

  # Read the joystick position data
  vx_pos = ReadChannel(vx_ch)
  vy_pos = ReadChannel(vy_ch)

  # Read switch state
  sw_val = ReadChannel(sw_ch)

  if int(vx_pos) >= 800:
     print "UP..."

  if int(vx_pos) <= 300:
     print "Down..."

  if int(vy_pos) <= 300:
     print "Left..."

  if int(vy_pos) >= 800:
     print "Right..."

  if int(sw_val) >= 1023:
     print "Press..."

  # Wait time
  time.sleep(delay)

[程式說明]

為了要使用搖桿控制小車,將程式改為判斷搖桿的方向,並在螢幕顯示搖桿往上「Up」、往下:「Down」、往左:「Left」、往右:「Right」及按下:「Press」。程式判斷往左及往下時當數字小於 300時,觸發顯示。往右及往上時,當數字大於 800時,觸發顯示。

在測試按下搖桿時,讀取的數值都是1023,後來是將電阻換成 1K的,按下時會是 1023,放開時,數字低於 1023。10K電阻主要是將開關輸入電壓拉高 (3.3V),當按下開關時,輸入連接到地(0V)。如果沒有電阻,當搖桿沒有被按下並讀取隨機值時,輸入將處於未定義狀態。可以試一試。

上述的程式參考 Matt Hawkins 撰寫的程式,如需要原始程式測試搖桿,可到以下網址下載:
$ wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/mcp3008/mcp3008_joystick.py

下載後,執行程式:
$ sudo python mcp3008_joystick.py

[參考資料]

• raspberrypi-spy:Using A Joystick On The Raspberry Pi Using An MCP3008

Share:

星期六, 2月 18, 2017

Raspberry Pi 筆記(二十八):架設無線基地台 Wireless Access Point

[2017/02/18]
家裡的無線存取設備使用 ISP 業者的,距離這個無線基地台 (Wireless Access Point, 簡稱 AP) 較遠的房間訊號就不好,想說要再買一個新的 AP,也不知效果好不好,就先使用  Raspberry Pi 架設一個無線基地台,當作是延伸點,看看效果好不好。

要架設無線基地台,需安裝 hostapd 這套軟體,並且安裝 DHCP 服務,配發 IP給來連線的裝置,這樣就可以成為一部 Wireless AP。下圖是我的筆記型電腦使用無線網路連至 Raspberry Pi的無線 AP後,開啟 Raspberry Pi網站的畫面:

[材料]

• Raspberry Pi 2 Model B x 1
• USB 無線網路卡 x 1

[安裝程序]

1.安裝所需要的軟體
$ sudo apt-get install hostapd udhcpd

2.修改 DHCP 設定檔
$ sudo nano /etc/udhcpd.conf

依照右側的說明調整修改:
start 192.168.2.2                         # 配發給申請裝置的IP範圍
end 192.168.2.20
interface wlan0                          
remaining yes
opt dns 168.95.1.1 168.95.192.1   # 終端設備使用的 DNS IP
opt subnet 255.255.255.0
opt router 192.168.2.1                 # 這是 Pi 的 wlan0 IP 位址
opt lease 864000                          # DCHP配發的租用期限

修改預設 udhcpd 設定檔:
$ sudo nano /etc/default/udhcpd

將以下這行加上註解不執行:
DHCPD_ENABLED="no"
改成
#DHCPD_ENABLED="no"

修改網路設定 interfaces 檔,將無線網卡 wlan0由 DHCP 改成靜態固定 IP:
$ sudo nano /etc/network/interfaces

再設定檔內加上以下幾行:
iface wlan0 inet static
  address 192.168.2.1
  netmask 255.255.255.0

將以下幾行最前面加上 #
# allow-hotplug wlan0
# wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
# iface default inet dhcp

3.修改 hostapd 的設定:
一般無線網路可以設定為開放的存取,不需輸入無線 AP 的存取密碼,但為了避免遭受有心人士利用作為非法用途,還是建議設定為 WPA的安全網路。如果要設定 WPA 安全網路,修改 hostapd.conf 設定檔:
$ sudo nano /etc/hostapd/hostapd.conf

增加以下幾行:(如果找不到檔案可以新建立一個名為 hostapd.conf 的檔案)
interface=wlan0
driver=nl80211
ssid=rpi-ap
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=MyAPPassphrase
wpa_key_mgmt=WPA-PSK
#wpa_pairwise=TKIP # TKIP的加密機制較弱,建議不要使用
rsn_pairwise=CCMP

修改 SSID,這是無線 AP的名稱
修改 Channel,這是使用哪種頻率進行連線,可設定 1、6或11,不可使用 12-13
修改 wpa_passphrase,這是連到無線 AP 時,需要輸入的密碼。

如果要安裝成開放網路,不需輸入無線 AP 密碼,可以修改 hostapd.conf :
$ sudo nano /etc/hostapd/hostapd.conf

增加以下幾行:
interface=wlan0
ssid=My_AP
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0

接著修改預設 hostapd 設定:
$ sudo nano /etc/default/hostapd

找到這一行:
#DAEMON_CONF=""
將其變更為:
DAEMON_CONF="/etc/hostapd/hostapd.conf"

4. 設定 NAT (Network Address Translation):
NAT 的技術是允許多部裝置使用同一個連線到 internet,Linux 使用 Netfilter (也就是一般所知的 iptables)。首先,我們允許 IP 在 kernel 中允許轉發(forwarding):
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

如果要設定開機時自動啟動,可以修改 sysctl.conf :
$ nano /etc/sysctl.conf

將以下這行加在檔案最後面:
net.ipv4.ip_forward=1

其次,要讓 NAT 在  kernel 中正常運作,執行以下指令:
$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

如果要在開機後,不想輸入上述幾行指令,可以執行下列,將設定存檔:
$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

修改網路設定檔 /etc/network/interfaces :
$ sudo nano /etc/network/interfaces

將以下這行加到檔案最後面:
up iptables-restore < /etc/iptables.ipv4.nat

執行以下指令來啟動無線 AP:
$ sudo service hostapd start
$ sudo service udhcpd start

如果要在 Raspberry Pi 開機時,就啟動 hostapd 服務,可以執行以下兩行指令:
$ sudo update-rc.d hostapd enable
$ sudo update-rc.d udhcpd enable

如果不想以服務方式執行程式,可以執行以下指令:
$ sudo hostapd /etc/hostapd/hostapd.conf 

------------------ 分 ---------- 隔 --------- 線------------------------------------

到這裡,理論上應該可以正常啟動無線 AP,可是我在搜尋網路時,卻無法看到無線 AP 的名稱,手動執行 hostapd 卻發生無法啟動 nl80211 的錯誤:

Configuration file: /etc/hostapd/hostapd.conf
nl80211: 'nl80211' generic netlink not found
Failed to initialize driver 'nl80211'

心想應該是無線網卡無法載入 nl80211 的關係,我的無線網卡型號是 TP-LINK  wn725n,啟動時,需用到 8188eu.ko,如果改用 8188eu 或許可行,但結果還是不行。

Google 一下有沒有人遇到相同的問題,結果 Jens Segers 的一篇貼文 Realtek RTL8188 based access point on Raspberry Pi,解決我的問題,主要還是驅動程式的關係,要改用 RTL8188 版本的 hostapd 才行。以下說明如何進行安裝:

首先,將原先安裝的 hostapd 移除:
$ sudo apt-get autoremove hostapd

再到以下網站下載 RTL8188 版本的 hostapd 並解壓縮:
$ wget https://github.com/jenssegers/RTL8188-hostapd/archive/v2.0.tar.gz
$ tar -zxvf v2.0.tar.gz

接著開始編譯程式,並進行安裝:
$ cd RTL8188-hostapd-2.0/hostapd
$ sudo make
$ sudo make install

重新啟動 hostapd 服務:
$ sudo service hostapd restart

發現 /etc/hostapd/hostapd.conf 檔案內容最後多了以下幾行:

# Hardware configuration
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8192CU
manufacturer=Realtek

這時,從我 Windows 的無線網路或手機,就可看到無線 AP 的名稱 rpi-ap :

多試幾次連線,常會發生以下連線失敗的情況,可能是因為Raspberry Pi 處理能力的關係。

除了效能不佳外,在重新啟動 Raspberry pi後,常發生無法自動啟動無線網卡的情況,wlan0沒有取得配置的IP:

必須手動執行以下幾個指令,Raspberry Pi 就可正常當作無線 AP 使用。
$ sudo ifdown wlan0
$ sudo ifup wlan0
$ sudo hostapd /etc/hostapd/hostapd.conf 

總之,要用 Raspberry Pi 2 B來作為無線 AP 仍有點困擾,不如去買個小型的無線 AP方便,但也瞭解到 Raspberry Pi 只要硬體能力提升後,應該可以作為許多不同用途應用。

[參考資料]

• elinux.org:RPI-Wireless-Hotspot
• Jens Segers:https://jenssegers.com/43/realtek-rtl8188-based-access-point-on-raspberry-pi

Share:

星期四, 2月 16, 2017

Raspberry Pi 筆記(二十七):監測 Pi & Arduino 及其感測器的雲端系統 Cayenne

[2017/02/16]
最近在回顧2、3年前的筆記,如要透過網頁控制 GPIO,最好的方式是安裝 WebIOPi,當時的版本是 0.6,目前最新的是 0.7.1。如果到 WebIOPi 的網站 webiopi.trouch.com 可以看到一個新的名詞  Cayenne - The Spicy one ,Cayenne 是德國汽車製造商保時捷於2002年推出的一款中型四輪驅動運動型多用途車。當然,我們不會是談論車子。

myDevices.com的 Cayenne 是以 WebIOPi為核心發展出來的一套雲端系統,可支援 Raspberry Pi 2 & 3,儀表版還可支援拖曳(Drag & Drop)的功能,只要將該方塊按住滑鼠左鍵,移到新的位置放開,即可重新排列儀表版內方塊的位置。同時 Cayenne 也提供行動裝置APP,目前可支援 IOS 跟 Android 兩種系統,可由手機直接看到設備上的即時狀態,甚至執行某些指令,如重新開機、關機等。

不僅如此,Cayenne 也支援觸發(Trigger) 功能,能設定設備在超過某個門檻值時,透過郵件或簡訊的方式進行通知。

您只要在 Cayenne 註冊之後,將網路環境內的 Raspberry Pi 或 Arduino 設備加進來,即可將 Raspberry Pi 或 Arduino的監控資料上傳至雲端系統,設定完成後,即可透過 cayenne.mydevices.com 網站或手機APP,取得註冊設備的資訊,如 CPU、RAM、Storage及 GPIO等。


[安裝 Cayenne]

1. 首先,到 mydevices.com 註冊一個免費的帳號。
2. 註冊登入帳號後,可以搜尋安裝環境內的 Raspberry Pi,或直接下載應用程序,在 Raspberry Pi 安裝 Cayenne(需要啟用 SSH)。

$ wget https://cayenne.mydevices.com/dl/rpi_x2usqzyd5u.sh
$ sudo bash rpi_x2usqzyd5u.sh -v

3. 安裝完成後,重新啟動Pi,登入Cayenne後,即可看到 Raspberry Pi 狀態的儀表版,如下所示:


[設定第一個感測器]

1. 按下左上方的 [Add New...] ➜ [Device/Widget] 
2. 選擇 [Sensors] ➜ [Proximity/Distance]
3. 選擇˙[Analog Distance Sensor],記得要設定Channel 才能夠按下方的 [Add Sensor]。
4. 回到儀表版,可顯示該感測器的數值。


[使用 GPIO]

Raspberry Pi Cayenne 中的 GPIO 面板可以讓您設定及控制 Pi上的接腳。可將該接腳設定低電位或高電位,也可以設定輸入或輸出。畫面如下:


[設定觸發規則Trigger]

1. 按下左上方的 [Add New...] ➜ [Trigger]
2. 輸入 Trigger 名稱
3. 按住左方的 Raspberry Pi 圖案拖曳至右方的 IF 右邊區塊
4. 下方 [Select Trigger] 選擇Trigger 類型,是Online / Offline、CPU、Memory或 Storage。
5. 再按右邊 [setup notification]
6. 選擇傳送簡訊或寄發 Mail
7. 按 [Save]儲存設定


當我關閉 Raspberry Pi時,收到一封來自  Cayenne 的 Mail。如不想收到郵件,可至 Trigger 畫面暫時將通知關閉。


[設定事件Event]

設定事件有點像 Trigger,只是 Trigger 是由感測器觸發,而事件就是由日期時間所觸發。例如在某時間需要自動開燈、或某特定時間啟動開關等,都可自訂在 Event 中。設定方式如下:

1. 按下左上方的 [Add New...] ➜ [Trigger]
2, 輸入 Event 名稱
3. 設定日期時間及時區
4. 設定執行週期:重複、每日、每週、每月、每年、自訂
5. 設定是否由簡訊或郵件通知
6. 選擇設備
7. 選擇開機或關機
8. 按下 [Save] 即可儲存


[遠端桌面]

透過 Cayenne 可以很容易透過 Web 瀏覽器開啟 Raspberry Pi 的遠端桌面,在儀表版右方有一個 「Remote Access」的選項,點此連結進入。此時會開啟一個新視窗,就是 Raspberry Pi 的環境。這個功能好處是你可以很容易的連接全世界任何地方的 Raspberry Pi,而不需要設置 VPN或開通防火牆。

[手機APP]

如果要下載 APP,可到App Store 或 Google Play 下載手機版 Cayenne 程式進行安裝。安裝完成後,登入註冊的帳號,就可看到主畫面(左方),以及 GPIO 的控制畫面(右方)的畫面。


也可以設定觸發規則及事件:

[Cayenne 的未來]

在 Cayenne 的網站上有一張圖,足以說明未來長遠的方向,包括以下 10個,有興趣的人可到
MyDevices / Feature 瞭解內容。


[參考資料]

Share:

星期二, 2月 14, 2017

Raspberry Pi 筆記(二十六):MPU-6050 加速度計與陀螺儀感測器

[2017/02/14]
目前正流行的空拍機,主要是機上安裝了加速度計與陀螺儀感測器,使得四軸的飛行器能夠漂浮在空中。MPU-6050是一個價格不高的六軸感測器,模組載有加速度計與陀螺儀的功能,我們可以透過 I2C 讀取感測器的值,作為改變飛行的方向與速度。以下就來看看如何利用Raspberry Pi 讀取 MPU-6050 六軸感測器的資料。

加速規,又稱加速計、加速針、加速度傳感器、重力加速度傳感器等,是測量加速度的裝置。相對於遠距感測的裝置,它測量的是自身的運動。加速規的應用之一是測量重力,特別是使用於重量測定法的加速規上,這樣的裝置稱為重力計。[維基百科]

陀螺儀(英文:gyroscope),是一種用來感測與維持方向的裝置,基於角動量守恆的理論設計出來的。陀螺儀主要是由一個位於軸心且可旋轉的轉子構成。 陀螺儀一旦開始旋轉,由於轉子的角動量,陀螺儀有抗拒方向改變的趨向。陀螺儀多用於導航、定位等系統。[維基百科]


[材料]

• Raspberry Pi 2 Model B x 1
• MPU-6050模組 x 1
• 連接線 x 4條

[接線]

將 Raspberry Pi 的第 1 pin (GPIO4)接到MPU-6050的VCC,第 3 pin (GPIO4)接到MPU-6050的SDA。其他 pin 連接如下表:

MPU-6050模組
Raspberry pi接腳
VCC
1
SDA
3
SCL
5
GND
6

[設定步驟]

進入 root 模式執行設定,並開啟 SPI:
# raspi-config

選項如下:7.Advanced Options -> A7 I2C -> Enable -> YES -> OK -> <Finish>

檢查是否MPU-6050是否可以被偵測到,先安裝I2C工具:
$ sudo apt-get install i2c-tools

使用 Raspberry Pi A版的要使用以下指令:
$ sudo i2cdetect -y 0

使用 Raspberry Pi B版的要使用以下指令:
$ sudo i2cdetect -y 1

這時如果正常,會出現以下畫面:

為了要使用 python 讀取I2C,我們需要安裝 smbus 模組:
$ sudo apt-get install python-smbus

讀取加速度計及陀螺儀資料的程式(取自Bitify):

#!/usr/bin/python
import smbus
import math

# Power management registers
power_mgmt_1 = 0x6b
power_mgmt_2 = 0x6c

def read_byte(adr):
    return bus.read_byte_data(address, adr)

def read_word(adr):
    high = bus.read_byte_data(address, adr)
    low = bus.read_byte_data(address, adr+1)
    val = (high << 8) + low
    return val

def read_word_2c(adr):
    val = read_word(adr)
    if (val >= 0x8000):
        return -((65535 - val) + 1)
    else:
        return val

def dist(a,b):
    return math.sqrt((a*a)+(b*b))

def get_y_rotation(x,y,z):
    radians = math.atan2(x, dist(y,z))
    return -math.degrees(radians)

def get_x_rotation(x,y,z):
    radians = math.atan2(y, dist(x,z))
    return math.degrees(radians)

bus = smbus.SMBus(0) # or bus = smbus.SMBus(1) for Revision 2 boards
address = 0x68       # This is the address value read via the i2cdetect command

# Now wake the 6050 up as it starts in sleep mode
bus.write_byte_data(address, power_mgmt_1, 0)

print "gyro data"
print "---------"

gyro_xout = read_word_2c(0x43)
gyro_yout = read_word_2c(0x45)
gyro_zout = read_word_2c(0x47)

print "gyro_xout: ", gyro_xout, " scaled: ", (gyro_xout / 131)
print "gyro_yout: ", gyro_yout, " scaled: ", (gyro_yout / 131)
print "gyro_zout: ", gyro_zout, " scaled: ", (gyro_zout / 131)

print
print "accelerometer data"
print "------------------"

accel_xout = read_word_2c(0x3b)
accel_yout = read_word_2c(0x3d)
accel_zout = read_word_2c(0x3f)

accel_xout_scaled = accel_xout / 16384.0
accel_yout_scaled = accel_yout / 16384.0
accel_zout_scaled = accel_zout / 16384.0

print "accel_xout: ", accel_xout, " scaled: ", accel_xout_scaled
print "accel_yout: ", accel_yout, " scaled: ", accel_yout_scaled
print "accel_zout: ", accel_zout, " scaled: ", accel_zout_scaled

print "x rotation: " , get_x_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)
print "y rotation: " , get_y_rotation(accel_xout_scaled, accel_yout_scaled, accel_zout_scaled)

結果畫面如下:

[參考資料]



Share:

Raspberry Pi 筆記(二十五):RFID 無線射頻辨識控制 LED

[2017/02/14]
我們常用的悠遊卡、門禁卡都是 RFID 無線射頻辨識的應用,無線射頻辨識(英文:Radio Frequency IDentification,縮寫:RFID)是一種無線通訊技術,可以通過無線電訊號識別特定目標並讀寫相關數據,而無需識別系統與特定目標之間建立機械或者光學接觸。[維基百科]

想做一個實驗是利用 RFID 來控制電磁閥的開關,這樣就可以做到門禁的功能,目前市售的門禁系統產品已經很成熟,且已經商品化許久。我們可以透過 RFID 相關實驗來瞭解門禁系統或其他相關的應用。我用的是 RFID-RC522,這個模組通用於Arduino 跟 Raspberry pi。

透過讀取授權的 RFID 卡片資訊,控制 LED燈號,也就是授權的卡片亮綠燈,非授權的卡片亮紅燈,以下就來看看線路及程式內容:

[材料]

• Raspberry Pi 2 Model B x 1
• RFID-RC522模組
• LED x 2個 (紅、綠各 1個)
• 麵包版 x 1
• 連接線 x 11條

[接線]

將 Raspberry Pi 的第7pin (GPIO4)接到綠色 LED的一支腳,第11pin (GPIO17)接到紅色 LED的一支腳,LED的另一支腳則接到第6pin (Ground)。第 24 pin (GPIO8)接到 RFID 模組的 SDA,第23pin (GPIO11)接到 SCK,其他 pin 連接如下表:

RFID-RC522模組
Raspberry pi接腳
SDA
24
SCK
23
MOSI
19
MISO
21
IRQ
none
GND
6
RST
22
3.3V
1

SPI匯流排定義四組 logic signals:
• SCLK—Serial Clock(自master輸出)
• MOSI/SIMO—Master Output, Slave Input(自master輸出)
• MISO/SOMI—Master Input, Slave Output(自slave輸出)

[設定步驟]

進入 root 模式執行設定,並開啟 SPI:
# raspi-config

選項如下:7.Advanced Options -> A4 SPI -> Enable -> YES -> OK -> <Finish>

重新開機後,設定config.txt:
$ sudo nano /boot/config.txt

找到以下這一行:
dtparam=spi=on

然後在他下方增加以下這一行:
dtoverlay=spi-bcm2708

重新開機,檢查 spi 模組是否已經安裝完成:
# lsmod | grep spi

如果出現以下這一列,表示 spi 安裝成功?
spi_bcm2835             6678  0

安裝 python-dev
$ sudo apt-get install python-dev

取得SPI-py程式碼,SPI-py是 python 讀取硬體 SPI 的擴充函式庫:
$ git clone https://github.com/lthiery/SPI-Py.git
$ cd SPI-Py
$ sudo python setup.py install
$ cd

安裝 MFRC522-python:
$ git clone https://github.com/mxgxw/MFRC522-python.git
$ cd MFRC522-python

讀取 RFID 卡片資料:
$ python Read.py

讀取的結果如以下畫面:

將 MFRC522-python 的 Read.py 改寫如以下程式,執行時,需將 MFRC522-python 目錄內的MFRC522.pyc 放在跟本程式同一目錄內。您可到 Github 下載原始程式。

[程式]


import time
import RPi.GPIO as GPIO
import MFRC522
import signal

GPIO.setmode(GPIO.BOARD)

#設定LED pin變數
LED0    = 7   
LED1    = 11
counter = 0

#設定為輸出
GPIO.setup(LED0,GPIO.OUT)
GPIO.setup(LED1,GPIO.OUT)


continue_reading = True

# 當按下 Ctrl + C時結束程式
def end_read(signal,frame):
    global continue_reading
    print "Ctrl+C captured, ending read."
    continue_reading = False
    GPIO.cleanup()

# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)

# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()

# Welcome message
print "Welcome to the MFRC522 data read example"
print "Press Ctrl-C to stop."

# 迴圈檢查是否取得 UID 及授權
while continue_reading:
    
    # Scan for cards    
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # If a card is found
    if status == MIFAREReader.MI_OK:
        print "Card detected"
    
    # Get the UID of the card
    (status,uid) = MIFAREReader.MFRC522_Anticoll()

    # If we have the UID, continue
    if status == MIFAREReader.MI_OK:

        # Print UID
        print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
    
        # This is the default key for authentication
        key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
        
        # Select the scanned tag
        MIFAREReader.MFRC522_SelectTag(uid)

        # Authenticate
        status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)

        # 檢查是否為授權卡片
        if status == MIFAREReader.MI_OK:
            MIFAREReader.MFRC522_Read(8)
            MIFAREReader.MFRC522_StopCrypto1()
            GPIO.output(LED0,GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(LED0,GPIO.LOW)
        else:
            print "Authentication error"
            GPIO.output(LED1,GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(LED1,GPIO.LOW)

執行的影片結果如下:

[參考資料]


Share:

星期四, 2月 09, 2017

Raspberry Pi 筆記(二十四):安裝微雪 Waveshare 3.5(A) LCD螢幕

 [2017/02/09]
Raspberry Pi 要顯示畫面,都得透過 HDMI 才能顯示,想說買一個可以直接接在 GPIO 的螢幕,看看效果如何。於是在網路上買了一個微雪的3.5吋LCD螢幕,解析度320x480,不僅原廠網站提供驅動程式及影像檔供安裝,支援的速度還蠻快的,主要是價錢還算合理。他的大小跟 Raspberrp Pi 一樣,外觀看起來就像這樣:
來一張側視圖:


查一下 3.5 吋的 LCD,有兩種,我買的是 (A) 類型,具規格來看,(B)類型採用 IPS [註1]的顯示技術,顯示效果更好。 相關技術規格可參考這裡

[設定步驟與程序]

驅動程式可直接到 waveshare 網站下載,雖然原廠有提供安裝程序,我將其簡化成以下步驟:

首先使用 root 登入:

# cd /boot
# wget http://www.waveshare.net/w/upload/4/4b/LCD-show-161112.tar.gz
# tar xzvf /boot/LCD-show-161112.tar.gz
# cd LCD-show/
# ./LCD35-show

重開機即可看到開機過程並進入視窗桌面。

有關微雪的產品,提供一個教學的網站,可到以[微雪課堂] 取得相關資料。

註1:IPS螢幕(In-Plane Switching,平面轉換)技術是日立公司於2001推出的液晶面板技術,俗稱“Super TFT”。

[資料來源]
微雪百科

Share:

【網站推薦】在網上學習全世界最好的課程 Coursera

[2017/02/09]
很久沒有推薦好的網站給大家了,要介紹給大家一個開放學習課程的網站:Coursera 。

Coursera 的每門課程都由來自世界上最好的大學和教育機構的頂尖教師授課。課程包括錄製視頻講座,自動評分和同儕評審的作業,以及社區討論論壇。完成課程後,您將收到可共享的電子課程證書。不過要取得證書大多數是需要付費的,有些課程在一週的課程結束後,會有測驗,也是需要付費後才能參加測驗。


               課程可分成以下大類:

               ⧭  藝術與人文
               ⧭  商務
               ⧭  電腦科學
               ⧭  資料科學
               ⧭  生命科學
               ⧭  數學和邏輯
               ⧭  個人發展
               ⧭  物理科學與工程
               ⧭  社會科學
               ⧭  語言學習


教授的課程各種語言都有,有興趣的人可以在線上取得課程學分。

Share:

Raspberry Pi 筆記(二十三):安裝版本管理系統 Subversion

[2017/02/08]
最近接到一個客戶的需求是希望我們協助安裝版本管理系統(Version Control),找了一些open source相關的工具,包括 Apache的Subversion(SVN)、Concurrent Version System(CVS)、Git 等都是有名的軟體,最後決定幫客戶使用Visual SVN在Windows Server上。

版本控制(Revision control)是維護工程藍圖的標準作法,能追蹤工程藍圖從誕生一直到定案的過程。此外,版本控制也是一種軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步。[維基百科]

簡單的說,就是將每次修改的程式碼、文件等,記錄任何異動的歷程,並且為每次的修改加上變更序號。如此,就可以追蹤過去修改的紀錄,且多人共同開發時,就有一致的程式或文件。

如果要要在Raspberry Pi上安裝版本管理系統,可以安裝 Git 或 Subversion,雖然 Git 用的人數蠻多的,但個人還是對 Subversion 比較喜愛,以下是安裝的步驟與方法:

[設定步驟]

執行安裝指令,過程會將 lib等相關套件一併安裝進來:
$ sudo apt-get install subversion

建立一個目錄來存放 repositories :
$ mkdir -p /home/pi/svn

再建立一個名為 led 的專案(project):
$ sudo svnadmin create /home/pi/svn/led

目錄內會建立幾個檔案,如下圖:

再建立專案,名為 led:
$ mkdir -p /home/pi/projects/led
$ cd /home/pi/projects/led

我用 nano 編輯一個名為 led.py 的檔案,放在上述目錄內,再執行 svn import 將 led 專案匯入svn。
$ sudo svn import /home/pi/projects/led/ file://localhost/home/pi/svn/led

會出現以下視窗,再按 Ctrl + x 離開這個視窗

離開視窗後,會出現以下畫面,就可開始使用svn,但只限本機使用。

如果要透過網路存取,就必須再安裝 Apache Web Server,安裝步驟如下:
$ sudo apt-get install apache2 libapache2-svn

編輯 dav_svn.conf 檔設定:
sudo nano /etc/apache2/mods-available/dav_svn.conf

在檔案最後面加上以下這段設定:
<Location /svn>
   DAV svn
  SVNParentPath /home/pi/svn
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user
</Location>

存檔完成後離開,重新啟動 Apache:
$ sudo /etc/init.d/apache2 restart

接著改變目錄的權限:
$ sudo chown -R www-data:www-data /home/pi/svn

現在再建立 SVN 使用者,這裡建的是我的英文名字 ceiling:
$ sudo htpasswd -c /etc/apache2/dav_svn.passwd ceiling

-c 選項只有在建立第一個使用者時使用這個參數,要新增第二個使用者,如果還用這個參數,會將之前的使用者刪除,請特別注意。

現在使用瀏覽器看到建立的專案了,只要輸入該主機 IP,後面接著 /Repo名稱/專案名,就可以看到該目錄內的檔案了。

http://192.168.1.112/svn/led

輸入帳號密碼後,瀏覽器畫面是這樣:

[個人電腦端安裝程式]

SVN Server 安裝完成後,個人電腦端需要工具跟  Server  連線,在 Windows 最常被使用的TortoiseSVN , Linux的用戶可使用 kdesvn進行連線。Windows 的用戶如要安裝軟體,可到以下網站進行下載:


安裝完成後,只要在桌面按滑鼠右鍵,就可以看到以下視窗:

選擇 [Repo-browser],就可以看到 Server 上的檔案了。



[參考資料]


Share:

星期四, 2月 02, 2017

Raspberry Pi 筆記(二十二):安裝Icinga監控工具及PhpMyAdmin

[2017/02/02]
公司的系統大多使用 Nagios 作為監控服務的免費工具,所謂「監控」是當服務發生中斷時,提早告知系統管理者的工具。以往都是安裝在一部伺服主機上,不僅價格高,使用的資源也很低,如果受監控的標的少,可以改用RaspBerry Pi取代,那就可節省一筆可觀的經費。 Icinga 是由 Nagios 開發者成立的一個獨立專案,Icinga 可以完全相容 Nagios 的程序及擴充功能,感覺介面更美觀。

[安裝步驟]

先更新系統並安裝 Icinga 軟體:
$ sudo apt-get update
$ sudo apt-get install icinga icinga-doc

安裝過程中會出現一個視窗,詢問 Icinga管理者 icingaadmin 的密碼:

之後還會出現一個詢問是否透過 Web 介面使用外部指令的視窗:

安裝過程中,如果系統沒有安裝過Apache,安裝 Icinga時,會一併安裝 Apache2。
安裝完成後,可用瀏覽器直接連上 Icinga,筆者 Raspberry Pi 的 IP 是192.168.1.112,只要輸入http://192.168.1.112/icinga 。當出現輸入帳號密碼的視窗,輸入icingaadmin ,密碼是安裝過程中自訂的密碼即可。

[安裝 IDO2DB]


Icinga可以將收到的監控數值寫進資料庫(如MySQL),需要透過 IDOUtils 工具,並在資料庫建立 Icinga所需的Table,以下就試著安裝 IDOUtils (Icinga Data Output Utils) 連接 MySQL,安裝指令如下:
$ sudo apt-get install icinga-idoutils mysql-server libdbd-mysql mysql-client

出現 MySQL的 root密碼輸入畫面:

允許使用 dbconfig-common 設定 icinga-idoutils 資料庫,輸入 [Yes]

選擇 icinga-idoutils 使用的資料庫種類:[mysql]

輸入先前設定資料庫管理者的密碼:

再輸入 icinga-idoutils 應用程式讀取 MySQL所需密碼,再輸入一次確認。大約再五分鐘後完成安裝。

接著啟動 IDO2DB daemon:
$ sudo nano /etc/default/icinga

將 :  IDO2DB=no
改成: IDO2DB=yes

重新啟動  ido2db 服務
$ sudo service ido2db start

要完成  IDO2DB 設定,可以啟動 idomod 模組,將設定範例複製到 icinga/modules 目錄下:
$ sudo cp /usr/share/doc/icinga-idoutils/examples/idoutils.cfg-sample /etc/icinga/modules/idoutils.cfg
$ sudo service icinga restart

[安裝 phpmyadmin]

phpyyadmin 是一套管理MySQL 資料庫的工具,透過網頁的方式進行管理,既然是網頁,還得安裝Apache等Web 服務的工具,這裡先假設系統已經安裝完成 Apache ,以下是安裝phpmyadmin軟體的程序與步驟:
apt-get install phpmyadmin

詢問是否使用 dbconfig-common 設定 phpmyadmin 資料庫?[Yes]

輸入 MySQL 資料庫管理者密碼:

輸入 phpmyadmin 密碼:

選擇使用何種 Web Server? 筆者使用 apache2。


安裝結束後,還要設定 apache,需在 /etc/apache2/apache2.conf 檔案內,加上下列一行:
Include /etc/phpmyadmin/apache.conf

$ sudo service apache2 restart

安裝完成後,可用瀏覽器直接連上 phpmyadmin,筆者 Raspberry Pi 的 IP 是192.168.1.112,只要輸入http://192.168.1.112/phpmyadmin 。當出現輸入帳號密碼的視窗,輸入 root ,密碼是安裝過程中自訂的密碼即可。

打開 Icinga 資料庫畫面,證實 Icinga 資料寫進 MySQL 資料庫中。

這樣就順利使用 Icinga進行監控了,至於如何安裝 Agent在受監控標的,請看後續....

[參考資料]


Share: