สารบัญ:

ESP-12 Infra Red Blaster: 7 ขั้นตอน
ESP-12 Infra Red Blaster: 7 ขั้นตอน

วีดีโอ: ESP-12 Infra Red Blaster: 7 ขั้นตอน

วีดีโอ: ESP-12 Infra Red Blaster: 7 ขั้นตอน
วีดีโอ: ESP8266 กับ Infrared Remote Control 2024, กรกฎาคม
Anonim
ESP-12 อินฟาเรดบลาสเตอร์
ESP-12 อินฟาเรดบลาสเตอร์

บลาสเตอร์ควบคุมระยะไกลอินฟราเรดโดยใช้ esp8266

ส่งรหัสควบคุมระยะไกลที่ได้รับจากเว็บที่รองรับอุปกรณ์ส่งออกหลายตัว

สร้างขึ้นในหน้าเว็บอย่างง่ายสำหรับการทดสอบเป็นหลัก

การใช้งานปกติคือผ่านข้อความ POST ซึ่งอาจมาจากหน้าเว็บหรือจากการควบคุมด้วยเสียง IFTTT / Alexa

รองรับตัวตรวจจับการเปิดใช้งาน Amazon Echo/Dot เพื่อปิดเสียง/เงียบทันทีที่พูดคำที่เปิดใช้งาน

คำสั่งเป็นคำสั่งเดียวหรือเป็นลำดับ ลำดับสามารถจัดเก็บเป็นมาโครที่มีชื่อซึ่งสามารถใช้เป็นคำสั่งหรือในลำดับอื่นๆ ได้

ประวัติล่าสุดและรายการมาโครอาจได้รับผ่านทางเว็บอินเทอร์เฟซ

รองรับการอัปโหลดเฟิร์มแวร์ใหม่ OTA และใช้ไลบรารี WifiManager สำหรับการตั้งค่า wifi เริ่มต้น

ขั้นตอนที่ 1: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

ใช้ส่วนประกอบต่อไปนี้

  • โมดูล ESP-12F
  • ตัวควบคุม 3.3V (ตัวควบคุมมินิบั๊ก MP2307)
  • สวิตช์มอสเฟต (AO3400)
  • อินฟาเรดอีซีแอล (3 มม.)
  • ตัวต้านทานแสงขึ้นอยู่กับ GL2258 (ตัวตรวจจับกิจกรรม Alexa เสริม)
  • ตัวต้านทาน
  • ตัวเก็บประจุแบบแยกส่วน (20uF)
  • ซ็อกเก็ต USB ตัวเมีย (ควรบัดกรีที่เป็นมิตรกับแขน
  • แถบซ็อกเก็ต IC 3 ขาสำหรับเครื่องตรวจจับ Alexa
  • ชิ้นส่วนเครื่องจักรกล (สามารถพิมพ์ 3 มิติได้)

สามารถประกอบเข้ากับกล่องโครงการ ESP-12F ได้

  • ต่อตัวควบคุมเข้ากับขั้วต่อ USB และใส่ลงในกล่อง
  • ประกอบไดรเวอร์ IR ลงบนบอร์ด vero ชิ้นเล็กๆ (3 สาย, +5V, อินพุตเกต 0V)
  • เชื่อมต่อไดรเวอร์ IR กับ USB +5V, 0V
  • ใส่ซ็อกเก็ตไอซี 3 พินลงในกล่องโปรเจ็กต์หากใช้เครื่องตรวจจับ Alexa เชื่อมต่อกับ +3.3V, 0V และสายไฟสำหรับอินพุต
  • สร้าง ESP-12F ด้วย 2.2K จาก GPIO15 ถึง GND, EN ถึง Vdd, 4K7 GPIO13 ถึง Vdd, อินพุตของ Alexa ไปยัง GPIO13, ไดรเวอร์ IR ถึง GPIO14, 0V และ Vdd ถึง 3.3V
  • สร้างตัวตรวจจับ Alexa และบัฟเฟอร์รองรับหากจำเป็น

โปรดทราบว่าการตั้งโปรแกรม ESP-12F ก่อนนั้นสามารถทำได้ง่ายกว่าถ้าคุณมีสิ่งอำนวยความสะดวกในการเขียนโปรแกรมแบบอนุกรมหรือสิ่งอำนวยความสะดวกในการเขียงหั่นขนมชั่วคราวเช่นนี้เพื่อเชื่อมต่อกับพอร์ตอนุกรม

การเขียนโปรแกรมในภายหลังสามารถทำได้โดยใช้การอัพเดท OTA ในตัว

ขั้นตอนที่ 2: ซอฟต์แวร์

ir Blaster ใช้ร่าง Arduino ที่มีอยู่ใน GitHub

สิ่งนี้จำเป็นต้องปรับให้เหมาะสมกับสภาพท้องถิ่นและคอมไพล์ในสภาพแวดล้อม Arduino esp8266

ห้องสมุดต่อไปนี้จำเป็น ส่วนใหญ่เป็นแบบมาตรฐานหรือสามารถเพิ่มได้ สองรายการสุดท้ายรวมอยู่ใน git

  • ESP8266WiFi
  • ESP8266เว็บเซิร์ฟเวอร์
  • FS.h
  • DNSServer
  • ESP8266mDNS
  • ESP8266HTTPUpdateServer
  • ArduinoJson
  • BitTx (รวมอยู่ใน Git)
  • BitMessages (รวมอยู่ใน Git)

รายการในร่างที่จะเปลี่ยนแปลง ได้แก่

  • รหัสอนุญาตสำหรับการเข้าถึงเว็บ AP_AUTHID
  • รหัสผ่านผู้จัดการ Wfi WM_PASSWORD
  • เฟิร์มแวร์ OTA รหัสผ่าน update_password
  • อุปกรณ์ IR ใหม่ / รหัสปุ่ม (ดูภายหลัง)

เมื่อดำเนินการเสร็จแล้ว ควรอัปโหลดโดยใช้การอัปโหลดซีเรียลแบบธรรมดาก่อน

เนื่องจากใช้ SPIFFS หน่วยความจำจึงควรเตรียมโดยการติดตั้งและใช้เครื่องมืออัปโหลดข้อมูลร่าง Arduino ESP8266 การดำเนินการนี้จะอัปโหลดโฟลเดอร์ข้อมูลเป็นเนื้อหา SPIFFS เริ่มต้น

เมื่ออุปกรณ์ไม่สามารถเชื่อมต่อกับเครือข่ายท้องถิ่น (อย่างที่จะเกิดขึ้นครั้งแรก) ตัวจัดการ Wifi จะสร้างจุดเชื่อมต่อ (192.168.4.1) เชื่อมต่อกับเครือข่ายนี้จากโทรศัพท์หรือแท็บเล็ต จากนั้นไปที่ 192.168.4.1 คุณจะได้รับเว็บอินเทอร์เฟซเพื่อเชื่อมต่อกับ wifi ในพื้นที่ การเข้าถึงในภายหลังจะใช้สิ่งนี้ หากเครือข่ายท้องถิ่นเปลี่ยนไป เครือข่ายจะเปลี่ยนกลับเป็นโหมดการกำหนดค่านี้

การอัปเดตที่ตามมาสามารถทำได้โดยการรวบรวมไบนารีการส่งออกในสภาพแวดล้อม Arduino แล้วเข้าถึงอินเทอร์เฟซ OTA ที่ IP/เฟิร์มแวร์

ขั้นตอนที่ 3: เพิ่มรหัสอุปกรณ์ / ปุ่ม

หมายเหตุ: ส่วนนี้มีการเปลี่ยนแปลงจากวิธีการก่อนหน้านี้ซึ่งการกำหนดค่าซึ่งเคยคอมไพล์ลงในโค้ดก่อนหน้านี้ ตอนนี้ใช้ไฟล์ที่โหลดจากระบบการจัดเก็บ SPIFF ทำให้ง่ายต่อการอัปโหลดคำจำกัดความใหม่

คำจำกัดความของปุ่มจะรวมอยู่ในไฟล์ buttonnames.txt เป็นรายชื่อทั่วโลกสำหรับรีโมตทั้งหมดที่ใช้งาน เนื่องจากชื่อต่างๆ มักใช้ร่วมกัน ตามที่ให้มานี้มีรายละเอียดสำหรับรีโมทที่ฉันใช้ สามารถเพิ่มรายการใหม่ได้ มีพื้นที่สำหรับชื่อทั้งหมด 160 ชื่อ แต่สามารถเพิ่มได้โดยการปรับค่าคงที่ใน bitMessages.h และคอมไพล์ใหม่ ชื่อที่กำหนดไว้ในที่นี้คือชื่อที่จะใช้เมื่อส่งคำสั่ง

อุปกรณ์รีโมตแต่ละตัวถูกกำหนดในไฟล์ชื่อ dev_remotename ประกอบด้วยส่วนกำหนดค่าที่ด้านบน และตารางการแมปจากชื่อปุ่มไปยังรหัสซึ่งเป็นสตริงฐานสิบหกที่มีบิตที่จะส่ง ต้องกำหนดเฉพาะชื่อปุ่มที่จำเป็นเท่านั้น

ส่วนกำหนดค่าที่จุดเริ่มต้นของไฟล์อุปกรณ์มีพารามิเตอร์ที่จะใช้เมื่อส่งรหัส รายการแรกคือชื่ออุปกรณ์ที่ใช้เมื่อส่งคำสั่ง พารามิเตอร์อื่น ๆ อธิบายไว้ใน readme บนไซต์โค้ด

รีโมทส่วนใหญ่อยู่ในหนึ่งใน 3 หมวดหมู่โปรโตคอล (nec, rc5 และ rc6) nec น่าจะเป็นเรื่องธรรมดาที่สุดและมีโครงสร้างส่วนหัวที่เรียบง่ายและระยะเวลาบิต มีความแตกต่างเล็กน้อยในเรื่องนี้ซึ่งแตกต่างเฉพาะในช่วงเวลาของพัลส์ส่วนหัวเท่านั้น rc5 และ rc6 เป็นโปรโตคอลที่กำหนดโดย Philips แต่ยังใช้โดยผู้ผลิตรายอื่น พวกมันซับซ้อนกว่าเล็กน้อยและโดยเฉพาะอย่างยิ่ง rc6 มีข้อกำหนดด้านเวลาพิเศษสำหรับหนึ่งในบิต

ในการจับรหัสสำหรับรีโมตใหม่ ฉันใช้ตัวรับ IR (TSOP) ที่มักใช้กับตัวรับสัญญาณระยะไกลแบบเสียบปลั๊ก สิ่งนี้จะทำการถอดรหัสพื้นฐานและให้เอาต์พุตระดับตรรกะ ปกติจะมาพร้อมกับแจ็ค 3.5 มม. พร้อมการเชื่อมต่อ +5V, GND, DATA ฉันเสียสละหนึ่งอันทำให้ตะกั่วสั้นลงและใส่ผ่านบัฟเฟอร์ 3.3V กลับด้านเพื่อป้อนพิน GPIO บน Raspberry Pi

จากนั้นฉันก็ใช้เครื่องมือหลาม rxir.py (ในโฟลเดอร์เครื่องมือคอมไพล์) เพื่อจับรหัส เพื่อให้ง่ายต่อการใช้งานในการจับปุ่มจำนวนมาก เครื่องมือนี้จึงใช้ไฟล์การกำหนดข้อความเพื่อกำหนดปุ่มบนรีโมท และเป็นเพียงชื่อของปุ่มในกลุ่มบนรีโมท ตัวอย่างเช่น อาจมีรีโมท Sony ตัวใหม่ และอีกตัวหนึ่งตั้งค่าไฟล์ข้อความ 3 ไฟล์ที่เรียกว่า sonytv-cursor, sonytv-numbers, sonytv-playcontrols แต่ละรายการด้วยชื่อปุ่มที่เกี่ยวข้อง เครื่องมือจะแจ้งสำหรับอุปกรณ์ (sonytv) ส่วน (เคอร์เซอร์) และโปรโตคอลที่จะใช้ (nec, nec1, rc5, rc6) จากนั้นจะแจ้งตามลำดับสำหรับการกดปุ่มแต่ละปุ่มและเขียนผลลัพธ์ไปยังไฟล์ sonytv-ircodes สามารถทำซ้ำส่วนได้หากต้องการตรวจสอบการจับที่ดี บิตจากไฟล์.ircodes สามารถแก้ไขได้ในตาราง BitDevices

ขั้นตอนที่ 4: การควบคุมเว็บและมาโคร

การควบคุมเว็บพื้นฐานเป็นได้ทั้ง get เดียวหรือโพสต์ json ซึ่งอาจมีลำดับ

การเข้าถึง /ir มี 6 พารามิเตอร์

  • auth - มีรหัสการให้สิทธิ์
  • อุปกรณ์ - ชื่ออุปกรณ์ระยะไกล
  • พารามิเตอร์ - ชื่อของปุ่ม
  • bits - จำนวนบิตที่เป็นตัวเลือก
  • ทำซ้ำ - ตัวเลือกการนับซ้ำ
  • รอ - หน่วงเวลาเป็น mseconds ก่อนที่คำสั่งถัดไปจะสามารถดำเนินการได้

อุปกรณ์ยังสามารถเป็น 'null' เพื่อรับเพียงการหน่วงเวลา 'มาโคร' เพื่อใช้มาโครที่อ้างอิงโดยพารามิเตอร์ หรือ 'ตรวจจับ' เพื่อใช้คุณสมบัติการตรวจจับของ Alexa (ดูในภายหลัง)

โพสต์ไปที่ /irjson ประกอบด้วยโครงสร้าง json เช่น

{

"auth":"1234", "คำสั่ง": [{ "device":"yamahaAV", "parameter":"hdmi4", "wait":"5000", "bits":"0", "repeat":"1"}, { "device":"yamahaAV", "parameter":"mute", "wait":"100", "bits":"0", "repeat":"1"}]

}

ลำดับสามารถมีความยาวเท่าใดก็ได้ และอุปกรณ์อาจเป็นข้อมูลอ้างอิงมาโคร

โครงสร้างเดียวกันอาจใช้เพื่อกำหนดมาโคร เพียงใส่มาโคร:"macroname" ที่ระดับบนสุดเช่น หลังจากตรวจสอบสิทธิ์ เนื้อหาจริงถูกเก็บไว้ในไฟล์ชื่อ macroname.txt

สามารถลบมาโครได้โดยกำหนดโดยไม่มี "คำสั่ง"

คำสั่งเว็บอื่นๆ

  • /recent (แสดงรายการกิจกรรมล่าสุด)
  • /check (แสดงสถานะพื้นฐาน)
  • / (โหลดเว็บฟอร์มเพื่อส่งคำสั่งด้วยตนเอง)
  • /edit (โหลดเว็บฟอร์มเพื่อดูรายการไฟล์และลบ/อัพโหลดไฟล์)
  • /edit?file=filename (ดูเนื้อหาของไฟล์เฉพาะ)
  • /reload (รีโหลดชื่อปุ่มและไฟล์อุปกรณ์ ใช้หลังจากเปลี่ยนสิ่งเหล่านี้)

ขั้นตอนที่ 5: การควบคุมด้วยเสียงของ Alexa โดยใช้ IFTTT

วิธีที่ง่ายที่สุดในการใช้ ir Blaster กับ Alexa คือการใช้ IFTTT เป็นเกตเวย์

ขั้นแรกให้ส่งต่อพอร์ตที่ใช้ไปยังบลาสเตอร์ในเราเตอร์ของคุณ เพื่อให้สามารถเข้าถึงได้จากอินเทอร์เน็ต อาจเป็นการดีที่จะใช้บริการ DNS เช่น freedns เพื่อตั้งชื่อ IP ภายนอกให้กับเราเตอร์ของคุณ และทำให้จัดการได้ง่ายขึ้นหาก IP นี้มีการเปลี่ยนแปลง

ตั้งค่าบัญชี IFTTT และเปิดใช้งานช่อง Maker Webhooks และช่อง Alexa คุณจะต้องลงชื่อเข้าใช้ไซต์ Amazon เมื่อคุณทำเช่นนี้เพื่อเปิดใช้งานการเข้าถึง IFTT

สร้างทริกเกอร์ IF โดยใช้ช่อง IFTTT Alexa เลือกการดำเนินการตามวลีและป้อนวลีที่คุณต้องการ (เช่น เพิ่มระดับเสียง)

สร้างการดำเนินการโดยเลือกช่องเว็บฮุคของ Maker ป้อนลงในช่อง URL เช่น

myip:port/irjson?plain={"auth":"1234", "comm…

การดำเนินการนี้จะถูกส่งไปยัง ir blaster ซึ่งจะพยายามดำเนินการเพิ่มระดับเสียงมาโคร หนึ่งสามารถเป็นอุปกรณ์/ปุ่มเฉพาะในที่นี้หากต้องการ แต่ฉันคิดว่ามันดีกว่าที่จะกำหนดและใช้มาโครเพราะจากนั้นลำดับการดำเนินการสามารถเปลี่ยนแปลงได้อย่างง่ายดายเพียงแค่กำหนดมาโครใหม่

ต้องใช้แอปเพล็ต IFTTT แยกต่างหากสำหรับแต่ละคำสั่ง

ขั้นตอนที่ 6: Native Alexa Voice Skill

แทนที่จะเป็น IFTTT เราสามารถสร้างทักษะที่กำหนดเองได้ในการพัฒนาของ Alexa ซึ่งจะรวมการประมวลผลทั้งหมดไว้ในที่เดียว และหมายความว่าคุณไม่จำเป็นต้องสร้างการทำงานแยกกันสำหรับแต่ละปุ่ม

คุณต้องลงทะเบียนเป็นนักพัฒนา Amazon Alexa และคุณต้องลงทะเบียนกับบริการ Lambda ของคอนโซล Amazon AWS คุณจะต้องดูบทช่วยสอนเพื่อทำความเข้าใจกระบวนการนี้สักหน่อย

ในด้านนักพัฒนาของ Alexa คุณต้องสร้างทักษะที่กำหนดเองใหม่ ป้อนคำเรียก และสร้างรายการคำคำสั่ง เช่น เพิ่มระดับเสียง คำแนะนำ ฯลฯ

จากนั้น Alexa จะส่งวลีนั้นไปยังโปรแกรมที่ทำงานบนบริการ lamda ซึ่งแปลวลีนั้นและทำการเรียก URL ไปยัง Ir blaster เพื่อดำเนินการ

ฉันได้รวมสคีมาเจตนาของ Alexa และฟังก์ชันแลมบ์ดาคอนโซลที่ฉันใช้ในคอมไพล์แล้ว ต้องแก้ไข URL เพื่ออ้างอิง IP ที่เหมาะสมและได้รับอนุญาตอย่างถูกต้อง เพื่อให้ง่าย ฟังก์ชันแลมบ์ดาจะเรียกมาโครซึ่งมีวลีเวอร์ชันตัวพิมพ์เล็กเว้นวรรค นอกจากนี้ยังพยายามลบคีย์เวิร์ดทริกเกอร์ซึ่งบางครั้งอาจรวมอยู่ด้วย เช่น. บลาสเตอร์ VOLUME ขึ้นจะเรียกมาโครที่เรียกว่าเพิ่มระดับเสียงหากคำที่เรียกคือบลาสเตอร์

ขั้นตอนที่ 7: Alexa เปิดใช้งานเครื่องตรวจจับ

แม้ว่าการรู้จำเสียง Echo / Dot นั้นดี แต่บางครั้งอาจสับสนได้หากเสียงนั้นเล่นจากทีวี เว้นแต่คุณจะเข้าใกล้และพูดเสียงดัง

เพื่อปรับปรุงสิ่งนี้ ฉันได้เพิ่มตัวตรวจจับการเปิดใช้งานไปยัง Dot ของฉัน ทันทีที่มีคำสำคัญ (มีการกล่าวถึง Alexa) วงแหวนของไฟ LED จะสว่างขึ้น เครื่องตรวจจับจะป้อนสิ่งนี้ลงใน Blaster โดยจะใช้มาโคร alexaon เพื่อปิดเสียงทีวี ในทำนองเดียวกันเมื่อสิ้นสุดการประมวลผลคำสั่งไฟจะดับลงและมาโคร alexaoff จะคืนค่าเสียง

คำสั่ง 'detect' สามารถใช้เพื่อเปิดและปิดสิ่งนี้ได้ ตัวอย่างเช่น ฉันใช้มาโคร turnon เริ่มต้นเพื่อเปิดใช้งานการตรวจหา และมาโคร turnoff เพื่อปิดใช้งาน นอกจากนี้ยังสามารถใช้ภายในมาโครการดำเนินการเพื่อสนับสนุนการปิดเสียงและเปิดเสียง coomand ที่แท้จริงซึ่งมิฉะนั้นจะมีปัญหา

ตัวตรวจจับทางกายภาพเป็นตัวต้านทานที่ขึ้นกับแสงซึ่งวงจรรองรับ ฉันติดตั้งของฉันบน Dot ด้วยตัวยึดที่พิมพ์ 3 มิติ

แนะนำ: