11.Bluetooth low energy (BLE) serial port pass-through
พอร์ตอนุกรม Bluetooth Low Energy (BLE, Bluetooth Low Energy) ใช้กันอย่างแพร่หลาย บนแพลตฟอร์ม iOS ของ Apple Classic Bluetooth ต้องมีใบรับรอง MFi เพื่อเชื่อมต่อกับอุปกรณ์ iOS ของ Apple อุปกรณ์บลูทูธพลังงานต่ำไม่มีข้อจำกัดนี้
โปรโตคอลสแต็คและหลักการของบลูทูธพลังงานต่ำจะไม่ถูกทำซ้ำที่นี่ มีบทความและวิดีโอที่เกี่ยวข้องมากมาย กล่าวโดยย่อ บริการบลูทูธมีให้ในรูปแบบของโปรไฟล์ และมีอักขระ N ตัวที่มี ID อิสระ (UUID) อยู่ใต้โปรไฟล์ของแต่ละบริการ อักขระแต่ละตัวมีสิทธิ์ต่างกัน (อ่าน เขียน แจ้ง ระบุ) หลังจากที่ผู้ใช้กำหนดอักขระและรวมเข้ากับสิทธิ์แล้ว ก็สามารถให้บริการที่สมบูรณ์ได้
BLE pass-through คืออะไร คือเพื่อสร้างบริการ BLE และมีอักขระ 2 ตัวอยู่ใต้โปรไฟล์นี้
#defineSERVICE_UUID"6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID#defineCHARACTERISTIC_UUID_RX"6E400002-B5A3-F393-E0A9-E50E24DCCA9E"#defineCHARACTERISTIC_UUID_TX"6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
// Create the BLE Service BLEService *pService =pServer->createService(SERVICE_UUID); // Create a BLE Characteristic pTxCharacteristic =pService->createCharacteristic( CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY );pTxCharacteristic->addDescriptor(newBLE2902()); BLECharacteristic * pRxCharacteristic =pService->createCharacteristic( CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE );
if (deviceConnected) {pTxCharacteristic->setValue(&txValue,1);pTxCharacteristic->notify(); txValue++;delay(10); // bluetooth stack will go into congestion, if too many packets are sent } // disconnectingif (!deviceConnected && oldDeviceConnected) {delay(500); // give the bluetooth stack the chance to get things readypServer->startAdvertising(); // restart advertisingSerial.println("start advertising"); oldDeviceConnected = deviceConnected; } // connectingif (deviceConnected &&!oldDeviceConnected) { // do stuff here on connecting oldDeviceConnected = deviceConnected; }