Bab 2: Memecahkan Kawalan Bluetooth dengan Python
pengenalan
Dalam Bab 1, kami menyediakan asas untuk mengawal Terma MOA Blue pemanas menggunakan Raspberry Pi, Docker dan Python.
Kini tiba masanya untuk menyelam lebih dalam:
-
Cara BLE berfungsi dan cara kami menggunakannya untuk berkomunikasi dengan pemanas.
-
Menyahpepijat sambungan Bluetooth menggunakan bluetoothctl.
-
Pengekodan dan penyahkodan data untuk tetapan suhu dan mod.
-
Skrip Python yang menyatukan semuanya.
Bluetooth Tenaga Rendah (BLE) – Gambaran Keseluruhan Pantas
Pemanas Terma MOA Blue menggunakan Bluetooth Low Energy (BLE) untuk komunikasi. Peranti BLE mendedahkan ciri GATT, yang bertindak seperti titik data anda boleh baca daripada atau tulis ke.
Konsep Utama:
-
UUID: ID unik yang mengenal pasti titik data tertentu, seperti suhu atau mod.
-
Ciri-ciri: Sifat BLE yang memegang data sebenar.
-
Penerangan: Metadata tambahan tentang ciri.
-
Operasi Tulis lwn. Baca: Sesetengah ciri hanya menyokong bacaan (cth., suhu semasa), manakala yang lain membenarkan tulisan (cth., menetapkan suhu).
Menyahpepijat Sambungan Bluetooth dengan bluetoothctl
Sebelum mengautomasikan proses dengan Python, kami menggunakan bluetoothctl untuk ujian manual dan penyahpepijatan.
Langkah 1: Imbas Peranti
bluetoothctl
scan on
Salin selepas log masuk
Salin selepas log masuk
Cari peranti bernama "Terma Wireless".
-
Pastikan Pemanas Dalam Mod Berpasangan: Tekan dan tahan butang suhu selama 5 saat sehingga lampu berkelip. Ini mengaktifkan mod berpasangan.
-
Kenal pasti Peranti Terdekat: Peranti dengan nilai RSSI terendah (cth., RSSI: -50) berkemungkinan pemanas terdekat. Nilai RSSI yang lebih rendah (lebih negatif) menunjukkan isyarat yang lebih lemah, jadi fokus pada isyarat paling kuat.
Langkah 2: Pasangkan dengan Pemanas
pair <DEVICE_ADDRESS>
Salin selepas log masuk
Salin selepas log masuk
Apabila digesa, masukkan kod PIN 123456.
Langkah 3: Percaya dan Sambung
trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
Salin selepas log masuk
Salin selepas log masuk
Langkah 4: Baca Ciri
Setelah disambungkan, gunakan:
bluetoothctl
scan on
Salin selepas log masuk
Salin selepas log masuk
Ini memaparkan UUID yang tersedia untuk membaca dan menulis data.
Nota Penting:
-
Lupakan Peranti Lain Dahulu:
- Jika pemanas sudah dipasangkan dengan peranti lain (mis., apl telefon), anda perlu nyahgandingkannya daripada peranti itu sebelum meneruskan.
Pemanas hanya boleh mengekalkan satu gandingan aktif pada satu masa.
-
Menyambung Semula Selepas Kegagalan:
- Jika pemanas berjaya disambungkan tetapi kemudiannya gagal disambung semula, gunakan langkah berikut:
pair <DEVICE_ADDRESS>
Salin selepas log masuk
Salin selepas log masuk
- Kemudian pasang semula menggunakan langkah di atas.
-
Sambungan Awal Diperlukan untuk Skrip Python:
- Sambungan pertama mesti diwujudkan secara manual melalui bluetoothctl.
- Setelah dipasangkan, skrip Python akan dapat berinteraksi dengan pemanas.
- Walau bagaimanapun, jika anda kemudiannya memasangkan pemanas dengan peranti lain (memutuskan sambungan), anda perlu mengalih keluar dan sambung semula secara manual daripada Raspberry Pi sebelum menjalankan skrip sekali lagi .
Memecahkan Format Data Pemanas
Pengekodan Suhu
Pemanas mengekod suhu sebagai dua bait (endian kecil) dengan ketepatan 0.1°C.
Contoh:
trust <DEVICE_ADDRESS>
connect <DEVICE_ADDRESS>
Salin selepas log masuk
Salin selepas log masuk
Penyahkodan Python:
info <DEVICE_ADDRESS>
Salin selepas log masuk
Pengekodan Python:
remove <DEVICE_ADDRESS>
Salin selepas log masuk
Pengekodan Mod
Mod pengendalian disimpan sebagai bait tunggal dengan nilai tertentu:
-
0: Mati
-
5: Manual (Suhu Bilik)
-
6: Manual (Suhu Elemen Pemanas)
-
33: Mod Elemen Pemanas Disahkan (Hex: 0x21)
Penyahkodan Python:
Hex: 012d → Decoded: 30.1°C
Salin selepas log masuk
Pengekodan Python:
def decode_temperature(data):
current_temp = ((data[1] << 8) | data[0]) / 10
target_temp = ((data[3] << 8) | data[2]) / 10
return round(current_temp, 1), round(target_temp, 1)
Salin selepas log masuk
Pengajaran Utama yang Dipelajari
-
Cabaran Berpasangan Bluetooth:
- Gandingan manual selalunya diperlukan untuk mendayakan mod gandingan dan memasukkan semula PIN.
- Memercayai peranti adalah penting untuk mengelakkan sambungan terputus.
-
Kesilapan Pengekodan:
- Percubaan awal digunakan 256 penskalaan bukannya 255 untuk pengekodan suhu.
- Membetulkan kepada little-endian 0.1°C skala menyelesaikan ralat penyahkodan.
-
Isu Pengendalian Mod:
- Mod BLE tidak didokumentasikan dengan baik dan kami terpaksa merekayasa balik nilai.
- Ujian disahkan 33 (0x21) berfungsi untuk mod Suhu Elemen Pemanas Manual.
Apa Seterusnya?
Dalam bab seterusnya, saya akan:
- Kembangkan skrip untuk menyokong berbilang pemanas.
- Perkenalkan Penyepaduan Docker untuk penggunaan yang lebih mudah.
- Mula meneroka persediaan automasi dengan Home Assistant.
Maklum Balas dan Cadangan?
Lihat repo GitHub:
? GitHub - ha-hudsonread-heater-control
Beritahu saya pendapat dan cadangan anda dalam komen di bawah!
Atas ialah kandungan terperinci Membina Pengawal Pemanas Pintar dengan Python, Docker dan Bluetooth #2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!