วันจันทร์ที่ 28 พฤศจิกายน พ.ศ. 2559

ติดตั้งจอ PiTFT 2.8 บน Raspberry Pi A+ อีกครั้ง

หลังจากที่ไม่ได้ใช้จอ PiTFT 2.8 เป็นเวลาหลายเดือนก็นึกอยากใช้อีกครั้ง คราวนี้กลับไปหาดาวน์โหลด Image File ตัวใหม่ของ Raspberry Pi ที่สนับสนุนการทำงานของจอ PiTFT ก็ดาวน์โหลดจากเว็บ Adafruit นั่นแหละ

แต่ลงไปแล้วยังไงก็ไม่ผ่าน หน้าจอติดแต่ไม่สามารถใช้จอสัมผัสได้ เช็คแล้วติด Error ที่ spi เช็คอยู่นานสุดท้ายถึงบางอ้อตรงที่จอเป็น Capacitive แต่ไปโหลด Image ของ Resistive มานี่เอง คราวนี้จึงเขียนใหม่อีกอีกรอบ

รายละเอียดทางเทคนิคของ Raspberry Pi A+

  • BCM2835
    • The Broadcom processor used in Raspberry Pi 1
  • BCM2836
    • The Broadcom processor used in Raspberry Pi 2
The Model A+ is the low-cost variant of the Raspberry Pi. It replaced the original Model A in November 2014. Compared to the Model A it has:
  • More GPIO. The GPIO header has grown to 40 pins, while retaining the same pinout for the first 26 pins as the Model A and B.
  • Micro SD. The old friction-fit SD card socket has been replaced with a much nicer push-push micro SD version.
  • Lower power consumption. By replacing linear regulators with switching ones we’ve reduced power consumption by between 0.5W and 1W.
  • Better audio. The audio circuit incorporates a dedicated low-noise power supply.
  • Smaller, neater form factor. We’ve aligned the USB connector with the board edge, moved composite video onto the 3.5mm jack, and added four squarely-placed mounting holes. Model A+ is approximately 2cm shorter than the Model A.

Image สำหรับ PiTFT แบบ Capacitive

ไฟล์ image ของ PiTFT แบบ Capacitive จะอยู่ในลิงค์นี้

https://learn.adafruit.com/adafruit-2-8-pitft-capacitive-touch/easy-install

หากโหลดแล้วสังเกตชื่อไฟล์จะเป็น 28c ตรงนี้ต้องสังเกตนิดหนึ่งไม่งั้นจะงงอยู่นานเลยทีเดียว

เมื่อดาวน์โหลดเรียบร้อยแล้วก็แตกไฟล์ zip ไว้ภายในจะมีไฟล์ .img เป็น Image File ของ Raspbian จากนั้นให้ใช้ Win32DiskImage เขียนไฟล์ Image ลง SD Card แล้วนำไปบูต Raspberry Pi A+

เชื่อมต่อ Raspberry Pi A+ กับคอมพิวเตอร์

Raspberry Pi A+ นั้นจะมี USB เพียง 1 พอร์ต ถ้าจะใช้มากกว่านั้นต้องต่อ USB Hub เพิ่มเติม แล้วต่อเมาส์และคีย์บอร์ดเพื่อตั้งค่า Wireless ครั้งแรก แต่ก็จะยุ่งยากเพราะหน้าจอแค่ 2.8 นิ้ว จะพิมพ์ยากพอสมควร ดังนั้นหากให้ง่ายควรใช้วิธีการเชื่อมต่อผ่าน UART โดยใช้สาย USB ต่อเข้ากับ UART ของ Raspberry Pi

USB: tx  -> RASPI: rx 
USB: rx  -> RASPI: tx
USB: gnd -> RASPI: gnd

ถ้าต้องการใช้ไฟจาก USB ก็ต่อเพิ่ม

USB: 5v  -> RASPI: gnd

ข้อควรระวังตัวแปลงสัญญานบางรุ่นจะใช้ไฟ 5V ผ่าน UART ซึ่งระยะยาวจะไม่ค่อยดีสำหรับ Raspberry Pi ดังนั้นควรเลือกตัวแปลงที่ส่งสัญญาน 3.3v ได้ จะเหมาะกว่า

ตามปกติผู้เขียนจะนิยมเชื่อมต่อผ่าน UART โดยใช้โปรแกรม Putty เชื่อมต่อผ่าน Serial Port โดยเลือก Port ให้ถูกต้องและกำหนดความเร็วเป็น 115200

เมื่อเชื่อมต่อแล้วหากหน้าจอว่างเปล่าให้ลองกดปุ่ม Enter ครั้งหนึ่ง ก็จะมีหน้าจอ Login ให้ล็อกอินด้วยรหัส pi และรหัสผ่าน raspberry

เชื่อมต่อ Wi-Fi

Raspbian เวอร์ชันใหม่ๆ จะควบคุมการเชื่อมต่อผ่านไฟล์ wpa_supplicant.conf ให้เพิ่มคำสั่งตามนี้

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
เพิ่ม
network={  ssid="ชื่อ SSID"  psk="รหัสผ่าน"}

ติดตั้ง Kernel ใหม่สำหรับ PiTFT

curl -SLs https://apt.adafruit.com/add-pin | sudo bash
sudo apt-get install -y raspberrypi-bootloader adafruit-pitft-helper raspberrypi-kernel
ขั้นตอนการติดตั้ง Boot Loader จะใช้เวลานานพอสมควร กว่าจะเรียบร้อยก็ประมาณครึ่งชั่วโมง

ใช้งานและปรับแต่ง PiTFT

pitft-helper จะเป็นโปรแกรมช่วยปรับแต่งค่าต่างๆ ให้กับ Raspberry Pi และ PiTFT สุดท้ายโปรแกรมติดตั้งจะถามให้เปิดใช้ GPIO ที่ 23 สำหรับ ปิด-เปิด ระบบหรือไม่ให้เลือก Y เพื่อใช้ปุ่ม 23 ได้
sudo adafruit-pitft-helper -t 28c
เมื่อรันเสร็จแล้วข้อควรระวัง ห้ามใช้คำสั่ง sudo apt-get update เด็ดขาด ไม่เช่นนั้นเราต้องมาเริ่มต้นกันใหม่


ติดตั้ง XWindow 

สำหรับ image แบบ lite นั้นจะไม่มี x-window มาให้ต้องติดตั้งเอาเอง และที่ง่ายที่สุดก็คือ การติดตั้ง lxde แต่หน้าจอจะไม่เหมือนกับรุ่น Official ดูเป็น Linux รุ่นเก่าๆ เลยทีเดียว แต่ก็ไม่ใช่สาระสำคัญเพราะเราต้องการใช้เพื่อเป็นพื้นฐานในการรันโปรแกรมแบบ Graphics เท่านั้น

sudo apt-get install lxde-core lxappearance lightdm xutils xinit xterm 

เรียกใช้งาน x-window

การเรียกใช้งาน x-window จะมีคำสั่งหลายบรรทัด แต่หากต้องการเรียกอัตโนมัติให้ใส่ไว้ใน rc.local (ในลำดับขั้นตอนต่อไป) และถ้าไม่พบ /X11/xorg.conf.d แสดงว่ายังไม่ได้ลง x-window ให้ทำขั้นตอนที่ผ่านมาก่อน

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

วันจันทร์ที่ 21 พฤศจิกายน พ.ศ. 2559

ติดตั้ง PyQt5

การเขียนโปรแกรมบน Raspberry Pi ก็หนีไม่พ้นเรื่อง GUI เลยสนใจติดตั้ง PyQt เพื่อเรียนรู้ พยายามหาวิธีติดตั้งจาก google ก็มีหลากหลายวิธีทั้งเวอร์ชันเก่าใหม่ปนเปกันไปหมด พยายามติดตั้องหลายรอบจนท้อไปบางครั้ง ในใจก็พลอยคิดว่า Python ปกติก็เขียนยากอยู่แล้ว ที่ว่ายากนั่นก็เพราะเป็นโปรแกรมที่ต้องระวังเรื่องการใช้ย่อหน้า หากมีอักขระที่ไม่เหมือนกันแล้ววุ่นวายไปหมด แล้วยังมายุ่งยากในการติดตั้งโปรแกรมอีก (Mac OS)

ติดตั้งผ่านแต่ไม่สามารถใช้งานได้ ระบบแจ้งว่ายังไม่ได้ติดตั้ง พยายามอย่างไรก็ไม่สำเร็จ แต่ก็ลองผิดลองถูกไปเรื่อยๆ ก็นำมาลงไว้เพื่อเป็นแนวทาง และเรียนรู้ต่อไปจนกว่าจะเรียนรู้ได้ทะลุปรุโปร่งค่อยมาอัพเดทให้ถูกต้องกันอีกที

ติดตั้ง Brew เพื่อใช้ติดตั้ง PyQt และ Qt

คำสั่งในการติดตั้ง brew


/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

เมื่อติดตั้งเสร็จแล้วก็สั่งติดตั้ง qt5 และ PyQt5 ด้วยคำสั่ง

brew install python3
brew install qt5
brew install pyqt5

เมื่อติดตั้งแล้วก็ไม่สามารถใช้งานได้ พยายามเขียนโปรแกรมเพื่อทดสอบแบบง่ายๆ ก็จะมี error เกี่ยวกับ PyQt5 ยังไม่ได้ติดตั้งหรือหาไม่เจอ

สุดท้ายไปเจอคำสั่งนี้ เมื่อลองรันดูแล้วก็ใช้งานได้


sudo python3.5 -m pip install PyQt5

ถามถึงสาเหตุตอนนี้ก็ตอบไม่ได้ว่าอะไรถูกหรือผิด แต่ก็บันทึกไว้ก่อนค่อหาสาเหตุกันภายหลัง ตอนนี้ขอเรียนรู้วิธีการเขียนโปรแกรมด้วย PyQt ก่อนครับ...

วันศุกร์ที่ 18 พฤศจิกายน พ.ศ. 2559

mysql-server 5.5 error

ติดตั้ง MySQL Server สำหรับ Raspberry Pi ด้วยคำสั่ง sudo apt-get install mysql-server ติดตั้งอย่างไรก็ไม่ผ่าน เจอปัญหา error

dpkg: error processing package mysql-server (--configure):

พยายามค้นหาใน google อยู่นานพบอยู่เว็บหนึ่งแจ้งว่าเป็น bug ของ mysql-server บน ubuntu ซึ่งเป็น  OS ตระกูลเดียวกันกับ Raspberry Pi ให้แก้ไข

  #echo "exit 0" >> /etc/init.d/mysql
  #dpkg --configure -a

ทำตามก็ผ่านไปด้วยดี แต่ถ้าใช้คำสั่ง echo ไม่ผ่าน ให้เข้าไปแก้ไขไฟล์ /etc/init.d/mysql โดยตรง และเพิ่ม exit 0 ไว้ที่บรรทัดสุดท้ายของไฟล์ และอย่าลืมว่าสิทธิ์ในการเขียนไฟล์ต้องใช้สิทธิ์ root นะครับ

วันพุธที่ 16 พฤศจิกายน พ.ศ. 2559

บันทึกเรียนรู้ python: เงื่อนไขการควบคุม และการทำงานวนรอบ

การเขียนโปรแกรมแน่นอนต้องมีการกำหนดเงื่อนไขต่างๆ เพื่อควบคุมการทำงานให้เป็นไปตามที่เราต้องการ จะว่าไปแล้วเงื่อนไขควบคุมนี่แหละเป็นหัวใจสำคัญของการเขียนโปรแกรม และรวมไปถึงการสั่งให้ระบบทำงานตามจำนวนรอบที่เราต้องการ

การควบคุมเงื่อนไขในโปรแกรมอื่นจะมี if, switch หรือ case แต่สำหรับ python แล้วมีเพียงอย่างเดียวคือ if-elif-else โดยมีตัวอย่างการใช้งานดังนี้

#!/usr/bin/python
x = int(input("Please enter your number: "))
if x < 0:  
  print("Negative")
elif x == 0:  
  print("Zero")
elif x > 0:  
  print("Positive")
else:  
  print("Error")

วันจันทร์ที่ 14 พฤศจิกายน พ.ศ. 2559

บันทึกเรียนรู้ python: พื้นฐานโปรแกรม

การเขียนโปรแกรมบน Raspberry Pi หนีไม่พ้นที่จะต้องเรียนรู้การเขียนโปรแกรมด้วย Python ซึ่งถือว่าเป็นภาษาสคริปส์ที่ทำงานได้หลากหลาย แต่วิธีการเขียนก็เปลี่ยนไปพอสมควร โดยเฉพาะ การย่อหน้าที่ค่อนข้างเคร่งครัด และให้เลือกอย่างใดอย่างหนึ่ง คือ เลือกระหว่างเว้นวรรค หรือแท็บ

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

โปรแกรมแรก Hello world!

Code: สร้างไฟล์ ex01.py แล้วเขียนโปรแกรมดังนี้

#!/usr/bin/python

print "Hello world!"

Run: พิมพ์ที่หน้าจอ Terminal

$ python ex01.py

ผลที่ได้:

Hello world!

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

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