Tugas saya sekarang adalah mempelajari cara mengirim perintah ke AC dan perangkat lain di rumah. Awalnya, perangkat ini hanya memiliki remote control IR. Untuk mengatasi masalah ini, saya memiliki perisai transceiver Raspberry Pi dan IR. Dalam artikel ini Anda dapat menemukan konfigurasi, tim, kiat, dan sedikit teori. Dari perangkat lunak akan LIRC (Linux Infrared Remote Control) dan Python.
Saya menemukan LIRC dengan bantuan Google. Dalam proses penelitian, saya menemukan bahwa LIRC bekerja dengan pemancar dan penerima sinyal IR, dapat men-decode sinyal yang diterima dan melakukan beberapa tindakan sehubungan dengan ini. Sekarang saya tidak perlu menerima sinyal, tetapi di masa depan mungkin berguna. Jika Anda sendiri mengacaukan LIRC, membaca Panduan Konfigurasi LIRC sangat disarankan.
Konfigurasi
apt-get update apt-get install lirc
# /etc/modules ( ) lirc_dev lirc_rpi gpio_in_pin=18 gpio_out_pin=17
# /etc/lirc/hardware.conf ( , ) LIRCD_ARGS="--uinput --listen" LOAD_MODULES=true DRIVER="default" DEVICE="/dev/lirc0" MODULES="lirc_rpi"
# /boot/config.txt ( lirc, ) dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17
# /etc/lirc/lirc_options.conf ( ) driver = default device = /dev/lirc0
reboot sudo /etc/init.d/lircd status
Rekam
Pertama, Anda perlu membuat file konfigurasi dengan urutan data untuk semua perintah yang diperlukan. Saya terus memanggil file ini lircd.conf
, tetapi pada setiap perangkat itu sendiri ia menciptakan file my_device_name.lircd.conf
di direktori /etc/lirc/lircd.conf.d
.
Format file dijelaskan di sini . Jika Anda memiliki remote control, Anda dapat menulis sinyal yang dikirimkan olehnya ke file menggunakan utilitas irrecord .
/etc/init.d/lircd stop irrecord -d /dev/lirc0 ~/my_device.lircd.conf mv ~/my_device.lircd.conf /etc/lirc/lircd.conf.d/
irrecord
menganalisis urutan dan mencoba menentukan parameter protokol dan waktu. Dalam beberapa kasus, irrecord
gagal dalam analisis, sehingga dimungkinkan untuk menyimpan urutan seperti yang diterima dalam bentuk mentah, ada saklar - --force
untuk ini.
Tetapi bahkan dengan - irrecord
mencoba menganalisis sesuatu, dan mungkin juga gagal. Kemudian Anda dapat merekam urutan menggunakan mode2
dan membuat file sendiri.
mode2
mencetak secara berurutan durasi ada dan tidak adanya sinyal, dari mana data yang ditransmisikan tersusun. Durasi diukur dalam mikrodetik (1e-6 detik). Dalam format mentah, durasi yang sama ditunjukkan dalam lircd.conf, dimulai dengan 'pulsa' ('spasi' depan tidak diperlukan). Karenanya, harus selalu ada angka ganjil (dimulai dan diakhiri dengan kehadiran sinyal - 'pulsa').
Untuk otomatisasi, saya membuat skrip untuk merekam yang menanyakan nama perintah, menjalankan mode2
selama 5 detik, mengingat dan akhirnya mencetak hasilnya dalam format yang siap untuk lircd.conf (lihat di bawah spoiler).
irrecord --analyse
file, Anda dapat mencoba "mengenalinya" kembali menggunakan irrecord --analyse
. Ini tidak selalu berhasil, jangan buru-buru membuang file lama. Statistik saya adalah sebagai berikut: remote control dari LG TV mudah dimengerti, semua AC dan penyedot debu diperlukan pembuatan manual, penyedot debu kemudian diproses oleh --analyse
.
Sebagai contoh: ini adalah bentuk file untuk penyedot debu saya .
Nama Tim Standar
Untuk tujuan yang dimaksud, LIRC harus mengubah sinyal IR yang diterima dan dikenali menjadi peristiwa input Linux . Oleh karena itu, secara default, kita diharuskan memiliki nama perintah di lircd.conf dari daftar standar. Anda dapat melihat daftar nama yang valid:
irrecord --list-namespace
Pendingin udara tidak termasuk dalam pola ini. Persyaratan nama dapat dimatikan dengan menambahkan parameter saat menulis:
irrecord --disable-namespace ....
Debugging
Periksa penerima membantu utilitas mode2
, yang mencetak semua sinyal yang terlihat.
/etc/init.d/lircd stop mode2 -d /dev/lirc0
Cara termudah untuk memeriksa transmisi adalah jika ada receiver lain dan mode2
berjalan di atasnya. Dalam kasus-kasus yang khususnya tidak ada harapan, Anda dapat mengubah nilai pada output GPIO dan memeriksa dengan tester atau osiloskop di mana sinyalnya. Tim gpio
adalah bagian dari paket wiringpi .
while sleep 1; do gpio -g toggle 17 done
Anda dapat melihat log menggunakan journalctl
, khususnya, ini memungkinkan Anda melihat kesalahan dalam file konfigurasi:
journalctl -b 0 /usr/sbin/lircd
Mengirim perintah
Ada utilitas irsend
untuk mengirimkan perintah yang direkam. Dia juga dapat menampilkan daftar perangkat yang dikenal, dan daftar perintah yang diketahui untuk setiap perangkat. Perhatikan "argumen kosong" pada contoh di bawah, mereka diperlukan di sana.
irsend
adalah klien untuk lircd
, jadi jika ada yang salah, lihat di log (lihat di atas).
Secara teoritis, ada kemungkinan lain - mengirim perintah ke lircd melalui soketnya. Saya tidak mengerti.
Panggilan dari Python
Hampir semua pustaka hanyalah kit daripada irsend
. Satu-satunya perpustakaan yang saya temukan yang mengkompilasi klien untuk API melalui soket tidak berfungsi pada Raspberry (versi lircd lain diperlukan). Oleh karena itu, ada sedikit akal di dalamnya, saya bisa memanggil perintah sendiri:
import subprocess subprocess.call(["irsend", "send_once", "BEDROOM_AC", "OFF"])
Perangkat keras

Saya menggunakan papan yang sudah jadi, ada banyak di Amazon dan AliExpress . Anda dapat google itu seperti "Raspberry infrared sheild." Ini menggunakan GPIO 17 untuk output, dan GPIO 18 untuk input, seperti yang dapat dilihat dari konfigurasi di atas.
Ada tempat di papan untuk D2 LED kedua (tambahan), yang tidak diinstal secara default. Saat menggunakan dua LED, keduanya dihubungkan secara seri . Karena itu, dengan tidak adanya LED D2, Anda harus menutup jumper SJ1. Saya terkejut menemukan bahwa di semua papan saya jumper awalnya terbuka. Saya harus memodifikasi besi solder.
Foto yang lebih besar untuk mereka yang ingin melihatnya Ringkasan
Ini bekerja: sinyal ditransmisikan, perangkat melihatnya dan bereaksi dengan benar.
Banyak tergantung pada posisi emitor dioda, itu harus secara akurat ditujukan pada penerima. Satu pemancar tetap tidak dapat mengontrol semua perangkat di ruangan. Mengkloning solusi berdasarkan Raspberry Pi untuk setiap gadget mahal, Anda perlu memodifikasi emitor untuk "menutupi area yang lebih besar", atau menemukan platform yang lebih murah.
LIRC pada awalnya dibuat untuk mengonversi sinyal IR ke acara Linux standar pada perangkat input. Oleh karena itu, wajar baginya bahwa satu tombol adalah satu kode. Untuk beberapa perangkat (sebagian besar AC) ini tidak demikian: ketika Anda mengklik tombol apa saja, remote control mentransmisikan paket data yang berisi status lengkap perangkat (aktif, mode operasi, suhu, mode operasi kipas, waktu, timer, dll.). Tidak ada cara untuk membangun paket multi-komponen berdasarkan beberapa parameter di LIRC, oleh karena itu membantu sebagai alat cepat di luar kotak, tetapi kemudian Anda harus mencari sesuatu yang lain. Meskipun untuk sebagian besar kasus, data yang direkam dengan pengaturan kipas yang biasa dan tanpa mode eksotis sudah cukup.