สารบัญ:

ควบคุมห้องนั่งเล่นด้วย Alexa และ Raspberry Pi: 12 ขั้นตอน
ควบคุมห้องนั่งเล่นด้วย Alexa และ Raspberry Pi: 12 ขั้นตอน

วีดีโอ: ควบคุมห้องนั่งเล่นด้วย Alexa และ Raspberry Pi: 12 ขั้นตอน

วีดีโอ: ควบคุมห้องนั่งเล่นด้วย Alexa และ Raspberry Pi: 12 ขั้นตอน
วีดีโอ: Arduino Amazon Alexa Skill 2024, พฤศจิกายน
Anonim
ควบคุมห้องนั่งเล่นด้วย Alexa และ Raspberry Pi
ควบคุมห้องนั่งเล่นด้วย Alexa และ Raspberry Pi

ควบคุมทีวี ไฟ และพัดลมในห้องนั่งเล่นของคุณด้วย Alexa (Amazon Echo หรือ Dot) และ Raspberry Pi GPIO

ขั้นตอนที่ 1: การตั้งค่าเริ่มต้น

ฉันใช้ Raspberry Pi 2 และรูปภาพ Raspbian Jessie ที่ดาวน์โหลดจาก

เมื่อเข้าสู่ระบบแล้ว ให้ป้อนคำสั่งต่อไปนี้เพื่อติดตั้งแพ็คเกจและไลบรารีหลามที่จำเป็น:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip ติดตั้ง Flask flask-ask sudo apt-get ติดตั้ง lirc

ขั้นตอนที่ 2: ตั้งค่า Ngrok

ตั้งค่า Ngrok
ตั้งค่า Ngrok

เยี่ยมชม https://ngrok.com/download และรับ Linux ARM รุ่นล่าสุดในรูปแบบ zip และ unzip ภายในโฮมไดเร็กตอรี่:

เปิดเครื่องรูด /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

คัดลอก/วางโค้ดต่อไปนี้ลงในไฟล์ใหม่:

จากการนำเข้าขวด Flaskfrom การนำเข้า flask_ask ถาม, คำสั่ง, convert_errors นำเข้า RPi. GPIO เป็นการนำเข้าการบันทึกการนำเข้า GPIO การนำเข้า ระบบปฏิบัติการ GPIO.setmode(GPIO. BCM) แอป = Flask(_name_) ask = Ask(app, '/') logging.getLogger(" flask_ask").setLevel(logging. DEBUG) @ask.intent('LightControlIntent', mapping={'status': 'status'}) def light_control(status): ลอง: pinNum = 27 ยกเว้นข้อยกเว้น e: return statement('หมายเลขพินไม่ถูกต้อง') GPIO.setup (pinNum, GPIO. OUT) หากสถานะเป็น ['on', 'high']: GPIO.output (pinNum, GPIO. LOW) หากสถานะเป็น ['off', ' ต่ำ']: GPIO.output(pinNum, GPIO. HIGH) return statement('Turning {} the Living Room Lights'.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

คัดลอก/วางโค้ดต่อไปนี้ลงในไฟล์ใหม่:

จากขวดนำเข้า Flask

จากการนำเข้า flask_ask ขอคำสั่ง convert_errors นำเข้า RPi. GPIO เป็นการนำเข้าการบันทึกการนำเข้า GPIO ระบบปฏิบัติการ 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): ลอง: pinNum = 22 ยกเว้นข้อยกเว้น e: คำสั่งส่งคืน ('หมายเลขพิน) ไม่ถูกต้อง') GPIO.setup(pinNum, GPIO. OUT) หากสถานะเป็น ['on', 'high']: GPIO.output(pinNum, GPIO. LOW) หากสถานะเป็น ['off', 'low']: GPIO.output(pinNum, GPIO. HIGH) return statement('Turning {} 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 เพื่อสร้างสัญญาณอินฟราเรด (IR) สำหรับทีวีเฉพาะของคุณ เปิดเทอร์มินัลแล้วป้อนคำสั่งต่อไปนี้เพื่อติดตั้งแพ็คเกจ LIRC ที่จำลองสัญญาณอินฟราเรดของรีโมทคอนโทรลจำนวนมาก

sudo apt-get ติดตั้ง lirc

ถัดไป คุณต้องเปิดใช้งานและกำหนดค่าโมดูลเคอร์เนล lirc_rpi ในการทำเช่นนั้น ให้เปิดโมดูลในตัวแก้ไขนาโน

sudo nano /etc/modules

เพิ่มบรรทัดด้านล่างลงในไฟล์ (ตรวจสอบให้แน่ใจว่าพารามิเตอร์ gpio_out_pin ชี้ไปที่พินที่ควบคุม IR LED):

lirc_devlirc_rpi gpio_out_pin=17

ถัดไป เปิดไฟล์ hardware.conf ใน Nano เหมือนเดิมด้วย sudo:

sudo nano /etc/lirc/hardware.conf

เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์:

LIRCD_ARGS="--uinput"LOAD_MODULES=true

DRIVER="ค่าเริ่มต้น"

DEVICE="/dev/lirc0"

MODULES="lirc_rpi"

LIRCD_CONF=""

LIRCMD_CONF=""

ตอนนี้รีบูต Raspberry Pi:

sudo รีบูต

ขั้นตอนที่ 6: สคริปต์ Python สำหรับการควบคุมทีวี

เปิดเทอร์มินัลเซสชันใหม่และสร้างไฟล์ python ใหม่ชื่อ ir_control.py:

nano ir_control.py

ไปที่

ค้นหารีโมทที่เข้ากันได้กับทีวีของคุณ ในกรณีของฉัน ฉันมีทีวี Sanyo ที่ใช้งานได้กับไฟล์กำหนดค่า sanyo-tv01 เมื่อคุณพบไฟล์ที่รองรับทีวีของคุณแล้ว ให้เปิดและดูตัวเลือกคำสั่ง

คัดลอก/วางรหัสต่อไปนี้ลงในไฟล์ใหม่และแทนที่ sanyo-tv01 ด้วยชื่อไฟล์ที่ใช้ได้กับทีวีของคุณ ตรวจสอบให้แน่ใจด้วยว่าไฟล์กำหนดค่าทีวีของคุณรองรับคำสั่งทีวี คุณอาจต้องแก้ไขคำสั่ง KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN และ KEY_MUTE เพื่อให้ทำงานได้อย่างถูกต้องกับไฟล์กำหนดค่าของทีวี:

จากการนำเข้าขวด Flaskfrom การนำเข้า flask_ask ถาม, คำสั่ง, convert_errors นำเข้า RPi. GPIO เป็นการนำเข้าการบันทึกการนำเข้า GPIO การนำเข้า ระบบปฏิบัติการ 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): ถ้าสถานะอยู่ใน ['turn on']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return statement('Turning on the TV') สถานะ elif ใน ['turn off']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_POWER") return statement('Turning off the TV') สถานะ elif ใน ['change input']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VIDEO") return statement('การเปลี่ยนอินพุตบนทีวี') สถานะ elif ใน ['เพิ่มระดับเสียง']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("ส่ง SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("ส่ง SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("ส่ง SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") return statement('Increasing Volume on the TV') สถานะ elif ใน ['decrease volume']: 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" ของผู้ให้บริการ ") return statement('ลดระดับเสียงบนทีวี') สถานะ elif ใน ['mute']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Muting the TV') สถานะ elif ใน ['unmute ']: os.system("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") return statement('Unmuting the TV') else: return statement('Remote function not found.') if _name_ == '_main_': port = 5000 app.run(host='0.0.0.0', port=port)

บันทึกและปิดไฟล์

เริ่มเซิร์ฟเวอร์ขวดด้วย:

sudo python ir_control.py

ปล่อยให้หน้าต่างเทอร์มินัล ngrok ทั้งสาม, light_control.py, fan_control.py และ ir_control.py ทำงาน

ขั้นตอนที่ 7: เข้าสู่ระบบบัญชี AWS

เข้าสู่ระบบบัญชี AWS
เข้าสู่ระบบบัญชี AWS

สร้างหรือเข้าสู่ระบบบัญชีนักพัฒนา AWS ของคุณก่อน แล้วเปิดรายการทักษะของ Alexa

ขั้นตอนที่ 8: การตั้งค่าทักษะทีวี Alexa

การตั้งค่าทักษะทีวี Alexa
การตั้งค่าทักษะทีวี Alexa

เลือก "เพิ่มทักษะใหม่"

ตั้งชื่อสกิลเป็น 'Trigger TV' และชื่อ Invocation Name เป็นคำที่คุณต้องการใช้เพื่อเปิดใช้งานทักษะ

คลิก 'ถัดไป' เพื่อดำเนินการต่อ

คัดลอก/วางสิ่งต่อไปนี้ลงในช่อง 'Intent Schema':

{ "เจตนา": [{

"สล็อต": [{ "ชื่อ": "สถานะ", "ประเภท": "TV_Function" }, { "ชื่อ": "จำนวน", "ประเภท": "AMAZON. NUMBER" }], "เจตนา": "GPIOControlIntent " }] }

ถัดไป คลิก 'เพิ่มประเภทสล็อต'

ป้อน TV_Function ในฟิลด์ 'Enter Type'

