Menggunakan Raspberry Pi untuk mengontrol AC saya melalui inframerah


19

Ketika saya dalam perjalanan pulang dari suatu tempat, saya ingin dapat menyalakan AC saya beberapa menit sebelum saya tiba di apartemen saya, mungkin dengan menggunakan telepon saya untuk terhubung ke Raspberry Pi saya di meja saya yang akan, di putar, kendalikan AC. AC dapat dikontrol menggunakan remote control inframerah. Saya ingin Raspberry Pi memancarkan sinyal yang dibutuhkan.

Apa yang harus saya beli untuk Raspberry Pi agar dapat mengirim sinyal yang dibutuhkan? Juga, saya akan membutuhkan sesuatu yang akan memungkinkan saya untuk mengambil sampel sinyal yang dikirim oleh remote control asli, sehingga saya bisa memberi tahu Raspberry Pi sinyal mana yang harus dikirim. Bagaimana aku melakukan itu?

Harap dicatat bahwa satu-satunya bahasa pemrograman yang saya tahu cara menggunakan adalah Python. Jika sesuatu membutuhkan pemrograman dalam C atau sesuatu, itu bukan solusi yang baik untuk saya.

Jawaban:


12

Seperti disebutkan di atas, LIRC adalah paket perangkat lunak yang hebat untuk membuat RaspberryPi Anda mengirim dan menerima sinyal IR. Pada Desember 2012 OS Raspbian terbaru sekarang termasuk driver LIRC ar0n.

Saya menulis panduan untuk mendapatkan LIRC diinstal dan dikonfigurasi pada RaspberryPi Anda (dari perangkat keras ke atas) karena saya harus menyelesaikan masalah yang sama sendiri. Setelah LIRC diinstal dan bekerja pada RaspberryPi, Anda dapat menggunakan beberapa aplikasi yang disertakan untuk mengirim dan menerima perintah IR dari Python / Ruby / bahasa pilihan Anda.

http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/


2
Hari ini saya menulis posting blog baru yang menggambarkan skema (dan bagian yang saya beli) untuk membangun transceiver IR RaspberryPi. alexba.in/blog/2013/03/09/raspberrypi-ir-schematic-for-lirc
Alex Bain

5

Ada seseorang yang telah menulis driver kernel LIRC untuk Raspberry Pi, dapat ditemukan di sini: LIRC Raspberry Pi driver . Juga skema perangkat keras dan koneksi yang diperlukan dapat ditemukan di halaman ini.

Saya belum pernah bereksperimen dengan LIRC sendiri, tetapi ada banyak aplikasi yang tersedia yang menggunakan LIRC, saya kira sekarang semuanya bekerja pada Raspberry Pi.

Jika Anda mau / butuh, saya bisa menyelami topik ini sedikit lebih dalam dan memberikan beberapa informasi tambahan.

Untuk bagian Python, ada modul Python untuk berinteraksi dengan LIRC, yang disebut pyLirc dan versi terpelihara yang lebih baru yang disebut pyLirc2


Terima kasih atas jawabannya, tetapi halaman itu kehilangan saya di "Recompile the kernel" :) Tidak ada sesuatu yang lebih plug-n-play?
Ram Rachum

1
Untuk saat ini, sampai pengemudi ini menemukan jalan ke distro, saya khawatir itu adalah satu-satunya pilihan bagi LIRC untuk bekerja. Tetapi ada modul GPIO untuk python, sebagai programmer Python, Anda dapat membuat kode Python Anda sendiri untuk melakukan apa yang Anda inginkan, hanya menggunakan perangkat keras yang ditunjukkan pada halaman yang ditautkan. Anda perlu membaca urutan IR apa yang dikirim oleh remote AC, dan putar ulang itu. Itu harus dimungkinkan menggunakan modul GPIO Python ini.
ikku

1
komentar saya '... Saya khawatir itu adalah satu-satunya pilihan LIRC untuk bekerja ...' hanya valid dalam konteks GPIO. Perangkat serial / USB dll harus berfungsi tanpa masalah.
ikku

3

Saya telah menemukan LIRC menjadi cara yang relatif mudah untuk mengirim pesan IR, tetapi benar-benar ingin dapat mengendalikan LIRC dari java. Saya suka pemrograman di java dan tidak menemukan tutorial langsung untuk python untuk meyakinkan saya bekerja dengannya, bukan java. Setelah beberapa jam mencoba mengirim kode IR dari pi menggunakan java, saya menemukan solusi berikutnya relatif sederhana: Buat skrip bash yang berisi irsendpesan dan kirim java untuk menjalankannya.

Contoh:

toggleLight.sh

#!/bin/bash
irsend SEND_ONCE HyundaiFan lightOnOff

RunBash.java

public class RunBash {
    public static final void main (String args[]) {
        String cmd = "../toggleLight.sh";
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec(new String[] {"/bin/bash", "-c", cmd});
            int exitValue = process.waitFor();
            System.out.println("exit value: " + exitValue);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Anda seharusnya mendapatkan exit value: 0. Jika nilai keluar Anda 127, artinya skrip bash tidak ditemukan oleh java.

Beberapa catatan lagi:

  • Saya sudah mencoba pembungkus jlirc dan lircj - java untuk LIRC tetapi tidak dapat mengkonfigurasinya saat ini -> tidak berfungsi.
  • Satu-satunya downside dari solusi ini adalah Anda tidak dapat mendengarkan pesan IR. Jika seseorang memiliki gagasan tentang menggunakan metode serupa untuk mendengarkan pesan IR, saya ingin tahu.

Sumber daya yang berguna:

  • Ikuti instruksi Alex Bain untuk mengatur LIRC untuk pi. Mereka sangat bagus! Orang dapat menemukan informasi lebih lanjut mengenai di irsend sini . Itu membuat daftar remote Anda lebih jelas.
  • Di sini Anda dapat menemukan informasi lebih lanjut untuk menjalankan skrip bash dari java.

Semoga ini bisa membantu, Tom


2

Saya selalu menemukan proyek LIRC lebih tidak menyenangkan untuk ditangani daripada yang tampaknya diperlukan, seperti halnya lm-sensor.

Jadi saya akan melihat ini mungkin dengan cara yang sedikit lebih bundaran: jika Anda bisa mendapatkan mikrokontroler (atau bahkan remote sebenarnya) untuk mengirim kereta pulsa yang benar ketika dipicu, mungkin Anda bisa menggunakan pin gpio (atau pesan uart) di RPi untuk "menekan tombol", lebih atau kurang, dan memicu pengiriman.

Ini relatif plug and play, jika Anda menemukan solusi pemancar yang tepat.

Biarkan RPi khawatir tentang menjadi server dan modul perangkat keras (firmware) khawatir tentang tindakan IR. Mungkin Anda bisa menggunakan trik serupa untuk memantau status proses juga.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.