ในบทความนี้จะกล่าวถึงการใช้งาน 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