สารบัญ:
- ขั้นตอนที่ 1: การตั้งค่าหน่วยรับ
- ขั้นตอนที่ 2: การดมกลิ่นรหัสเครื่อง
- ขั้นตอนที่ 3: ถ่ายทอดสัญญาณผลลัพธ์
- ขั้นตอนที่ 4: การตั้งค่าหน่วยส่งสัญญาณ
- ขั้นตอนที่ 5: การส่งสัญญาณโดยใช้ Pi
- ขั้นตอนที่ 6: หมายเหตุเกี่ยวกับความแม่นยำของเวลา
- ขั้นตอนที่ 7: บทสรุป
วีดีโอ: Super Simple Raspberry Pi 433MHz Home Automation: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
บทช่วยสอนนี้เป็นหนึ่งในหลาย ๆ เรื่องเกี่ยวกับการใช้ Raspberry Pi เพื่อควบคุมอุปกรณ์ไร้สายรอบ ๆ บ้าน เช่นเดียวกับคนอื่น ๆ มันจะแสดงให้คุณเห็นถึงวิธีการใช้คู่เครื่องส่ง / เครื่องรับราคาถูกที่เชื่อมต่อกับ Pi ของคุณเพื่อโต้ตอบกับอุปกรณ์ที่ทำงานบนคลื่นความถี่วิทยุ 433MHz ที่ใช้กันทั่วไป โดยจะแสดงวิธีการเปิดหรือปิดอุปกรณ์ไฟฟ้าโดยใช้ Pi ของคุณโดยเฉพาะ โดยส่งคำสั่งไปยังชุดปลั๊กไฟที่ควบคุมด้วยรีโมท 433MHz
เหตุใดฉันจึงสร้างบทช่วยสอนนี้ขึ้นมา หากมีจำนวนมากอยู่แล้ว สาเหตุหลักมาจากบทช่วยสอนอื่น ๆ ที่ฉันพบดูเหมือนจะซับซ้อนเกินไป โดยเฉพาะอย่างยิ่งในด้านซอฟต์แวร์ ฉันสังเกตเห็นว่าพวกเขาอาศัยไลบรารี สคริปต์ หรือข้อมูลโค้ดของบุคคลที่สามเป็นอย่างมากเพื่อทำงานทั้งหมด หลายคนไม่แม้แต่จะอธิบายว่าโค้ดพื้นฐานกำลังทำอะไร - พวกเขาจะขอให้คุณใส่ซอฟต์แวร์สองหรือสามชิ้นบน Pi ของคุณและดำเนินการคำสั่งจำนวนมาก ไม่มีการถามคำถามใดๆ ฉันต้องการลองใช้ Pi ของฉันเพื่อเปิดและปิดอุปกรณ์ไฟฟ้ารอบ ๆ บ้านของฉันโดยใช้ซ็อกเก็ตที่ควบคุมด้วยรีโมท 433MHz แต่ฉันต้องการสร้างระบบในเวอร์ชันของตัวเองที่ฉันเข้าใจได้ โดยหวังว่าจะไม่ต้อง ใช้ไลบรารีหรือสคริปต์ของผู้อื่น
นั่นคือสิ่งที่กวดวิชานี้เป็นเรื่องเกี่ยวกับ ด้านซอฟต์แวร์ของระบบนี้ประกอบด้วยสคริปต์ Python ง่ายๆ สองสคริปต์ ชุดแรกสำหรับรับและบันทึกสัญญาณ และอีกชุดสำหรับส่งสัญญาณเหล่านี้กลับไปยังเต้ารับไฟฟ้าแบบไร้สาย การรับ/ส่งสัญญาณจริงอาศัยเฉพาะไลบรารี RPi. GPIO ที่ใช้งานง่าย ซึ่งอย่างน้อยสำหรับฉัน ได้ติดตั้ง Raspbian ไว้ล่วงหน้าแล้ว ไลบรารีนี้ยังสามารถนำเข้าโดยตรงไปยัง Python
สำหรับโครงการนี้ คุณจะต้อง:
ราสเบอร์รี่ Pi. รุ่นไหนก็ใช้ได้ ฉันใช้ชุดสตาร์ทแบบ all-in-one แต่บางทีคุณอาจต้องการเฉพาะยูนิตส่วนกลางเท่านั้น
คู่ตัวส่ง/ตัวรับ 433MHz คนที่ใช้บ่อยที่สุดในโครงการประเภทนี้ดูเหมือนจะเป็นสิ่งเหล่านี้ การซื้อชุดละห้าชุดเหมือนกับชุดที่เชื่อมโยงไว้เพื่อให้แน่ใจว่าคุณมีอะไหล่สำรองอยู่บ้าง
ชุดปลั๊กไฟควบคุมระยะไกล 433MHz ฉันใช้สิ่งเหล่านี้ซึ่งฉันขอแนะนำ แต่มีโมเดลมากมายให้เลือก เพียงตรวจสอบให้แน่ใจว่าพวกเขาทำงานบนความถี่นี้
อุปกรณ์สร้างวงจรบางส่วน ฉันขอแนะนำให้ใช้เขียงหั่นขนมและสายจัมเปอร์เพื่อทำให้กระบวนการสร้างวงจรง่ายที่สุด
[หากคุณตัดสินใจซื้อผลิตภัณฑ์ใดๆ เหล่านี้ ฉันจะยินดีเป็นอย่างยิ่งหากคุณเข้าถึงรายชื่อโดยใช้ลิงก์ด้านบน ด้วยวิธีนี้ ฉันจะได้รับส่วนแบ่งกำไรเล็กน้อยโดยไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับคุณ!]
ขั้นตอนที่ 1: การตั้งค่าหน่วยรับ
ก่อนที่คุณจะสามารถใช้ Pi เพื่อส่งคำสั่งไปยังซ็อกเก็ตที่ควบคุมจากระยะไกลได้ คุณจำเป็นต้องทราบสัญญาณเฉพาะที่พวกเขาตอบสนอง ซ็อกเก็ตที่ควบคุมจากระยะไกลส่วนใหญ่มาพร้อมกับโทรศัพท์ที่สามารถใช้เปิดหรือปิดหน่วยเฉพาะได้ ในกรณีของที่ฉันซื้อ โทรศัพท์มีปุ่มเปิด/ปิดที่จับคู่กันสี่แถว ซึ่งแต่ละปุ่มจะส่งสัญญาณเปิดหรือปิดไปยังซ็อกเก็ตยูนิตเฉพาะ
สิ่งนี้ทำให้เกิดคำถาม - เราจะรู้ได้อย่างไรว่าปุ่มใดสอดคล้องกับซ็อกเก็ตใด นี้จริงขึ้นอยู่กับรุ่นที่คุณมี เหตุผลหลักประการหนึ่งที่ฉันเลือกรูปแบบซ็อกเก็ตเฉพาะของฉัน (ลิงก์ในบทนำ) คือสามารถกำหนดค่ายูนิตด้วยสวิตช์ทางกายภาพเพื่อให้ซ็อกเก็ตเฉพาะตอบสนองต่อชุดปุ่มเปิด/ปิดบนโทรศัพท์ นอกจากนี้ยังหมายความว่าคุณสามารถถอดปลั๊กและย้ายซ็อกเก็ตไปรอบ ๆ บ้านโดยรู้ว่าแต่ละยูนิตจะตอบสนองต่อสัญญาณเปิด/ปิดเดียวกันเสมอ
เมื่อคุณทราบแล้วว่าซ็อกเก็ตของคุณโต้ตอบกับโทรศัพท์อย่างไร คุณจะต้องใช้เครื่องรับสัญญาณ 433MHz (ในภาพด้านบน) เพื่อ 'ดมกลิ่น' รหัสที่เครื่องส่งออกไป เมื่อคุณบันทึกรูปคลื่นของรหัสเหล่านี้แล้ว คุณสามารถทำซ้ำได้โดยใช้ Python แล้วส่งออกโดยใช้หน่วยส่งสัญญาณ
สิ่งแรกที่ต้องทำคือต่อหมุดบนเครื่องรับของคุณกับพิน GPIO ที่ถูกต้องบน Pi หน่วยรับมีสี่พิน แต่ต้องการเพียงสามขาเท่านั้น ฉันคิดว่าหมุดกลางทั้งสองตัวให้เอาต์พุตเหมือนกัน ดังนั้นคุณจะต้องเชื่อมต่อกับหมุดตัวใดตัวหนึ่งเท่านั้น (เว้นแต่คุณต้องการสตรีมสัญญาณที่ได้รับไปยังหมุด GPIO แยกกันสองตัว)
ภาพด้านบนค่อนข้างสรุปการเดินสาย แต่ละพินบนตัวรับสัญญาณสามารถต่อเข้ากับพินที่เกี่ยวข้องบน Pi ได้โดยตรง ฉันใช้เขียงหั่นขนมและสายจัมเปอร์เพื่อทำให้กระบวนการดูสง่างามขึ้นเล็กน้อย โปรดทราบว่าคุณสามารถเลือกพินข้อมูล GPIO ใดก็ได้เพื่อเชื่อมต่อกับพินตัวรับกลางตัวใดตัวหนึ่ง ฉันใช้หมุดที่มีเครื่องหมาย '23' บนส่วนหัว Pi ของฉัน
สำคัญ: หากคุณเชื่อมต่อพินที่มีเครื่องหมาย '3v3' ในภาพด้านบนเข้ากับพินที่มีแรงดันไฟฟ้าสูงกว่าบน Pi (เช่น 5v) คุณอาจสร้างความเสียหายให้กับ Pi เนื่องจากพิน GPIO ไม่สามารถทนต่อแรงดันไฟฟ้าที่สูงกว่า 3v3 ได้ หรือคุณสามารถจ่ายไฟให้กับ 5v และตั้งค่าตัวแบ่งแรงดันไฟฟ้าเพื่อส่งแรงดันไฟฟ้าที่ปลอดภัยไปยังขา DATA
ช่วงของตัวรับสัญญาณจะไม่ใหญ่มากที่แรงดันไฟฟ้านี้ โดยเฉพาะอย่างยิ่งถ้าไม่ได้เชื่อมต่อเสาอากาศ อย่างไรก็ตาม คุณไม่จำเป็นต้องมีช่วงระยะไกลที่นี่ ตราบใดที่เครื่องรับสามารถรับสัญญาณจากโทรศัพท์ได้เมื่อถือไว้ใกล้กัน นั่นคือทั้งหมดที่เราต้องการ
ขั้นตอนที่ 2: การดมกลิ่นรหัสเครื่อง
เมื่อเครื่องรับของคุณเชื่อมต่อกับ Pi แล้ว คุณสามารถเริ่มขั้นตอนที่น่าตื่นเต้นแรกของโครงการนี้ได้ นั่นคือการดมกลิ่น สิ่งนี้เกี่ยวข้องกับการใช้สคริปต์ Python ที่แนบมาเพื่อบันทึกสัญญาณที่ส่งโดยโทรศัพท์เมื่อกดปุ่มแต่ละปุ่ม สคริปต์นั้นเรียบง่ายมาก และฉันขอแนะนำอย่างยิ่งให้คุณดูมันก่อนที่จะเรียกใช้ - ท้ายที่สุด ประเด็นของโครงการนี้คือคุณจะไม่เพียงเรียกใช้โค้ดของคนอื่นอย่างสุ่มสี่สุ่มห้า!
ก่อนที่คุณจะเริ่มกระบวนการนี้ คุณจะต้องแน่ใจว่าคุณมีไลบรารี Python ที่จำเป็นในการรันสคริปต์ sniffer มีการระบุไว้ที่ด้านบนของสคริปต์:
จากวันที่และเวลานำเข้า datetime
นำเข้า matplotlib.pyplot เป็น pyplot นำเข้า RPi. GPIO เป็น GPIO
ไลบรารี RPi. GPIO และ datetime รวมอยู่ในการแจกจ่าย Raspbian ของฉันแล้ว แต่ฉันต้องติดตั้งไลบรารี matplotlib ดังนี้:
sudo apt-get ติดตั้ง python-matplotlib
ไลบรารีนี้เป็นไลบรารีการพล็อตกราฟที่ใช้กันทั่วไปซึ่งมีประโยชน์มากแม้อยู่นอกโปรเจ็กต์นี้ ดังนั้นการติดตั้งจึงไม่เสียหาย! เมื่อห้องสมุดของคุณทันสมัย คุณก็พร้อมที่จะเริ่มบันทึกข้อมูล นี่คือวิธีการทำงานของสคริปต์:
เมื่อรัน (โดยใช้คำสั่ง 'python ReceiveRF.py') จะกำหนดค่าพิน GPIO ที่กำหนดไว้เป็นอินพุตข้อมูล (พิน 23 โดยค่าเริ่มต้น) จากนั้นจะสุ่มตัวอย่างพินอย่างต่อเนื่องและบันทึกว่าได้รับดิจิทัล 1 หรือ 0 หรือไม่ การดำเนินการนี้จะดำเนินต่อไปตามระยะเวลาที่ตั้งไว้ (5 วินาทีโดยค่าเริ่มต้น) เมื่อถึงขีดจำกัดเวลานี้ สคริปต์จะหยุดบันทึกข้อมูลและจะปิดอินพุต GPIO จากนั้นจะดำเนินการหลังการประมวลผลเล็กน้อยและแปลงค่าอินพุตที่ได้รับตามเวลา อีกครั้ง หากคุณมีคำถามเกี่ยวกับสิ่งที่สคริปต์กำลังดำเนินการอยู่ คุณอาจสามารถตอบคำถามเหล่านี้ได้เองหลังจากดูว่ามันทำงานอย่างไร ฉันได้พยายามทำให้โค้ดอ่านง่ายและเรียบง่ายที่สุด
สิ่งที่คุณต้องทำคือระวังเมื่อสคริปต์ระบุว่ามี **เริ่มการบันทึก** เมื่อข้อความนี้ปรากฏขึ้น คุณควรกดปุ่มใดปุ่มหนึ่งบนเครื่องค้างไว้ประมาณหนึ่งวินาที อย่าลืมถือไว้ใกล้กับเครื่องรับ เมื่อสคริปต์เสร็จสิ้นการบันทึก สคริปต์จะใช้ matplotlib เพื่อพล็อตรูปคลื่นกราฟิกของสัญญาณที่ได้รับระหว่างช่วงเวลาการบันทึก โปรดทราบว่าหากคุณเชื่อมต่อกับ Pi โดยใช้ไคลเอ็นต์ SSH เช่น PuTTY คุณจะต้องเปิดแอปพลิเคชัน X11 ด้วยเพื่อให้แสดงรูปคลื่นได้ ฉันใช้ xMing สำหรับสิ่งนี้ (และสำหรับสิ่งอื่น ๆ เช่นเดสก์ท็อประยะไกลใน Pi ของฉัน) หากต้องการให้แสดงพล็อตได้ ให้เริ่ม xMing ก่อนที่คุณจะเรียกใช้สคริปต์และรอให้ผลลัพธ์ปรากฏขึ้น
เมื่อหน้าต่าง matplotlib ของคุณปรากฏขึ้น พื้นที่ที่น่าสนใจภายในพล็อตควรจะค่อนข้างชัดเจน คุณสามารถใช้ตัวควบคุมที่ด้านล่างของหน้าต่างเพื่อซูมเข้า จนกว่าคุณจะสามารถเลือกเสียงสูงและต่ำของสัญญาณที่ส่งจากโทรศัพท์ได้ในขณะที่กดปุ่มค้างไว้ ดูภาพด้านบนสำหรับตัวอย่างโค้ดที่สมบูรณ์ สัญญาณอาจประกอบด้วยพัลส์ที่สั้นมากคั่นด้วยช่วงเวลาที่ใกล้เคียงกันซึ่งไม่มีการรับสัญญาณ บล็อกของพัลส์สั้นนี้อาจตามด้วยช่วงเวลาที่ยาวขึ้นโดยที่ไม่ได้รับสิ่งใดหลังจากนั้นรูปแบบจะทำซ้ำ เมื่อคุณระบุรูปแบบที่เป็นของโค้ดอินสแตนซ์เดียวแล้ว ให้จับภาพหน้าจอแบบนั้นที่ด้านบนสุดของหน้านี้ และไปยังขั้นตอนถัดไปเพื่อตีความ
ขั้นตอนที่ 3: ถ่ายทอดสัญญาณผลลัพธ์
เมื่อคุณได้ระบุบล็อคของเสียงสูงและต่ำเป็นระยะๆ ที่สัมพันธ์กับสัญญาณของปุ่มใดปุ่มหนึ่ง คุณจะต้องมีวิธีจัดเก็บและตีความข้อมูลดังกล่าว ในตัวอย่างสัญญาณด้านบน คุณจะสังเกตเห็นว่ามีเพียงสองรูปแบบที่ไม่ซ้ำกันซึ่งประกอบเป็นบล็อกสัญญาณทั้งหมด บางครั้งคุณเห็นค่า high แบบ short ตามด้วยค่า low แบบ long และบางครั้งก็ตรงกันข้าม - ค่า high แบบยาว ตามด้วยค่า low แบบสั้น เมื่อฉันกำลังถ่ายทอดสัญญาณ ฉันตัดสินใจใช้หลักการตั้งชื่อต่อไปนี้:
1 = short_on + long_off0 = long_on + short_off
ดูอีกครั้งที่รูปคลื่นที่มีป้ายกำกับ แล้วคุณจะเห็นว่าฉันหมายถึงอะไร เมื่อคุณระบุรูปแบบที่เท่ากันในสัญญาณของคุณแล้ว สิ่งที่คุณต้องทำคือนับ 1 และ 0 เพื่อสร้างลำดับ เมื่อถ่ายทอดสัญญาณข้างต้นสามารถเขียนได้ดังนี้:
1111111111111010101011101
ตอนนี้ คุณเพียงแค่ต้องทำขั้นตอนนี้ซ้ำเพื่อบันทึกและถอดเสียงสัญญาณที่สัมพันธ์กับปุ่มอื่นๆ บนโทรศัพท์ของคุณ และคุณได้เสร็จสิ้นขั้นตอนแรกของกระบวนการแล้ว!
ก่อนที่คุณจะสามารถส่งสัญญาณอีกครั้งโดยใช้เครื่องส่ง มีงานอีกเล็กน้อยที่ต้องทำ ช่วงเวลาระหว่างเสียงสูงและต่ำที่สัมพันธ์กับ 1 หรือ 0 นั้นสำคัญมาก และคุณต้องแน่ใจว่าคุณรู้ว่า 'short_on' หรือ 'long_off' อยู่ได้นานแค่ไหน สำหรับรหัสของฉัน ฉันต้องแยกข้อมูลเวลาสามส่วนเพื่อจำลองสัญญาณ:
- ระยะเวลาของช่วง 'สั้น' นั่นคือจุดเริ่มต้นของ 1 หรือจุดสิ้นสุดของ 0
- ระยะเวลาของช่วง 'ยาว' เช่น จุดสิ้นสุดของ 1 หรือจุดเริ่มต้นของ 0
- ระยะเวลาของช่วง 'ขยาย' ฉันสังเกตว่าเมื่อฉันกดปุ่มบนเครื่องค้างไว้ มีช่วงเวลา 'extended_off' ระหว่างแต่ละอินสแตนซ์ซ้ำๆ ของบล็อกสัญญาณ ความล่าช้านี้ใช้สำหรับการซิงโครไนซ์และมีระยะเวลาคงที่
ในการกำหนดค่าเวลาเหล่านี้ คุณสามารถใช้ฟังก์ชันซูมบนหน้าต่าง matplotlib เพื่อซูมเข้าจนสุดแล้ววางเคอร์เซอร์ไว้เหนือส่วนที่เกี่ยวข้องของสัญญาณ การอ่านข้อมูลตำแหน่งเคอร์เซอร์ที่ด้านล่างของหน้าต่างจะช่วยให้คุณกำหนดได้ว่าแต่ละส่วนของสัญญาณกว้างเพียงใดที่สอดคล้องกับช่วงยาว สั้น หรือขยาย โปรดทราบว่าแกน x ของพล็อตแสดงถึงเวลา และองค์ประกอบ x ของการอ่านเคอร์เซอร์อยู่ในหน่วยวินาที สำหรับฉันความกว้างมีดังนี้ (เป็นวินาที):
- short_delay = 0.00045
- long_delay = 0.00090 (สองเท่าของ 'สั้น')
- Extended_delay = 0.0096
ขั้นตอนที่ 4: การตั้งค่าหน่วยส่งสัญญาณ
เมื่อคุณได้รวบรวมรหัสและข้อมูลเวลาแล้ว คุณสามารถยกเลิกการเชื่อมต่อหน่วยรับของคุณ เนื่องจากคุณไม่จำเป็นต้องใช้อีกต่อไป จากนั้นคุณสามารถต่อเครื่องส่งสัญญาณโดยตรงกับพิน Pi GPIO ที่เกี่ยวข้องดังที่แสดงในภาพด้านบน ฉันพบว่าหมุดบนหน่วยส่งสัญญาณมีป้ายกำกับ ซึ่งทำให้กระบวนการง่ายขึ้น
ในกรณีนี้ เป็นเรื่องปกติที่จะจ่ายไฟให้กับอุปกรณ์โดยใช้แหล่งจ่ายไฟ 5v จาก Pi เนื่องจากพิน DATA จะไม่ส่งสัญญาณไปยัง Pi แต่จะรับสัญญาณเท่านั้น นอกจากนี้ แหล่งจ่ายไฟ 5v จะให้ช่วงการส่งข้อมูลมากกว่าการใช้แหล่งจ่ายไฟ 3v3 อีกครั้ง คุณสามารถเชื่อมต่อ DATA pin กับพินที่เหมาะสมบน Pi ฉันใช้พิน 23 (เหมือนกับตัวรับ)
อีกสิ่งหนึ่งที่ฉันแนะนำให้ทำคือเพิ่มเสาอากาศลงในรูเล็กๆ ที่ด้านบนขวาของเครื่องส่งสัญญาณ ฉันใช้ลวดตรงยาว 17 ซม. บางแหล่งแนะนำลวดขดที่มีความยาวใกล้เคียงกัน ฉันไม่แน่ใจว่าอันไหนดีกว่า แต่ลวดตรงมีระยะที่เพียงพอสำหรับฉันในการเปิด/ปิดซ็อกเก็ตจากตำแหน่งใดๆ ในแฟลตเล็กๆ ของฉัน เป็นการดีที่สุดที่จะประสานเสาอากาศ แต่ฉันเพิ่งเอาพลาสติกบางส่วนออกจากลวดแล้วพันทองแดงผ่านรู
เมื่อต่อสายเครื่องส่งสัญญาณแล้ว แสดงว่าการตั้งค่าฮาร์ดแวร์เสร็จสิ้น! สิ่งเดียวที่ต้องทำตอนนี้คือตั้งเต้ารับไว้รอบๆ บ้านและดูโปรแกรมส่งสัญญาณ
ขั้นตอนที่ 5: การส่งสัญญาณโดยใช้ Pi
นี่คือที่มาของสคริปต์ Python ตัวที่สอง มันถูกออกแบบให้เรียบง่ายเหมือนกับสคริปต์แรก หากไม่มากกว่านั้น อีกครั้ง โปรดดาวน์โหลดและดูรหัส คุณจะต้องแก้ไขสคริปต์เพื่อส่งสัญญาณที่ถูกต้องตามข้อมูลที่คุณบันทึกไว้ในขั้นตอนที่ 3 ดังนั้นจึงเป็นเวลาที่ดีที่จะดูอย่างรวดเร็ว
ไลบรารีที่จำเป็นในการเรียกใช้สคริปต์นี้ได้รับการติดตั้งไว้ล่วงหน้าบน Pi ของฉัน ดังนั้นจึงไม่จำเป็นต้องติดตั้งเพิ่มเติม มีการระบุไว้ที่ด้านบนของสคริปต์:
เวลานำเข้า
นำเข้า sys นำเข้า RPi. GPIO เป็น GPIO
ใต้การนำเข้าไลบรารีคือข้อมูลที่คุณจะต้องแก้ไข นี่คือลักษณะโดยค่าเริ่มต้น (นี่คือข้อมูลที่สอดคล้องกับซ็อกเก็ตของฉันตามที่กำหนดโดยใช้ขั้นตอนที่ 3):
a_on = '11111111111111010101011101'
a_off = '11111111111111010101010111' b_on = '1111111111101110101011101' b_off = '111111111_1101101010111' c_on = '1111111111101011101011101' c_off = '1111111111101011101010111' d_on = '11111111111010_10011010100 สั้นลง
ที่นี่ เรามีสตริงรหัสแปดชุด (สองชุดสำหรับปุ่มเปิด/ปิดแต่ละคู่บนโทรศัพท์ของฉัน - คุณอาจมีรหัสมากหรือน้อยกว่านี้) ตามด้วยข้อมูลเวลาสามส่วนซึ่งกำหนดไว้ในขั้นตอนที่ 3 เช่นกัน ใช้เวลาเพื่อให้แน่ใจว่าคุณมี ป้อนข้อมูลนี้อย่างถูกต้อง
เมื่อคุณพอใจกับโค้ด/การหน่วงเวลาที่คุณป้อนลงในสคริปต์แล้ว (คุณสามารถเปลี่ยนชื่อตัวแปรสตริงของโค้ดได้หากต้องการ) คุณก็พร้อมที่จะลองใช้ระบบแล้ว! ก่อนที่คุณจะดำเนินการ ให้ดูที่ฟังก์ชัน send_code() ในสคริปต์ นี่คือที่ที่เกิดปฏิสัมพันธ์จริงกับเครื่องส่งสัญญาณ ฟังก์ชันนี้ต้องการส่งสตริงโค้ดหนึ่งสตริงเป็นอาร์กิวเมนต์ จากนั้นจะเปิดพินที่กำหนดไว้เป็นเอาต์พุต GPIO และวนซ้ำทุกอักขระในสตริงโค้ด จากนั้นจะเปิดหรือปิดเครื่องส่งสัญญาณตามข้อมูลเวลาที่คุณป้อนเพื่อสร้างรูปคลื่นที่ตรงกับสตริงโค้ด มันส่งแต่ละรหัสหลายครั้ง (10 โดยค่าเริ่มต้น) เพื่อลดโอกาสที่มันจะพลาด และปล่อยให้ Extended_delay ระหว่างแต่ละบล็อกรหัส เช่นเดียวกับโทรศัพท์มือถือ
ในการรันสคริปต์ คุณสามารถใช้ไวยากรณ์คำสั่งต่อไปนี้:
หลาม TransmitRF.py code_1 code_2 …
คุณสามารถส่งสตริงโค้ดหลายรายการด้วยการรันสคริปต์ครั้งเดียว ตัวอย่างเช่น หากต้องการเปิดซ็อกเก็ต (a) และ (b) และปิดซ็อกเก็ต (c) ให้รันสคริปต์ด้วยคำสั่งต่อไปนี้:
หลาม TransmitRF.py a_on b_on c_off
ขั้นตอนที่ 6: หมายเหตุเกี่ยวกับความแม่นยำของเวลา
ดังที่กล่าวไว้ จังหวะเวลาระหว่างพัลส์เปิด/ปิดที่ส่งนั้นค่อนข้างสำคัญ สคริปต์ TransmitRF.py ใช้ฟังก์ชัน time.sleep() ของ python เพื่อสร้างรูปคลื่นด้วยช่วงชีพจรที่ถูกต้อง แต่ควรสังเกตว่าฟังก์ชันนี้ไม่ถูกต้องทั้งหมด ความยาวที่ทำให้สคริปต์รอก่อนที่จะดำเนินการในครั้งต่อไปนั้นขึ้นอยู่กับโหลดของตัวประมวลผลในขณะนั้น นั่นเป็นอีกเหตุผลหนึ่งที่ TransmitRF.py ส่งแต่ละรหัสหลายครั้ง - ในกรณีที่ฟังก์ชัน time.sleep() ไม่สามารถสร้างอินสแตนซ์ที่กำหนดของรหัสได้อย่างถูกต้อง
โดยส่วนตัวแล้วฉันไม่เคยมีปัญหากับ time.sleep() เมื่อพูดถึงการส่งรหัส อย่างไรก็ตาม ฉันรู้ว่า time.sleep() ของฉันมักจะมีข้อผิดพลาดประมาณ 0.1ms ฉันพิจารณาสิ่งนี้โดยใช้สคริปต์ SleepTest.py ที่แนบมาซึ่งสามารถใช้เพื่อประเมินว่าฟังก์ชัน time.sleep() ของ Pi ของคุณแม่นยำเพียงใด สำหรับซ็อกเก็ตที่ควบคุมจากระยะไกลโดยเฉพาะของฉัน ความล่าช้าที่สั้นที่สุดที่ฉันต้องใช้คือ 0.45 มิลลิวินาที อย่างที่ฉันพูดไป ฉันไม่ได้มีปัญหากับซ็อกเก็ตที่ไม่ตอบสนอง ดังนั้นดูเหมือนว่า 0.45 ± 0.1ms ก็เพียงพอแล้ว
มีวิธีอื่นเพื่อให้แน่ใจว่าการหน่วงเวลามีความแม่นยำมากขึ้น ตัวอย่างเช่น คุณสามารถใช้ชิป PIC เฉพาะเพื่อสร้างรหัส แต่สิ่งเหล่านี้อยู่นอกเหนือขอบเขตของบทช่วยสอนนี้
ขั้นตอนที่ 7: บทสรุป
โปรเจ็กต์นี้ได้นำเสนอวิธีการควบคุมอุปกรณ์ไฟฟ้าใดๆ โดยใช้ Raspberry Pi และชุดซ็อกเก็ตควบคุมระยะไกล 433MHz โดยเน้นที่ความเรียบง่ายและความโปร่งใส นี่เป็นโครงการที่น่าตื่นเต้นและยืดหยุ่นที่สุดที่ฉันเคยใช้ Pi และมีแอปพลิเคชันที่ไร้ขีดจำกัด นี่คือบางสิ่งที่ฉันสามารถทำได้ด้วย Pi ของฉัน:
- เปิดเครื่องทำความร้อนไฟฟ้าข้างเตียงครึ่งชั่วโมงก่อนที่นาฬิกาปลุกจะดับ
- ปิดเครื่องทำความร้อนหนึ่งชั่วโมงหลังจากที่ฉันเข้านอน
- เปิดไฟข้างเตียงเมื่อนาฬิกาปลุกดับ ฉันจะไม่กลับไปนอนอีก
- และอื่น ๆ อีกมากมาย…
สำหรับงานเหล่านี้ส่วนใหญ่ ฉันใช้ฟังก์ชัน crontab ภายใน Linux สิ่งนี้ทำให้คุณสามารถตั้งค่างานที่กำหนดเวลาไว้โดยอัตโนมัติเพื่อเรียกใช้สคริปต์ TransmitRF.py ในเวลาที่กำหนด คุณยังสามารถใช้คำสั่ง Linux at เพื่อเรียกใช้งานแบบครั้งเดียวได้ (ซึ่งสำหรับฉัน จำเป็นต้องติดตั้งแยกต่างหากโดยใช้ 'sudo apt-get install at') ตัวอย่างเช่น หากต้องการเปิดเครื่องทำความร้อนเป็นเวลาครึ่งชั่วโมงก่อนที่นาฬิกาปลุกจะดังขึ้นในเช้าวันรุ่งขึ้น ทั้งหมดที่ฉันต้องทำคือพิมพ์:
เวลา 05:30
หลาม TransmitRF.py c_on
คุณสามารถใช้โปรเจ็กต์นี้ร่วมกับระบบตรวจสอบบ้าน Dropbox ของฉันเพื่อควบคุมอุปกรณ์ต่างๆ ผ่านอินเทอร์เน็ตได้! ขอขอบคุณที่อ่าน และหากคุณต้องการชี้แจงอะไรหรือแบ่งปันความคิดเห็นของคุณ โปรดโพสต์ความคิดเห็น!
แนะนำ:
เริ่มต้นใช้งาน Home Automation: การติดตั้ง Home Assistant: 3 ขั้นตอน
เริ่มต้นใช้งาน Home Automation: การติดตั้ง Home Assistant: ตอนนี้เรากำลังจะเริ่มชุด Home Automation ซึ่งเราสร้างบ้านอัจฉริยะที่จะช่วยให้เราควบคุมสิ่งต่างๆ เช่น ไฟ ลำโพง เซ็นเซอร์ และอื่นๆ โดยใช้ศูนย์กลางร่วมกับ ผู้ช่วยเสียง ในโพสต์นี้ เราจะมาเรียนรู้วิธีอิน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E - การสร้างรีโมทคอนโทรล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: 5 ขั้นตอน
การควบคุมวิทยุ RF 433MHZ โดยใช้ HT12D HT12E | การสร้างการควบคุมระยะไกล Rf โดยใช้ HT12E & HT12D ด้วย 433mhz: ในคำแนะนำนี้ฉันจะแสดงวิธีสร้างรีโมทคอนโทรล RADIO โดยใช้โมดูลตัวรับส่งสัญญาณ 433mhz พร้อมการเข้ารหัส HT12E & IC ถอดรหัส HT12D ในคำแนะนำนี้ คุณจะสามารถส่งและรับข้อมูลโดยใช้ส่วนประกอบราคาถูกมาก เช่น HT
โมดูล RF 433MHZ - ทำเครื่องรับและส่งสัญญาณจากโมดูล RF 433MHZ โดยไม่ต้องใช้ไมโครคอนโทรลเลอร์: 5 ขั้นตอน
โมดูล RF 433MHZ | ทำเครื่องรับและส่งสัญญาณจากโมดูล RF 433MHZ โดยไม่ต้องใช้ไมโครคอนโทรลเลอร์: คุณต้องการส่งข้อมูลไร้สายหรือไม่? อย่างง่ายดายและไม่จำเป็นต้องใช้ไมโครคอนโทรลเลอร์ ไปเลย ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นตัวส่งและรับสัญญาณ rf ขั้นพื้นฐานของ mi ที่พร้อมใช้งาน! ในคำแนะนำนี้ คุณจะสามารถส่งและรับข้อมูลโดยใช้เวอร์ชัน
(DIY) วิธีทำ ESP8266 Ultra Mini & Simple Relay Home Automation Board: 17 ขั้นตอน
(DIY) วิธีทำ ESP8266 Ultra Mini & Simple Relay Home Automation Board: สวัสดีทุกคนวันนี้ฉันจะแจ้งให้คุณทราบวิธีทำ Mini Esp 12 Wifi Relay Board ขนาดเพียง 3.9 ซม. x 3.9 ซม.! บอร์ดนี้มีคุณสมบัติเจ๋ง ๆ ที่คนรักเทคโนโลยีทุกคนจะชอบ ฉันได้รวมไฟล์ทั้งหมดไว้ในขั้นตอนต่อไปแล้ว บอร์ดนี้
ESP-NOW Home Automation Esp8266 Raspberry Pi MQTT: 4 ขั้นตอน
ESP-NOW Home Automation Esp8266 Raspberry Pi MQTT: ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นว่าฉันใช้ ESP-NOW ในระบบอัตโนมัติภายในบ้านได้อย่างไร ในแผนผังคุณสามารถดูขั้นตอนการสื่อสารฉันแสดงให้คุณเห็น: วิธีการทำงานของผู้ส่งแสดงการทำงานของผู้รับแสดงการสื่อสารแบบอนุกรมกับ Raspberry Pi ฉันไม่แสดงโฮ