Ang Bluetooth at Bluetooth Low Energy ay mga pamantayan ng wireless na komunikasyon para sa pagpapadala ng data sa maikling distansya. Ang Bluetooth Classic (BR/EDR) ay nagbibigay ng matatag na stream channel para sa audio at mga file, habang ang BLE ay na-optimize para sa energy-efficient na trabaho sa mga sensor at peripheral. Ayon sa Bluetooth SIG, 2025, taun-taon mahigit 5 bilyon na device na may suporta sa BLE ang ipinapadala — ang pamantayan ay naging batayan ng IoT, wearable electronics at mobile accessories.
Mga pangunahing punto
Bluetooth — ay isang wireless personal area network (WPAN) standard na gumagana sa ISM 2.4 GHz band at idinisenyo para sa komunikasyon sa pagitan ng mga device hanggang 100 metro. Ang IEEE 802.15.1 specification ay tumutukoy sa physical at MAC layer, at ang Bluetooth SIG stack ay tumutukoy sa higher-level profiles para sa mga partikular na scenario: audio headsets (HSP), file transfer (OPP), keyboard input (HID).
Ang standard ay nahati sa dalawang sangay mula noong bersyon 4.0 (2010): Bluetooth Classic (BR/EDR) at Bluetooth Low Energy (BLE, dating Bluetooth Smart). Ang Classic ay para sa tuluy-tuloy na stream — audio calls, musika, mga file. Ang BLE ay ginawa para sa mga application kung saan ang data ay ipinapadala sa maikling packet na may pahinga ng sampung segundo o minuto — pulse meter, tag, temperature sensor.
Ayon sa Bluetooth SIG (2025), 99% ng mga bagong smartphone ay sumusuporta sa parehong bersyon, at ang BLE ecosystem ay may kasamang higit sa 15 uri ng profile mula Blood Pressure hanggang Environmental Sensing.
Ang pagpili sa pagitan ng Classic at BLE ay depende sa scenario: para sa audio streaming ay angkop lamang ang Classic, para sa pagbabasa ng sensor isang beses bawat oras — tanging BLE. BR/EDR ay gumagamit ng 79 na channel na may step na 1 MHz at adaptive frequency modulation (AFH), na nagbibigay ng resistensya sa Wi-Fi interference.
| Parameter | Bluetooth Classic (BR/EDR) | Bluetooth Low Energy (BLE) |
|---|---|---|
| Bilis ng transmission | 1–3 Mbit/s (EDR) | 125 kbit/s – 2 Mbit/s (LE 2M PHY) |
| Peak current | 10–30 mA | 5–15 mA |
| Oras ng pag-broadcast | ~100 ms | ~3 ms |
| Topology | Piconet (1 master, hanggang 7 slave) | Broadcaster / Observer / Peripheral / Central |
| Mga Profile | HFP, A2DP, HSP, SPP, OPP | Batay sa GATT (HRS, BLS, CTS atbp.) |
| Mga tipikal na device | Headsets, speaker, auto hands-free set | Fitness bracelet, tag, pulse meter, IoT sensor |
| Compatibility | Hindi compatible sa BLE sa physical level | Dual-mode chips sumusuporta sa parehong stack |
Ang BLE 5.x ay nagdagdag ng LE Coded PHY para sa pagtaas ng range hanggang 1 km (sa open area) at LE Audio na may LC3 codec — ang bagong bersyon ay unti-unting binubura ang hangganan sa pagitan ng Classic at BLE sa audio scenarios.
Ang BLE stack ay nahahati sa tatlong layer: Controller (physical at link layer), Host (L2CAP, ATT, GATT, Security Manager) at Application (implementation ng profile sa application). Ang paghahati na ito ay nagpapahintulot sa chip manufacturer na i-implement ang Controller sa firmware, at sa mobile app developer — na magtrabaho lamang sa GATT abstractions.
Link Layer (LL) ay namamahala ng oras ng pag-broadcast: ang device ay lumilipat sa pagitan ng Standby, Advertising, Scanning, Initiating at Connection states. Sa Connected state, ang Central at Peripheral ay nag-aayos ng connection interval — dalas ng pagpapalitan ng data packet. Karaniwang interval ay 7.5–1000 ms; mas madalas ang pagpapalitan, mas mataas ang bandwidth at konsumo ng kuryente.
Security Manager (SM) ay nag-i-implement ng AES-128 encryption na may key exchange sa pamamagitan ng pairing protocol. Tatlong mode: Just Works (walang PIN), Passkey Entry (6-digit code sa screen) at OOB (NFC o QR). Para sa wearable devices karaniwang ginagamit ang Just Works, para sa medical — OOB na may karagdagang verification.
Ayon sa Bluetooth Core Specification 5.4 (2023), ang oras ng paggawa ng secure na koneksyon sa LE Secure Connections mode ay hindi lalampas sa 300 ms sa connection interval na 30 ms.
Ang ATT (Attribute Protocol) — pangunahing modelo ng transportasyon kung saan ang server (peripheral device) ay nag-iimbak ng attributes, at ang client (smartphone) ay nagbabasa o nagsusulat ng mga ito. Ang GATT (Generic Attribute Profile) ay nagtatayo ng hierarchy sa ibabaw ng ATT: Service → Characteristic → Descriptor.
Ang bawat serbisyo ay lohikal na grupo ng mga katangian na naglalarawan ng isang function ng device: Heart Rate Service (UUID 0x180D) ay naglalaman ng Heart Rate Measurement characteristic (UUID 0x2A37) na may Descriptor Client Characteristic Configuration (0x2902) na namamahala ng mga notification. Ang mobile app developer ay kumukuha ng listahan ng mga serbisyo sa pamamagitan ng discoverServices(), pagkatapos ay hinahanap ang gustong characteristic sa pamamagitan ng UUID at nag-subscribe sa mga notification.
Ang BLE ay gumagamit ng 16-bit na UUID para sa standardized Bluetooth SIG services at 128-bit na UUID para sa custom services ng manufacturer. Halimbawa, ang isang tracker case ay maaaring mag-define ng serbisyo A000-… na may characteristic para sa pagpapadala ng charge level ng sarili nitong baterya.
private val gattCallback = object BluetoothGattCallback() {
override fun onServicesDiscovered(
gatt: BluetoothGatt, status: Int
) {
val service = gatt.getService(UUID.fromString("0000180d-0000-1000-8000-00805f9b34fb"))
val char = service?.getCharacteristic(
UUID.fromString("00002a37-0000-1000-8000-00805f9b34fb")
)
gatt.setCharacteristicNotification(char, true)
}
override fun onCharacteristicChanged(
gatt: BluetoothGatt, char: BluetoothGattCharacteristic
) {
val heartRate = char.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 1)
updateUi("Pulso: $heartRate bpm")
}
}
Sa halimbawa, ang application ay nakakahanap ng Heart Rate service sa pamamagitan ng standard Bluetooth SIG UUID, kumukuha ng pulse measurement characteristic at nag-subscribe sa mga notification nito — sa bawat pagbabago ng pulso, ang peripheral device ay nagpapadala ng data nang walang tahasang kahilingan mula sa Central.
Advertising — pangunahing mekanismo ng BLE kung saan ang Peripheral device ay pana-panahong nagpapadala ng broadcast packets (advertising PDUs) sa tatlong primary channel (37, 38, 39). Ang central device ay nag-scan ng mga channel na ito, tumatanggap ng advertising data at maaaring magpasimula ng koneksyon.
Ang advertising packet ay naglalaman ng hanggang 31 bytes ng kapaki-pakinabang na load: flags, TX power level, local name, UUID ng mga serbisyo, manufacturer-specific data. Ito ay sapat para sa pagpapadala ng sensor readings nang walang koneksyon — Connectionless mode (Broadcaster type). Para sa tuluy-tuloy na pagpapadala ng data (hal. temperatura bawat minuto) ay ginagamit ang koneksyon na may connection interval hanggang 1000 ms.
Sa mobile platform, ang pag-scan ay sinisimulan sa pamamagitan ng startScan() (Android) o scanForPeripherals() (iOS). Ang pag-filter sa pamamagitan ng service UUID ay nagtitipid ng enerhiya — ang application ay tumatanggap lamang ng callback para sa mga kawili-wiling tag o sensor.
import CoreBluetooth
class ScannerViewController: UIViewController {
private var centralManager: CBCentralManager!
override func viewDidLoad() {
centralManager = CBCentralManager(
delegate: self, queue: nil
)
}
func centralManagerDidUpdateState(central: CBCentralManager) {
if central.state == .poweredOn {
centralManager.scanForPeripherals(
withServices: nil, options: nil
)
}
}
func centralManager(
central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber
) {
if let name = advertisementData[CBAdvertisementDataLocalNameKey] {
print("Nahanap na device: \(name)")
}
}
}
Pagkatapos matukoy ang device, ang Central ay tumatawag ng connect() na nagpapasa ng CBPeripheral object. Ang mga parameter ng koneksyon (interval, latency, supervision timeout) ay pinag-uusapan sa Link Layer level — ang developer ay hindi direktang namamahala sa mga ito, ngunit maaaring makaimpluwensya sa pamamagitan ng requestConnectionPriority sa Android.
Ang parehong mobile platform ay nagbibigay ng native API para sa pagtatrabaho sa BLE. Core Bluetooth (iOS) ay gumagamit ng delegate approach: ang central manager ay nagpapasimula ng mga operasyon, ang peripheral object ay nag-uulat ng mga resulta sa pamamagitan ng delegate methods. Ang android.bluetooth (Android) ay binuo sa callback interfaces at sumusuporta sa parallel GATT operations na may maramihang device.
Mga pangunahing pagkakaiba sa pagitan ng mga platform:
Ayon sa Bluetooth SIG tests (2024), ang BLE connection time ng smartphone na may fitness bracelet ay average na 150–300 ms sa Android at 100–250 ms sa iOS — ang pagkakaiba ay dahil sa radio module management policies.
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BleService {
final FlutterBluePlus fbp = FlutterBluePlus();
Future<void> scanAndConnect(String deviceName) async {
await fbp.startScan(timeout: Duration(seconds: 15));
await for (final result in fbp.scanResults) {
if (result.device.advName == deviceName) {
await fbp.stopScan();
await result.device.connect();
break;
}
}
}
}
Ang Flutter developer ay nakakakuha ng pinag-isang API interface, kung saan ang flutter_blue_plus ay nagsasalin ng mga tawag sa native android.bluetooth o Core Bluetooth. Ang approach na ito ay nagbabawas ng oras ng pag-develop ng application para sa pagtatrabaho sa BLE peripherals sa parehong platform.
Mga Madalas Itanong
Ang Bluetooth Classic (BR/EDR) ay para sa tuluy-tuloy na streaming transmission — audio calls, musika, file transfer. BLE ay na-optimize para sa maikling data packets na may minimal na konsumo ng kuryente — sensor, tag, fitness tracker. Ang Classic ay kumokonsumo ng 10–30 mA, BLE 5–15 mA sa peak.
Sa physical level hindi sila compatible — iba't ibang modulation at channel map. Gayunpaman, karamihan sa mga modernong chip ay dual-mode at nag-i-implement ng parehong stack. Ang smartphone na may dual-mode chip ay maaaring sabay na makipag-ugnayan sa Classic headset at BLE tracker.
Ang connection interval ay ang agwat ng oras sa pagitan ng dalawang data packet sa isang naitatag na koneksyon. Ang halaga ay nag-iiba mula 7.5 ms hanggang 4 na segundo. Kung mas maliit ang interval, mas mataas ang bandwidth at konsumo ng kuryente. Para sa temperature sensor isang beses bawat minuto ay ginagamit ang interval na 1000 ms.
Ang pairing ay ang proseso ng pagpapalitan ng encryption keys sa pagitan ng Central at Peripheral. Ang BLE ay sumusuporta sa tatlong paraan: Just Works (walang kumpirmasyon), Passkey Entry (pagpasok ng PIN sa screen) at OOB (pagpapalitan sa pamamagitan ng NFC o QR). Pagkatapos ng pairing, ang mga device ay nag-iimbak ng keys (bonding) at sa muling pagkonekta ay hindi nangangailangan ng muling pag-authenticate.
Ang pinakakaraniwan: Heart Rate Profile (0x180D) para sa pulse meter, Blood Pressure Profile (0x1810) para sa blood pressure monitor, Environmental Sensing (0x181A) para sa temperature at humidity sensor, Battery Service (0x180F) para sa charge level, Device Information (0x180A) para sa modelo at serial number.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din