İçindekiler:

Alexa ve Raspberry Pi ile Kontrol Oturma Odası: 12 Adım
Alexa ve Raspberry Pi ile Kontrol Oturma Odası: 12 Adım

Video: Alexa ve Raspberry Pi ile Kontrol Oturma Odası: 12 Adım

Video: Alexa ve Raspberry Pi ile Kontrol Oturma Odası: 12 Adım
Video: Ultra Akıllı Ev Kontrol Paneli Yaptım! (Haftalık Vlog) 2024, Eylül
Anonim
Alexa ve Raspberry Pi ile Kontrol Oturma Odası
Alexa ve Raspberry Pi ile Kontrol Oturma Odası

Alexa (Amazon Echo veya Dot) ve Raspberry Pi GPIO ile oturma odanızdaki TV'nizi, ışıklarınızı ve Fanınızı kontrol edin.

Adım 1: İlk Kurulum

Bir Raspberry Pi 2 ve https://www.raspberrypi.org/downloads/raspbian/ adresinden indirilen bir Raspbian Jessie görüntüsü kullandım.

Giriş yaptıktan sonra, gerekli paketleri ve python kitaplıklarını kurmak için aşağıdaki komutları girin:

sudo apt-get güncelleme && sudo apt-get yükseltme -ysudo apt-get yükleme python2.7-dev python-dev python-pip sudo pip yükleme Flask flask-ask sudo apt-get install lirc

2. Adım: Ngrok'u Kurun

Ngrok Kurulumu
Ngrok Kurulumu

ngrok.com/download adresini ziyaret edin ve en son Linux ARM sürümünü zip olarak alın ve ana dizinde açın:

unzip /home/pi/ngrok-stable-linux-arm.zip

Yeni bir terminal açın ve aşağıdaki komutu girin:

sudo./ngrok http 4000

Başka bir yeni terminal açın ve aşağıdaki komutu girin:

sudo./ngrok http 4500

Üçüncü yeni terminali açın ve aşağıdaki komutu girin:

sudo./ngrok http 5000

Adım 3: Işık Anahtarı Kontrolü için Python Komut Dosyası

Yeni bir terminal oturumu açın ve light_control.py adlı yeni bir python dosyası oluşturun:

nano light_control.py

Aşağıdaki kodu yeni dosyaya kopyalayın/yapıştırın:

flask'tan import Flaskfrom flask_ask import Ask, deyim, convert_errors RPi. GPIO'yu GPIO olarak içe aktar import logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" flask_ask").setLevel(logging. DEBUG) @ask.intent('LightControlIntent', mapping={'status': 'status'}) def light_control(status): try: pinNum = 27 hariç e: return deyimi('Pin numarası geçerli değil.') GPIO.setup(pinNum, GPIO. OUT) eğer durum ['açık', 'yüksek'] ise: GPIO.output(pinNum, GPIO. LOW) eğer durum ['kapalı' ise, ' low']: GPIO.output(pinNum, GPIO. HIGH) return ifadesi('Oturma Odası Işıklarını {} Dönüştürme'.format(status)) if _name_ == '_main_': port = 4000 app.run(host=' 0.0.0.0', bağlantı noktası=bağlantı noktası)

Dosyayı kaydedin ve kapatın.

Şişe sunucusunu şununla başlatın:

sudo python light_control.py

Hem ngrok hem de light_control.py'yi çalışır durumda bırakın

Adım 4: Fan Kontrolü için Python Komut Dosyası

Yeni bir terminal oturumu açın ve fan_control.py adında yeni bir python dosyası oluşturun:

nano fan_control.py

Aşağıdaki kodu yeni dosyaya kopyalayın/yapıştırın:

şişeden ithalat şişesi

flask_ask'tan import Ask, deyim, convert_errors RPi. GPIO'yu GPIO olarak içe aktar import logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger("flask_ask").setLevel(logging. DEBUG) @ask.intent('FanControlIntent', mapping={'status': 'status'}) def fan_control(status): try: pinNum = 22 İstisna as e: return deyimi('Pin numarası) geçerli değil.') GPIO.setup(pinNum, GPIO. OUT) durum ['açık', 'yüksek'] ise: GPIO.output(pinNum, GPIO. LOW) durum ['kapalı', 'düşük'] ise: GPIO.output(pinNum, GPIO. HIGH) return ifadesi('Oturma Odası Işıklarını {} Döndürme'.format(status)) if _name_ == '_main_': port = 4500 app.run(host='0.0.0.0 ', bağlantı noktası = bağlantı noktası)

Dosyayı kaydedin ve kapatın.

Şişe sunucusunu şununla başlatın:

sudo python fan_control.py

Hem ngrok, hem light_control.py hem de fan_control.py'yi çalışır durumda bırakın

Adım 5: LIRC Paketini Kurma ve Yapılandırma

TV'yi kontrol etmek için, özel TV'niz için kızılötesi (IR) sinyalleri üretmek üzere Raspberry Pi'de bir pin yapılandırmanız gerekir. Birçok uzaktan kumandanın kızılötesi sinyallerini taklit eden bir LIRC paketi kurmak için terminali açın ve aşağıdaki komutu girin.

sudo apt-get install lirc

Ardından, lirc_rpi çekirdek modülünü etkinleştirmeniz ve yapılandırmanız gerekir. Bunu yapmak için Nano düzenleyicide modülleri açın

sudo nano /etc/modüller

Dosyaya aşağıdaki satırları ekleyin (gpio_out_pin parametresinin IR LED'ini kontrol eden pini gösterdiğinden emin olun):

lirc_devlirc_rpi gpio_out_pin=17

Ardından, daha önce olduğu gibi sudo ile Nano'daki Hardware.conf dosyasını açın:

sudo nano /etc/lirc/hardware.conf

Dosyaya aşağıdaki yapılandırmayı ekleyin:

LIRCD_ARGS="--uinput"LOAD_MODULES=doğru

SÜRÜCÜ = "varsayılan"

CİHAZ="/dev/lirc0"

MODÜLLER="lirc_rpi"

LIRCD_CONF=""

LIRCMD_CONF=""

Şimdi Raspberry Pi'yi yeniden başlatın:

sudo yeniden başlatma

Adım 6: TV Kontrolü için Python Komut Dosyası

Yeni bir terminal oturumu açın ve ir_control.py adında yeni bir python dosyası oluşturun:

nano ir_control.py

lirc-remotes.sourceforge.net/remotes-table… adresine gidin.

TV'nizle uyumlu bir uzaktan kumanda bulun. Benim durumumda sanyo-tv01 yapılandırma dosyasıyla çalışan bir Sanyo TV'm var. TV'nizi destekleyen bir dosya bulduğunuzda onu açın ve komut seçeneklerine bakın.

Aşağıdaki kodu yeni dosyaya kopyalayın/yapıştırın ve sanyo-tv01'i TV'nizde çalışan dosya adıyla değiştirin. Ayrıca tv komutlarının TV'nizin yapılandırma dosyası tarafından desteklendiğinden emin olun; TV'nizin yapılandırma dosyasıyla doğru şekilde çalışması için KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN ve KEY_MUTE komutlarını değiştirmeniz gerekebilir:

flask'tan import Flaskfrom flask_ask import Ask, deyim, convert_errors RPi. GPIO'yu GPIO olarak içe aktar import logging import os GPIO.setmode(GPIO. BCM) app = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" flask_ask").setLevel(logging. DEBUG) @ask.intent('GPIOControlIntent', mapping={'status': 'status'}) #'pin': 'pin'}) def tv_function(status): if status in ['aç']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return ifadesi('TV'yi açmak') elif durumu ['kapat']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return ifadesi('TV'yi kapatıyor') ['girişi değiştir'] içindeki elif durumu: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") return deyim('TV'deki giriş değiştiriliyor') ['ses seviyesini artır'] içindeki elif durumu: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") return ifadesi('TV'de Ses Seviyesi Artırılıyor') ['sesi azalt'] içindeki elif durumu: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system("irsend_VOLUMEDOWN") os.system("sanyo-tv01 KEY_VOLUMEDOWN") ") return deyimi('TV'de Ses Azalıyor') ['sessiz'] içindeki elif durumu: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return deyimi('TV Sesi Kapatılıyor') ['sesi aç'da elif durumu ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return ifadesi('TV'nin sesi kapatılıyor') else: return ifadesi('Uzak işlev bulunamadı.') if _name_ == '_main_': bağlantı noktası = 5000 uygulama.run(ana bilgisayar='0.0.0.0', bağlantı noktası=bağlantı noktası)

Dosyayı kaydedin ve kapatın.

Şişe sunucusunu şununla başlatın:

sudo python ir_control.py

Üç ngrok terminal penceresinin hepsini, light_control.py, fan_control.py ve ir_control.py çalışır durumda bırakın

7. Adım: AWS Hesabına Giriş Yapın

AWS Hesabına Giriş Yapın
AWS Hesabına Giriş Yapın

Önce AWS Geliştirici Hesabınızı oluşturun veya oturum açın ve Alexa Becerileri listenizi açın.

Adım 8: TV Alexa Beceri Kurulumu

TV Alexa Beceri Kurulumu
TV Alexa Beceri Kurulumu

"Yeni Beceri Ekle"yi seçin.

Beceri Adını 'TV'yi Tetikle' olarak ayarlayın ve Çağrı Adını beceriyi etkinleştirmek için kullanmak istediğiniz sözcük(ler)e ayarlayın.

Devam etmek için 'İleri'yi tıklayın.

Aşağıdakileri 'Intent Schema' kutusuna kopyalayın/yapıştırın:

{ "niyetler": [{

"slots": [{ "name": "status", "type": "TV_Function" }, { "name": "tutar", "type": "AMAZON. NUMBER" }], "intent": "GPIOControlIntent " }] }

Ardından, 'Yuva Türü Ekle'yi tıklayın

'Tür Gir' alanına TV_Function yazın.

'Değerleri Girin' alanına aşağıdaki değerleri girin:

kapat girişi değiştir sesi yükselt sesi azalt sesi kapat sesi aç

Ardından, aşağıdakileri 'Örnek Sözler' kutusuna kopyalayın/yapıştırın:

GPIOControlIntent {status}

{amount} ile GPIOControlIntent {status}

Devam etmek için 'İleri'yi tıklayın.

Hizmet Uç Nokta Türü olarak 'HTTPS'yi seçin ve bir bölge seçin. 2. adımdaki ngrok URL'sini girin ve 'İleri'yi tıklayın. URL şöyle bir şey olmalıdır:

ed6ea04d.ngrok.io

Devam etmek için 'İleri'ye tıklayın ve 'Kaydet'e basın.

Adım 9: Alexa Beceri Kurulumunu Işıklar

Işıklar Alexa Beceri Kurulumu
Işıklar Alexa Beceri Kurulumu

Açık beceriyi kapatın ve "Yeni Beceri Ekle"yi seçin.

Beceri Adını 'Işık Kontrolü'ne ve Çağrı Adını beceriyi etkinleştirmek için kullanmak istediğiniz sözcük(ler)e ayarlayın.

Devam etmek için 'İleri'yi tıklayın. Aşağıdakileri 'Intent Schema' kutusuna kopyalayın/yapıştırın:

{

"intents": [{ "slots": [{ "name": "status", "type": "LIGHTS_CONTROL" }], "intent": "LightsControlIntent" }] }

Ardından, 'Yuva Türü Ekle'yi tıklayın.

"Türü Girin" alanına "LIGHTS_CONTROL" yazın.

'Değerleri Girin' alanına aşağıdaki değerleri girin:

üzerinde

kapalı

Ardından, aşağıdakileri 'Örnek Sözler' kutusuna kopyalayın/yapıştırın:

LightsControlIntent dönüş {status}

Devam etmek için 'İleri'yi tıklayın. Hizmet Uç Nokta Türü olarak 'HTTPS'yi seçin ve bir bölge seçin. 2. adımdaki ngrok URL'sini girin ve 'İleri'yi tıklayın. URL şöyle bir şey olmalıdır:

ed6ea04d.ngrok.io

Devam etmek için 'İleri'ye tıklayın ve 'Kaydet'e basın.

Adım 10: Hayran Alexa Beceri Kurulumu

Hayran Alexa Beceri Kurulumu
Hayran Alexa Beceri Kurulumu

Açık beceriyi kapatın ve "Yeni Beceri Ekle"yi seçin.

Beceri Adını 'Fan Kontrolü'ne ve Çağrı Adını beceriyi etkinleştirmek için kullanmak istediğiniz sözcük(ler)e ayarlayın.

Devam etmek için 'İleri'yi tıklayın.

Aşağıdakileri 'Intent Schema' kutusuna kopyalayın/yapıştırın:

{

"intents": [{ "slots": [{ "name": "status", "type": "FAN_CONTROL" }], "intent": "FANControlIntent" }] }

Ardından, 'Yuva Türü Ekle'yi tıklayın.

"Türü Girin" alanına "FAN_CONTROL" yazın.

'Değerleri Girin' alanına aşağıdaki değerleri girin:

üzerinde

kapalı

Ardından, aşağıdakileri 'Örnek Sözler' kutusuna kopyalayın/yapıştırın:

FANControlIntent dönüşü {status}

Devam etmek için 'İleri'yi tıklayın. Hizmet Uç Nokta Türü olarak 'HTTPS'yi seçin ve bir bölge seçin. 2. adımdaki ngrok URL'sini girin ve 'İleri'yi tıklayın. URL şöyle bir şey olmalıdır:

ed6ea04d.ngrok.io

Devam etmek için 'İleri'ye tıklayın ve 'Kaydet'e basın.

Adım 11: Devreyi İnşa Edin

Devreyi İnşa Et
Devreyi İnşa Et

Devreyi şemada gösterildiği gibi bağlayın. Evlerime AC 120v hattına ve toprağa bağlanmak için bir JBtek 8 Kanal DC 5V Röle Modülü kullandım.

Adım 12: Alexa Komutları

Artık oturma odanızı kontrol etmek için aşağıdaki komutlar Alexa ile konuşulabilir.

Önerilen: