Daftar Isi:

Pengontrol Relay Alexa Raspberry Pi: 6 Langkah
Pengontrol Relay Alexa Raspberry Pi: 6 Langkah

Video: Pengontrol Relay Alexa Raspberry Pi: 6 Langkah

Video: Pengontrol Relay Alexa Raspberry Pi: 6 Langkah
Video: Make "Alexa" Control ANYTHING! 2024, November
Anonim
Pengontrol Relai Alexa Raspberry Pi
Pengontrol Relai Alexa Raspberry Pi
Pengontrol Relai Alexa Raspberry Pi
Pengontrol Relai Alexa Raspberry Pi
Pengontrol Relai Alexa Raspberry Pi
Pengontrol Relai Alexa Raspberry Pi

Saya membuat Instruksi ini untuk berbagi pengalaman saya dengan mengintegrasikan perangkat IOT dengan Alexa Amazon.

Proyek ini memungkinkan papan relai yang terhubung ke raspberry pi untuk dikontrol dari pengontrol smarthome.

Ini telah diuji dengan Alexa tetapi juga tampaknya berfungsi dengan baik dengan Samsung Smartthings dan antarmuka kontrol lainnya karena mengemulasi serangkaian soket Belkin Wemo.

Ada BANYAK contoh berdasarkan kode FAUXMO yang sangat baik tetapi ini berarti belajar python dan tidak memberi saya kontrol terperinci yang saya butuhkan untuk perangkat saya dan jadi saya memutuskan untuk membuatnya kembali dari awal menggunakan C sebagai bahasa pengkodean dasar saya.

Saya juga tidak ingin pergi ke kedalaman kode lambda di Amazon.com jadi saya membuatnya sangat sederhana.

Saya telah memposting sumber dan catatan di Github:

github.com/Switchdoctorstu/StuPiMo

Tutorial ini benar-benar untuk membahas cara membuatnya berfungsi dan menerbitkan catatan saya jika itu membantu orang lain.

Langkah 1: Persediaan dan Koneksi

Persediaan dan Koneksi
Persediaan dan Koneksi
Persediaan dan Koneksi
Persediaan dan Koneksi
Persediaan dan Koneksi
Persediaan dan Koneksi

Hal-hal yang Anda butuhkan sudah tersedia di Amazon / EBay:

  • Raspberry PI *
  • Catu daya Pi
  • konektor Dupont
  • Papan Relay
  • Kabel USB mikro lama (untuk memotong setengah untuk daya untuk kartu relai)

Raspberry Pi apa pun akan berfungsi, saya telah menguji ini pada Model B dan Zero.

*Jika menggunakan Pi Zero, Anda memerlukan Adaptor Jaringan OTG (kecuali jika Anda membeli versi 'W' dengan buit in WiFi)

Anda harus menghubungkan Pi ke jaringan.

Gunakan konektor dupont untuk menghubungkan kartu relai ke Pi.

Perhatikan bahwa kartu relai harus menggunakan daya eksternal (lepaskan tautan dan sambungkan ke 5v eksternal). Ini akan bekerja dengan daya dari PI tetapi tidak disarankan untuk menjalankan produksi.

Untuk pengaturan saya, saya menggunakan USB HUB bertenaga eksternal. Ini memberikan kekuatan untuk PI.

Saya juga memotong ujung kabel USB lama dan menyalakan relai dari koneksi USB ke-2 ke hub agar tetap aman. Versi 'produksi' saya menggunakan catu daya mode sakelar 5V 5A kecil. Sekali lagi saya baru saja memotong kabel USB menjadi dua untuk memberi daya pada Pi melalui Micro-USB dan memotong dua konektor dupont untuk memberi daya pada papan relai. Ada 4 kabel di kabel USB, sebagian besar menggunakan merah/hitam untuk menunjukkan suplai 5v tetapi jika ragu gunakan meteran untuk memastikan Anda mendapatkan kabel yang benar.

Pin relai di papan terhubung ke pin GPIO yang relevan pada header PI.

Kode ini memungkinkan Anda untuk memilih pin GPIO tetapi default yang saya gunakan adalah:

  1. Relay Pin 1 - Ground
  2. Relai Pin 2 - Relai 1 - GPIO 0
  3. Relai Pin 3 - Relai 2 - GPIO 1
  4. Relai Pin 4 - Relai 3 - GPIO 2
  5. Relai Pin 5 - Relai 4 - GPIO 3
  6. Relai Pin 6 - Relai 5 - GPIO 4
  7. Relai Pin 7 - Relai 6 - GPIO 5
  8. Relai Pin 8 - Relai 7 - GPIO 6
  9. Relai Pin 9 - Relai 8 - GPIO 7
  10. Relay Pin 10 - +5v untuk logika

Langkah 2: Pengaturan PI

Saya tidak akan membuat ulang tutorial tentang cara mengaktifkan dan menjalankan PI dan terhubung ke jaringan.

Ada banyak panduan termasuk instruksi yang sangat baik di:

www.instructables.com/id/Ultimate-Raspberr…

Anda harus membawa diri Anda ke titik di mana PI terlihat di jaringan dan Anda dapat menyambungkannya.

Tidak masalah apakah ini melalui Ethernet atau Nirkabel.

Proyek ini dapat diselesaikan hanya dengan Raspberry PI menggunakan Geany Programmers Editor tetapi saya pribadi merasa lebih mudah untuk melakukan persiapan kode saya di PC menggunakan Visual Studio atau Eclipse (atau bahkan Notepad ++) dan kemudian mengunggahnya ke PI untuk debugging menggunakan koneksi VNC. Sekali lagi saya tidak akan membahasnya di sini karena ada banyak instruksi bagus tentang pengaturan VNC pada RPi.

Yang Anda butuhkan hanyalah sampai pada titik di mana Anda dapat mengunggah dan mengkompilasi kode.

Satu catatan yang penting adalah karena handler UPNP memerlukan multicast UDP, antarmuka yang digunakan harus diatur ke mode 'Promiscuous'.

Ini dapat dilakukan pada baris perintah:

pi@raspberrypi:~ $ ifconfig eth0 promisc

dan / atau

pi@raspberrypi:~ $ ifconfig wlan0 promisc

Ini perlu dibuat permanen jadi saya mengedit /etc/rc.local

sudo nano \etc\rc.local

untuk memasukkan baris:

sudo ifconfig eth0 promisc

setelah set pertama spanduk # baris untuk memastikan bahwa antarmuka disetel saat startup.

Langkah 3: Mengunduh dan Mengkompilasi Kode

Kode itu sendiri berada di repositori Github saya;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

sementara ada cara 'benar' untuk mengkloning repositori. saya merasa lebih mudah hanya dengan membuka editor Geany di desktop Pi dan menempelkan kodenya.

Demikian pula, jika Anda menggunakan baris perintah;

Buat direktori baru

mkdir Stu

Ubah ke itu

cd Stu

Buat file teks baru

nano StuPiMo.c

Salin kode dari Github mentah dan rekatkan ke file baru

Simpan dan keluar.

Setelah Anda memiliki file sebagai objek kode sumber C, Anda dapat mengompilasinya menggunakan

gcc -o StuPiMo StuPiMo.c -l wiringPi

perhatikan "-l wiringPi" diperlukan untuk memastikan bahwa kompiler menautkan di pustaka wiringPi yang diperlukan.

Kode kemudian dapat dijalankan menggunakan

./StuPiMo

Sekali lagi, jika Anda ingin ini berjalan saat startup, gunakan perintah:

sudo nano /etc/rc.local

untuk menambahkan baris berikut

sudo /home/pi/Stu/StuPiMo &

ke file /etc/rc.local Anda. Jangan lupa untuk menyimpan file Anda saat keluar.

Perhatikan bahwa '&' penting untuk memastikan bahwa sub-proses muncul untuk memastikan bahwa skrip tidak diblokir pada saat ini.

Langkah 4: Menggunakannya

Setelah Anda menjalankan kode, minta alexa ke 'Temukan Perangkat' dan dia akan menemukan semua 8 perangkat Wemo virtual.

Maka itu hanya kasus mengatakan: "Alexa turn on socket 1" atau "Alexa turn off socket 6" dll dan relai yang relevan akan diubah.

Langkah 5: Cara Kerja Kode

Kode ini bekerja dengan meniru serangkaian perangkat soket Belkin Wemo.

Untuk mencapai ini, ia harus menangani 2 fungsi utama

  • penangan siaran penemuan UPNP
  • 'device handler' (satu per perangkat virtual) untuk mengelola perintah yang dikirim ke perangkat dan respons yang diperlukan.

Fitur 'bonus' adalah ia juga menerbitkan halaman web untuk memungkinkan kontrol perangkat.

Pengurus UPNP

Handler UPNP membuka soket untuk memantau paket protokol SSDP pada 239.255.255.250 port 1900.

Ini menanggapi setiap pertanyaan 'M-SEARCH' yang masuk dengan paket respons penemuan yang mengumumkan emulator wemo individu kepada siapa saja yang bertanya.

Penangan Perangkat

Penangan perangkat (satu per perangkat virtual) memantau serangkaian port IP dan merespons permintaan.

Ini akan melayani respons setup.xml ketika ditanya

Ini akan menyajikan file deskripsi acara ketika ditanya

Ini akan menanggapi permintaan GETBINARYSTATE

Ini akan memproses dan menanggapi permintaan SETBINARYSTATE

Server Web

Server web adalah rutinitas sederhana yang membangun formulir HTML yang berisi tombol per relai.

Ini akan merespons tombol yang ditekan dan mengubah status relai yang sesuai.

Langkah 6: Kustomisasi dan Nama Ramah

Kustomisasi dan Nama Ramah
Kustomisasi dan Nama Ramah

Saya tidak gila dengan kode agar tetap sederhana dan dapat diedit.

Dasar-dasarnya dapat disesuaikan dengan definisi di awal kode:

// definisi global#define WEBPORT 5353 // port untuk menjalankan server web pada

#define NUMDEVICES 8 // Jumlah perangkat virtual yang akan dibuat

#define PORTBASE 43450 // port IP dasar untuk naik dari

WEBPORT adalah nomor port yang dijalankan oleh server web bawaan. Ini dapat dibuat untuk duduk di 80 untuk mempermudah tetapi saya menemukan bahwa itu bertentangan dengan Tomcat atau layanan lain yang berjalan secara lokal.

NUMDEVICES menentukan jumlah emulator WEMO individu yang akan diluncurkan. Jika Anda memiliki kartu relai 2 port, setel ini ke 2, 4 port = 4 dst.

Nama-nama ramah untuk perangkat diatur dalam rutinitas yang disebut setup_names:

int setup_names(char friendly[NUMDEVICES][NAMELEN]) { int i = 0;

// gunakan lingkaran ini

untuk (i = 0; i < NUMDEVICES; i++) {

sprintf(ramah, "Soket %d", i + 1);

}

// atau tabel manual berikut untuk mengisi nama perangkat

/*

strcpy(ramah[0], "TV Kamar Tidur");

strcpy(ramah[1], "Selimut Listrik");

strcpy(ramah[2], "Lampu Kamar Tidur");

strcpy(ramah[3], "Soket 4");

strcpy(ramah[4], "Soket 5");

strcpy(ramah[5], "Soket 6");

strcpy(ramah[6], "Socket 7");

strcpy(ramah[7], "Soket 8");

*/

kembali saya;

}

Saya menggunakan loop untuk memanggil setiap perangkat 'Socket n' tetapi Anda dapat menghapus loop ini dan menambahkan nama ramah Anda sendiri sebagai gantinya (pastikan Anda menambahkan nomor yang sama dengan NUMDEVICES) jika Anda menghapus /* */

Ingatlah untuk mengkompilasi ulang kode jika Anda membuat perubahan.

Direkomendasikan: