Rumah > pembangunan bahagian belakang > Tutorial Python > Membina Pengawal Pemanas Pintar dengan Python, Docker dan Bluetooth #2

Membina Pengawal Pemanas Pintar dengan Python, Docker dan Bluetooth #2

DDD
Lepaskan: 2024-12-30 15:26:09
asal
168 orang telah melayarinya

Building a Smart Heater Controller with Python, Docker, and Bluetooth #2

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:

  1. Lupakan Peranti Lain Dahulu:
  2. Jika pemanas sudah dipasangkan dengan peranti lain (mis., apl telefon), anda perlu nyahgandingkannya daripada peranti itu sebelum meneruskan.
  3. Pemanas hanya boleh mengekalkan satu gandingan aktif pada satu masa.

  4. 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.
  1. 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

  1. Cabaran Berpasangan Bluetooth:

    • Gandingan manual selalunya diperlukan untuk mendayakan mod gandingan dan memasukkan semula PIN.
    • Memercayai peranti adalah penting untuk mengelakkan sambungan terputus.
  2. Kesilapan Pengekodan:

    • Percubaan awal digunakan 256 penskalaan bukannya 255 untuk pengekodan suhu.
    • Membetulkan kepada little-endian 0.1°C skala menyelesaikan ralat penyahkodan.
  3. 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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan