วันศุกร์ที่ 11 มีนาคม พ.ศ. 2559

รายละเอียดการติดตั้ง PiTFT บน Raspi A+ เพื่อให้เป็นเครื่องสแกนลายนิ้วมือ

บันทึกนี้เขียนขึ้นเพื่อเก็บรายละเอียดเกี่ยวกับการติดตั้งโปรแกรม และระบบต่างๆ บน Raspberry Pi A+ กับ PiTFT 2.8" Capacitive เพื่อทำเป็นเครื่องสแกนลายนิ้วมือ โดยจะใช้ Fingerprint Reader FZ1035 (China)

Raspberry Pi A+ ต่อ PiTFT 2.8" Capacitive และโปรแกรมตัวอย่าง


สำหรับ Raspberry Pi A+ โหลดเวอร์ชัน Wheezy และ Pi 2 โหลดเวอร์ชัน Jessie ส่วน Pi3 ตอนนี้ไม่สามารถใช้ Image ที่ดาวน์โหลดได้ บูตไม่ขึ้น (ยังไม่มีเวลาดูรายละเอียด ขอติดไว้ก่อน)

เมื่อดาวน์โหลดเสร็จให้ใช้ SD Format เพื่อเคลียร์ SD Card และใช้ Win32Image เขียนไฟล์ .img ที่ดาวน์โหลดมา (อยู่ในไฟล์ .zip)

เสร็จแล้วก็เอา SD Card ไปใส่ใน Raspberry Pi แล้วเปิดเครื่อง รอสักพักจะเข้าสู่หน้าจอตั้งค่า หรือ raspi-config

หน้าจอตั้งค่า raspi-config เข้าไปตั้งค่า Advance 
ถึงตัวหนังสือจะเล็กไปสักหน่อย ก็พยายามมองๆ หาการตั้งค่าในส่วน Advance โดยผู้เขียนจะเปิดใช้งาน SPI, I2C, SSH และ Serial แล้วก็เปลี่ยนชื่อ hostname ใหม่ให้สอดคล้องกับงานที่เราจะทำ หรือทำให้จำได้ง่าย เช่นผู้เขียนเปลี่ยนชื่อเป็น raspi-a เพื่อให้รู้ว่าเป็น Raspberry Pi A+

และผู้เขียนใช้การเชื่อมต่อผ่าน Serial หรือ UART แทนการเชื่อมต่อด้วย ssh ด้วยเหตุผล 2 ประการ คือ ssh จะหลุดมีรีบูทหรือเชื่อมต่อไม่ได้ และ สามารถดู Error ขณะที่ปิดหรือเปิดเครื่องได้

การเชื่อมต่อ UART

        /-- Tx   --- Rx  --- 10 --\
COM ---|--- Rx   --- Tx  ---  8 ---|--- Raspi A+            \-- Gnd  --- Gnd ---  6 --/



เชื่อมต่อผ่าน UART CP2104 ผ่านคอมพอร์ท


ตั้งค่า Wi-Fi

สิ่งสำคัญคือ อินเตอร์เน็ต และ Raspberry Pi A+ มีช่อง USB เพียงช่องเดียวดังนั้นต้องต่อพ่วงเพื่อให้ใช้งาน Keyboard และ Wi-Fi ดองเกิ้ลได้

การตั้งค่ามี 2 แบบ คือ

1. แก้ไขไฟล์ /etc/network/interfaces

auto lo
iface lo 
inet loopback
allow-hotplug wlan0 
auto wlan0
iface wlan0 
inet dhcp  
  wpa-ssid "ชื่อ ssid"  
  wpa-psk  "รหัสผ่าน"

2. แก้ไขไฟล์ /etc/wpa_supplicant/wpa_supplicant.conf
network={
    ssid="ชื่อ SSID"
    psk="รหัสผ่าน"
}
ในระบบของ PiTFT เป็น Raspbian ซึ่งการแก้ไขจะเป็นแบบที่ 2 แก้ไขแล้วก็สั่งรีสตาร์ทอีกครั้งหนึ่ง ถ้าไม่มีอะไรผิดพลาดก็จะสามารถเข้าอินเตอร์เน็ตได้แล้ว

แล้วก็ตามธรรมเนียมของ Ubuntu หรือ Debian จะต้องอัพเดทและอัพเกรดระบบสักหน่อย เพื่อปรับให้ระบบทันสมัย เพราะมีการแก้ไข ปรับเปลี่ยนระบบเพื่อความเหมาะสมอยู่เสมอ
sudo apt-get updatesudo apt-get upgrade
ขั้นตอนการอัพเกรดอาจจะนานสักนิด ก็ขึ้นอยู่กับความเร็วอินเตอร์เน็ตที่ใช้

ปัญหาในการติดตั้ง


sudo mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf ~
export FRAMEBUFFER=/dev/fb1
startx

จะไม่สามารถทำได้ให้ติดตั้งเพิ่มเติมดังนี้

 sudo apt-get install xserver-xorg-video-fbturbo


สร้างปุ่มปิดเปิดเครื่อง

บอร์ดเสริม PiTFT จะมีปุ่มกดมาให้ 4 ปุ่ม แต่ละปุ่มจะมีหมายเลขขา I/O ที่ใช้กำกับอยู่ ผู้เขียนเลือกเอาปุ่มที่ 2 จากล่างหรือขา 23 เป็นปุ่ม ปิด/เปิด เครื่อง ก็กำหนดขั้นตอนตามวิธีการของ AdaFruit ได้ดังนี้


  1. เพิ่ม rpi_power_switch ลงในไฟล์ /etc/modules 
  2. สร้างไฟล์ /etc/modeprobe.d/adafruit.conf แล้วเพิ่มบรรทัด options rpi_power_switch gpio_pin=23 mode=0
  3. รันคำสั่ง sudo modprobe rpi_power_switch เพื่อให้ปุ่มใช้งานได้ทันทีไม่ต้องรอบูทเครื่องใหม่
3 ขั้นตอนแค่นี้เราก็สามารถกดปุ่ม 23 เพื่อปิดเครื่อง และกดอีกครั้งเพื่อเปิดเครื่อง ก็สะดวกดี


กำหนด Right-click

หากต้องการกำหนดให้กดค้างให้เป็น Right Click ทำตามวิธีการนี้

sudo nano /etc/X11/xorg.conf.d/99-calibration.conf

เพิ่ม Option ใน Section "InputClass" ดังนี้

Section "InputClass"  ...
  Option "EmulateThirdButton" "1"  Option "EmulateThirdButtonTimeout" "750"  Option "EmulateThirdButtonMoveThreshold" "30"
EndSection


เมื่อกดหน้าจอค้าง 750ms จะเป็นการคลิกเม้าส์ปุ่มขวา


ติดตั้ง Samba เพื่อเข้าถึงไฟล์ผ่านเน็ตเวิร์ค

sudo apt-get install samba samba-common-bin

เสร็จแล้วแก้ไขไฟล์ smb.conf ดังนี้

workgroup = WORKGROUPwins support = yes
[NAS] comment=Raspberry Pi NAS path=/home/pi/nas browseable=Yes writeable=Yes only guest=no create mask=0777 directory mask=0777 public=No

ถ้าไม่ต้องการกำหนดรหัสผ่านให้แก้ไข public = yes แต่ถ้าใช้เน็ตร่วมคนอื่นก็ควรป้องกันไว้สักนิด 
sudo smbpasswd -a pi 
แล้วป้อนรหัสผ่านให้เหมือนกัน 2 ครั้ง

หลังจากนั้นให้สร้างไดเรคทอรี /home/pi/nas ด้วย พร้อมกับกำหนดสิทธิ์ให้เป็น 777 เพื่อให้เข้าถึงไฟล์

โดยรวมก็ประกอบด้วยขั้นตอนเพียงเท่านี้ก็สามารถใช้งานได้แล้ว แต่สำหรับผู้เขียนจะมีติดตั้งอื่นๆ เพิ่มเติม เช่น ฟังเพลง, เพิ่ม Python 3 ติดตั้ง Web Server และ MySQL Client สำหรับ Python สิ่งเหล่านี้จะเอามาเพิ่มเติมภายหลัง...

ตัวอย่างโปรแกรม python

#!/usr/bin/python
from Tkinter import *
class App:
  def __init__(self, master):
    frame = Frame(master)
    frame.pack()
    self.btnScan = Button(frame, height=5, width=8, text="Scan", fg="blue", command=self.btnScanClick)
    self.btnScan.pack(side=LEFT, pady=60)
    self.btnEnroll = Button(frame, height=5, width=8, text="Enroll", fg="blue", command=self.btnEnrollClick)
    self.btnEnroll.pack(side=LEFT, pady=60)
    self.btnDelete = Button(frame, height=5, width=8, text="Delete", fg="blue", command=self.btnDeleteClick)
    self.btnDelete.pack(side=LEFT, pady=60)
    self.btnQuit = Button(frame, text="Quit", fg="red", command=frame.quit)
    self.btnQuit.pack(side=BOTTOM)
    self.btnQuit.place(rely=1.0, relx=1.0, x=0, y=0, anchor=SE)

  def btnScanClick(self):
    print("You selected SCAN button")

  def btnEnrollClick(self):
    print("You selected Enroll button")

  def btnDeleteClick(self):
    print("You selected Delete button")

root = Tk()
root.attributes("-fullscreen", True)
root.config(cursor="none")
app = App(root)
root.mainloop()


ติดตั้งไลบรารีสแกนลายนิ้วมือ

เพิ่มแหล่งอัพเดทข้อมูลด้วยคำสั่ง

echo "deb http://apt.pm-codeworks.de wheezy main" | sudo tee -a /etc/apt/sources.list
wget -O - http://apt.pm-codeworks.de/pm-codeworks.de.gpg.key | sudo apt-key add -
จากนั้นก็อัพเดทข้อมูล และติดตั้งแพ็คเก็จ

sudo apt-get update
sudo apt-get install python-fingerprint
โดยปกติแล้วจะเชื่อมต่อผ่านทาง Serial Port หรือ ttyUSB0 ซึ่งระบบจะยอมให้ root ใช้งานได้ แต่ผู้ใช้ทั่วไปจะไม่สามารถใช้งานได้ ดังนั้นจึงต้องเพิ่มสิทธิ์ให้ผู้ใช้ทั่วไป (ในที่นี้คือ pi) สามารถใช้งานได้ โดยให้อยู่ในกลุ่ม dialout ด้วยคำสั่งนี้

sudo usermod -a -G dialout pi
เมื่อเรียบร้อยแล้ว ให้ลองเข้าไปทดสอบได้ที่

cd /usr/share/doc/python-fingerprint/examples/
เลือกตัวอย่างสำหรับ Enroll ข้อมูล เพื่อเก็บลายนิ้วมือก่อนเป็นอันดับแรก


การต่อสายสำหรับ USB TTL

            /-- Tx  ---  Rx  --\USB TTL ---|--- Rx  ---  Tx  ---|--- Fingerprint            \-- GND ---  Gnd --/

การต่อสายผ่าน UART Pin ของ Raspberry Pi

         /-- 8  ---  Rx  --\GPIO ---|--- 10 ---  Tx  ---|--- Fingerprint         \-- 6  ---  Gnd --/

ยกเลิกการเชื่อมต่อ Shell ผ่าน UART

ปกติแล้ว UART Pin จะมีไว้สำหรับ Debug หรือเชื่อมต่อเป็น Console Login ซึ่งมีประโยชน์อย่างมากสำหรับคนที่ดูแลระบบ แต่กรณีนี้พอร์ท USB มีเพียง 1 พอร์ท และใช้สำหรับ Internet แล้ว และการใช้งานจริงก็ไม่สะดวกที่จะต่อหัวอ่านผ่านทาง USB ดังนั้นจึงต้องต่อผ่าน UART โดยตรง 

วิธีการให้เข้าไปยกเลิกการใช้งาน Shell ผ่าน Serial Port เสียก่อน มีสองวิธีการ คือ 

  1. แก้ไขไฟล์ /etc/inittab โดยใส่เครื่องหมาย Comment (#) ไว้บรรทัดที่เป็นของ Serail 
  2. ใช้ raspi-config เข้าไปที่เมนู Advance -> Serial แล้วยกเลิกการใช้งาน
แล้วก็รีสตาร์ทเครื่องครั้งหนึ่ง ตอนนี้ก็ไม่สามารถต่อผ่าน Console ได้แล้ว และสามารถเอาขา GPIO14 และ GPIO15 ไปใช้งานได้แล้ว

ใส่เครื่องหมาย # เพื่อยกเลิกการรอรับการเชื่อมต่อทาง Serial Port

ยกเลิก login ทาง Serial Port


แก้ไขซอร์สโค้ด

เมื่อติดตั้งเรียบร้อยแล้วลำดับต่อไปก็แก้ไขตัวอย่าง เพราะเดิมโปรแกรมจะเรียกผ่านทาง ttyUSB0 เราต้องเปลี่ยนให้เป็น ttyAMA0 ที่เป็น Serial Port 

แก้ไข ttyUSB0 ให้เป็น ttyAMA0

ทดสอบอีกครั้งหนึ่ง

ทดสอบ Enroll template ที่ 4 หมายถึงนิ้วลำดับที่ 5

ถ้าผ่านถึงตอนนี้ก็แสดงว่าใช้งานได้ตามปกติแล้ว ต่อไปก็เป็นลำดับการเขียนโปรแกรมแล้ว ซึ่งจะมาอัพเดทกันทีหลัง...









ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...