Оглавление:

Управляйте гостиной с помощью Alexa и Raspberry Pi: 12 шагов
Управляйте гостиной с помощью Alexa и Raspberry Pi: 12 шагов

Видео: Управляйте гостиной с помощью Alexa и Raspberry Pi: 12 шагов

Видео: Управляйте гостиной с помощью Alexa и Raspberry Pi: 12 шагов
Видео: Подключаю ZigBee-устройства с помощью zigbee2mqtt 2024, Ноябрь
Anonim
Управляйте гостиной с помощью Alexa и Raspberry Pi
Управляйте гостиной с помощью Alexa и Raspberry Pi

Управляйте телевизором, освещением и вентилятором в гостиной с помощью Alexa (Amazon Echo или Dot) и Raspberry Pi GPIO.

Шаг 1: Начальная настройка

Я использовал Raspberry Pi 2 и образ Raspbian Jessie, загруженный с

После входа в систему введите следующие команды для установки необходимых пакетов и библиотек Python:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip install Flask flask-ask sudo apt-get install lirc

Шаг 2: Настройте Ngrok

Настроить Ngrok
Настроить Ngrok

Посетите https://ngrok.com/download и получите последнюю версию Linux ARM в виде zip-архива и распакуйте его в домашний каталог:

разархивируйте /home/pi/ngrok-stable-linux-arm.zip

Откройте новый терминал и введите следующую команду:

sudo./ngrok http 4000

Откройте еще один новый терминал и введите следующую команду:

sudo./ngrok http 4500

Откройте третий новый терминал и введите следующую команду:

sudo./ngrok http 5000

Шаг 3: скрипт Python для управления переключателем света

Откройте новый сеанс терминала и создайте новый файл python с именем light_control.py:

нано light_control.py

Скопируйте / вставьте следующий код в новый файл:

from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO 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 except Exception as e: return statement ('Номер пина недействителен.') GPIO.setup (pinNum, GPIO. OUT), если статус в ['on', 'high']: GPIO.output (pinNum, GPIO. LOW), если статус в ['off', ' low ']: GPIO.output (pinNum, GPIO. HIGH) оператор return (' Включение {} света в гостиной'.format (status)) if _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 ', порт = порт)

Сохраните и закройте файл.

Запустите флеш-сервер с помощью:

sudo python light_control.py

Оставьте запущенными ngrok и light_control.py

Шаг 4: скрипт Python для управления вентилятором

Откройте новый сеанс терминала и создайте новый файл python с именем fan_control.py:

нано fan_control.py

Скопируйте / вставьте следующий код в новый файл:

из фляги импорт фляги

from flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO 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 за исключением Exception as e: return statement ('Pin number недействительно. ') GPIO.setup (pinNum, GPIO. OUT), если статус в [' on ',' high ']: GPIO.output (pinNum, GPIO. LOW) if status in [' off ',' low ']: GPIO.output (pinNum, GPIO. HIGH) оператор return ('Turnning {} the Living Room Lights'.format (status)) if _name_ ==' _main_ ': port = 4500 app.run (host =' 0.0.0.0 ', порт = порт)

Сохраните и закройте файл.

Запустите флеш-сервер с помощью:

sudo python fan_control.py

Оставьте запущенными ngrok, light_control.py и fan_control.py

Шаг 5: Установка и настройка пакета LIRC

Чтобы управлять телевизором, вы должны настроить вывод на Raspberry Pi для генерации инфракрасных (ИК) сигналов для вашего конкретного телевизора. Откройте терминал и введите следующую команду, чтобы установить пакет LIRC, который имитирует инфракрасные сигналы многих пультов дистанционного управления.

sudo apt-get install lirc

Далее вам нужно включить и настроить модуль ядра lirc_rpi. Для этого откройте модули в редакторе Nano.

Судо нано / и т.д. / модули

Добавьте в файл следующие строки (убедитесь, что параметр gpio_out_pin указывает на вывод, управляющий ИК-светодиодом):

lirc_devlirc_rpi gpio_out_pin = 17

Затем откройте файл hardware.conf в Nano, как и раньше, с помощью sudo:

sudo nano /etc/lirc/hardware.conf

Добавьте в файл следующую конфигурацию:

LIRCD_ARGS = "- uinput" LOAD_MODULES = true

ДРАЙВЕР = "по умолчанию"

УСТРОЙСТВО = "/ dev / lirc0"

МОДУЛИ = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Теперь перезагрузите Raspberry Pi:

перезагрузка sudo

Шаг 6: скрипт Python для управления телевизором

Откройте новый сеанс терминала и создайте новый файл python с именем ir_control.py:

нано ir_control.py

Перейдите на

Найдите пульт, совместимый с вашим телевизором. В моем случае у меня есть телевизор Sanyo, который работает с файлом конфигурации sanyo-tv01. Как только вы найдете файл, поддерживающий ваш телевизор, откройте его и просмотрите параметры команды.

Скопируйте / вставьте следующий код в новый файл и замените sanyo-tv01 именем файла, которое подходит для вашего телевизора. Также убедитесь, что команды tv поддерживаются файлом конфигурации вашего телевизора; Возможно, вам придется изменить команды KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN и KEY_MUTE для правильной работы с файлом конфигурации вашего телевизора:

from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO 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 ['включить']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") оператор возврата ('Включение телевизора') статус elif в ['выключить']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") оператор возврата ('Выключение телевизора') статус elif в ['изменить ввод']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return оператор ('Изменение ввода на телевизоре') статус elif в ['увеличить громкость']: 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 ") оператор возврата ('Увеличение громкости на телевизоре') статус elif в ['уменьшение громкости']: 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») ") return statement ('Decreasing Volume on the TV') elif status in ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") return statement ('Muting the TV') elif status in ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") оператор return (' Включение звука телевизора ') else: оператор return (' Удаленная функция не найдена. ') if _name_ ==' _main_ ': port = 5000 app.run (хост = '0.0.0.0', порт = порт)

Сохраните и закройте файл.

Запустите флеш-сервер с помощью:

sudo python ir_control.py

Оставьте все три окна терминала ngrok, light_control.py, fan_control.py и ir_control.py запущенными

Шаг 7. Войдите в учетную запись AWS

Войдите в учетную запись AWS
Войдите в учетную запись AWS

Сначала создайте или войдите в свою учетную запись разработчика AWS и откройте свой список навыков Alexa.

Шаг 8: настройка навыков TV Alexa

Настройка навыков TV Alexa
Настройка навыков TV Alexa

Выберите «Добавить новый навык».

Установите имя навыка на «Trigger TV» и имя вызова для слова (слов), которое вы хотите использовать для активации навыка.

Нажмите «Далее», чтобы продолжить.

Скопируйте / вставьте следующее в поле "Intent Schema":

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

Затем нажмите «Добавить тип слота».

Введите TV_Function в поле «Введите тип».

Введите следующие значения в поле «Введите значения»:

включить

выключить изменить вход увеличить громкость уменьшить громкость включить звук

Затем скопируйте / вставьте следующее в поле «Образцы высказываний»:

GPIOControlIntent {статус}

GPIOControlIntent {status} на {amount}

Нажмите «Далее», чтобы продолжить.

Выберите «HTTPS» в качестве типа конечной точки службы и выберите регион. Введите URL-адрес ngrok из шага 2 и нажмите «Далее». URL-адрес должен быть примерно таким:

ed6ea04d.ngrok.io

Нажмите «Далее», чтобы продолжить, и нажмите «Сохранить».

Шаг 9: Освещение настройки навыков Alexa

Освещает настройку навыков Alexa
Освещает настройку навыков Alexa

Закройте открытый навык и выберите «Добавить новый навык».

Установите имя навыка на «Управление светом», а имя вызова - на слова, которые вы хотите использовать для активации навыка.

Нажмите «Далее», чтобы продолжить. Скопируйте / вставьте следующее в поле "Intent Schema":

{

"намерения": [{"слоты": [{"имя": "статус", "тип": "LIGHTS_CONTROL"}], "намерение": "LightsControlIntent"}]}

Затем нажмите «Добавить тип слота».

Введите «LIGHTS_CONTROL» в поле «Введите тип».

Введите следующие значения в поле «Введите значения»:

на

выключенный

Затем скопируйте / вставьте следующее в поле «Образцы высказываний»:

LightsControlIntent повернуть {status}

Нажмите «Далее», чтобы продолжить. Выберите «HTTPS» в качестве типа конечной точки службы и выберите регион. Введите URL-адрес ngrok из шага 2 и нажмите «Далее». URL-адрес должен быть примерно таким:

ed6ea04d.ngrok.io

Нажмите «Далее», чтобы продолжить, и нажмите «Сохранить».

Шаг 10: настройка навыка Fan Alexa

Настройка навыков Fan Alexa
Настройка навыков Fan Alexa

Закройте открытый навык и выберите «Добавить новый навык».

Установите имя навыка на «Fan Control», а в качестве имени вызова - слова, которые вы хотите использовать для активации навыка.

Нажмите «Далее», чтобы продолжить.

Скопируйте / вставьте следующее в поле "Intent Schema":

{

"намерения": [{"слоты": [{"имя": "статус", "тип": "FAN_CONTROL"}], "намерение": "FANControlIntent"}]}

Затем нажмите «Добавить тип слота».

Введите «FAN_CONTROL» в поле «Введите тип».

Введите следующие значения в поле «Введите значения»:

на

выключенный

Затем скопируйте / вставьте следующее в поле «Образцы высказываний»:

FANControlIntent Turn {status}

Нажмите «Далее», чтобы продолжить. Выберите «HTTPS» в качестве типа конечной точки службы и выберите регион. Введите URL-адрес ngrok из шага 2 и нажмите «Далее». URL-адрес должен быть примерно таким:

ed6ea04d.ngrok.io

Нажмите «Далее», чтобы продолжить, и нажмите «Сохранить».

Шаг 11: соберите Ciruit

Постройте Ciruit
Постройте Ciruit

Подключите схему, как показано на схеме. Я использовал 8-канальный релейный модуль постоянного тока 5 В JBtek для подключения к линии 120 В переменного тока и заземлению в моем доме.

Шаг 12: команды Alexa

Теперь следующие команды могут быть переданы Alexa для управления вашей гостиной.

Рекомендуемые: