Mục lục:

Kiểm soát phòng khách bằng Alexa và Raspberry Pi: 12 bước
Kiểm soát phòng khách bằng Alexa và Raspberry Pi: 12 bước

Video: Kiểm soát phòng khách bằng Alexa và Raspberry Pi: 12 bước

Video: Kiểm soát phòng khách bằng Alexa và Raspberry Pi: 12 bước
Video: Triển khai hệ thống nhận diện khuôn mặt và đo thân nhiệt trên Raspberry Pi4 - Mì AI 2024, Tháng sáu
Anonim
Kiểm soát phòng khách bằng Alexa và Raspberry Pi
Kiểm soát phòng khách bằng Alexa và Raspberry Pi

Điều khiển TV, đèn và Quạt trong phòng khách của bạn bằng Alexa (Amazon Echo hoặc Dot) và Raspberry Pi GPIO.

Bước 1: Thiết lập ban đầu

Tôi đã sử dụng Raspberry Pi 2 và hình ảnh Raspbian Jessie được tải xuống từ

Sau khi đăng nhập, hãy nhập các lệnh sau để cài đặt các gói và thư viện python được yêu cầu:

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

Bước 2: Thiết lập Ngrok

Thiết lập Ngrok
Thiết lập Ngrok

Truy cập https://ngrok.com/download và tải xuống bản phát hành Linux ARM mới nhất dưới dạng zip và giải nén bên trong thư mục chính:

giải nén /home/pi/ngrok-stable-linux-arm.zip

Mở một thiết bị đầu cuối mới và nhập lệnh sau:

sudo./ngrok http 4000

Mở một thiết bị đầu cuối mới và nhập lệnh sau:

sudo./ngrok http 4500

Mở thiết bị đầu cuối mới thứ ba và nhập lệnh sau:

sudo./ngrok http 5000

Bước 3: Tập lệnh Python để điều khiển công tắc ánh sáng

Mở một phiên đầu cuối mới và tạo một tệp python mới có tên light_control.py:

nano light_control.py

Sao chép / dán mã sau vào tệp mới:

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 ngoại trừ Exception as e: return statement ('Số pin không hợp lệ.') GPIO.setup (pinNum, GPIO. OUT) nếu trạng thái ở ['bật', 'cao']: GPIO.output (pinNum, GPIO. LOW) nếu trạng thái ở ['tắt', ' low ']: Câu lệnh trả về GPIO.output (pinNum, GPIO. HIGH) (' Đang bật {} Đèn phòng khách'. định dạng (trạng thái)) if _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 ', port = cổng)

Lưu và đóng tập tin.

Khởi động máy chủ bình với:

sudo python light_control.py

Để cả ngrok và light_control.py chạy

Bước 4: Tập lệnh Python để điều khiển quạt

Mở một phiên đầu cuối mới và tạo một tệp python mới có tên fan_control.py:

nano fan_control.py

Sao chép / dán mã sau vào tệp mới:

từ bình nhập khẩu Bình

từ flask_ask import Ask, statement, convert_errors nhập RPi. GPIO dưới dạng ghi nhật ký nhập GPIO nhập 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 ngoại trừ Exception as e: return statement ('Pin number không hợp lệ. ') GPIO.setup (pinNum, GPIO. OUT) nếu trạng thái ở [' bật ',' cao ']: GPIO.output (pinNum, GPIO. LOW) nếu trạng thái ở [' tắt ',' thấp ']: Câu lệnh trả về GPIO.output (pinNum, GPIO. HIGH) ('Đang bật {} Đèn phòng khách'. định dạng (trạng thái)) if _name_ ==' _main_ ': port = 4500 app.run (host =' 0.0.0.0 ', port = cổng)

Lưu và đóng tập tin.

Khởi động máy chủ bình với:

sudo python fan_control.py

Để cả ngrok, light_control.py và fan_control.py chạy

Bước 5: Cài đặt và cấu hình gói LIRC

Để điều khiển TV, bạn phải định cấu hình chân cắm trên Raspberry Pi để tạo tín hiệu hồng ngoại (IR) cho TV cụ thể của bạn. Mở thiết bị đầu cuối và nhập lệnh sau để cài đặt gói LIRC mô phỏng tín hiệu hồng ngoại của nhiều điều khiển từ xa.

sudo apt-get install lirc

Tiếp theo, bạn cần kích hoạt và cấu hình mô-đun hạt nhân lirc_rpi. Để làm như vậy, hãy mở các mô-đun trong trình chỉnh sửa Nano

sudo nano / etc / modules

Thêm các dòng bên dưới vào tệp (Đảm bảo rằng tham số gpio_out_pin trỏ đến chân điều khiển đèn LED hồng ngoại):

lirc_devlirc_rpi gpio_out_pin = 17

Tiếp theo, mở tệp tin Hardware.conf Nano như trước với sudo:

sudo nano /etc/lirc/hardware.conf

Thêm cấu hình sau vào tệp:

LIRCD_ARGS = "- uinput" LOAD_MODULES = true

DRIVER = "mặc định"

THIẾT BỊ = "/ dev / lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Bây giờ, khởi động lại Raspberry Pi:

khởi động lại sudo

Bước 6: Tập lệnh Python cho Điều khiển TV

Mở một phiên đầu cuối mới và tạo một tệp python mới có tên là ir_control.py:

nano ir_control.py

Truy cập

Tìm một điều khiển từ xa tương thích với TV của bạn. Trong trường hợp của tôi, tôi có TV Sanyo hoạt động với tệp cấu hình sanyo-tv01. Khi bạn tìm thấy tệp hỗ trợ TV của mình, hãy mở tệp đó và xem qua các tùy chọn lệnh.

Sao chép / dán mã sau vào tệp mới và thay thế sanyo-tv01 bằng tên tệp hoạt động với TV của bạn. Đồng thời đảm bảo rằng các lệnh TV được hỗ trợ bởi tệp cấu hình TV của bạn; Bạn có thể phải sửa đổi các lệnh KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN và KEY_MUTE để hoạt động chính xác với tệp cấu hình của TV:

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_ functions (status): if status in ['turn on']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") câu lệnh trả về ('Bật TV') trạng thái elif trong ['turn off']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") câu lệnh return ('Đang tắt TV') trạng thái elif trong ['change input']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return câu lệnh ('Thay đổi đầu vào trên TV') trạng thái elif trong ['tăng âm lượng']: 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 ") câu lệnh trả về os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") ('Tăng âm lượng trên TV') trạng thái elif trong ['giảm âm lượng']: 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_VrseUMEDOWN") os.system ("tv01" KEY_VOLUMEDOWN ") KEY_VOL01 ") câu lệnh return ('Đang giảm âm lượng trên TV') trạng thái tắt trong ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") câu lệnh trả về ('Tắt tiếng TV') trạng thái im lặng trong ['bật tiếng Câu lệnh trả về ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") (' Đang tắt tiếng TV ') else: return (' Không tìm thấy chức năng từ xa. ') if _name_ ==' _main_ ': port = 5000 app.run (host = '0.0.0.0', port = cổng)

Lưu và đóng tập tin.

Khởi động máy chủ bình với:

sudo python ir_control.py

Để cả ba cửa sổ đầu cuối ngrok, light_control.py, fan_control.py và ir_control.py chạy

Bước 7: Đăng nhập vào tài khoản AWS

Đăng nhập vào tài khoản AWS
Đăng nhập vào tài khoản AWS

Trước tiên, hãy tạo hoặc đăng nhập vào Tài khoản nhà phát triển AWS của bạn và mở danh sách Kỹ năng Alexa của bạn.

Bước 8: Thiết lập kỹ năng TV Alexa

Thiết lập kỹ năng TV Alexa
Thiết lập kỹ năng TV Alexa

Chọn "Thêm một kỹ năng mới".

Đặt Tên kỹ năng thành 'Kích hoạt TV' và Tên mời thành (các) từ bạn muốn sử dụng để kích hoạt kỹ năng.

Nhấn Next để tiếp tục.

Sao chép / dán phần sau vào hộp 'Lược đồ ý định':

"slot": [{"name": "status", "type": "TV_Function"}, {"name": "amount", "type": "AMAZON. NUMBER"}], "ý định": "GPIOControlIntent "}]}

Tiếp theo, nhấp vào 'Thêm loại vị trí'

Nhập TV_Function vào trường 'Nhập Loại'.

Nhập các giá trị sau vào trường 'Nhập Giá trị':

bật

tắt thay đổi đầu vào tăng âm lượng giảm âm lượng tắt tiếng

Tiếp theo, Sao chép / dán phần sau vào hộp 'Hình ảnh mẫu':

GPIOControlIntent {status}

GPIOControlIntent {status} theo {amount}

Nhấn Next để tiếp tục.

Chọn 'HTTPS' làm Loại điểm cuối dịch vụ và chọn một khu vực. Nhập URL ngrok từ bước 2 và nhấp vào 'Tiếp theo'. URL phải có dạng như sau:

ed6ea04d.ngrok.io

Nhấp vào 'Tiếp theo' để tiếp tục và nhấn 'Lưu'.

Bước 9: Bật thiết lập kỹ năng Alexa

Đèn thiết lập kỹ năng Alexa
Đèn thiết lập kỹ năng Alexa

Đóng kỹ năng đang mở và chọn "Thêm kỹ năng mới".

Đặt Tên kỹ năng thành 'Điều khiển đèn' và Tên mời thành (các) từ bạn muốn sử dụng để kích hoạt kỹ năng.

Nhấn Next để tiếp tục. Sao chép / dán phần sau vào hộp 'Lược đồ ý định':

{

"intents": [{"slot": [{"name": "status", "type": "LIGHTS_CONTROL"}], "Ý định": "LightsControlIntent"}]}

Tiếp theo, nhấp vào 'Thêm loại vị trí'.

Nhập "LIGHTS_CONTROL" vào trường "Nhập Loại".

Nhập các giá trị sau vào trường 'Nhập Giá trị':

trên

tắt

Tiếp theo, Sao chép / dán nội dung sau vào hộp 'Hình ảnh mẫu':

LightsControlIntent lần lượt {trạng thái}

Nhấn Next để tiếp tục. Chọn 'HTTPS' làm Loại điểm cuối dịch vụ và chọn một khu vực. Nhập URL ngrok từ bước 2 và nhấp vào 'Tiếp theo'. URL phải có dạng như sau:

ed6ea04d.ngrok.io

Nhấp vào 'Tiếp theo' để tiếp tục và nhấn 'Lưu'.

Bước 10: Thiết lập kỹ năng Fan Alexa

Thiết lập kỹ năng Fan Alexa
Thiết lập kỹ năng Fan Alexa

Đóng kỹ năng đang mở và chọn "Thêm kỹ năng mới".

Đặt Tên kỹ năng thành 'Điều khiển quạt' và Tên mời thành (các) từ bạn muốn sử dụng để kích hoạt kỹ năng.

Nhấn Next để tiếp tục.

Sao chép / dán phần sau vào hộp 'Lược đồ ý định':

{

"intents": [{"slot": [{"name": "status", "type": "FAN_CONTROL"}], "Ý định": "FANControlIntent"}]}

Tiếp theo, nhấp vào 'Thêm loại vị trí'.

Nhập "FAN_CONTROL" vào trường "Nhập Loại".

Nhập các giá trị sau vào trường 'Nhập Giá trị':

trên

tắt

Tiếp theo, Sao chép / dán nội dung sau vào hộp 'Hình ảnh mẫu':

FANControlIntent lần lượt {status}

Nhấn Next để tiếp tục. Chọn 'HTTPS' làm Loại điểm cuối dịch vụ và chọn một khu vực. Nhập URL ngrok từ bước 2 và nhấp vào 'Tiếp theo'. URL phải có dạng như sau:

ed6ea04d.ngrok.io

Nhấp vào 'Tiếp theo' để tiếp tục và nhấn 'Lưu'.

Bước 11: Xây dựng Ciruit

Xây dựng Ciruit
Xây dựng Ciruit

Kết nối mạch điện như trong sơ đồ. Tôi đã sử dụng Mô-đun chuyển tiếp JBtek 8 kênh DC 5V để kết nối với đường dây AC 120v và mặt đất của nhà tôi.

Bước 12: Lệnh Alexa

Giờ đây, các lệnh sau có thể được nói với Alexa để điều khiển phòng khách của bạn.

Đề xuất: