Raspberry Pi 3 [Writing Text to 16×2 LCD]

จากตอนที่แล้วเราได้ทำการเชื่อมต่อ hardware ซึ่งได้แก่ จอ LCD ขนาด 16×2 ผ่าน I2C Module ไปเรียบร้อยแล้วนั้น เราจะเริ่มทำการ Config I2C และเขียน Python เพื่อแสดงข้อความตัวอักษรอย่างง่าย   Enable I2C Module เริ่มด้วยการ login เข้าสู่ Raspberry Pi และใช้คำสั่ง sudo raspi-config บนหน้าจอ Terminal จากนั้นเลือก 5 Interfacing Option และเลือก P5 I2C (Enable/Disable automatic loading…) ทำการคอนเฟิร์ม ด้วยการตอบ YES จากนั้น Reboot   จากนั้นทำการอัพเดทไฟล์ /boot/config.txt ด้วยคำสั่ง sudo nano /boot/config.txt ใส่ข้อความ (หรือ uncomment) ต่อไปนี้ dtparam=i2c1=on dtparam=i2c_arm=on จากนั้นทำการ reboot ครับ   ลองใช้คำสั่ง sudo i2cdetect -y 1 เพื่อดูว่าเจอ I2C Module หรือไม่ ซึ่งผลที่ได้คือ address ของอุปกรณ์ (อาจแตกต่างกันไปในแต่ละเครื่อง ซึ่งในที่นี้คือ address 0x3f นั่นเอง)   จากนั้นทำการตรวจสอบว่ามีการติดตั้ง Python ไว้หรือยัง ด้วยการทดลองเรียกใช้ซะเลย ด้วยคำสั่ง python3 จะพบกับหน้าจอดังนี้ (ใช้คำสั่ง exit() เพื่อออกกลับไปยัง prompt เดิม) แต่ถ้าหากยังไม่เคยติดตั้ง ให้ติดตั้งด้วยคำสั่ง sudo apt-get install python ครับ   เริ่มเขียน Python เพื่อแสดงตัวอักษรบน LCD กันเลย เนื่องจากเราไม่ใช่คนแรกในโลกที่ใช้งานส่วนนี้ เพื่อเป็นการประหยัดเวลา เราจะทำการดาวน์โหลด library มาใช้งาน ซึ่ง ดาวน์โหลดได้ที่นี่ (ต้อง Extract Zip จะเจอไฟล์  RPi_I2C_Driver.py) โดยจะต้องทำการแก้ไข บันทัดที่ 54 ADDRESS = 0x3f ให้เป็น Address ของเราเอง (ต้นฉบับจากที่นี่ https://gist.github.com/DenisFromHR/cc863375a6e19dce359d)   จากนั้นลองทำการเขียนกันดูครับ import RPi_I2C_Driver from time import * mylcd = RPi_I2C_Driver.lcd() mylcd.lcd_display_string(“Hello PSU !”, 1) เซฟไฟล์ชื่อ hello.py จากนั้นสั่งรันด้วยคำสั่ง python hello.py จะพบว่า LCD สามารถแสดงข้อความได้แล้ว   คำสั่งพื้นฐานอื่นๆ ที่อาจต้องใช้ได้แก่ mylcd.lcd_display_string(“Hello PSU !”, 2, 3) แสดงข้อความที่ row 2, column 3 mylcd.lcd_clear() เพื่อเคลียร์หน้าจอ เป็นต้นครับ   สำหรับตอนหน้า จะเป็นเรื่องของการแสดงข้อความอื่นๆ ในระบบ เช่น วัน/เวลา, IP Address, CPU/Memory/Disk Usage ครับ   ผิดพลาดประการใด ขออภัยมา ณ โอกาสนี้ครับ        

Read More »

Raspberry Pi 3 [Drive 16×2 LCD with I2C Interface]

หลังจากตอนที่แล้วเราได้ทำการ setup โปรแกรมที่เราต้องการ ในตอนนี้ขอพูดถึงอุปกรณ์ต่อพ่วงกันบ้าง เพื่อให้ดูเหมือนเข้าสู่ยุค IoT (Internet Of Things) มากขึ้น นั่นคือจอ LCD ระดับเบื้องต้น ขนาด 16×2 ดังรูปนี้ ซึ่งอุปกรณ์ตัวนี้ สามารถแสดงผลได้ 2 แถว แถวละ 16 ตัวอักษร ซึ่งเพียงพอในระดับเบื้องต้นสำหรับการเรียนรู้การเขียนโปรแกรมครับ โดยในตลาดจะมีขายหลายรุ่น เช่น 16×2, 20×4 ไปจนถึง 128×64 อีกทั้งยังมี จอสีประเภท TFT 2.4 นิ้ว, 3 นิ้ว, 3.2 นิ้ว, 4 นิ้ว เป็นต้น และมีแบบหน้าจอสัมผัสให้เลือกใช้งานอีก มากมาย   การเชื่อมต่อจอ 16×2 กับบอร์ด Raspberry Pi 3 โดยทั่วไปแล้ว จะต้องทำการเชื่อมต่อดังรูปด้านล่างนี้             การเชื่อมต่อแบบ 4 bits (ซ้าย) – การเชื่อมต่อแบบ 8 bits (ขวา) จะเห็นว่าเป็นการเชื่อมต่อที่ยุ่งยาก ใช้สายหลายเส้น และยากต่อการปรับเปลี่ยนการใช้งาน ดังนั้นจึงมึโมดูลที่เข้ามาช่วยตรงนี้คือ I2C   I2C คืออะไร I2C คือบัสการเชื่อมต่ออนุกรมแบบ Synchronous ด้วยสายสัญญาณเพียง 2 เส้น (แต่จริงๆ ต่อ 4 เส้น ได้แก่ SDA, SLC, +5V และ GND) โดยจะมีสายสัญญาณข้อมูล คือ SDA (Serial Data Line) และสายสัญญาณนาฬิกา คือ SLC (Serial Clock Line) โดยแบ่งการทำงานออกเป็น 4 โหมดตามความเร็วดังนี้ Normal Mode ความเร็ว 100Kbps Fast Mode ความเร็ว 400Kbps Fast Mode Plus ความเร็ว 1Mbps High Speed ควาามเร็ว 3.4Mbps   ซึ่งเมื่อเป็นการเชื่อมต่อแบบอนุกรม ทำให้เราสามารถใช้งาน I2C ได้มากกว่าหนึ่งอุปกรณ์บนสายเพียง 2 เส้น โดยจะเลือกติดต่อกับอุปกรณ์ใดได้ด้วยการกำหนดที่อยู่ (Address) ของ Hardware ให้กับอุปกรณ์   และเนื่องด้วยความง่ายของการใช้งานของ I2C ทำให้อุปกรณ์จอ LCD ส่วนใหญ่จะทำการติดตั้งมาพร้อมกับจอแล้ว ดังรูป            I2C Module คือโมดูลสีเข้มในรูป บอร์ดสีเขียวคือ ด้านหลังของจอ LCD 16×2 ซึ่งได้ทำการเชื่อมต่อเรียบร้อยแล้ว   เริ่มทำการเชื่อมต่อกับ Raspberry Pi โดย I2C จะต้องทำการเชื่อมต่อ 4 เส้น คือ +5V, GND, SDA, SLC กับ Pinout ของ Raspberry Pi 3 ดูจากข้อมูล Alternate Function เราจะต้องทำการต่อสาย SDA ที่ Pin 3, SCL ที่ Pin 5 และ +5V ที่ Pin 2 หรือ ส่วน GND นั้นมี Pin 6, 9, 25, 39, 14, 20, 30 หรือ 34 ให้เลือก         จากนั้นทำการ Power On Raspberry PI 3

Read More »

Raspberry Pi 3 [Basic Configuration]

หลังจากเราได้ติดตั้ง OS แล้ว ต่อไปจะเป็นการเชื่อมต่อกับเครือข่าย LAN หรือ Wi-Fi ถ้าเป็นสายแลน ก็ไม่ยากครับ เสียบสายเข้าไปเลย โดย default config eth0 จะเป็น DHCP Client อยู่แล้ว ส่วน Wi-Fi นั้น จากการหาข้อมูลชิบBroadcom BCM43438 Wireless Controller นั้น เหมือนจะรองรับเฉพาะ 2.4GHz ครับ   ผมจะเลือกทำการ connect Wi-Fi ก่อนนะครับ หลังจากนั้นค่อยเซ็ตอัพวัน/เวลา และโปรแกรม เรื่องของการ connect เข้า Wi-Fi ที่เป็น WPA2 Enterprise นั่นก็อาจจะเป็นปัญหาเบื้องต้นที่เจอครับ คือ โดย default แล้วนั้น จะไม่ support ดังรูปข้างล่างนี้ ทำให้ connect เข้าโดยตรงไม่ได้ ต้องทำการแก้ไขปัญหาดังนี้ครับ 1.เปิด terminal จากนั้นแก้ไฟล์ wpa_supplicant.conf โดยใช้คำสั่ง sudo nano /etc/wpa_supplicant/wpa_supplicant.conf   2.เพิ่มบรรทัดต่อไปนี้เข้าไป network={ ssid=“PSU WiFi (802.1x)“ priority=1 proto=RSN key_mgmt=WPA-EAP pairwise=CCMP auth_alg=OPEN eap=PEAP identity=”YOUR_PSU_PASSPORT_USERNAME“ password=hash:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx phase1=“peaplabel=0” phase2=“auth=MSCHAPV2” }   เซฟไฟล์ด้วยการกด Ctrl + X ตอบ Y กด Enter กลับมาที่หน้าจอ Terminal ตามเดิม ข้อมูลที่ท่านสามารถปรับแก้ได้คือตัวอักษรสีแดงด้านบน ได้แก่ ssid <= ชื่อ ssid ซึ่งบางที่อาจจะไม่ใช่ดังในตัวอย่าง identity <= username ของ psu passport อยู่ภายใต้เครื่องหมาย ” ” password=hash: มาจากการคำนวณ hash ด้วยคำสั่งต่อไปนี้ echo -n ‘YOUR_PASSWORD‘ | iconv -t utf16le | openssl md4 จากนั้นเอาค่ามาใส่แทนที่ xxxxxxxx ตามตัวอย่างข้างบน   3.เมื่อเรียบร้อยแล้วให้ restart service networking ซักครั้งหนึ่งด้วยคำสั่ง sudo service networking restart   4.หากไม่เกิดการเปลี่ยนแปลงอะไร ให้ reboot ซักครั้ง sudo reboot   5.เมื่อ reboot กลับมาแล้ว ท่านจะพบว่ามีการเชื่อมต่อ SSID ตามที่ท่านได้เซ็ตเอาไว้เรียบร้อยแล้ว ดังรูปด้านล่างนี้   ** คำสั่งที่ท่านพิมพ์ผ่าน Terminal จะถูกเก็บ History เอาไว้ รวมทั้งรหัสผ่านที่ท่านได้สร้างเป็น hash เอาไว้ ท่านจะต้องทำการเคลียร์ออก ด้วยคำสั่ง history -c (เพื่อเคลียร์ทั้งหมด) หรือ   history | tail เพื่อดูหมายเลขบรรทัด เช่น 300  จากนั้นใช้คำสั่ง history -d 300 เพื่อลบเฉพาะบรรทัดนั้น   เมื่อเสร็จเรื่องการเชื่อมต่อแล้ว จากนั้นควรทำการเซ็ตอัพวันเวลา / timezone ให้เรียบร้อย เปิด Terminal จากนั้นพิมพ์คำสั่ง sudo dpkg-reconfigure tzdata           เลือก Asia และเลือก Bangkok กด Enter เป็นอันเสร็จสิ้นครับ   จากนั้นควรทำการ sync

Read More »

Raspberry Pi 3 [Assemble & OS Installation]

ใน part นี้ขอพูดในส่วนของการติดตั้ง heat sink, ประกอบลงใน enclosure และติดตั้ง OS Raspbian ครับ   Heat Sink จำเป็นไหม โดยส่วนตัวผมว่าจำเป็นครับ เพราะอุปกรณ์อิเล็กทรอนิกส์เมื่อมีการทำงาน จะก่อให้เกิดความร้อน ความร้อนทำให้เกิดการเสื่อมของอุปกรณ์ และจากการหาข้อมูล พบว่าการติดตั้ง Heat Sink + พัดลม จะทำให้อุณหภูมิของอุปกรณ์ (โดยเฉพาะ CPU และ GPU) นั้นไม่สูงเกินไปครับ (อ้างอิงจาก https://www.youtube.com/watch?v=e6okZKRwnTQ)     Heat Sink อลูมิเนียมสีดำขนาดเล็ก เพียงพอต่อการใช้งานทั่วๆ ไป   ติดตั้งด้วยการใช้เทปกาวสองหน้าแบบนำความร้อน (ติดมากับ Heat Sink) แปะลงไปบนตัว CPU และ GPU ได้เลย ** กรณีที่ไม่มีเทปกาวสองหน้านำความร้อน ให้ใช้กาวซิลิโคน นำความร้อน แทนครับ **   Enclosure หรือกล่อง จำเป็นหรือไม่ ? บอกเลยว่า ขึ้นอยู่กับบุคคลครับ ซึ่ง Enclosure ก็มีหลายแบบให้เลือกใช้ ทั้งแบบเป็นกล่องเดี่ยวๆ (แบบที่จะแสดงให้ดูนี้), แบบที่เป็น Stack, แบบอลูมิเนียมเพื่อระบายความร้อนแบบ Passive และอีกมากมายครับ ประเด็นคือ เลือกให้ตรงกับความต้องการดีกว่าครับ ทั้งนี้ก็เพื่อความเป็นระเบียบและเรียบร้อยของอุปกรณ์นั่นเองครับ     ผมเลือกใช้เคสที่เป็นอะคริลิค พร้อมช่องพัดลม เพื่อติดตั้งไว้ระบายความร้อนของ Heat Sink อีกทีนึงครับ     ประกอบเรียบร้อยพร้อมติดตั้งพัดลมครับ ** ผมติดตั้งพัดลมแบบดูดเข้านะครับ เพื่อให้ลมเย็นจากภายนอกปะทะกับ Heat Sink โดยตรง ** ** พัดลมติดตั้งโดยใช้ไฟจาก GPIO PIN 4 (+5V) และ 6 (GND) ครับ **   พร้อมแล้วสำหรับการใช้งานครับ ต่อไปเตรียม microSD สำหรับติดตั้ง OS กันครับ ถ้าหลายท่านเคยผ่านตา จะเห็นว่าส่วนใหญ่จะใช้โปรแกรม SD Card Formatter ครับ แต่ผมจะใช้อีกตัวนึงตามคำแนะนำของ raspberrypi.org นั่นคือ Etcher ครับ สิ่งที่ต้องมีคือ SD Card 8GB ขึ้นไป (Class 4 หรือ 10 แล้วแต่ท่านสะดวกเลยครับ ผมลองแล้ว ความเร็ว ไม่ต่างกันเท่าไหร่) Card Reader และ microSD Adapter *ถ้าจำเป็น 7-Zip หรือโปรแกรมสำหรับ Extract Zip File โปรแกรม Etcher ดาวน์โหลดได้ที่นี่ ผมติดตั้ง Raspbian เพราะงั้นต้องมี image file ซึ่ง ดาวน์โหลดได้ที่นี่ ** เมื่อเข้าไปหน้าดาวน์โหลด ท่านจะเป็น NOOBS และ RASPBIAN ให้เลือก RASPBIAN นะครับ ซึ่งจะได้ Latest Version ** ** NOOBS (New Out Of the Box Software) คือตัวติดตั้งที่ออกมาจาก Official Raspberry Pi เอง โดยจะมีพื้นฐานจาก Raspbian นั่นเอง แต่มีการปรับให้สามารถทำการติดตั้งได้ง่ายขึ้น พร้อมโปรแกรมอื่นๆ สามารถเลือกติดตั้งได้ทันทีจาก internet **   Flash SD Card    1.ทำการใส่การ์ดใน Card Reader จากนั้นเปิดโปรแกรม Ether 2.เลือก Image File จากนั้นกด Flash

Read More »

Raspberry Pi 3 [Overview]

     Raspberry Pi (ราสเบอร์รี่ พาย) คือ เครื่องคอมพิวเตอร์ ขนาดเล็ก (ประมาณบัตรทั่วไป) ที่มีราคาถูกกว่าคอมพิวเตอร์ ราคาปกติมาก (1,xxx บาท ขึ้นอยู่กับว่าผลิตจากประเทศไหน China, UK หรือ Japan) สามารถต่อเข้ากับจอคอมพิวเตอร์ (ผ่าน HDMI) หรือจะใช้ตัวแปลง (HDMI to VGA)  และยังรองรับเมาส์/คีย์บอร์ด/อุปกรณ์อื่นๆ ผ่านทาง USB Port อีกทั้งยังสามารถต่อสายแลน (10/100 RJ45) ได้อีกด้วย (มี Bluetooth และ Wi-Fi 802.11n Controller On-Board)                   Specification (ข้อมูลจาก: https://www.raspberrypi.org/magpi/raspberry-pi-3-specs-benchmarks/) SoC: Broadcom BCM2837 CPU: 4× ARM Cortex-A53, 1.2GHz GPU: Broadcom VideoCore IV RAM: 1GB LPDDR2 (900 MHz) Networking: 10/100 Ethernet, 2.4GHz 802.11n wireless Bluetooth: Bluetooth 4.1 Classic, Bluetooth Low Energy Storage: microSD GPIO: 40-pin header, populated Ports: HDMI, 3.5mm analogue audio-video jack, 4× USB 2.0, Ethernet, Camera Serial Interface (CSI), Display Serial Interface (DSI)     (รูปจาก element 14) Raspberry Pi ทำอะไรได้บ้าง ? เรียกว่าเป็นเครื่องคอมพิวเตอร์ desktop เครื่องหนึ่งเลยก็ว่าได้ อาจจะไม่พลังสูงเหมือนกับเครื่อง PC แต่ก็เพียงพอสำหรับเด็กๆ ลูกๆ หลานๆ ได้ใช้งาน พิมพ์งาน เล่นเกมจำนวนหนึ่ง และที่สำคัญสามารถฝึกการเขียนโปรแกรม (เช่น Python) ได้อีกด้วย ซึ่งสามารถใช้งานได้ทันที สามารถต่อ I/O (Input/Output) ร่วมกับเซนเซอร์ต่างๆ อีกทั้งสามารถทำเป็น Media Center ได้อีกด้วย       Raspberry Pi VS Arduino ทั้งสองอย่างอย่างนี้ ถ้ามองกันจริงๆ แล้วแตกต่างกันพอสมควร โดยที่ Arduino (อา-ดู-อิ-โน่ หรือ อาดุยโน่) เป็น Microprocessor ตระกูล AVR เอาไว้รันโปรแกรมเล็กๆ หรือเอาไว้ต่อพ่วงกับอุปกรณ์อื่นๆ เช่น เซนเซอร์, รีเลย์ ได้อย่างง่ายกว่า Raspberry Pi ซึ่งอย่างที่กล่าวเอาไว้ก่อนหน้า Raspberry Pi คือ คอมพิวเตอร์ขนาดจิ๋ว สามารถลงระบบปฏิบัติการ (OS) ใช้งานแทนคอมพิวเตอร์ได้   แล้วจะเอา Raspberry Pi มาทำแบบ Arduino ได้มั้ย ? คำตอบคือ ได้ครับ เนื่องจาก Raspberry Pi ก็มี GPIO (General Purpose Input Output) ให้จำนวนหนึ่ง สามารถคอนโทรลให้เป็น “1” หรือ “0” ได้ตามใจชอบ ด้วยการเขียนโปรแกรมควบคุมแต่ละ Pin (เหมือนกับ Microcontroller) ด้วยภาษา C หรือ

Read More »