ป้อนค่าต่อไปนี้ในฟิลด์ 'Enter Values':

เปิด

ปิด เปลี่ยน อินพุต เพิ่มระดับเสียง ลดระดับเสียง ปิดเสียง เปิดเสียง

ถัดไป คัดลอก/วางสิ่งต่อไปนี้ลงในกล่อง 'ตัวอย่างคำพูด':

GPIOControlIntent {สถานะ}

GPIOControlIntent {สถานะ} โดย {amount}

คลิก 'ถัดไป' เพื่อดำเนินการต่อ

เลือก 'HTTPS' เป็นประเภทปลายทางของบริการและเลือกภูมิภาค ป้อน URL ngrok จากขั้นตอนที่ 2 แล้วคลิก 'ถัดไป' URL ควรมีลักษณะดังนี้:

ed6ea04d.ngrok.io

คลิก 'ถัดไป' เพื่อดำเนินการต่อและกด 'บันทึก'

ขั้นตอนที่ 9: ตั้งค่าทักษะ Alexa ให้สว่าง

ตั้งค่าทักษะ Alexa ให้สว่าง
ตั้งค่าทักษะ Alexa ให้สว่าง

ปิดทักษะที่เปิดอยู่และเลือก "เพิ่มทักษะใหม่"

ตั้งชื่อทักษะเป็น 'Lights Control' และชื่อ Invocation Name เป็นคำที่คุณต้องการใช้เพื่อเปิดใช้งานทักษะ

คลิก 'ถัดไป' เพื่อดำเนินการต่อ คัดลอก/วางสิ่งต่อไปนี้ลงในช่อง 'Intent Schema':

{

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

ถัดไป คลิก 'เพิ่มประเภทสล็อต'

ป้อน "LIGHTS_CONTROL" ในช่อง 'ป้อนประเภท'

ป้อนค่าต่อไปนี้ในฟิลด์ 'Enter Values':

บน

ปิด

ถัดไป คัดลอก/วางสิ่งต่อไปนี้ลงในกล่อง 'ตัวอย่างคำพูด':

LightsControlIntent เปลี่ยน {สถานะ}

คลิก 'ถัดไป' เพื่อดำเนินการต่อ เลือก 'HTTPS' เป็นประเภทปลายทางของบริการและเลือกภูมิภาค ป้อน URL ngrok จากขั้นตอนที่ 2 แล้วคลิก 'ถัดไป' URL ควรมีลักษณะดังนี้:

ed6ea04d.ngrok.io

คลิก 'ถัดไป' เพื่อดำเนินการต่อและกด 'บันทึก'

ขั้นตอนที่ 10: Fan Alexa Skill Setup

Fan Alexa Skill Setup
Fan Alexa Skill Setup

ปิดทักษะที่เปิดอยู่และเลือก "เพิ่มทักษะใหม่"

ตั้งชื่อสกิลเป็น 'Fan Control' และชื่อ Invocation Name เป็นคำที่คุณต้องการใช้เพื่อเปิดใช้งานทักษะ

คลิก 'ถัดไป' เพื่อดำเนินการต่อ

คัดลอก/วางสิ่งต่อไปนี้ลงในช่อง 'Intent Schema':

{

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

ถัดไป คลิก 'เพิ่มประเภทสล็อต'

ป้อน "FAN_CONTROL" ในช่อง 'ป้อนประเภท'

ป้อนค่าต่อไปนี้ในฟิลด์ 'Enter Values':

บน

ปิด

ถัดไป คัดลอก/วางสิ่งต่อไปนี้ลงในกล่อง 'ตัวอย่างคำพูด':

FANControlIntent เปลี่ยน {สถานะ}

คลิก 'ถัดไป' เพื่อดำเนินการต่อ เลือก 'HTTPS' เป็นประเภทปลายทางของบริการและเลือกภูมิภาค ป้อน URL ngrok จากขั้นตอนที่ 2 แล้วคลิก 'ถัดไป' URL ควรมีลักษณะดังนี้:

ed6ea04d.ngrok.io

คลิก 'ถัดไป' เพื่อดำเนินการต่อและกด 'บันทึก'

ขั้นตอนที่ 11: สร้าง Ciruit

สร้างวงจร
สร้างวงจร

ต่อวงจรตามที่แสดงในแผนภาพ ฉันใช้ JBtek 8 Channel DC 5V Relay Module เพื่อเชื่อมต่อกับสายและกราวด์ AC 120v ที่บ้านของฉัน

ขั้นตอนที่ 12: คำสั่งของ Alexa

ตอนนี้สามารถพูดคำสั่งต่อไปนี้กับ Alexa เพื่อควบคุมห้องนั่งเล่นของคุณได้

แนะนำ: