สารบัญ:
- ขั้นตอนที่ 1: วัสดุสิ้นเปลืองและการเชื่อมต่อ
- ขั้นตอนที่ 2: ตั้งค่า PI
- ขั้นตอนที่ 3: การดาวน์โหลดและคอมไพล์โค้ด
- ขั้นตอนที่ 4: การใช้มัน
- ขั้นตอนที่ 5: วิธีการทำงานของรหัส
- ขั้นตอนที่ 6: การปรับแต่งและชื่อที่เป็นมิตร
วีดีโอ: Alexa Raspberry Pi Relay Controller: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
ฉันสร้างคำแนะนำนี้เพื่อแบ่งปันประสบการณ์ของฉันกับการผสานรวมอุปกรณ์ IOT กับ Alexa ของ Amazon
โครงการนี้อนุญาตให้ควบคุมบอร์ดรีเลย์ที่เชื่อมต่อกับราสเบอร์รี่ pi จากตัวควบคุมสมาร์ทโฮม
ได้รับการทดสอบกับ Alexa แล้ว แต่ดูเหมือนว่าจะทำงานได้ดีกับ Samsung Smartthings และอินเทอร์เฟซการควบคุมอื่นๆ เนื่องจากจำลองซ็อกเก็ต Belkin Wemo หลายชุด
มีตัวอย่างมากมายที่อิงจากโค้ด FAUXMO ที่ยอดเยี่ยม แต่นี่หมายถึงการเรียนรู้ python และไม่ได้ให้การควบคุมโดยละเอียดที่ฉันต้องการสำหรับอุปกรณ์ของฉัน ดังนั้นฉันจึงตัดสินใจสร้างใหม่ตั้งแต่ต้นโดยใช้ C เป็นภาษาเขียนโค้ดพื้นฐาน
ฉันไม่ต้องการที่จะไปที่ส่วนลึกของโค้ดแลมบ์ดาบน Amazon.com ดังนั้นฉันจึงทำให้มันง่ายจริงๆ
ฉันได้โพสต์แหล่งที่มาและบันทึกย่อบน Github:
github.com/Switchdoctorstu/StuPiMo
กวดวิชานี้มีเนื้อหาครอบคลุมถึงวิธีการทำงานและเผยแพร่บันทึกย่อของฉันในกรณีที่ช่วยเหลือผู้อื่น
ขั้นตอนที่ 1: วัสดุสิ้นเปลืองและการเชื่อมต่อ
สิ่งที่คุณต้องการมีอยู่ใน Amazon / EBay:
- ราสเบอร์รี่ PI *
- Pi พาวเวอร์ซัพพลาย
- ขั้วต่อดูปองท์
- บอร์ดรีเลย์
- ไมโคร USB แบบเก่า (สำหรับตัดไฟสำหรับการ์ดรีเลย์)
ราสเบอร์รี่ Pi ใด ๆ ก็ใช้ได้ ฉันได้ทดสอบสิ่งนี้กับรุ่น B และ Zero แล้ว
*หากใช้ Pi Zero คุณจะต้องมีอะแดปเตอร์เครือข่าย OTG (เว้นแต่คุณจะซื้อรุ่น 'W' พร้อม buit ใน WiFi)
คุณจะต้องเชื่อมต่อ Pi กับเครือข่าย
ใช้ตัวเชื่อมต่อดูปองท์เพื่อเชื่อมต่อการ์ดรีเลย์กับ Pi
โปรดทราบว่าการ์ดรีเลย์ควรใช้ไฟภายนอก (ถอดลิงค์และเชื่อมต่อกับภายนอก 5v) มันจะทำงานโดยใช้พลังงานจาก PI แต่ไม่แนะนำสำหรับการทำงานจริง
สำหรับการตั้งค่าของฉัน ฉันใช้ USB HUB ที่ใช้พลังงานจากภายนอก สิ่งนี้ให้พลังแก่ PI
ฉันยังตัดปลายสาย USB เก่าและจ่ายไฟรีเลย์จากการเชื่อมต่อ USB ครั้งที่ 2 ไปยังฮับเพื่อความปลอดภัย เวอร์ชัน 'การผลิต' ของฉันใช้แหล่งจ่ายไฟโหมดสวิตช์ 5V 5A ขนาดเล็ก อีกครั้งฉันเพิ่งตัดสาย USB ลงครึ่งหนึ่งเพื่อจ่ายไฟให้กับ Pi ผ่าน Micro-USB และตัดตัวเชื่อมต่อดูปองท์สองตัวเพื่อจ่ายไฟให้กับบอร์ดรีเลย์ สาย USB มี 4 สาย ส่วนใหญ่ใช้สีแดง/ดำเพื่อระบุแหล่งจ่ายไฟ 5v แต่ถ้าไม่แน่ใจ ให้ใช้มิเตอร์ตรวจสอบให้แน่ใจว่าคุณได้สายไฟที่ถูกต้อง
หมุดรีเลย์บนบอร์ดเชื่อมต่อกับพิน GPIO ที่เกี่ยวข้องบนส่วนหัว PI
รหัสช่วยให้คุณเลือกพิน GPIO ได้ แต่ค่าเริ่มต้นที่ฉันใช้คือ:
- รีเลย์พิน 1 - กราวด์
- รีเลย์พิน 2 - รีเลย์ 1 - GPIO 0
- รีเลย์พิน 3 - รีเลย์ 2 - GPIO 1
- รีเลย์พิน 4 - รีเลย์ 3 - GPIO 2
- รีเลย์พิน 5 - รีเลย์ 4 - GPIO 3
- รีเลย์พิน 6 - รีเลย์ 5 - GPIO 4
- รีเลย์พิน 7 - รีเลย์ 6 - GPIO 5
- รีเลย์พิน 8 - รีเลย์ 7 - GPIO 6
- รีเลย์พิน 9 - รีเลย์ 8 - GPIO 7
- รีเลย์พิน 10 - +5v สำหรับลอจิก
ขั้นตอนที่ 2: ตั้งค่า PI
ฉันจะไม่สร้างบทช่วยสอนใหม่เกี่ยวกับวิธีทำให้ PI ของคุณทำงานและเชื่อมต่อกับเครือข่าย
มีมัคคุเทศก์มากมายรวมถึงคำแนะนำที่ยอดเยี่ยมที่:
www.instructables.com/id/Ultimate-Raspberr…
คุณจะต้องทำให้ตัวเองไปถึงจุดที่มองเห็น PI บนเครือข่ายและเชื่อมต่อได้
ไม่สำคัญว่าจะผ่านอีเทอร์เน็ตหรือไร้สาย
โครงการนี้สามารถทำได้โดยใช้ Raspberry PI โดยใช้ Geany Programmers Editor แต่โดยส่วนตัวแล้วฉันคิดว่าการเตรียมโค้ดของฉันบนพีซีโดยใช้ Visual Studio หรือ Eclipse (หรือแม้แต่ Notepad++) นั้นง่ายกว่าโดยส่วนตัวแล้วอัปโหลดไปยัง PI สำหรับการดีบักโดยใช้ การเชื่อมต่อ VNC อีกครั้งที่ฉันจะไม่พูดถึงเรื่องนี้เนื่องจากมีคำแนะนำที่ยอดเยี่ยมมากมายในการตั้งค่า VNC บน RPi
สิ่งที่คุณต้องมีคือไปยังจุดที่คุณสามารถอัปโหลดและคอมไพล์โค้ดได้
หมายเหตุสำคัญประการหนึ่งคือเนื่องจากตัวจัดการ UPNP ต้องการ UDP multicast อินเทอร์เฟซที่ใช้ต้องตั้งค่าเป็นโหมด 'Promiscuous'
สามารถทำได้บนบรรทัดคำสั่ง:
pi@raspberrypi:~ $ ifconfig eth0 promisc
และ / หรือ
pi@raspberrypi:~ $ ifconfig wlan0 promisc
สิ่งนี้จะต้องทำให้ถาวรดังนั้นฉันจึงแก้ไข /etc/rc.local
sudo nano \etc\rc.local
เพื่อรวมบรรทัด:
sudo ifconfig eth0 promisc
หลังจากชุดแรกของแบนเนอร์ # บรรทัดเพื่อให้แน่ใจว่าอินเทอร์เฟซได้รับการตั้งค่าเมื่อเริ่มต้น
ขั้นตอนที่ 3: การดาวน์โหลดและคอมไพล์โค้ด
โค้ดนั้นอยู่ในที่เก็บ Github ของฉัน
github.com/Switchdoctorstu/StuPiMo/blob/ma…
ในขณะที่มีวิธี 'ถูกต้อง' ในการโคลนที่เก็บ ฉันพบว่าง่ายกว่าเพียงแค่เปิดตัวแก้ไข Geany บนเดสก์ท็อป Pi แล้ววางโค้ดลงไป
ในทำนองเดียวกัน หากคุณกำลังใช้บรรทัดคำสั่ง
สร้างไดเร็กทอรีใหม่
mkdir Stu
เปลี่ยนเป็นมัน
cd Stu
สร้างไฟล์ข้อความใหม่
nano StuPiMo.c
คัดลอกโค้ดจาก Github raw และวางลงในไฟล์ใหม่
บันทึกและออก.
เมื่อคุณมีไฟล์เป็นออบเจกต์ซอร์สโค้ด C แล้ว คุณสามารถคอมไพล์โดยใช้
gcc -o StuPiMo StuPiMo.c -l การเดินสายPi
โปรดทราบว่าจำเป็นต้องมี "-l wiringPi" เพื่อให้แน่ใจว่าคอมไพเลอร์ลิงก์ในไลบรารี wiringPi ที่จำเป็น
รหัสสามารถเรียกใช้ได้โดยใช้
./StuPiMo
อีกครั้ง หากคุณต้องการให้สิ่งนี้ทำงานเมื่อเริ่มต้น ให้ใช้คำสั่ง:
sudo nano /etc/rc.local
เพื่อเพิ่มบรรทัดต่อไปนี้
sudo /home/pi/Stu/StuPiMo &
ไปยังไฟล์ /etc/rc.local ของคุณ อย่าลืมบันทึกไฟล์ของคุณเมื่อออก
โปรดทราบว่า '&' เป็นสิ่งสำคัญเพื่อให้แน่ใจว่ากระบวนการย่อยถูกสร้างขึ้นเพื่อให้แน่ใจว่าสคริปต์จะไม่ถูกบล็อก ณ จุดนี้
ขั้นตอนที่ 4: การใช้มัน
เมื่อคุณเรียกใช้โค้ดแล้ว ให้ขอให้ alexa 'Discover Devices' และเธอจะพบอุปกรณ์ Wemo เสมือนทั้ง 8 เครื่อง
จากนั้นก็เป็นเพียงกรณีที่พูดว่า: "Alexa เปิดซ็อกเก็ต 1" หรือ "Alexa ปิดซ็อกเก็ต 6" เป็นต้น และรีเลย์ที่เกี่ยวข้องจะเปลี่ยนไป
ขั้นตอนที่ 5: วิธีการทำงานของรหัส
โค้ดนี้ทำงานโดยเลียนแบบชุดอุปกรณ์ซ็อกเก็ต Belkin Wemo
เพื่อให้บรรลุสิ่งนี้จะต้องจัดการ 2 หน้าที่หลัก
- ตัวจัดการการออกอากาศการค้นพบ UPNP
- 'ตัวจัดการอุปกรณ์' (หนึ่งตัวต่ออุปกรณ์เสมือน) เพื่อจัดการคำสั่งที่ส่งไปยังอุปกรณ์และการตอบสนองที่จำเป็น
คุณลักษณะ 'โบนัส' คือเผยแพร่หน้าเว็บเพื่ออนุญาตให้ควบคุมอุปกรณ์ได้
ตัวจัดการ UPNP
ตัวจัดการ UPNP เปิดซ็อกเก็ตเพื่อตรวจสอบแพ็คเก็ตโปรโตคอล SSDP บน 239.255.255.250 พอร์ต 1900
มันตอบสนองต่อการสืบค้น 'M-SEARCH' ที่มาพร้อมกับแพ็คเก็ตการตอบสนองการค้นพบที่ประกาศตัวจำลอง wemo แต่ละรายการให้กับทุกคนที่ถาม
ตัวจัดการอุปกรณ์
ตัวจัดการอุปกรณ์ (หนึ่งตัวต่ออุปกรณ์เสมือน) ตรวจสอบชุดของพอร์ต IP และตอบสนองต่อคำขอ
มันจะให้บริการการตอบกลับ setup.xml เมื่อถูกถาม
มันจะให้บริการไฟล์คำอธิบายเหตุการณ์เมื่อถูกถาม
มันจะตอบสนองต่อคำขอ GETBINARYSTATE
จะประมวลผลและตอบสนองต่อคำขอ SETBINARYSTATE
เว็บเซิร์ฟเวอร์
เว็บเซิร์ฟเวอร์เป็นกิจวัตรง่ายๆ ที่สร้างรูปแบบ HTML ที่มีปุ่มต่อรีเลย์
มันจะตอบสนองต่อการกดปุ่มและสลับสถานะของรีเลย์ตามลำดับ
ขั้นตอนที่ 6: การปรับแต่งและชื่อที่เป็นมิตร
ฉันไม่ได้คลั่งไคล้โค้ดในการทำให้มันง่ายและแก้ไข
พื้นฐานสามารถปรับแต่งได้ตามคำจำกัดความที่จุดเริ่มต้นของโค้ด:
// global definitions#define WEBPORT 5353 // port เพื่อรันเว็บเซิร์ฟเวอร์บน
#define NUMDEVICES 8 // จำนวนอุปกรณ์เสมือนที่จะสร้าง
#define PORTBASE 43450 // พอร์ต IP พื้นฐานเพื่อเพิ่มจาก
WEBPORT คือหมายเลขพอร์ตที่เว็บเซิร์ฟเวอร์ในตัวทำงานอยู่ สิ่งนี้สามารถทำให้นั่งที่ 80 เพื่อให้สิ่งต่าง ๆ ง่ายขึ้น แต่ฉันพบว่ามันขัดแย้งกับ tomcat หรือบริการอื่น ๆ ที่ทำงานในเครื่อง
NUMDEVICES กำหนดจำนวนอีมูเลเตอร์ WEMO แต่ละรายการที่จะเปิดตัว หากคุณมีการ์ดรีเลย์ 2 พอร์ตให้ตั้งค่านี้เป็น 2, 4 พอร์ต = 4 เป็นต้น
ชื่อที่จำง่ายสำหรับอุปกรณ์ถูกกำหนดในรูทีนที่เรียกว่า setup_names:
int setup_names (เป็นมิตรกับอักขระ [NUMDEVICES][NAMELEN]) { int i = 0;
// ใช้ลูปนี้
สำหรับ (i = 0; i < NUMDEVICES; i++) {
sprintf(friendly, "Socket %d", i + 1);
}
// หรือตารางคู่มือต่อไปนี้เพื่อเติมชื่ออุปกรณ์
/*
strcpy(friendly[0], "ทีวีในห้องนอน");
strcpy(เป็นมิตร[1], "ผ้าห่มไฟฟ้า");
strcpy(เป็นมิตร[2], "โคมไฟห้องนอน");
strcpy(เป็นมิตร[3], "ซ็อกเก็ต 4");
strcpy(เป็นมิตร[4], "ซ็อกเก็ต 5");
strcpy(เป็นมิตร[5], "ซ็อกเก็ต 6");
strcpy(เป็นมิตร[6], "ซ็อกเก็ต 7");
strcpy(เป็นมิตร[7], "ซ็อกเก็ต 8");
*/
กลับฉัน;
}
ฉันใช้การวนซ้ำเพื่อเรียกอุปกรณ์แต่ละเครื่องว่า 'Socket n' แต่คุณสามารถลบลูปนี้และเพิ่มชื่อที่เป็นมิตรของคุณเองแทนได้ (เพียงตรวจสอบให้แน่ใจว่าคุณเพิ่มหมายเลขเดียวกันกับ NUMDEVICES) หากคุณลบ /* */
อย่าลืมคอมไพล์โค้ดใหม่หากคุณทำการเปลี่ยนแปลงใดๆ
แนะนำ:
I2C Relay กับ Arduino IDE: 5 ขั้นตอน
I2C Relay พบ Arduino IDE: ฉันสั่งรีเลย์บอร์ดที่ดี แต่ไม่มีคำสั่ง ArduinoIDE แค่ Raspberry Pi e.o ฉันพบวิธีใช้งานกับ Arduino และต้องการแชร์เพื่อให้คุณประหยัดเวลาได้ ตัวอย่าง RaspberryPi ดั้งเดิม: wiki.52pi.com/index.php/DockerPi_4_Channel_R
Alexa IoT TV-Controller ESP8266: 10 ขั้นตอน (พร้อมรูปภาพ)
Alexa IoT TV-Controller ESP8266: เมื่อเร็ว ๆ นี้ฉันซื้อ Amazon Echo Dot ระหว่างวัน Amazon Prime ในราคาประมาณ 20 ยูโร ผู้ช่วยเสียงขนาดเล็กเหล่านี้มีราคาถูกและยอดเยี่ยมสำหรับ DIY Home Automation หากคุณรู้ว่าสิ่งใดเป็นไปได้และจะสร้างอุปกรณ์อัจฉริยะได้อย่างไร ฉันมี Samsung Smart TV แต่ฉันต้องการเ
5V Relay Module Mod เพื่อทำงานร่วมกับ Raspberry Pi: 4 ขั้นตอน
5V Relay Module Mod เพื่อทำงานร่วมกับ Raspberry Pi: ทุกวันนี้เป็นเรื่องง่ายมากที่จะได้รับมือกับบอร์ดรีเลย์ แต่คุณจะพบได้อย่างรวดเร็วว่าส่วนใหญ่ได้รับการออกแบบสำหรับ 5V ซึ่งอาจเป็นปัญหาสำหรับราสเบอร์รี่ pi ที่ไม่ดีหรืออย่างอื่น ไมโครคอนโทรลเลอร์ทำงานบน 3.3V พวกเขาไม่มีโวลตา
Raspberry Pi DIY Relay Board: 3 ขั้นตอน (พร้อมรูปภาพ)
Raspberry Pi DIY Relay Board: สำหรับบางโครงการที่มีราสเบอร์รี่และ Arduinos ที่เล็กกว่า ฉันต้องเปลี่ยนรีเลย์บางตัว เนื่องจากระดับเอาต์พุต GPIO (3,3V) มันจึงยากที่จะหารีเลย์บางตัวที่สามารถสลับโหลดที่ใหญ่ขึ้นและสามารถทำงานได้โดยตรงกับ 3,3 โวลต์ที่ให้มา ดังนั้นผม
NES Controller Shuffle (Nintendo Controller MP3, V3.0): 5 ขั้นตอน (พร้อมรูปภาพ)
NES Controller Shuffle (Nintendo Controller MP3, V3.0): ฉันลอก ryan97128 ออกจากการออกแบบของเขาสำหรับ Nintendo Controller MP3 เวอร์ชัน 2.0 และฉันได้ยินมาว่าเขาได้แนวคิดมาจาก Morte_Moya ที่ฉลาดทั้งหมด ดังนั้นฉันจึงรับเครดิตไม่ได้ อัจฉริยะทั้งหมดของพวกเขา ฉันแค่ต้องการเพิ่มความสะดวกสบายและเติมเงิน -