星期五, 5月 19, 2017

Arduino筆記(二十三):無線射頻 RFID 控制電磁閥開關

[2017/05/18]
在今年二月時,買了 RFID RC522的模組,使用樹莓派進行連接,測試無線射頻的模組正常後,就沒有再找時間測試一下 Arduino 如何作為門禁系統使用。透過電磁閥控制門栓,當授權的通行卡感應,就會亮起綠燈,同時電磁閥也會作動縮入,門就可以開啟。如果是非授權的卡片,則亮紅燈,電磁閥不動作。以下就來看看如何連接。下圖綠燈亮,表示感應正確,電磁閥縮入。


[材料]

• Arduino Uno x 1
• RFID-RC522模組 (含讀卡機及卡片)
• LED x 2個 (紅、綠各 1個 )
• 220 歐姆 x 2
• 1路繼電器 x 1
• 麵包板 x 1
• 5V電磁閥 x 1
• 連接線 x 若干條

[接線]

將 RC522模組,依照下列表連接到 Arduino。Arduino Pin2接到繼電器 IN,繼電器的VCC及GND,分別接 Arduino 5V及 GND。6V電池組正極接在繼電器另一端,電池組負極接電磁閥一腳,另一腳接在繼電器,與電池組並排。紅色及綠色 LED 負極接地,正極分別接 220歐姆電阻一端,電阻另一端分別接 Arduino Pin3(紅色LED)及 Pin4(綠色LED)。

RFID-RC522模組
Arduino接腳
SDA
Pin 10
SCK
Pin 13
MOSI
Pin 11
MISO
Pin 12
IRQ
None
GND
GND
RST
Pin 9
3.3V
3.3V



[安裝 RC522 函式庫]

如果 Arduino 的匯入程式庫中沒有MFRC522這個項目,表示沒有安裝相關函式庫,可以到 github/miguelbalboa 下載,解壓縮,放在 Arduino 主程式資料夾內的 libraries目錄內,名為 RFID。

測試一下功能是否正常,可以開啟檔案( File) ➔ 範例(Examples) ➔ MFRC522 ➔  DumpInfo ,然後上傳到 Arduino,打開序列埠監控視窗,拿出感應卡靠近讀卡機,可以看到以下資訊:

畫面中Card UID後面的 4 個 16進位數,就是這張卡的卡號,要抄寫來,等一下程式中需修改成這個卡號。


[程式]

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

// 設定電磁閥開關及紅綠燈Pin 值
int mSwitch = 2;
int LEDRed = 3;
int LEDGreen = 4;

MFRC522 mfrc522(SS_PIN, RST_PIN);   // 建立 MFRC522.

void setup()
{
  pinMode(LEDRed, OUTPUT);
  pinMode(LEDGreen, OUTPUT);
  pinMode(mSwitch, OUTPUT);

  Serial.begin(9600);   // 設定串列通訊速率
  SPI.begin();      // 設定  SPI bus
  mfrc522.PCD_Init();   // 設定 MFRC522
  Serial.println(" Put your card close to the reader...");
  Serial.println();
}
void loop()
{
  digitalWrite(LEDGreen, LOW);
  digitalWrite(LEDRed, LOW);
  digitalWrite(mSwitch, LOW);
  // 是否為新卡?
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // 選擇一張卡
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //Show UID on serial monitor
  Serial.print("Card No. :");
  String content = "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
    content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print(" Message : ");
  content.toUpperCase();

  //需要改成可通行的卡號
  if (content.substring(1) == "60 1D 81 7A")
  {
    Serial.println(" Pass... ");
    Serial.println();
    // 亮綠燈, 電磁閥開
    digitalWrite(LEDGreen, HIGH);
    digitalWrite(LEDRed, LOW);
    digitalWrite(mSwitch, HIGH);
    delay(3000);
  }

  else   {
    Serial.println(" Stop...");
    // 亮紅燈, 電磁閥關
    digitalWrite(LEDGreen, LOW);
    digitalWrite(LEDRed, HIGH);
    digitalWrite(mSwitch, LOW);
    delay(3000);
  }
}

[執行結果]



測試過程的影片如下:

[參考資料]

• github.com:miguelbalboa 
• Random nerd Tutorials:Security Access using MFRC522 RFID Reader with Arduino


Share:

星期五, 5月 12, 2017

Raspberry Pi 筆記(四十三):Pi 也能當作Airplay音效輸出,安裝 Shairport Sync

[2017/05/12]
很早之前就知道 Pi 可以作為 AirPlay 的接收器,只是一直沒有試著安裝相關套件,作為 iPhone 的無線播放器。昨天剛完成使用 Pi 作為 AirPrint 無線列印伺服器,就順便試著安裝 AirPlay 所需的套件,作為無線音樂的播放器。

可以在 Pi 系統執行 AirPlay 的套件,較為著名的是 Shairport,自2014 年以後作者就沒有持續再更新了。還好,其他好心人士將這套改寫成 Shairport Sync,Shairport Sync是 Shairport 1.0 的一個分支。目前最新的版本是V3.0,相較於過去的版本,提升了更好的音量控制、支持Apple ALAC解碼器及支援到最高 32 bits 的音效。唯一比較可惜的是 Shairport Sync不支援影片或照片串流傳送。以下就來看看如何安裝 Shairport Sync:




[安裝步驟]

(1) 安裝相依性套件
$ sudo apt-get install build-essential git xmltoman
$ sudo apt-get install autoconf automake libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev
$ sudo apt-get install avahi-daemon libavahi-client-dev libssl-dev libsoxr-dev 

(2) 下載原始程式:
$ git clone https://github.com/mikebrady/shairport-sync.git

(3) 變更目錄,執行重新設定:
$ cd shairport-sync
$ autoreconf -i -f

(4) 執行參數設定:
$ ./configure --with-alsa --with-stdout --with-pipe --with-avahi \
              --with-ssl=openssl --with-metadata --with-systemd 

(5) 編譯程式:
$ make

(6) 安裝:
$ sudo make install

(7) 設定用戶群組
要完成安裝,需要定義 shairport-sync 的群組及用戶。這是一個安全措施,要讓這個帳號沒有登入的權限,且具有 audio 群組的成員身份,才能存取音效硬體。
$ sudo groupadd -r shairport-sync
$ sudo useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync

• 如果要在 Pi 開機後自動啟動 Shairport Sync,可輸入:
$ sudo systemctl enable shairport-sync

• 重新啟動Shairport Sync
$ sudo systemctl start shairport-sync

[設定USB音效卡]

我使用的USB音效卡是 Uptech SA120,接上後不需安裝驅動程式,即可使用。但是要播放音樂,需要將設定由 3.5mm 音孔輸出改為USB音效卡介面輸出。

• 執行以下指令,確認 USB音效功能是否正常:
$ lsusb 

如下圖紅線部分,USB可正常被讀取。

• 看一下目前可播放的 Device有哪幾個?
$ aplay -l 

• 設定音效由 USB輸出,修改 alsa.conf 設定檔,將檔案內如圖片的兩行,由 0 改成 1,改由 Card 1輸出即可。
$ sudo nano /usr/share/alsa/alsa.conf



[iPhone 播放音樂]

按下如左圖紅框處,即可選擇輸出是 iPhone或是 AirPlay 的設備。


[參考資料]

• Github:mikebrady/shairport-sync

Share:

星期四, 5月 11, 2017

Raspberry Pi 筆記(四十二):iPhone 雲端列印 AirPrint

[2017/05/11]
目前看公司郵件大多使用手機,有些文件在手機上,如果要印出來,就得大費周章,從手機上傳到雲端儲存空間或是透過 Mail 的方式將檔案寄出來,在筆電開啟後印出來。如果 Pi 可以當作 Printer Server (那是一定可以的),且支援 AirPrint 遠端列印功能 (我用的是 iPhone手機),就很完美了。透過手機就可直接將文件從印表機印出來,只是不知要安裝何種套件?有沒有支援 Pi?Google一下,找到 CUPS 這套軟體具備 AirPrint功能,不僅是開放源碼,且支援 Pi 的作業系統,以下就來看看如何安裝。


CUPS(為 Common Unix Printing System,UNIX 通用列印系統的縮寫,是一個類 Unix 操作系統的組合式印刷系統,允許一台電腦作為列印伺服器。CUPS接受一個客戶端的電腦進程,並送到相應的印表機。目前開發廠商是頻果公司,為了提供 macOS 及其他類 Unix的作業系統使用的列印系統,CUPS使用 Internet Printing Protocol (IPP) 協定作為本機及網路印表機的通訊,目前最新版是 2.2.3。

[圖片取自:維基百科]

[安裝步驟]

(1) 更新 Pi 系統
$ sudo apt-get update
(2) 安裝及設定 CUPS
• 安裝CUPS主程式:
$ sudo apt-get install cups
• 將使用者 pi 加入 lpadmin 管理印表機群組
$ sudo usermod -a -G lpadmin pi
• 備份一份設定檔,並修改CUPS設定檔
$ sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bak
$ sudo nano /etc/cups/cupsd.conf

找到 Listen localhost:631 那一行,前面加上 # 當作註解,另外加上一行 Port 631。

找到 Restrict access to the server 那一行,在 Order allow,deny 下加一行 Allow @Local,如下圖紅色底線部分,存檔離開。


• 重新啟動 CUPS 服務。
$ sudo service cups restart

(3) 安裝 Fuji-Xerox CM205印表機驅動程式
我的印表機型號是 Fuji-Xerox CM205b,原廠網站沒有提供支援 Linux 的驅動程式,我是到  The Linux Foundation -OpenPrinting 這個網站去查一下CUPS是否有支援我的印表機型號。很幸運的有支援CM205,建議的驅動程式是 foo2hbpl2。各位可以依據自己的印表機設定或安裝驅動程式。


• 安裝 foo2hbpl2之前,需先安裝 ghostscript,指令如下:
$ sudo apt-get install ghostscript
• 安裝 foo2hbpl2 印表機驅動程式,foo2zjs是一個開放源碼的軟體
$ wget -O foo2zjs.tar.gz http://foo2zjs.rkkda.com/foo2zjs.tar.gz
• 解壓縮:
$ tar zxf foo2zjs.tar.gz
$ cd foo2zjs
• 進行編譯:
$ make
• 安裝 foomatic XML 及其他檔案:
Install driver, , and extra files:
$ sudo make install
• 重新啟動 spooler:
$ sudo make cups

(4) 連線設定新增印表機
開啟瀏覽器連上 CUPS 的 Web 介面,需使用 HTTPS 協定,而且要指定 Port 631。以我的 pi為例,IP是 192.168.1.103,直接在瀏覽器列輸入:
https://192.168.1.103:631


• 按下 [Administration],出現需要驗證的畫面,使用者名稱輸入 pi,填入密碼,按[登入]:

• 新增印表機,按下 [Add Printer],選擇 Local Printers下的 FUJI XEROX印表機,按下[Continue]。


• 在 Sharing 的方塊要選取,按下[Continue]。

• 在 Make 項目選擇 Fuji Xerox,按下[Continue]。

• 在 Model項目選擇 CM205 型號,按下[Add Printer]。

• 如果沒有適合的驅動程式,也可以上傳 PPD (PostScript Printer Description)檔,作為印表機的驅動設定。按下[Add Printer]。

• 我的印表機支援彩色列印,需將 Color Mode 設定為 Color,否則列印出來的文件,只有黑白的。

[iPhone列印測試]

在 iPhone手機的郵件中找到一封有 Pixar 圖片的廣告郵件當作範例,按下左圖紅框的按鍵,出現右圖後,再按下[列印]。



按下[印表機]會出現如右圖的選項,選擇印表機,回到左邊畫面,設定列印份數及列印範圍,按下[列印]即可。



印出結果:左邊沒設定預設為Color,設定後可正常印出右邊的彩色文件。

[參考資料]

• 維基百科:CUPS
• Fuji-Xerox CM205 Printer Driver:foo2hbpl: a linux printer driver for HBPL protocol
• Techradar:How to turn the Raspberry Pi into a wireless printer server
Share:

星期六, 5月 06, 2017

Raspberry Pi 筆記(四十一):安裝 Monitorix 監控工具

[2017/05/06]
公司最常用的監控工具是 Icinga (可參考:Raspberry Pi 筆記(二十二):安裝Icinga監控工具及PhpMyAdmin) 及 Cacti,可是還有其他蠻多不同的工具,如 Zabbix 及 OpsView等,今天我要試著安裝 Monitorix 這套監控工具,看看跟 Incinga 差別在哪裡?


[安裝步驟]

更新系統:
$ sudo apt-get update

安裝 rrdtool、perl等工具:
$ sudo apt-get install rrdtool perl libwww-perl libmailtools-perl libmime-lite-perl
$ sudo apt-get install librrds-perl libdbi-perl libxml-simple-perl libhttp-server-simple-perl 
$ sudo apt-get install libconfig-general-perl libio-socket-ssl-perl

下載 Monitoxix 程式檔:
$ wget http://www.monitorix.org/monitorix_3.9.0-izzy1_all.deb

安裝 Monitoxix:
$ sudo dpkg -i monitorix*.deb

修復程式相依性:
$ sudo apt-get -f install

安裝完成後,可透過瀏覽器看到Pi上的監測值,不過要稍等一下才看的到圖形的變化。以我的 Pi 為例,可輸入以下網址,即可看到上述首頁:
http://192.168.1.103:8080/monitorix/

按下 [Ok] 後,可以看到各項監測值,包括:

監測畫面如下:


[如何監控多台主機]

Monitorix 也有監測多部主機的功能,需先修改以下設定檔:

$ sudo nano /etc/monitorix/monitorix.conf

往下翻頁到 Multihost 那段 (如以下畫面),將 enable = n 那行的 = n 改成 = y。


• 可將檔案內的 remotehost_list = server 1... 改成自訂的主機名稱,我改成rPi2...(如下圖)
• remotehost_dest 的 0-2 設定連線的 IP或 URL

重新啟動 Monitorix 。
$ sudo service monitorix restart


[參考資料]

• Monitorix官方網站:http://www.monitorix.org/

Share: