วันพฤหัสบดีที่ 15 ธันวาคม พ.ศ. 2559

ESP8266, Error ขณะคอมไพล์

ESP8266 เป็นอุปกรร์ IoT ที่น่าสนใจตัวหนึ่ง เพราะมีขนาดเล็กกินไฟน้อยเพียงแค่ 3.3V จุดเด่นพิเศษ คือ มี Wi-Fi ในตัว มีทั้งรุ่นที่บรรจุสายอากาศภายในตัวเป็นลายทองแดงบนแผ่นปริ้นท์ กับรุ่นที่ต่อสายอากาศภายนอก

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

Error แจ้งไม่รู้จักบอร์ด NodeMCU 1.0 

วันอังคารที่ 13 ธันวาคม พ.ศ. 2559

ESP8266 พิมพ์ข้อความขยะออกทาง Serial Port

กลับมาใช้ NodeMCU อีกครั้งหลังจากที่ทิ้งไว้นานจนลืมไปบ้างแล้ว แต่ก็มีแนวคิดที่จะพัฒนาระบบแสดงผลของ Call Center วัตถุประสงค์ต้องการแสดงสถานะการทำงานของแต่ละ Agent เพื่อให้ทราบว่ากำลังทำอะไร เช่น รับสาย พักเบรค รอรับสาย

สาเหตุที่ใช้ NodeMCU เป็นบอร์ดในการพัฒนานั้นเพราะ มี WiFi ในตัว ง่ายต่อการพัฒนา และมีขา I/O สำหรับต่อพ่วงได้อีกมาก ที่สำคัญสะดวกในการพัฒนาโดยสามารถใช้ Arduino IDE พัฒนาเหมือนกับบอร์ด Arduino เลย แต่ข้อดีกว่า ราคาถูกกว่า Arduino (เมื่อรวม Ethernet Shield แล้ว)

ระหว่างกลับมาก็เขียนโปรแกรมทดสอบเล็กๆ น้อยเพื่อดูว่าบอร์ดใช้งานได้ไหม คำสั่งง่ายๆ ก็แค่พิมพ์คำว่า Start ออกทาง Serial Port


Nanopi M1

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

ก็ไม่ว่ากัน สิ่งต่างๆ บน Opensource ก็เป็นแบบนี้แหละ เกิดขึ้นตั้งอยู่และเสื่อมสลาย เพราะทุกสิ่งอย่างเป็นค่าใช้จ่าย คนที่ใช้บางคนก็รอแต่ของฟรี แต่ไม่ช่วยพัฒนา ไม่ช่วยบริจาค ไม่สนับสนุน สุดท้ายก็อยู่ไม่ได้ จึงถึงคราวที่ต้องพัฒนากันเอง (นี่ไม่นับรวมค่าย Elastix ไปใช้แกนกลางในการพัฒนาเป็นระบบ 3cx ซึ่งเป็นระบบ VoIP เชิงพาณิชย์ งานนี้คงเป็นที่หนักอกหนักใจของแอดมินอีกหลายคนแน่ๆ)

วันเสาร์ที่ 10 ธันวาคม พ.ศ. 2559

เพิ่ม IR Remote ให้กับ LibreElec โดยใช้ Remote TV

LibreElec เป็น Media Center อีกตัวหนึ่งที่ติดตั้งมาพร้อมกับ NOOBS โดยก่อนหน้านั้นจะเป็น OpenElec แต่ OpenElec ดูเหมือนจะหยุดพัฒนาไปนานเลยทีเดียว พอมีปลายปีนี้ทาง Raspberry Pi ก็ติดตั้ง LibreElec เข้าไปแทน โดยรวมก็คล้ายๆ กันโดยใช้แกนกลางเป็น Kodi

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

กำหนดให้ใช้ IR Remote ได้


ให้เข้าไปแก้ไขในไฟล์ /flash/config.txt เพื่อให้เรียกโมดูล lircd ก่อน โดยมีวิธีการแก้ไขดังนี้

#mount -o remount, rw /flash
เพื่อกำหนดให้ /flash สามารถแก้ไขได้ จากนั้นเปิดไฟล์ config.txt ด้วยคำสั่ง nano และเพิ่มบรรทัดสุดท้าย:
dtoverlay=lirc-rpi
เสร็จแล้วกำหนดให้ /flash อ่านได้อย่างเดียวด้วยคำสั่ง
#mount -o remount, ro /flash
รีบูตเครื่องด้วยคำสั่ง reboot ครั้งหนึ่งก่อน แล้วเข้าไปกำหนดค่าปุ่มกด


กำหนดปุ่มกด


ขั้นแรกให้ปิดโปรแกรม lircd ที่เปิดอยู่ด้วยคำสั่ง
#killall lircd
ลำดับต่อมาให้บันทึกไฟล์ lircd.conf ไว้ใน /storage/.config/lircd.conf

#irrecord /storage/.config/lircd.conf
โปรแกรมจะมีข้อความให้อ่าน โดยรวมให้กดปุ่ม Enter สองครั้ง แล้วจะมีหน้าจอรอให้กดปุ่มใดๆ บนรีโมทเพื่อตรวจสอบความถี่และช่วงการกดปุ่ม โดยให้กดปุ่มค้างจะมีเครื่องหมาย . แสดงไปเรื่อยๆ จนหมดบรรทัด

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

เมื่อกดปุ่มเสร็จแล้วจะได้ค่าความถี่และการกดปุ่มแล้ว จะมีหน้าจอให้ป้อนค่าของปุ่มกด เช่น KEY_LEFT, KEY_POWER, KEY_PLAY, KEY_STOP เมื่อพิมพ์เสร็จก็กดปุ่ม Enter ถ้าชื่อ Key ไม่ถูกต้องก็จะมีข้อความเตือน เมื่อพิมพ์ชื่อปุ่มถูกต้องแล้วหน้าจะจะมีข้อความให้กดปุ่มที่จะกำหนด

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

ระบบจะสร้างไฟล์ lircd.conf ไว้ใน /storage/.config/ ถ้าต้องการเริ่มใหม่ก็ลบไฟล์ lircd.conf ทิ้งก่อนแล้วบันทึกใหม่ หรือจะสร้างชื่ออื่นแล้วคัดลอกปุ่มที่เพิ่มนั้นมาใส่ในไฟล์ lircd.conf ก็ได้เช่นกัน





mount -o remount,rw /flash

วันจันทร์ที่ 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!

วันศุกร์ที่ 20 พฤษภาคม พ.ศ. 2559

AVR C - เขียนโปรแกรมแสดงผลทาง LED 7 Segments

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

LED แบบ 7 Segments สังเกตที่ตัวเลขจะมีขีด 7 ขีดเพื่อสร้างตัวเลข หรือตัวอักษร
จากรูปที่แสดงไว้ข้างบน มี 4 หลัก หรือ 4 Digits และระหว่างหลักจะมี จุด และ : รวมถึง จุดที่ใช้แสดงองศา 

AVR C: Bitwise กลับค่า I/O

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

PORTB = 0xFF; //กำหนดให้ PORTB มีค่าเป็น 1 ทั้งหมด
PORTB = 0x00; //กำหนดให้ PORTB มีค่าเป็น 0 ทั้งหมด

วิธีการนี้ก็ง่ายๆ ตรงไปตรงมาดี แต่บางครั้งการเขียนโปรแกรมเราไม่สนใจว่าขณะนั้น PORTx มีค่าเป็นอะไร แต่เราต้องการสลับค่าภายใน จึงเปลี่ยนไปใช้คำสั่งระดับบิตในการสลับจะง่ายกว่า เช่น

PORTB = ~PORTB

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

...
PORTB = 0b10101010;
while(1){
  PORTB = ~PORTB;
}
...

คำสั่งสองสามบรรทัดข้างบนนี้จะทำให้ PORTB มีค่าระหว่าง 0b10101010 กับ 0b01010101 นั่นเอง
ตัวอย่างการสลับค่า I/O


วันพฤหัสบดีที่ 19 พฤษภาคม พ.ศ. 2559

จะดูขา LED อย่างไร

นักอิเลกโทรนิกส์ทั้งหลายคงจะเข้าใจวิธีวัดค่าของไดโอดเปล่งแสง หรือ LED เป็นอย่างดี แต่สำหรับมือใหม่ ย่อมต้องเรียนรู้ หาประสบการณ์ต่อไปเรื่อยๆ จนกว่าจะชำนาญ บทความนี้จะมาแนะนำวิธีการหาขา A และ K ของ LED

Anode เป็นขาที่เชื่อมต่อกับไฟบวก และขา Cathode หรือขา K เป็นขาที่เชื่อมต่อกับไฟลบ

ภาพแสดงขา LED จะสังเกตเห็นว่าขายาว่จะรับไฟ + ขาสั้น จะรับไฟ -

AVR C การทำงานระดับบิต

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

วิธีการเรียนรู้ที่เข้าใจง่าย คือ การลงมือสร้างตัวอย่างขึ้นเพื่อให้เกิดความเข้าใจอย่างถ่องแท้

การเรียนรู้ที่ง่ายที่สุดก็เริ่มจาก LED โดยจะต่อ LED 8 ดวง เข้ากับขา I/O ให้ครบ 8bit คือ ต่อตั้งแต่ PINx0 - PINx7 ในบทความนี้ใช้ LED แบบแพ็ก 10 แต่ใช้เพียง 8 ดวงเท่านั้น และอย่าลืมต่อ R ค่า 220 หรือ 330 โอห์มพ่วงไว้สักนิดจะได้ช่วยปกป้องทั้ง IC และ LED

อุปกรณ์เรียนรู้การทำงานระดับบิต

ATmega16+LCD เริ่มเขียนโปรแกรมติดต่อ LCD

หลังจากที่ทดสอบบอร์ด ATmega16 ได้แล้ว ก็เริ่มศึกษาการใช้งาน เริ่มต้นก็ทำให้ LED กระพริบ และรับค่าทาง input ที่เป็นสวิทช์กดติดปล่อยดับได้แล้ว แต่ก็ยังไม่ค่อยเข้าใจหลักการที่แท้จริง เลยลองต่อ LCD เพื่อแสดงผล โดยปกติในเว็บต่างๆ มักเป็นตัวอย่างการเชื่อมต่อ และเขียนโปรแกรมโดยใช้ lcd.h

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

ATmega16+LCD

มีตัวอย่างอยู่ในเว็บแห่ง electronics hub มีตัวอย่างการใช้งาน 16x2 LCD กับ ATmega16 อยู่ด้วย แต่วงจรที่ให้มากับโปรแกรมไม่ตรงกันจึงต้องแก้ไขนิดหน่อย

สำหรับเว็บเรียนรู้เกี่ยวกับเขียนโปรแกรมติดต่อกับ LCD ผ่าน Arduino IDE ก็ลองอ่านจากเว็บของ thaieasyelec นะครับ

และเว็บ www.kanda.com จะมีเรื่อง AVR keypad LCD in WinAVR C จะมีตัวอย่างคำสั่งให้ศึกษาอีกเว็บหนึ่ง

วันอังคารที่ 17 พฤษภาคม พ.ศ. 2559

เพิ่ม ATmega16 เข้าไปใน boards.txt

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

โดยปกติแล้ว ATmega16 ไม่ได้อยู่ในรายการบอร์ดของ Arduino IDE เพราะเท่าที่เห็นแล้วบอร์ด Arduino ไม่ได้ใช้ Chip 40 ขา ซึ่งจะมี I/O มากกว่า โดยมี Port A, B, C และ D สามารถเลือกใช้งานขา I/O ได้ถึง 32 ขา ดังนั้นหากต้องการควบคุมอุปกรณ์เป็นจำนวนมากแล้วย่อมต้องเลือก ATmega16 แต่ถ้าอุปกรณ์เพียงไม่กี่ชิ้นก็ไม่เหมาะเพราะไอซี 40 ขาตัวนี้ค่อนข้างใหญ่เทอะทะพอสมควร

ดังนั้นหากต้องการใช้บน Arduino IDE ก็ต้องเข้าไปเพิ่มอุปกรณ์ในไฟล์ boards.txt และอื่นๆ อีกเล็กน้อย โดยเริ่มแรกหาจากอินเตอร์เน็ต ซึ่งทำตามแล้วยังใช้ไม่ได้ เพราะ IDE คนละเวอร์ชัน สภาพแวดล้อมเปลี่ยนจากเดิม แต่ก็ไม่เหนือบ่ากว่าแรง หากพยายามและมีหลักการการค้นหาปัญหา

ATmega16 ที่เพิ่มเข้าไปใน Arduino IDE จะแยกเป็นฮาร์ดแวร์อีกกลุ่มหนึ่ง

วันอังคารที่ 10 พฤษภาคม พ.ศ. 2559

AVR Loader วิธีง่ายๆ เพื่อใช้สัญญานนาฬิกาภายในไอซี

หลังจากที่พยายามให้ไอซี Atmega8 และ 16 ใช้ Internal Clock เพื่อลดการใช้ X-TAL โดยเบิร์น Bootloader เข้าไปก็ไม่ได้ผลเท่าที่ควร เพราะยุ่งยาก แต่ก็มีวิธีง่ายๆ สำหรับการกำหนดค่า โดยใช้โปรแกรม AVR Loader

การกำหนดค่า FUse จะเป็นการบอกว่าจะใช้สัญญานนาฬิกาจากไหน โดยโปรแกรม AVR Loader สามารถดาวน์โหลดได้จากอินเตอร์เน็ต

โปรแกรม AVR Loader สำหรับแก้ไข อัพโหลดไฟล์ .hex สำหรับ ATmega

วันจันทร์ที่ 9 พฤษภาคม พ.ศ. 2559

ATMega8 No X-TAL, ใช้งาน ATMega8 โดยไม่มีคริสตอล

X-TAL หรือ คริสตอลเป็นตัวกำเนิดสัญญานนาฬิกา หรือสร้างความถี่เพื่อให้ไอซีทำงานได้ถูกต้อง ดังนั้นบอร์ด Arduino จึงมีคริสตอลตามความถี่ของ cpu เช่น 8, 12 และ 16MHz และ ATMega8 มีรุ่นที่ใช้ความถี่ 8 และ 16MHz โดยดูจากรุ่น โดยรุ่นที่ระบุ -8PU หมายถึง 8MHz ถ้า -16PU หมายถึง 16MHz

เลือกบอร์ด ATmega8 แบบ ไม่ใช้คริสตัล

ตามปกติแล้วทุกครั้งที่ใช้ไอซี ATMega จะต้องมีคริสตัลต่อที่ขา XTAL1 และ XTAL2 ด้วย แต่อย่างไรก็ตาม ในทางปฏิบัติระบบเล็กๆ ไม่จำเป็นต้องใช้ก็ได้ เพราะภายใน Chip มีตัวกำเนิดสัญญานนาฬิกาอยู่แล้ว เรียกว่า Internal Clock ซึ่งเราสามารถใช้ได้แต่ต้องกำหนดบูตโหลดเดอร์ใหม่ เพื่อให้เรียกใช้สัญญานนาฬิกาภายใน Chip แทน

หมายเหตุ: หากต้องการกำหนดใช้หรือไม่ใช้ XTAL ให้ใช้โปรแกรม AVR Loader จะง่ายกว่า อ่านได้จากบทความเรื่อง AVR Loader

ใช้มาโครใน Arduino IDE

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

ในบทความนี้จึงยกตัวอย่างการใช้ มาโคร ในส่วนการกำหนด #define ทำให้โปรแกรมดูสวยงาม และอ่านแล้วสื่อความหมายมากกว่าปกติ (แต่บางคนอาจจะงงได้ หากไม่เข้าใจหลักการ)

ตัวอย่างการเขียนมาโครในภาษา C

วันอาทิตย์ที่ 8 พฤษภาคม พ.ศ. 2559

Atmel Studio 7: กว่าจะอัพโหลดได้

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

ชุดเบิร์นโปรแกรม Atmega8/168/328 ผ่าน USBasp และสามารถต่ออุปกรณ์ได้เหมือนบอร์ด Arduino

แต่สำหรับผู้เขียนมีความรู้สึกว่า การเขียนโปรแกรมด้วย Arduino IDE เหมือนการเขียนโปรแกรมด้วย Visual Studio ของไมโครซอฟท์ที่ไม่ต้องคิดอะไรมาก อยากเขียนอะไรก็โหลดๆ ไลบรารี่ที่มีคนใจดีเขียนแจกไว้เยอะแยะไปหมด

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

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

ทั้งหมดนี้ก็เพื่อที่จะพัฒนาและหวังลึกๆ อยากเขียนไลบรารีแจกบ้างเหมือนกัน :-)

วันเสาร์ที่ 7 พฤษภาคม พ.ศ. 2559

ติดตั้ง USBasp บนวินโดว์ 10 (ที่บ้าน)

เมื่อวานเขียนวิธีการติดตั้งไดร์เวอร์ USBasp โดยเป็นเครื่องโน้ตบุ้คที่ทำงาน มีชื่อผู้ผลิตให้เลือกเป็น VOTI แต่วันนี้หยุดอยู่บ้านลองมาทำตามบทความที่เขียนไว้กับเครื่องที่บ้าน

เศร้าจัง! หาชื่อผู้ผลิต VOTI ไม่เจอ หาอย่างไร อ่านจากเน็ต โหลดไดร์เวอร์ โหลด inf_wizard มาติดตั้งแล้วก็ยังใช้ไม่ได้

สุดท้ายก็มั่วอีกตามเคย... เลือกอะไรก็ได้ดูสิว่าจะใช้ได้ไหม...

คำตอบ คือ ใช้ได้ อัพโหลดโปรแกรมผ่าน Arduino IDE ได้สบายๆ

USBasp ที่ซื้อมาจากเว็บออนไลน์ ราคาไม่ถึงร้อย


ติดตั้ง USBasp บนวินโดว์ 10

ปัญหาชวนปวดหัวสำหรับคนใช้วินโด์ 10 หรือระบบปฏิบัติการใหม่ๆ แต่ไดร์เวอร์ยังไม่รองรับ ก็ต้องหาทางแก้ไขกันต่อไป

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

จนถอดใจกะว่าจะใช้บน Linux หรือ Mac เลยลองต่อกับ Raspberry Pi ซึ่งมองเห็นรายละเอียดอุปกรณ์ ทั้งชื่อผู้ผลิต รุ่น และหมายเลขผู้ผลิต 

ระหว่างนั้นก็กลับไปเล่นที่ฝั่งวินโดว์บ้าง ลองเข้าไปดูรายละเอียดไดร์เวอร์เรื่อยๆ ก็เจอชื่อผู้ผลิตอยู่ด้วย เลยลองเลือกดู

บิงโก! ระบบมองเห็นแล้ว

วันศุกร์ที่ 6 พฤษภาคม พ.ศ. 2559

ติดตั้งคีย์บอร์ดภาษาไทยและกำหนดให้สลับคีย์บอร์ด thai-english

หลังจากติดตั้ง Raspberry Pi ให้สามารถใช้งานโปรแกรมต่างๆ ได้แล้ว ก็ถึงคิวติดตั้งคีย์บอร์ด ไทย-อังกฤษ เบื้องต้นให้เข้าไปติดตั้งที่ raspi-config ด้วยคำสั่ง

sudo raspi-config

จากนั้นให้เลือกคีย์บอร์ดเป็น en-us และ th-th ให้เลือกทั้ง TIS และ UTF (จริงๆ จะเลือกเฉพาะ UTF ก็ได้)

เมื่อเลือกแล้วระบบยังไม่สามารถสลับคีย์บอร์ด ไทย-อังกฤษ ได้ง่ายนัก จึงต้องเข้าไปกำหนดคำสั่งที่ Terminal ก่อนดังนี้

echo "setxkbmap -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,th" > ~/.xsessionrc
เมื่อกดปุ่ม Enter แล้วระบบจะสร้างไฟล์ชื่อ .xsessionrc ไว้ใน Home Directory ของ pi แต่เวลาเข้าไปดูจะมองไม่เห็นเพราะจะถูกซ่อนไฟล์ไว้ ต้องใช้คำสั่ง ls -a ถึงจะมองเห็น

จากนั้นให้รีบูตเครื่องก่อน ก็จะสามารถสลับคีย์บอร์ดได้โดยกดปุ่ม Alt+Shift





วันพุธที่ 27 เมษายน พ.ศ. 2559

ใช้งาน ATTINY85 Controller ขนาดเล็ก

แรกเริ่มเดิมทีของคนที่เรียนรู้การเขียนโปรแกรม Arduino มักจะเริ่มต้นที่ Arduino UNO R3 ก่อน ตอนแรกก็มองว่าเป็นบอร์ดขนาดเล็กไม่ใหญ่โตอะไรมากนัก พอเรียนรู้มากยิ่งขึ้นก็เริ่มใช้งาน Arduino Pro Mini หรือ Nana ก็ทึ่งขนาดของบอร์ด

ต่อมาก็เรียนรู้ขึ้นไปอีกว่า งานบางงานใช้ I/O น้อยเพียง 1-2 Input หรือ 1-2 Output ก็ไม่จำเป็นต้องใช้บอร์ดขนาดใหญ่ทำให้งานเล็กลงไปอีก ก็มองบอร์ดที่เล็กลงไปเรื่อยๆ

สำหรับ ATTINY85 ก็เป็นคอนโทรลเลอร์อีกตัวหนึ่งใช้ Chip ของ Atmel เป็นไอซีขนาด 8 ขา มี 6 I/O ถือว่ามีให้มาพอสมควร และสามารถนำไปใช้งานควบคุมได้หลายอย่าง เช่น การควบคุมมอเตอร์ สร้างหุ่นยนต์ขนาดเล็ก ฯลฯ

รูปแสดงขาใช้งานของ ATtiny


วันเสาร์ที่ 12 มีนาคม พ.ศ. 2559

ENC28J60, Ethernet Shield V1.0 ของ Deek-Robot

สั่ง Ehternet Shield จาก ArduilAll.com มาชิ้นหนึ่ง ด้วยความเร่งรีบ ก็ดาวน์โหลดไลบรารีมาใช้งานเลย ตามตัวอย่างก็ใช้งานได้เป็นอย่างดี แต่ไม่มีส่วนของ DHCP ที่จะรับให้กับตัวบอร์ด จึงไปค้นหาจากเน็ตก็เจอ EtherCard มาใช้เพราะมีตัวอย่าง testDHCP แต่ใช้ไม่ได้ ทำอย่างไรก็แล้ว ไม่สามารถจะรับไอพีจากเราท์เตอร์ได้ ลง-ลบ ไดร์เวอร์หลายก็ไม่ได้

ENC28J60 กับบอร์ด Arduino NANO มีขนาดพอๆ กับแป้นพิมพ์


สุดท้ายลองเข้าไปอ่านในเว็บ Tweaking4All.com เดิมคลิกลิงค์ตามเว็บที่สั่งของก็ไม่ได้ เลยไม่สนใจ

Ethernet Shield V1.0 for arduino compatible Nano 3.0



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

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

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

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

วันพฤหัสบดีที่ 10 มีนาคม พ.ศ. 2559

ทดสอบ MCP3008 กับบอร์ด Raspberry Pi A+

ตัวอย่างโปรแกรมใช้งาน IC หมายเลข MCP3008 โดยโปรแกรมนี้จะอ่านค่าจาก สวิทช์ 5 ปุ่มที่ ขา Ch0 และอ่านค่า VR 10k ที่ขา Ch1 แล้วแปลงค่าเป็น Digital Input ไปยัง Raspberry Pi

Switch ของ DFRobot 5 ปุ่ม แต่ใช้สายไฟแค่ 3 เส้น Vcc, Gnd และ Output

PiTFT 2.8" จอภาพขนาด 320x240 จาก Adafruit

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

ช่วงนี้ศึกษาการเขียนโปรแกรมด้วย Python อยู่อย่างต่อเนื่อง และเห็นวิธีการเขียนโปรแกรมผ่าน GUI โดยใช้ Tkinter แล้วก็มองเห็นช่องทาง ซึ่งจะรวดเร็วในการพัฒนา จึงคิดต่อไปถึงหน้าจอ ว่าจะใช้แบบไหน หากใช้แบบ LCD หรือ OLED ก็ต้องเขียนคำสั่งในการจัดการหน้าจอกันอีก ดูเหมือนจะใช้เวลา จึงตัดสินใจซื้อจอ PiTFT 2.8" ของ AdaFruit แต่ราคาก็สูงพอสมควร แบบ Resistive ราคา 1,950 และ Capacitive ราคา 2,150 บาท ที่ร้าน ThaiEasyElec แต่ถ้าที่ร้าน GravitechThai จะราคาอยู่ที่ 1,750 บาท สำหรับจอแบบ Capacitive แต่ยังไม่ได้บัดกรีขา และไม่มีสวิทช์มาให้ เลยตัดสินใจซื้อที่ง่ายที่สุด

ลองเปิด Window-X ก็พอดูได้ ถึงจะลำบากสักหน่อย

วันอังคารที่ 8 มีนาคม พ.ศ. 2559

Raspberry Pi 3

หลังจากได้รับโทรศัพท์จาก ThaiEasyElec แจ้งว่า Raspberry Pi 3 เข้ามาแล้ว แต่กระนั้นราคาก็แพงกว่า Raspberry Pi2 100 บาท คือ 1,750 บาท และหากซื้อจาก Gravitech ราคา 1,650 บาท แต่ก็ชอบที่จะซื้อจาก ThaiEasyElec เพราะอยู่ใกล้บ้าน พูดคุยถูกคอ ให้คำแนะนำดี น้องๆ ทุกคนต้อนรับลูกค้าด้วยมิตรภาพที่ดี จึงไม่รอช้าบึ่งรถจากบ้านหม้อ (ไปซื้อชุดศึกษา Pic มาลองเล่น) ไปที่ริมคลองประปาทันที

และแล้วก็เสียเงินค่าตัวน้อง Pi3 มา 1 ชุดประกอบด้วย

  1. Raspberry Pi3
  2. Adapter
  3. Case
Raspberry Pi3 กินกระแสมากกว่า Pi2 เนื่องจากเพิ่มอุปกรณ์ Wi-Fi และ Bluetooth เข้ามาด้วย อีกนัยหนึ่งก็สะดวกดี ไม่ต้องหาซื้อเพิ่มเติม 

Raspberry Pi 3 Model B

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

ติดตั้ง Samba และ mDNS และ MPD, MPC เพื่อเล่นเพลงบน Raspberry Pi A+

การเชื่อมต่อผ่านเครือข่ายถือว่าเป็นสิ่งสำคัญสำหรับ Raspberry Pi หรืออุปกรณ์ที่ทำงานเกี่ยวกับ IoT ทั้งหลาย ซึ่งการเชื่อมต่อเข้ากับระบบเน็ตเวิร์คทุกครั้งจะต้องติดต่อผ่าน IP แต่การแจกจ่าย IP เป็นแบบ DHCP ทำให้เราไม่ทราบว่า IP ที่ได้นั้นเป็นอะไร หรือเปลี่ยนแปลงตลอดเวลา ดังนั้นหากจะให้ง่ายก็ต้องติดตั้ง DNS คือ ตัวแปลงชื่อให้เป็น IP

ใน Raspberry Pi จะมีระบบ mDNS ซึ่งทำให้อุปกรณ์นั้นสามารถกำหนดชื่อแล้วตามด้วย .local เพื่อให้ง่ายต่อการเข้าถึงเช่น

openelec.local/ หรือ volumio.local/

การเข้าถึงต้องใส่เครื่องหมาย / ต่อท้ายด้วย ไม่เช่นนั้นจะกลายเป็นการค้นหาในเว็บเบราเซอร์

เพิ่มรีโมทให้กับ Volumio

Volumio เป็นระบบเล่นไฟล์เสียงที่ทำให้ Raspberry Pi กลายเป็นเครื่องเล่น MP3 หลายคนอาจสงสัยว่า ทำไมถึงเล่นจาก RPi ทั้งๆ ที่เดี๋ยวนี้เราสามารถเล่นเพลงจากโทรศัพท์ หรือเครื่องเล่น MP3 มากมายในท้องตลาด และมีราคาที่ถูกแสนถูก โดยเฉพาะของจีนที่แพร่ตามท้องตลาดบางตัวราคาไม่ถึง 100 บาท

สำหรับนักฟังเพลงทั้งหลายคงเข้าใจเหตุผล หากบอกว่า เราสามารถ DIY (Do It by Yourselves) เพราะเราสามารถทำอะไรหลายๆ อย่างได้ด้วยตนเอง แต่ก็ไม่ง่าย และไม่ยากหากสนใจ

Volumio สามารถดาวน์โหลดได้ที่ https://volumio.org/ จะได้ไฟล์ .img วิธีการลงให้ดูจาก https://volumio.org/get-started หรือมีหลายเว็บลองค้นหาจาก google กันก่อนนะครับ

หลังจากที่ติดตั้งแล้ว บูตขึ้นมาแล้วให้เสียบสายแลนไว้เลย ให้ใช้โปรแกรม Putty เชื่อมต่อไปยัง Volumio โดยไม่ต้องสนใจ IP โดยเชื่อมไปที่ volumio.local

หน้าจอเมื่อเรียก volumio.local/

วันพุธที่ 2 มีนาคม พ.ศ. 2559

Raspberry Pi A+ ข้อจำกัดบนบอร์ดขนาดเล็ก

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

จึงคิดจะซื้อบอร์ดมาเพิ่มสักตัว เดิมจะซื้อ Raspberry Pi B เพิ่มสักตัว แต่ก็คิดอยากลองตัวเล็กบ้าง เห็นแล้วอยากได้น่ารักดี บอร์ดเล็กๆ แต่พอไปดูสเปคแล้วก็ตกใจเหมือนกัน เพราะแรมแค่ 256M แต่ในใจก็คิดว่าเอามาทดลองพวก I/O ต่างๆ แค่นั้นไม่ต้องเปลืองอะไรมากนัก

เมื่อได้มาแล้วก็ลองลง Volumio ทันที ก็ไม่รอด ดูเหมือนจะมี Error หลายอย่าง และไม่สามารถใช้งาน UART ได้ พยายามหลายครั้งก็แล้ว ดูเหมือนจะถูกปิดหลายๆ อย่าง

กลับมาถึงบ้านลองติดตั้ง NOOBS 1.7 ก็ติดตั้งไม่ได้มีข้อความแจ้งระบบไม่ซัพพอร์ท สุดท้ายเหลือบไปเห็นเวอร์ชัน 1.4 เลยลองลงดู... ผ่านไม่มี Error อะไรเลย

จากนั้นก็เช่นเดิม ต่อใช้งาน UART เพราะจะได้ไม่ต้องใช้ USB Hub ต่อคีย์บอร์ดหรือเมาส์ และ WiFi การต่อก็ไม่ยากอะไร เพียงแต่ต้องเข้าไปเปิดการใช้งานใน raspi-config ก่อน


วันอังคารที่ 1 มีนาคม พ.ศ. 2559

ทดลองเขียน python: อ่านค่าจากสวิทช์

ได้บอร์ด Raspberry Pi มานานหลายเดือนแล้ว เดิมทีจะเอาไปทำระบบ Digital Signage เลยซื้อไว้ 2 ตัว แต่พอจะทำจริง xibo ยกเลิกโปรแกรมบน Ubuntu ทำให้ฝันสลายและงานเข้า เพราะเหลือแต่ไคลเอนท์จาก Android และ Windows สุดท้ายเลยเลือกซื้อ Android Box ไปแทน (แพงกว่าหลายร้อยบาท)

แล้ว Raspberry Pi ก็นอนค้างอยู่ที่โต๊ะจนฝุ่นเกาะ จนล่าสุดเลยเอามาดูหนังฟังเพลง โดยลง OpenElec สำหรับดูหนังตัวหนึ่ง ลง Volumio สำหรับฟังเพลงเครื่องหนึ่ง

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

บทความนี้ไม่ได้กล่าวถึงการติดตั้ง python ต้องอ่านและทำตามวิธีการติดตั้งที่ เว็บนี้


ใช้ GPIO Extension Board เพื่อสะดวกต่อการเชื่อมต่ออุปกรณ์อื่นๆ


วันเสาร์ที่ 27 กุมภาพันธ์ พ.ศ. 2559

esp8266-12e ใช้งาน GPIO9

โมดูล ESP8266-12e เป็นโมดูลที่พัฒนามาจากรุ่น 12 โดยจะมีขาใช้งานเพิ่มขึ้นอีก 6 ขา และมี GPIO เพิ่มอีก 2 ขา คือ GPIO9 และ GPIO10 ตามหลักการสามารถนำมาใช้งานได้ แต่เท่าที่ลองแล้วพบว่า ผู้เขียนยังไม่สามารถนำเอาขา GPIO10 มาใช้งานได้เลย ซึ่งจะหาทางศึกษาการนำมาใช้งานต่อไป

ตัวอย่างการต่ออุปกรณ์เพื่อทดสอบใช้งานขา GPIO9 โดยบอร์ดจะใช้ไฟเลี้ยงจากข้างนอก


วันเสาร์ที่ 20 กุมภาพันธ์ พ.ศ. 2559

LinkIt Smart7688 เชื่อมต่อ Arduino Uno R3 ผ่าน Serial Port

โดยปกติแล้วการเชื่อมต่อของฮาร์ดแวร์ในโลกของ Micro Controller นั้นจะเชื่อมต่อผ่านพอร์ต Serial เป็นหลัก แม้แต่ปัจจุบันพอร์ต USB จะมาแทนที่ Serial Port แบบ DB9 แล้วก็ตาม แต่นั่นก็เป็นพอร์ต Serial อีกรูปแบบหนึ่งที่มีความเร็วการเชื่อมต่อสูงกว่าแบบเดิมๆ

การใช้งาน Arduino และคอนโทรเลอร์อื่นๆ นั้นผ่าน Serial Port ที่เป็น USB (Universal Serial Bus) แทบทั้งสิ้น โดยผ่านการแปลงแบบ TTL ปัจจุบันนี้มีหลากหลายผู้ผลิต ส่วนผู้เขียนก็ใช้หลายๆ ตัวแล้วแต่โอกาสจะอำนวย แต่หลักๆ ก็ใช้ CP210x และ CH340

ทดลองเชื่อมต่อ LinkIt Smart 7688 กับ Uno R3 ผ่านขาที่เป็น Serial 


วันศุกร์ที่ 19 กุมภาพันธ์ พ.ศ. 2559

LinkIt-Smart-7688 คอนโทรเลอร์ที่น่าสนใจในเวลานี้

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

ถ้าเครื่องดีๆ หน่อยก็อยู่ที่ 8 พันบาทขึ้นไป และมักจะจบที่ 1x,xxx อย่างแน่นอน แต่ประเด็นไม่ได้อยู่ที่ราคาเพียงอย่างเดียว แต่อยู่ที่ข้อมูลรายการที่สแกนเข้าออก เพราะปัจจุบันข้อมูลต่างๆ ยังอยู่ในเครื่องรอให้ผู้ใช้งานเชื่อมต่อเข้าไปเพื่อดึงข้อมูลออกมาอีกครั้งหนึ่ง

ส่วนเครื่องสแกนที่ส่งข้อมูลแบบ Real Time หรือส่งข้อมูลทันทีนั้นมีเหมือนกันแต่ราคาก็สูงขึ้นไปอีก ทำให้เกิดแนวคิดที่จะแก้ไขปัญหา 2 ประการ คือ

การติดตั้ง MySQL Replicate server จากการโคลนนิ่ง Master

วิธีการติดตั้ง Replicate ของ MySQL หลักการแล้วจะทำเพื่อทำเซิร์ฟเวอร์สำรอง กรณีเซิร์ฟเวอร์หลักเสียหรือขัดข้องจนไม่สามารถใช้การได้ จะยังมีเซิร...