ดิว.นินจา

ดิว.นินจา

Sunday, December 29, 2019

การใช้งาน Serial Bluetooth บน ESP32

ในบทความนี้จะกล่าวถึงการใช้งาน Bluetooth บน ESP32 แบบธรรมดา (บางที่เรียกว่าแบบ classic) ซึ่งจะเขียนโปรแกรมง่ายกว่าแบบ BLE (Bluetooth Low Energy) ที่เน้นการประหยัดพลังงาน แต่ในที่นี้จะใช้สำหรับงานปกติที่รับส่งคำสั่งเป็นคู่ขนานกับพอร์ตอนุกรม ผู้อ่านที่ติดตามเว็บหรือหนังสือคุ้นเคยดีอยู่แล้วกับฟังก์ชัน cmdInt() การโปรแกรมจะมองเสมือน Bluetooth เป็นพอร์ตอนุกรมอีกตัวหนึ่งที่มีลักษณะคำสั่งเหมือนกัน ทำให้เราสามารถควบคุมและรับข้อความได้โดยใช้โทรศัพท์มือถือ การทดลองในบทความนี้จะใช้โทรศัพท์ที่มีระบบปฏิบัติการ Android และติดตั้งแอป Serial Bluetooth Terminal ผู้อ่านสามารถพัฒนาเพิ่มเติมเพื่อสร้างแอปควบคุมได้โดยใช้เครื่องมือเช่น App Inventor

เนื้อหาในบทความนี้อ้างอิงจากลิงก์ ESP32 Bluetooth Classic with Arduino IDE – Getting Started โดยประยุกต์ใช้งานกับฟังก์ชันรับส่งคำสั่ง cmdInt() ที่อธิบายในหนังสือ "คู่มือนักพัฒนาไอโอที" เพื่อให้เข้าใจได้ง่ายจะเพิ่มคำสั่งสำหรับ Bluetooth ลงในโปรแกรม addmult.ino ในบทที่ 1 (สามารถรันบน ESP32 ได้โดยไม่ต้องแก้ไขใดๆ ) ซึ่งเป็นโปรแกรมคำนวณเลขอย่างง่ายจากคำสั่งที่ผู้ใช้ป้อนให้และแสดงผลบน Serial Monitor เราต้องการให้สามารถรับส่งข้อมูลผ่าน Bluetooth ได้ด้วย

เริ่มต้นโดยเพิ่มเติมส่วนหัวที่คัดลอกมาจากไฟล์ตัวอย่าง SerialToSerialBT.ino สร้างออปเจ็คชื่อ SerialBT เพื่อใช้งานในโปรแกรมต่อไป


#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;

ในส่วน setup() เพิ่มโค้ดตั้งค่าดังนี้


  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");  

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

ในฟังก์ชัน loop() เพิ่มเงื่อนไขคู่ขนานกับการรับสตริงคำสั่งจากพอร์ตอนุกรม


  if (SerialBT.available() )   {  // detect new input
     rcvdstring = SerialBT.readString();
     newcmd = 1;
  }

สำหรับการส่งค่าเอาต์พุตก็ใช้เมธอดของ SerialBT ลักษณะเช่นเดียวกับพอร์ตอนุกรม


     SerialBT.print("New Result = ");
    SerialBT.println(Result);

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

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

โดยวิธีการนี้เราสามารถนำไปประยุกต์ใช้ในโปรแกรมที่ซับซ้อนขึ้น เช่นควบคุมอุปกรณ์ไฟฟ้า ความเร็วมอเตอร์ ปรับแต่งค่าพารามิเตอร์ PID

ดาวน์โหลดโปรแกรม addmult.ino

No comments:

Post a Comment

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เ...