บทความ ESPino32 ตอนที่ 15 การใช้งาน Bluetooth Serial

สารบัญ บทความ ESPino32

บทความ ESPino32 ตอนที่ 15 การใช้งาน Bluetooth Serial

        บทความ ESPino32 ตอนที่ 15 การใช้งาน Bluetooth Serial เป็นการใช้งานบอร์ด ESPino32 ในการรับ/ส่งข้อมูลแบบ Serial เข้ากับสมาร์ทโฟนหรือแท็บเล็ต แบบไร้สายผ่านสัญญาณ Bluetooth ดังรูป การเชื่อมต่อระหว่างบอร์ด ESPino32 กับสมาร์ทโฟนแบบไร้สายผ่านสัญญาณ Bluetooth

การเชื่อมต่อระหว่างบอร์ด ESPino32 กับสมาร์ทโฟนแบบไร้สายผ่านสัญญาณ Bluetooth

Bluetooth คืออะไร

        Bluetooth คือเทคโนโลยีการติดต่อสื่อสารแบบไร้สายระยะใกล้อย่างหนึ่ง การพัฒนาอยู่ภายใต้การดูแลของ Bluetooth Special Interest Group (Bluetooth SIG) พื้นฐานของ Bluetooth จะเป็นการเชื่อมต่อแบบแบบไร้สายผ่านคลื่นวิทยุระยะสั้น (Short-Range Radio Links) ที่มีความถี่ขนาด 2.4 GHz เข้าอุปกรณ์ต่างๆที่มีเทคโนโลยีเดียวกัน เช่น สมาร์ทโฟน แท็บเล็ต คอมพิวเตอร์ หรืออุปกรณ์อื่นๆ มีระยะทางการใช้งานประมาณ 5 – 100 เมตร ใช้พลังงานต่ำ มีระบบป้องกันการเข้าถึงข้อมูลด้วยการป้อนรหัส และป้องกันการดักสัญญาณขณะสื่อสารระหว่างอุปกรณ์

ระยะทางการใช้งาน Bluetooth ขึ้นอยู่กับ Class ที่ใช้ ซึ่งมี 4 Class ดังนี้

– Class 1 กำลังส่ง 100 มิลลิวัตต์ ระยะประมาณ 100 เมตร

– Class 2 กำลังส่ง 2.5 มิลลิวัตต์ ระยะประมาณ 10 เมตร

– Class 3 กำลังส่ง 1 มิลลิวัตต์ ระยะประมาณ 1 เมตร

– Class 4 กำลังส่ง 0.5 มิลลิวัตต์ ระยะประมาณ 0.5 เมตร

Bluetooth Profile

        Bluetooth Profile คือข้อกำหนดเกี่ยวกับลักษณะของการสื่อสารไร้สายที่ใช้งานผ่าน Bluetooth มีหลากหลาย Profile ที่พบได้ในชีวิตประจำวัน ตัวอย่างเช่น

– Advanced Audio Distribution Profile (A2DP) สำหรับอุปกรณ์จำพวก Stereo Sound เช่น Bluetooth Speaker Headset Earphone เป็นต้น

– Audio/Video Remote Control Profile (AVRCP) สำหรับอุปกรณ์จำพวกรีโมทคอนโทรล เช่น รีโมทเซลฟี่ เป็นต้น

– Generic Attribute Profile (GATT) สำหรับอุปกรณ์ BLE ต่างๆ เช่น Smart band, Android Wear เป็นต้น

– Serial Port Profile (SPP) สำหรับการเชื่อมต่ออุปกรณ์ผ่านพอร์ต เช่น Bluetooth Serial Module (HC-05, HM-10) เป็นต้น

– Health Device Profile (HDP) สำหรับอุปกรณ์ที่เกี่ยวข้องกับสุขภาพ เช่น เครื่องชั่งน้ำหนัก, วัดความดัน, วัดอัตราการเต้นของหัวใจผ่าน Bluetooth เป็นต้น

– Hands-Free Profile (HFP) สำหรับอุปกรณ์ที่เกี่ยวข้องกับการสนทนา เช่น Bluetooth Speaker /Headset/Earphone เป็นต้น

– ดูเพิ่มเติม

สำหรับบอร์ด ESPino32 มีรายละเอียดต่างๆ ที่เกี่ยวกับ Bluetooth ดังนี้

– Bluetooth v4.2 BR/EDR และ BLE

– Bluetooth Class 1, 2 และ 3

– Bluetooth Profile GAP, GATT, A2DP, AVRC, SPP และ HFP

ภายในบทความนี้จะใช้งาน Bluetooth Profile แบบ Serial Port Profile (SPP) ซึ่งเป็น Profile ที่มีอยู่บนบอร์ด ESPino32 ประกอบด้วยตัวอย่างการใช้งาน 2 แบบคือ

– การใช้งานบอร์ด ESPino32 รับ/ส่งข้อมูลแบบ Serial

– การใช้งานบอร์ด ESPino32 รับ/ส่งข้อมูลแบบ Serial เพื่อควบคุม LED

การใช้งานบอร์ด ESPino32 รับ/ส่งข้อมูลแบบ Serial

        ตัวอย่างนี้เป็นตัวอย่างการใช้งานบอร์ด ESPino32 รับ/ส่งข้อมูล เพื่ออธิบายขั้นตอนเบื้องต้นในการจับคู่อุปกรณ์ระหว่างตัวบอร์ด ESPino32 เข้ากับสมาร์ทโฟน และทดลองรับ/ส่งข้อความระหว่างสมาร์ทโฟนกับบอร์ด ESPino32

ตัวอย่างโปรแกรมที่ใช้

บรรทัดที่ 1         เรียกใช้งานไลบรารี่ BluetoothSerial
บรรทัดที่ 2         ตรวจสอบว่า CONFIG_BT_ENABLE หรือ CONFIG_BLUEDROID_ENABLE ถูก define แล้วหรือไม่
บรรทัดที่ 3         ถ้ายังไม่ได้ define error คือ Bluetooth ไม่ได้เปิด ลอง run ‘make menuconfig’ เพื่อเปิด Bluetooth อีกครั้ง
บรรทัดที่ 4         จบฟังก์ชันการตรวจสอบการ define CONFIG_BT_ENABLE หรือ CONFIG_BLUEDROID_ENABLEบรรทัดที่ 5 ใช้งานไลบรารี่ BluetoothSerial โดยใช้ออปเจ็คชื่อ SerialBT
บรรทัดที่ 6         สร้างฟังก์ชัน setup()
บรรทัดที่ 7         เปิดฟังก์ชัน setup()
บรรทัดที่ 8         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate อยู่ที่ 115200 บิตต่อวินาที
บรรทัดที่ 9         เริ่มใช้งาน BluetoothSerial โดยตั้งชื่อว่า ESP32test
บรรทัดที่ 10        แสดงคำว่า “The device started, now you can pair it with bluetooth!” และการขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 11        ปิดฟังก์ชัน setup()
บรรทัดที่ 12        สร้างฟังก์ชัน loop()
บรรทัดที่ 13        เปิดฟังก์ชัน loop()
บรรทัดที่ 14        ตรวจสอบบัฟเฟอร์ Serial ว่ามีข้อมูลอยู่หรือไม่ และเปิดฟังก์ชันถ้ามีข้อมูลอยู่ในบัฟเฟอร์ Serial
บรรทัดที่ 15        อ่านค่าจากบัฟเฟอร์ Serial และส่งข้อมูลที่อ่านได้ออกทาง SerialBT
บรรทัดที่ 16        ปิดฟังก์ชันตรวจสอบถ้ามีข้อมูลอยู่ในบัฟเฟอร์ Serial
บรรทัดที่ 17        ตรวจสอบบัฟเฟอร์ SerialBT ว่ามีข้อมูลอยู่หรือไม่ และเปิดฟังก์ชันถ้ามีข้อมูลอยู่ในบัฟเฟอร์ SerialBT
บรรทัดที่ 18        อ่านค่าจากบัฟเฟอร์ SerialBT และส่งข้อมูลที่อ่านได้ออกทาง Serial Monitor
บรรทัดที่ 19        ปิดฟังก์ชันตรวจสอบถ้ามีข้อมูลอยู่ในบัฟเฟอร์ SerialBT
บรรทัดที่ 20        หน่วงเวลา 20 มิลลิวินาที
บรรทัดที่ 21        ปิดฟังก์ชัน loop()

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

1. ดาวน์โหลดโปรแกรม Serial Bluetooth Terminal (ใช้รับ/ส่งข้อมูลผ่าน Bluetooth)

2. เปิด Bluetooth และจับคู่กับอุปกรณ์

3. เปิดแอพลิเคชัน Serial Bluetooth Terminal เลือก Device และ Connect อุปกรณ์

4. ทดสอบรับส่งข้อมูลระหว่างบอร์ด ESPino32 (ดูได้จาก Serial Monitor) และสมาร์ทโฟน (แอพลิเคชัน)

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงานโปรแกรมในฟังก์ชัน setup() จะสั่งงานให้เปิด Bluetooth ที่มีชื่อว่า ESP32test จากนั้นโปรแกรมหลักภายในบอร์ด ESPino32 อธิบายแยกเป็น 2 ส่วนคือ

– ส่วนรับข้อมูล โปรแกรมจะวนรอบเช็คว่ามีข้อมูลเข้ามาทาง Bluetooth หรือไม่ หากมีข้อมูลเข้ามาให้อ่านข้อมูลและแสดงข้อมูลที่ได้ออกทาง Serial Monitor

– ส่วนส่งข้อมูล โปรแกรมจะวนรอบเช็คว่ามีข้อมูลเข้ามาทาง Serial หรือไม่ หากมีข้อมูลเข้ามาให้อ่านข้อมูลและแสดงข้อมูลที่ได้ออกทาง Bluetooth

การใช้งานบอร์ด ESPino32 รับ/ส่งข้อมูลแบบ Serial เพื่อควบคุม LED

        ตัวอย่างนี้เป็นตัวอย่างการใช้งานบอร์ด ESPino32 รับ/ส่งข้อมูล ระหว่างบอร์ด ESPino32 กับสมาร์ทโฟน เพื่อควบคุมการทำงานของ LED (ตัวอย่างนี้ใช้ LED_BUILTIN ที่มีอยู่บนบอร์ด ESPino32)

ตัวอย่างโปรแกรมที่ใช้

บรรทัดที่ 1         เรียกใช้งานไลบรารี่ BluetoothSerial
บรรทัดที่ 2         ตรวจสอบว่า CONFIG_BT_ENABLE หรือ CONFIG_BLUEDROID_ENABLE ถูก define แล้วหรือไม่
บรรทัดที่ 3         ถ้ายังไม่ได้ define error คือ Bluetooth ไม่ได้เปิด ลอง run ‘make menuconfig’ เพื่อเปิด Bluetooth อีกครั้ง
บรรทัดที่ 4         จบฟังก์ชันการตรวจสอบการ define CONFIG_BT_ENABLE หรือ CONFIG_BLUEDROID_ENABLE
บรรทัดที่ 5         ใช้งานไลบรารี่ BluetoothSerial โดยใช้ออปเจ็คชื่อ SerialBT
บรรทัดที่ 6         สร้างฟังก์ชัน setup()
บรรทัดที่ 7         เปิดฟังก์ชัน setup()
บรรทัดที่ 8         ใช้งานฟังก์ชัน Serial โดยตั้งค่าอัตราเร็ว Baud rate อยู่ที่ 115200 บิตต่อวินาที
บรรทัดที่ 9         เริ่มใช้งาน BluetoothSerial โดยตั้งชื่อว่า ESP32test
บรรทัดที่ 10        แสดงคำว่า “The device started, now you can pair it with bluetooth!” และการขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 11        ตั้งค่าให้ LED_BUILTIN เป็น OUTPUT
บรรทัดที่ 12        สั่งงานให้ LED_BUILTIN มีสถานะเป็น HIGH ทำให้ LED ดับ
บรรทัดที่ 13        ปิดฟังก์ชัน setup()
บรรทัดที่ 14        สร้างฟังก์ชัน loop()
บรรทัดที่ 15        เปิดฟังก์ชัน loop()
บรรทัดที่ 16        ตรวจสอบบัฟเฟอร์ SerialBT ว่ามีข้อมูลอยู่หรือไม่ และเปิดฟังก์ชันถ้ามีข้อมูลอยู่ในบัฟเฟอร์ SerialBT
บรรทัดที่ 17        ประกาศตัวแปร c ชนิด Character และอ่านค่าจากบัฟเฟอร์ SerialBT มาเก็บไว้ในตัวแปร c
บรรทัดที่ 18        ตรวจสอบค่าในตัวแปร c ว่ามีค่าเท่ากับ 0 หรือไม่ และเปิดฟังก์ชันถ้าค่าในตัวแปร c เท่ากับ 0
บรรทัดที่ 19        สั่งงานให้ LED_BUILTIN มีสถานะเป็น HIGH ทำให้ LED ดับ
บรรทัดที่ 20        แสดงคำว่า “LED OFF” และการขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 21        ส่งคำว่า “LED OFF” ออกทาง SerialBT
บรรทัดที่ 22        ปิดฟังก์ชันถ้าค่าในตัวแปร c เท่ากับ 0
บรรทัดที่ 23        ตรวจสอบค่าในตัวแปร c ว่ามีค่าเท่ากับ 1 หรือไม่ และเปิดฟังก์ชันถ้าค่าในตัวแปร c เท่ากับ 1
บรรทัดที่ 24        สั่งงานให้ LED_BUILTIN มีสถานะเป็น LOW ทำให้ LED ติด
บรรทัดที่ 25        แสดงคำว่า “LED ON” และการขึ้นบรรทัดใหม่ออกทาง Serial Monitor
บรรทัดที่ 26        ส่งคำว่า “LED ON” ออกทาง SerialBT
บรรทัดที่ 27        ปิดฟังก์ชันถ้าค่าในตัวแปร c เท่ากับ 1
บรรทัดที่ 28        ปิดฟังก์ชันตรวจสอบถ้ามีข้อมูลอยู่ในบัฟเฟอร์ Serial
บรรทัดที่ 29        ปิดฟังก์ชัน loop()

ผลการทดลอง

        เมื่อบอร์ด ESPino32 เริ่มทำงานโปรแกรมในฟังก์ชัน setup() จะสั่งงานให้เปิด Bluetooth ที่มีชื่อว่า ESP32test จากนั้นโปรแกรมหลักภายในบอร์ด ESPino32 จะวนรอบเช็คว่ามีข้อมูลเข้ามาทาง Bluetooth หรือไม่ หากมีข้อมูลเข้ามาให้อ่านข้อมูลมาเก็บไว้ในตัวแปร c จากนั้นตรวจสอบว่ามีค่าเท่ากับ ‘0’ หรือ ‘1’

– ถ้าค่าในตัวแปร c เท่ากับ ‘0’ ให้ LED ดับ และ ส่งคำว่า “LED OFF” กลับไปยังสมาร์ทโฟน

– ถ้าค่าในตัวแปร c เท่ากับ ‘1’ ให้ LED ติด และ ส่งคำว่า “LED ON” กลับไปยังสมาร์ทโฟน

ผลลัพธ์ของโปรแกรมรับ/ส่งข้อมูลแบบ Serial เพื่อควบคุม LED

        สำหรับบทความ ESPino32 ในตอนที่ 15 การใช้งาน Bluetooth Serial เป็นอีกฟังก์ชันหนึ่งของบอร์ด ESPino32 ที่สามารถสื่อสารแบบไร้สายกับอุปกรณ์อื่นๆได้ นอกเหนือจากการใช้งาน WiFi หวังว่าผู้ใช้งานจะสามารถเข้าใจพื้นฐานการใช้งาน Bluetooth Serial และสามารถประยุกต์การใช้งานอื่นๆได้ เช่น นำไปควบคุมอุปกรณ์แบบไร้สายผ่าน Bluetooth Serial นำไปประยุกต์ทำหุ่นยนต์ที่ควบคุมผ่าน Bluetooth Serial เป็นต้น

ขอขอบคุณข้อมูลอ้างอิงจาก

– https://th.wikipedia.org/wiki/%E0%B8%9A%E0%B8%A5%E0%B8%B9%E0%B8%97%E0%B8%B9%E0%B8%98

– https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles

– https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/bluetooth/#

สารบัญ บทความ ESPino32