Isi kandungan:

Alexa Raspberry Pi Relay Controller: 6 Langkah
Alexa Raspberry Pi Relay Controller: 6 Langkah

Video: Alexa Raspberry Pi Relay Controller: 6 Langkah

Video: Alexa Raspberry Pi Relay Controller: 6 Langkah
Video: Raspberry Pi projects beginners | Home Automation with Alexa | Tutorial # 3 2024, Julai
Anonim
Pengawal Relay Alexa Raspberry Pi
Pengawal Relay Alexa Raspberry Pi
Pengawal Relay Alexa Raspberry Pi
Pengawal Relay Alexa Raspberry Pi
Pengawal Relay Alexa Raspberry Pi
Pengawal Relay Alexa Raspberry Pi

Saya membuat Instructable ini untuk berkongsi pengalaman saya dengan mengintegrasikan peranti IOT dengan Alexa Amazon.

Projek ini membolehkan papan geganti yang disambungkan ke raspberry pi dikendalikan dari pengawal smarthome.

Ia telah diuji dengan Alexa tetapi nampaknya berfungsi dengan baik dengan Samsung Smartthings dan antara muka kawalan lain kerana ia meniru rangkaian soket Belkin Wemo.

Terdapat BANYAK contoh berdasarkan kod FAUXMO yang sangat baik tetapi ini bermaksud belajar python dan tidak memberi saya kawalan terperinci yang saya perlukan untuk peranti saya dan jadi saya memutuskan untuk membuatnya semula dari awal menggunakan C sebagai bahasa pengekodan asas saya.

Saya juga tidak mahu pergi ke kedalaman kod lambda di Amazon.com jadi saya menyimpannya dengan sangat mudah.

Saya telah menghantar sumber dan nota di Github:

github.com/Switchdoctorstu/StuPiMo

Tutorial ini benar-benar merangkumi cara membuatnya berfungsi dan menerbitkan nota saya sekiranya ia membantu orang lain.

Langkah 1: Bekalan dan Sambungan

Bekalan dan Sambungan
Bekalan dan Sambungan
Bekalan dan Sambungan
Bekalan dan Sambungan
Bekalan dan Sambungan
Bekalan dan Sambungan

Perkara yang anda perlukan boleh didapati di Amazon / EBay:

  • Pai raspberi *
  • Bekalan kuasa Pi
  • Penyambung Dupont
  • Papan geganti
  • Palam USB mikro lama (dipotong separuh untuk kuasa untuk kad geganti)

Mana-mana raspberry Pi akan berfungsi, saya telah mengujinya pada Model B dan Zero.

* Jika menggunakan Pi Zero, anda memerlukan Adaptor Rangkaian OTG (melainkan jika anda membeli versi 'W' dengan buit dalam WiFi)

Anda perlu menyambungkan Pi ke rangkaian.

Gunakan konektor dupont untuk menyambungkan kad geganti ke Pi.

Perhatikan bahawa kad geganti harus menggunakan kuasa luaran (lepaskan pautan dan sambungkan ke 5v luaran). Ia akan berfungsi berdasarkan PI tetapi tidak dinasihatkan agar pengeluaran berjalan.

Untuk persediaan saya, saya menggunakan USB HUB berkuasa luaran. Ini memberikan kekuatan kepada PI.

Saya juga memotong hujung kabel USB lama dan menghidupkan geganti dari sambungan USB ke-2 ke hab agar tetap selamat. Versi 'produksi' saya menggunakan bekalan kuasa mod suis 5V 5A kecil. Sekali lagi saya hanya memotong plumbum USB untuk mematikan Pi melalui Micro-USB dan memotong dua penyambung dupont untuk menghidupkan papan geganti. Terdapat 4 wayar di plumbum USB, kebanyakan menggunakan merah / hitam untuk menunjukkan bekalan 5v tetapi jika ragu menggunakan meter untuk memastikan anda mendapat kabel yang betul.

Pin relay di papan disambungkan ke pin GPIO yang berkaitan pada tajuk PI.

Kod ini membolehkan anda memilih pin GPIO tetapi lalai yang saya gunakan adalah:

  1. Relay Pin 1 - Tanah
  2. Relay Pin 2 - Relay 1 - GPIO 0
  3. Relay Pin 3 - Relay 2 - GPIO 1
  4. Relay Pin 4 - Relay 3 - GPIO 2
  5. Relay Pin 5 - Relay 4 - GPIO 3
  6. Relay Pin 6 - Relay 5 - GPIO 4
  7. Relay Pin 7 - Relay 6 - GPIO 5
  8. Relay Pin 8 - Relay 7 - GPIO 6
  9. Relay Pin 9 - Relay 8 - GPIO 7
  10. Relay Pin 10 - + 5v untuk logik

Langkah 2: Persediaan PI

Saya tidak akan membuat semula tutorial mengenai cara menjalankan PI anda dan berjalan dan disambungkan ke rangkaian.

Terdapat banyak panduan termasuk petunjuk yang sangat baik di:

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

Anda perlu membawa diri ke titik di mana PI dapat dilihat di rangkaian dan anda boleh menyambung ke sana.

Tidak kira sama ada melalui Ethernet atau Wireless.

Projek ini dapat diselesaikan hanya dengan Raspberry PI menggunakan Editor Program Geany tetapi saya secara peribadi lebih mudah melakukan persiapan kod saya pada PC menggunakan Visual Studio atau Eclipse (atau bahkan Notepad ++) dan kemudian memuat naiknya ke PI untuk melakukan debug menggunakan Sambungan VNC. Sekali lagi saya tidak akan membahasnya di sini kerana terdapat banyak petunjuk yang sangat baik untuk menyiapkan VNC pada RPi.

Yang anda perlukan hanyalah sampai ke titik di mana anda boleh memuat naik dan menyusun kodnya.

Satu nota yang penting ialah kerana pengendali UPNP memerlukan UDP multicast, antara muka yang digunakan mesti ditetapkan ke mod 'Promiscuous'.

Ini boleh dilakukan pada baris arahan:

pi @ raspberrypi: ~ $ ifconfig eth0 promisc

dan / atau

pi @ raspberrypi: ~ $ ifconfig wlan0 promisc

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

sudo nano / etc / rc.local

untuk memasukkan garis:

sudo ifconfig eth0 promisc

selepas set pertama # baris sepanduk untuk memastikan bahawa antara muka ditetapkan pada permulaan.

Langkah 3: Memuat turun dan Menyusun Kod

Kod itu sendiri terdapat di repositori Github saya;

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

sementara ada cara 'betul' untuk mengklon repositori. saya merasa lebih mudah hanya dengan membuka editor Geany di desktop Pi dan menampal kodnya.

Begitu juga, jika anda menggunakan baris arahan;

Buat direktori baru

mkdir Stu

Tukar kepadanya

cd Stu

Buat fail teks baru

nano StuPiMo.c

Salin kod dari Github raw dan tampal ke fail baru

Simpan dan keluar.

Sebaik sahaja anda mempunyai fail sebagai objek kod sumber C, anda dapat menyusunnya menggunakan

gcc -o StuPiMo StuPiMo.c -l pendawaianPi

perhatikan "-l wiringPi" diperlukan untuk memastikan bahawa pematuhan menghubungkan di perpustakaan wiringPi yang diperlukan.

Kod kemudian boleh dijalankan dengan menggunakan

./StuPiMo

Sekali lagi, jika anda mahu ini dijalankan pada permulaan, gunakan arahan:

sudo nano /etc/rc.local

untuk menambah baris berikut

sudo / rumah / pi / Stu / StuPiMo &

ke fail /etc/rc.local anda. Jangan lupa menyimpan fail anda semasa keluar.

Perhatikan '&' adalah penting untuk memastikan sub-proses dilahirkan untuk memastikan bahawa skrip tidak disekat pada ketika ini.

Langkah 4: Menggunakannya

Setelah kod berjalan, minta alexa untuk 'Discover Devices' dan dia harus mencari semua 8 peranti Wemo maya.

Maka hanya sebutan: "Alexa hidupkan soket 1" atau "Alexa matikan soket 6" dan lain-lain dan geganti yang berkaitan akan diubah.

Langkah 5: Bagaimana Kod Berfungsi

Kod ini berfungsi dengan meniru serangkaian peranti soket Belkin Wemo.

Untuk mencapai ini, ia mesti mengendalikan 2 fungsi utama

  • pengendali siaran penemuan UPNP
  • 'pengendali peranti' (satu per peranti maya) untuk menguruskan arahan yang dihantar ke peranti dan respons yang diperlukan.

Ciri 'bonus' adalah bahawa ia juga menerbitkan laman web untuk membolehkan pengawalan peranti.

Penangan UPNP

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

Ini bertindak balas terhadap pertanyaan 'M-SEARCH' yang datang dengan paket respons penemuan yang mengumumkan emulator wemo individu kepada sesiapa yang bertanya.

Pengendali Peranti

Pengendali peranti (satu per peranti maya) memantau serangkaian port IP dan bertindak balas terhadap permintaan.

Ia akan memberikan respons setup.xml apabila ditanya

Ia akan menyajikan fail penerangan acara apabila ditanya

Ia akan bertindak balas terhadap permintaan GETBINARYSTATE

Ia akan memproses dan bertindak balas terhadap permintaan SETBINARYSTATE

Pelayan Web

Pelayan web adalah rutin sederhana yang membina borang HTML yang mengandungi butang per geganti.

Ia akan bertindak balas terhadap butang yang ditekan dan menukar keadaan relay dengan sewajarnya.

Langkah 6: Penyesuaian dan Nama Mesra

Penyesuaian dan Nama Mesra
Penyesuaian dan Nama Mesra

Saya tidak marah dengan kodnya agar tetap mudah dan boleh diedit.

Asasnya dapat disesuaikan dengan definisi pada permulaan kod:

// definisi global # tentukan port WEBPORT 5353 // untuk menjalankan pelayan web

#tentukan NUMDEVICES 8 // Bilangan peranti maya untuk dibuat

#define PORTBASE 43450 // port IP asas untuk kenaikan dari

WEBPORT adalah nombor port yang dijalankan oleh pelayan web terbina dalam. Ini boleh dibuat untuk duduk di 80 untuk membuat perkara mudah, tetapi saya dapati ia bertentangan dengan tomcat atau perkhidmatan lain yang dijalankan secara tempatan.

NUMDEVICES menentukan bilangan emulator WEMO individu yang akan dilancarkan. Sekiranya anda mempunyai kad relay 2 port, tetapkan ini ke 2, 4 port = 4 dll.

Nama mesra untuk peranti ditetapkan dalam rutin yang disebut setup_names:

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

// gunakan gelung ini

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

sprintf (mesra , "Socket% d", i + 1);

}

// atau jadual manual berikut untuk mengisi nama peranti

/*

strcpy (mesra [0], "TV Bilik Tidur");

strcpy (mesra [1], "Selimut elektrik");

strcpy (mesra [2], "Lampu Bilik Tidur");

strcpy (mesra [3], "Socket 4");

strcpy (mesra [4], "Socket 5");

strcpy (mesra [5], "Socket 6");

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

strcpy (mesra [7], "Socket 8");

*/

pulangan i;

}

Saya menggunakan gelung untuk memanggil setiap peranti 'Socket n' tetapi anda boleh memadam gelung ini dan menambah nama mesra anda sendiri (pastikan anda menambah nombor yang sama dengan NUMDEVICES) jika anda menghapus / * * /

Ingatlah untuk menyusun semula kod jika anda membuat perubahan.

Disyorkan: