ภาพที่ 1 GPIO Numbers
ที่มา : http://thaiopensource.org/มาเล่น-gpio-บน-raspbery-pi-กัน/
Raspberry Pi3 Model B
จะมี GPIO ซึ่งมีไว้สำหรับกำหนดการอ่านค่าแบบ Digital Interface โดยเราสามารถกำหนดโหมดให้เป็น Input หรือ Output ก็ได้ จากภาพที่ 1 จะอธิบาย GPIO ของ Raspberry Pi โดยเริ่มตั้งแต่ Raspberry Pi B Rev1 P1 ต่อมา Raspberry Pi A/B Rev2 P1 และ Raspberry Pi B+ (คือตัวที่ผมใช้อยู่) โดยทั้ง 3 รุ่นนี้ จะมีจำนวน ขาของ GPIO ที่ต่างกัน แต่โดยพื้นฐานจะมี ขาที่เหมือนกันอยู่ คือ Power+, GND, I2C, UART, SPI,และ GPIO
Power+
Pin No. 5V คือ หมายเลข 2 และ 4
Pin No. 3.3V คือ หมายเลข 1 และ 1
ภาพที่ 2 Power+
เป็นขั้วไฟสีแดง (+) ซึ่งมีแรงดันไฟฟ้า 5V และ 3.3V
GND -
Pin No. GND คือ หมายเลข 6, 9, 14, 20, 25, 30, 34, และ 39
ภาพที่ 3 GND -
เป็นขั้วไฟสีดำ (-) ซึ่งมีทั้งหมด 8 Pin
I2C
Pin No. I2C คือ หมายเลข 3 และ 5
ภาพที่ 4 I2C (Inter-Integrated Circuit)
Inter-Intergrated Circuit หรือ I2C คือ วิธีการสื่อสารระหว่างไอซี หรือ ไมโครคอลโทรเลอร์ ถูกคิดค้นโดยบริษัท Phillips Semiconductor ซึ่งปัจจุบันคือบริษัท NXP Semiconductor โดยคิดค้นคั้งแต่ปี 1982 และได้มีการพัฒนามาเรื่อยๆ จนกลายเป็นโปรโตคอลมาตรฐานที่ใช่ในการติดต่อกันระหว่างอุปกรณ์ในปัจุบัน I2C อ่านว่า ไอสแควร์ซี หรือ ไอทูซี หรืออาจจะเรียกว่า TWI (Two Wire Interface ซึ่งก็คือ I2C นั้นเอง
I2C เป็นวิธีการส่งข้อมูลกันระหว่างไอซี หรือ ไมโครคอลโทรเลอร์ ซึ่งสามารถติดต่อกันได้หลายตัว แต่คุยกันได้ทีละคู่ โดยจะมีตัวออกคำสั่งว่าใครคุยกับใคร ว่าใคร คือ Master และ ตัวที่สั่งให้ต้องตอบ คือ Slave
UART
Pin No. UART คือ หมายเลข 8 และ 10
ภาพที่ 5 แนวคิดวิธีเชื่อมต่อระหว่างอุปกรณ์
ที่มา : http://www.thaieasyelec.com/article-wiki/basic-electronics/uart-ttl-rs232-max232-max3232.html
ชื่อเต็มๆ ของ UART คือ Universal Asynchronous Receiver Transmitter หมายถึง รูปแบบการส่งข้อมูล ที่ถูกกำหนดขึ้นมาเพื่อใช้รับส่งข้อมูลแบบ Asynchronous ซึ่งเป็นส่วนหนึ่งในการสื่อสารอนุกรม แบบ Asynchronous ซึ่งเป็นการส่งข้อมูลที่ไม่ต้องใช้สัญญาณ Clock มาเป็นตัวกำหนดจังหวะการรับส่งข้อมูลแต่ ใช้วิธีกำหนด รูปแบบ Format การรับส่งข้อมูลขึ้นมาแทน และอาศัยการกำหนด ความเร็วของการรับ และ ส่ง ที่เท่ากันทั้งฝั่งรับและฝั่งส่ง ข้อดีของการใช้ Asynchronous คือ สามารถสื่อสารแบบ Full Duplex รับ และ ส่งได้ในเวลาเดียวกัน
SPI
Pin No. SPI คือ หมายเลข 19, 21, 23, 24 และ 26
ภาพที่ 6 Serial Peripheral Interface
ที่มา : http://www.thaieasyelec.com
SPI (Serial Peripheral Interface) เป็นการเชื่อมต่อสื่อสารแบบอนุกรมโดยอาศัยสัญญาณนาฬิกาเป็นตัวกำหนดจังหวะการรับส่งข้อมูล (Synchronous) ที่สามารถส่งข้อมูลไปยังปลายทางและรับข้อมูลจากปลายทางกลับมาในครั้งเดียวกัน (Full Duplex) บริษัท วีนัส ซัพพลาย. (ม.ป.ป.)
SPI แบ่งอุปกรณ์ออกเป็น 2 ฝั่ง คือ Master เป็นตัวควบคุมการรับส่งข้อมูลโดยในที่นี้คือไมโครคอนโทรลเลอร์ กับ Slave เป็นอุปกรณ์ที่รอรับคำสั่งจาก Master โดย Slave มีได้มากกว่า 1 ตัว
SPI ใช้สายสัญญาณทั้งหมด 4 เส้นดังนี้ บริษัท วีนัส ซัพพลาย. (ม.ป.ป.)
1. MOSI (Master Out Slave In) Master -> Slave Shared
2. MISO (Master In Slave Out) Slave -> Master Shared
3. SCLK (Clock) Master -> Slave Shared
4. CS (Chip Select) Master -> Slave Not Shared
Master สามารถเชื่อมต่อกับ Slave ได้มากกว่า 1 ตัว โดยทุกตัวจะใช้ขา MOSI MISO และ SCLK ร่วมกัน แล้ว Master จะส่งสัญญาณที่ขา CS เพื่อเลือกว่าในขณะนั้น Master ติดต่อกับ Slave ตัวใด
GPIO
Pin No. GPIO คือ หมายเลข 7, 11, 12, 13, 15, 16, 18, 22, 29, 31, 32, 33, 35, 36, 37, 38 และ 40
ภาพที่ 7 Raspberry Pi
ที่มา : http://www.orbit-maker.com/?page_id=4859
GPIO ย่อมาจาก General Purpose Input/Output เรียกว่า พอร์ตเอนกประสงค์ ใช้ในการอ่านค่าแบบ Digital Interface โดยเราสามารถกำหนดโหมดให้เป็น Input หรือ Output ก็ได้
อ้างอิง
บริษัท วีนัส ซัพพลาย. (ม.ป.ป.). มาเล่น-gpio-บน-raspbery-pi-กัน. [ออนไลน์] ค้นหาเมื่อวันที่ 30 ธันวาคม พ.ศ. 2559 จาก http://thaiopensource.org/มาเล่น-gpio-บน-raspbery-pi-กัน/
บริษัท วีนัส ซัพพลาย. (ม.ป.ป.). ตัวอย่างการเขียนโปรแกรมรับ-ส่งข้อมูลผ่านทาง SPI. [ออนไลน์] ค้นหาเมื่อวันที่ 30 ธันวาคม พ.ศ. 2559 จาก http://thaieasyelec.com/article-wiki/embedded-electronics-application/บทความการพัฒนาโปรแกรมบน-raspberry-pi-ด้วย-qt-ตอนที่-8.html
บริษัท วีนัส ซัพพลาย. (ม.ป.ป.). UART / TTL / RS232 / MAX232 / MAX3232 คืออะไร. [ออนไลน์] ค้นหาเมื่อวันที่ 30 ธันวาคม พ.ศ. 2559 จากhttp://www.thaieasyelec.com/article-wiki/basic-electronics/uart-ttl-rs232-max232-max3232.html
(2557). พื้นฐานการใช้งาน GPIO ของ Raspberry Pi ด้วยภาษา Python กับ Module RPi.GPIO. [ออนไลน์] ค้นหาเมื่อวันที่ 30 ธันวาคม พ.ศ. 2559 จาก http://surinidea.blogspot.com/2014/06/gpio-raspberry-pi-python-module-rpigpio.html
Arduitronics. (2558). I2C Communication: Case study of GY-30 (Ambient Light Sensor). [ออนไลน์] ค้นหาเมื่อวันที่ 30 ธันวาคม พ.ศ. 2559 จาก https://www.arduitronics.com/article/47/i2c-communication-case-study-of-gy-30-ambient-light-sensor