ตั้งค่าระบบอัตโนมัติในบ้าน Raspberry Pi

Set Up Raspberry Pi Home Automation



สิ่งสำคัญที่สุดอย่างหนึ่งสำหรับระบบอัตโนมัติภายในบ้านคือการควบคุมไฟฟ้ากระแสสลับแรงสูงโดยใช้กระแสตรงแรงดันต่ำ ในการควบคุมไฟฟ้ากระแสสลับแรงสูงจาก Raspberry Pi คุณจะต้องมีสวิตช์รีเลย์ 5V คุณสามารถควบคุมสวิตช์รีเลย์โดยใช้หมุด GPIO ของ Raspberry Pi สวิตช์รีเลย์สามารถควบคุมเครื่องใช้ในบ้าน AC ผ่าน Raspberry Pi

บทความนี้จะแสดงวิธีใช้ Raspberry Pi และสวิตช์รีเลย์ 5V เพื่อเปิดและปิดหลอดไฟจากอุปกรณ์มือถือของคุณ บทความนี้ประกอบด้วยเว็บแอปที่คุณสามารถเข้าถึงได้จากอุปกรณ์ใดๆ ในเครือข่ายของคุณและควบคุมเครื่องใช้ในบ้านที่มีไฟกระแสสลับในบ้านของคุณแบบไร้สาย ให้เราเริ่มต้นด้วยการทดลองระบบอัตโนมัติภายในบ้าน Raspberry Pi อย่างง่ายของเรา







สิ่งที่คุณต้องการ

หากคุณต้องการใช้ Raspberry Pi แบบไม่มีหัว (ผ่าน SSH หรือ VNC) คุณจะต้องมีสิ่งต่อไปนี้:



1) Raspberry Pi 3 หรือ Raspberry Pi 4
2) 5V สวิตช์รีเลย์
3) สายไฟฟ้า
4) สายต่อระหว่างตัวเมียกับตัวเมีย 3 เส้น
5) หลอดไฟเอซี
6) ที่วางหลอดไฟ AC
7) ปลั๊กไฟ
8) เครื่องมือ Wirecutter และ Stripper
9) ไขควง CR-V 3
10) อะแดปเตอร์แปลงไฟ Micro-USB (Raspberry Pi 3) หรือ USB Type-C (Raspberry Pi 4)
11) การ์ด microSD ขนาด 16 GB หรือ 32 GB พร้อมแฟลช Raspberry Pi OS
12) การเชื่อมต่อเครือข่ายบน Raspberry Pi
13) แล็ปท็อปหรือคอมพิวเตอร์เดสก์ท็อปสำหรับการเข้าถึงเดสก์ท็อประยะไกล VNC หรือการเข้าถึง SSH ไปยัง Raspberry Pi



หากคุณไม่ต้องการเข้าถึง Raspberry Pi จากระยะไกลผ่าน SSH หรือ VNC คุณจะต้องมีสิ่งต่อไปนี้ด้วย:





14) จอภาพ
15) สาย HDMI หรือ micro-HDMI
16) แป้นพิมพ์
17) เมาส์

หากคุณต้องการความช่วยเหลือในการแฟลชอิมเมจ Raspberry Pi OS ไปยังการ์ด microSD ให้ดูบทความวิธีการติดตั้งและใช้งาน Raspberry Pi Imager



หากคุณเป็นมือใหม่ Raspberry Pi และต้องการความช่วยเหลือในการติดตั้ง Raspberry Pi OS บน Raspberry Pi โปรดดูบทความ วิธีการติดตั้ง Raspberry Pi OS บน Raspberry Pi 4

นอกจากนี้ หากคุณต้องการความช่วยเหลือเกี่ยวกับการตั้งค่า Raspberry Pi แบบไม่มีส่วนหัว โปรดดูบทความวิธีการติดตั้งและกำหนดค่า Raspberry Pi OS บน Raspberry Pi 4 โดยไม่ต้องใช้จอภาพภายนอก

รูปภาพของเครื่องมือที่จำเป็นทั้งหมดแสดงไว้ด้านล่าง

เปิด Raspberry Pi

จากนั้น ต่อสายไฟเข้ากับ Raspberry Pi และเปิดเครื่อง Raspberry Pi

เมื่อเปิด Raspberry Pi แล้ว คุณสามารถเชื่อมต่อกับ Raspberry Pi ผ่าน VNC หรือ SSH ได้ หรือคุณสามารถเชื่อมต่อแป้นพิมพ์ เมาส์ และจอภาพกับ Raspberry Pi เพื่อเข้าถึงโดยตรง

5V รีเลย์ Pinouts

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

รีเลย์ 5V ใช้งานง่ายมาก มีสองด้าน: ด้านหนึ่งใช้สำหรับควบคุมรีเลย์ผ่าน DC แรงดันต่ำ (จาก Raspberry Pi) และอีกด้านหนึ่งใช้สำหรับควบคุมไฟฟ้ากระแสสลับแรงสูง (เช่น หลอดไฟ) ขึ้นอยู่กับสถานะของรีเลย์ .


ด้านหนึ่ง รีเลย์มี LED สองดวง (หนึ่งสีแดงและหนึ่งสีเขียว) และสามพิน ( ใน, GND, และ VCC ). พินทั้งสามนี้ใช้เพื่อควบคุมรีเลย์จาก Raspberry Pi

พินสองพินแรกที่อีกด้านใช้สำหรับควบคุมเครื่องใช้ไฟฟ้าภายในบ้าน

เชื่อมต่อรีเลย์ 5V กับ Raspberry Pi

ในการเชื่อมต่อรีเลย์ 5V กับ Raspberry Pi คุณจะต้องใช้สายเชื่อมต่อระหว่างตัวเมียกับตัวเมียสามเส้น

เสียบด้านหนึ่งของสายเชื่อมต่อเข้ากับ ใน (สายเหลือง) GND (สายสีดำ) และ VCC (สายสีแดง) หมุดในรีเลย์ 5V ดังแสดงด้านล่าง


อีกด้านหนึ่งของสายไฟจะเข้าไปในหมุดส่วนหัว GPIO ของ Raspberry Pi ดังที่แสดงในภาพด้านล่าง

สายสีแดงควรเข้าไปใน PIN 2 (VCC) ของราสเบอร์รี่ Pi
ลวดสีดำควรเข้าไปใน PIN 6 (GND) ของราสเบอร์รี่ Pi
สายสีเหลืองควรเข้าไปใน พิน 7 (GPIO 4) ของราสเบอร์รี่ Pi


เมื่อรีเลย์ 5V เชื่อมต่อกับ Raspberry Pi แล้ว ควรมีลักษณะดังแสดงในภาพด้านล่าง

การอนุญาตให้เข้าถึง GPIO เพื่อเข้าสู่ระบบผู้ใช้

ในการอนุญาตการเข้าถึงพิน GPIO ผู้ใช้ล็อกอินเริ่มต้นของ Raspberry Pi OS พาย ควรเพิ่มใน gpio กลุ่ม.

คุณสามารถเพิ่ม พาย ผู้ใช้ไปยัง gpio กลุ่มด้วยคำสั่งต่อไปนี้:

$sudoผู้ใช้mod-aGgpio $(ฉันเป็นใคร)


เพื่อให้การเปลี่ยนแปลงมีผล ให้รีบูต Raspberry Pi ด้วยคำสั่งต่อไปนี้:

$sudoรีบูต

การสร้างไดเรกทอรีโครงการ

ยังเป็นความคิดที่ดีที่จะจัดระเบียบไฟล์โครงการทั้งหมด

ในการจัดระเบียบไฟล์โปรเจ็กต์ ให้สร้างไดเร็กทอรีโปรเจ็กต์ ~/www และไดเร็กทอรีย่อยที่จำเป็นด้วยคำสั่งต่อไปนี้:

$mkdir -pv~/www/{แม่แบบคงที่}


เมื่อสร้างไดเร็กทอรีโครงการแล้ว ให้ไปที่ไดเร็กทอรีโครงการดังนี้:

$ซีดี~/www

การสลับรีเลย์ 5V จาก Raspberry Pi

เมื่อคุณเชื่อมต่อรีเลย์ 5V กับ Raspberry Pi แล้ว คุณจะเปลี่ยนรีเลย์จาก Raspberry Pi โดยใช้ภาษาการเขียนโปรแกรม Python

หมายเหตุ: การสลับ เป็นคำที่ใช้ในอุปกรณ์อิเล็กทรอนิกส์ การสลับหมายถึงการควบคุม (เช่น การเปิด/ปิด) อุปกรณ์อิเล็กทรอนิกส์บางอย่าง

ในการทดลองสลับรีเลย์โดยใช้ภาษาการเขียนโปรแกรม Python ให้สร้างสคริปต์ Python test.py ใหม่ในไดเร็กทอรีโครงการดังนี้:

$นาโนtest.py


พิมพ์บรรทัดของรหัสต่อไปนี้ในสคริปต์ test.py Python

จากgpiozeroนำเข้านำ
จาก เวลา นำเข้านอน

ในขณะที่ จริง:
รีเลย์=นำ(4)
พิมพ์('รีเลย์: เปิด')
นอน(5)

รีเลย์ปิด()
พิมพ์('รีเลย์: ปิด')
นอน(5)

เสร็จแล้วกด + X ติดตามโดย และ และ เพื่อบันทึก test.py สคริปต์ไพทอน


ที่นี่ สาย 1 นำเข้า นำ จาก gpiozero ห้องสมุดและบรรทัดที่ 2 นำเข้า นอน ฟังก์ชันจาก เวลา ห้องสมุด.


บรรทัดที่ 6-14 อยู่ในวงอนันต์


บรรทัดที่ 6 เริ่มต้น LED ใน GPIO 4 ของ Raspberry Pi ซึ่งเชื่อมต่อกับ ใน พินของรีเลย์


Line 8 เปิดรีเลย์โดยใช้ บน() กระบวนการ.

บรรทัดที่ 9 พิมพ์ข้อความในคอนโซลโดยใช้ พิมพ์() การทำงาน.

บรรทัดที่ 10 ชะลอการดำเนินการของโค้ดบรรทัดถัดไปเป็นเวลาห้าวินาทีโดยใช้ นอน() การทำงาน.


สาย 12 ปิดรีเลย์โดยใช้ ปิด() กระบวนการ.

ในทำนองเดียวกัน บรรทัดที่ 9 พิมพ์ข้อความบนคอนโซลโดยใช้เครื่องหมาย พิมพ์() ฟังก์ชั่นและบรรทัดที่ 10 ชะลอการดำเนินการของรหัสบรรทัดถัดไปเป็นเวลา 5 วินาทีโดยใช้ นอน() การทำงาน.


ถัดไป เรียกใช้ test.py สคริปต์ Python ดังต่อไปนี้:

$python3 test.py


NS test.py สคริปต์ Python ควรเริ่มสลับรีเลย์ 5V คุณควรได้ยินเสียงคลิกทุกห้าวินาที เมื่อรีเลย์เปลี่ยนสถานะ (จากเปิดเป็นปิดหรือจากปิดเป็นเปิด) จะมีเสียงคลิก ซึ่งหมายความว่ารีเลย์ทำงานอย่างถูกต้อง


เมื่อรีเลย์อยู่ในสถานะปิด (การทำงานปกติ – โหลด AC ถูกตัดการเชื่อมต่อ) เฉพาะ สุทธิ LED ควรสว่างขึ้นดังที่คุณเห็นในภาพด้านล่าง


เมื่อรีเลย์อยู่ในสถานะเปิด (เชื่อมต่อโหลด AC) ทั้ง เขียว LED และ NS สุทธิ LED ควรสว่างขึ้นดังที่คุณเห็นในภาพด้านล่าง


เมื่อการทดสอบเสร็จสิ้น ให้กด + C เพื่อยุติ test.py สคริปต์

การเชื่อมต่อหลอดไฟ AC กับรีเลย์ 5V

ตอนนี้รีเลย์ 5V ควรทำงานอย่างถูกต้อง ตอนนี้ คุณจะเชื่อมต่อเครื่องใช้ในบ้านที่มีไฟกระแสสลับ (ในกรณีนี้คือหลอดไฟ) กับรีเลย์ 5V

ขั้นแรก ให้ตัดสายไฟสีดำที่เชื่อมต่อกับหลอดไฟด้วยเครื่องตัดลวด


เมื่อสายไฟสีดำที่ต่ออยู่กับหลอดไฟถูกตัดด้วยเครื่องตัดลวดแล้ว ควรมีลักษณะดังภาพด้านล่าง


ถัดไป ดึงชั้นภายนอกออกเพื่อให้เห็นสายไฟประมาณ ½ นิ้ว ดังที่แสดงในภาพด้านล่าง


จากนั้นพับสายไฟตามภาพด้านล่าง


คลายสกรูที่ทำเครื่องหมายไว้ของรีเลย์ด้วยไขควง CV-3


เสียบสายไฟที่ดึงออกและพับไว้ก่อนหน้านี้ในขั้วสกรูทั้งสองขั้ว แล้วขันสกรูให้แน่นด้วยไขควง CV-3

การทดสอบการสลับรีเลย์หลังจากเชื่อมต่อโหลด AC

เมื่อโหลดไฟ AC กับรีเลย์ 5V แล้ว ให้ต่อปลั๊กหลอดไฟเข้ากับเต้ารับบนผนัง


เรียกใช้ test.py สคริปต์ Python จากไดเร็กทอรีโครงการดังนี้:

$python3 test.py


NS test.py สคริปต์ Python ควรเริ่มสลับรีเลย์ 5V ซึ่งจะสลับหลอดไฟ AC แรงสูงในช่วงเวลาห้าวินาที หลอดไฟ AC ควรเปิดไว้เป็นเวลาห้าวินาที จากนั้นจึงดับลงเป็นเวลาห้าวินาที เป็นต้น

หลอดไฟดับในภาพด้านล่าง


หลอดไฟอยู่ในภาพด้านล่าง


อย่างที่คุณเห็น เราสามารถสลับรีเลย์และควบคุมหลอดไฟ AC แรงสูงได้โดยใช้ภาษาการเขียนโปรแกรม Python เลยกด + C เพื่อยุติ test.py สคริปต์

ให้เราไปยังส่วนถัดไป

การเขียนเว็บแอพ Home Automation

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

บันทึก: รหัสทั้งหมดที่แสดงในส่วนนี้มีอยู่ในที่เก็บ GitHub ของฉัน shovon8 / raspberry-pi-home-automation . หากต้องการ คุณสามารถโคลนที่เก็บ GitHub ของฉันและข้ามรหัสทั้งหมดได้

สร้างสคริปต์ server.py Python ในไดเร็กทอรีโครงการดังนี้:

$นาโนserver.py


พิมพ์รหัสบรรทัดต่อไปนี้ใน server.py สคริปต์ไพทอน

จากกระติกน้ำนำเข้ากระติกน้ำ,jsonify,url_for,render_template
จากgpiozeroนำเข้านำ
จากuuidนำเข้าuuid4
ห้อง= {}
ห้อง['ห้อง 1'] = [{
'NS': uuid4(),
'ชื่อ':'ไลท์ 1',
'ไอคอน':'ฟ้าฟา-หลอดไฟ',
'สถานะ':เท็จ,
'รีเลย์พิน':4,
'รีเลย์อินสแตนซ์':เท็จ
}, {
'NS': uuid4(),
'ชื่อ':'แฟน 1',
'ไอคอน':'ฟ้าฟาแฟน',
'สถานะ':เท็จ,
'รีเลย์พิน':6,
'รีเลย์อินสแตนซ์':เท็จ
}]
ห้อง['ห้องน้ำ 1'] = [{
'NS': uuid4(),
'ชื่อ':'ไลท์ 1',
'ไอคอน':'ฟ้าฟา-หลอดไฟ',
'สถานะ':เท็จ,
'รีเลย์พิน':5,
'รีเลย์อินสแตนซ์':เท็จ
}]
แอป=กระติกน้ำ(__ชื่อ__)
แอป.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
@แอป.เส้นทาง('/')
defบ้าน():
กลับrender_template('./index.html',ห้อง=ห้อง)
deftoggle_appliance_status(NS):
สำหรับห้องในห้อง:
สำหรับเครื่องใช้ในห้อง[ห้อง]:
ถ้า NS(เครื่องใช้['NS']) == NS:
ถ้าเครื่องใช้['รีเลย์อินสแตนซ์']:
เครื่องใช้['รีเลย์อินสแตนซ์'].ปิด()
เครื่องใช้['รีเลย์อินสแตนซ์'] = เท็จ
อื่น:
เครื่องใช้['รีเลย์อินสแตนซ์'] =นำ(เครื่องใช้['รีเลย์พิน'])
เครื่องใช้['รีเลย์อินสแตนซ์'].บน()
เครื่องใช้['สถานะ'] = ไม่เครื่องใช้['สถานะ']
กลับ จริง
กลับ เท็จ
@แอป.เส้นทาง('/อุปกรณ์/สลับ/')
defอุปกรณ์_toggle(NS):
กลับjsonify({'สถานะ': toggle_appliance_status(NS)})

เสร็จแล้วกด + X ติดตามโดย และ และ เพื่อบันทึก server.py สคริปต์ไพทอน


ที่นี่ บรรทัดที่ 1-3 นำเข้าส่วนประกอบที่จำเป็นทั้งหมดจากไลบรารีที่เกี่ยวข้อง


บรรทัดที่ 5 สร้างช่องว่าง ห้อง พจนานุกรม. ในพจนานุกรมนี้ เราจะจัดเก็บรายละเอียดอุปกรณ์ไฟฟ้ากระแสสลับทั้งหมดที่เราต้องการควบคุมจากเว็บแอป


NS ห้อง รายละเอียดถูกเก็บไว้ในบรรทัดที่ 7-29


ให้เราพูดถึงโครงสร้างข้อมูลของห้องใดห้องหนึ่ง

ในที่นี้ชื่อห้องจะเป็น ห้องที่ 1 ดังนั้น, ห้อง 1 เป็นกุญแจสำคัญในการ ห้อง พจนานุกรม.


NS ห้อง 1 คีย์เก็บอาร์เรย์เป็นค่า จำนวนขององค์ประกอบอาร์เรย์จะเท่ากับจำนวนเครื่องใช้ภายในบ้าน AC ที่คุณมีในห้องนั้นที่คุณต้องการควบคุมจากเว็บแอปด้วย ในกรณีนี้ เรามีเครื่องใช้ไฟฟ้าภายในบ้าน 2 เครื่องที่เราต้องการควบคุม: ไลท์ 1 และ แฟน 1 .


คำจำกัดความเครื่องใช้ในบ้านแต่ละรายการมี NS . NS NS เป็น UUID ที่สร้างแบบสุ่ม ใช้เพื่อระบุห้องที่เราต้องการควบคุมโดยใช้ API

เครื่องใช้ในบ้านยังมีสิ่งต่อไปนี้ทั้งหมด:

  • ชื่อ (ไฟ 1 ในกรณีนี้)
  • ไอคอน (คลาสไอคอน Font Awesome เนื่องจากเราจะใช้ Font Awesome สำหรับไอคอน)
  • สถานะ (True ถ้า บน และ เท็จ ถ้า ปิด )
  • รีเลย์Pin (หมายเลขพิน GPIO ที่ใช้ควบคุมรีเลย์ที่เชื่อมต่อกับเครื่องใช้ไฟฟ้าภายในบ้าน AC)
  • รีเลย์Instance (เริ่มต้น นำ วัตถุของ gpiozero ห้องสมุดที่รับผิดชอบในการควบคุมพิน GPIO ตามลำดับ - รีเลย์Pin )


บรรทัดที่ 31 เริ่มต้นเว็บเซิร์ฟเวอร์ขวด Python

บรรทัดที่ 32 กำหนดค่าเว็บเซิร์ฟเวอร์ขวด


สาย 34-36 ส่ง index.html ไฟล์จาก แม่แบบ/ ไดเร็กทอรีเมื่อคุณเยี่ยมชมเว็บแอประบบอัตโนมัติภายในบ้าน

กระติกน้ำใช้ Jinja2 เทมเพลตภาษาเพื่อแสดง index.html ไฟล์. ดังนั้นฉันผ่าน ห้อง พจนานุกรมไปยัง index.html ไฟล์. Jinja2 จะแสดงหน้าแรกโดยใช้ ห้อง ข้อมูล.


ฟังก์ชั่น toggle_appliance_status() ในบรรทัดที่ 39-52 ใช้สำหรับเปิดเครื่องใช้ในครัวเรือนหากปิดอยู่และปิดเครื่องใช้ในบ้านหากเปิดเครื่องโดยใช้เครื่อง NS .

มันกลับมา จริง หากการดำเนินการสลับสำเร็จ หากมีข้อผิดพลาดจะส่งคืน เท็จ .


บรรทัดที่ 55-57 ใช้เพื่อสลับเครื่องใช้ในบ้านโดยใช้ /อุปกรณ์/สลับ/ จุดสิ้นสุด API ของเว็บเซิร์ฟเวอร์ ที่นี่, NS คือ ID ของเครื่องใช้ในบ้าน


สร้าง index.html ไฟล์ใน แม่แบบ/ ไดเร็กทอรีของโครงการของคุณดังนี้:

$นาโนแม่แบบ/index.html

พิมพ์รหัสบรรทัดต่อไปนี้ใน index.html สคริปต์


< html แลง='บน'>
< ศีรษะ >
< เมต้า ชุดอักขระ='UTF-8'>
< เมต้า ชื่อ='วิวพอร์ต' เนื้อหา='ความกว้าง=ความกว้างของอุปกรณ์ มาตราส่วนเริ่มต้น=1.0'>
< ลิงค์ เรล='สไตล์ชีต' href='{{ url_for('static', file) }}'>
< ลิงค์ เรล='สไตล์ชีต' href='{{ url_for('static', file) }}'>
< ชื่อ >ระบบอัตโนมัติภายในบ้านด้วย Raspberry Pi</ ชื่อ >
</ ศีรษะ >
< ร่างกาย >
< div NS='เนื้อหา'>
< ชั่วโมง1 >Raspberry Pi Home Automation</ ชั่วโมง1 >

{% สำหรับห้องในห้อง %}
< div ระดับ='ห้อง'>
< ชั่วโมง2 >{{ ห้อง }}</ ชั่วโมง2 >
< div ระดับ='เครื่องใช้ไฟฟ้า'>
{% สำหรับเครื่องใช้ไฟฟ้าในห้อง[ห้อง] %}
< div ระดับ='เครื่องใช้' NS='{{ อุปกรณ์['id'] }}'> ='คล่องแคล่ว'>
< ผม ระดับ='{{ อุปกรณ์['ไอคอน'] }}'></ ผม >
< สแปน >{{ อุปกรณ์['ชื่อ'] }}</ สแปน >
</ div >
{% สิ้นสุดสำหรับ %}
</ div >
</ div >
{% สิ้นสุดสำหรับ %}

</ div >

< สคริปต์ src='{{ url_for('static', file) }}' พิมพ์='ข้อความ/จาวาสคริปต์'></ สคริปต์ >
</ ร่างกาย >
</ html >

เสร็จแล้วกด + X ติดตามโดย และ และ เพื่อบันทึก index.html ไฟล์.


สร้าง style.css ไฟล์ใน คงที่/ ไดเร็กทอรีของโครงการของคุณดังนี้:

$นาโนคงที่/style.css


พิมพ์รหัสบรรทัดต่อไปนี้ใน style.css ไฟล์.

@นำเข้า url('https://fonts.googleapis.com/css2?family=BenchNine: [ป้องกันอีเมล] ;400;700&display=swap');

* {
ระยะขอบ: 0;
การขยายความ: 0;
ตระกูลอักษร: 'เบ็นซ์ไนน์', sans-serif;
}

#เนื้อหา >ชั่วโมง1{
พื้นหลัง:เชิงเส้นลาด(ถึงขวา, rgb(112, 24, 163), rgb(86, 127, 240));
สี: #fff;
text-align: ศูนย์กลาง;
การขยายความ: .5em 0;
}

div.ห้อง {
ระยะขอบ: .5em;
ชายแดน: 2px แข็ง rgb(112, 24, 163);
รัศมีชายแดน: 5px;
}

div.ห้องชั่วโมง2{
/* พื้นหลัง: rgb(9, 76, 121); */
พื้นหลัง:เชิงเส้นลาด(ถึงขวา, rgb(112, 24, 163), rgb(86, 127, 240));
การขยายความ: 0 0 0 .5em;
สี: #fff;
}

div.เครื่องใช้ไฟฟ้า {
ระยะขอบ: .5em .5em 0 0;
แสดง:flex;
flex-wrap:ห่อ;
}

div.appliance {
ชายแดน: 2px แข็ง rgb(112, 24, 163);
รัศมีชายแดน: 5px;
ความกว้าง: 110px;
ความสูง: 120px;
text-align: ศูนย์กลาง;
ระยะขอบ: 0 0 .5em .5em;
แสดง:flex;
flex-direction:คอลัมน์;
}

div.applianceผม.fa {
ขนาดตัวอักษร: 4em;
flex-grow: 1;
padding-top: 0.3em;
สี: rgb(204, ห้าสิบ, ห้าสิบ);
}

div.appliance[ข้อมูลที่ใช้งาน='คล่องแคล่ว']ผม.fa {
สี: rgb(32, 177, 51);
}

div.applianceสแปน{
แสดง: บล็อก;
ตัวอักษรน้ำหนัก: ตัวหนา;
พื้นหลัง: rgb(112, 24, 163);
สี: #fff;
}

เสร็จแล้วกด + X ติดตามโดย และ และ เพื่อบันทึก style.css ไฟล์.


สร้าง app.js ไฟล์ใน คงที่/ ไดเร็กทอรีของโครงการของคุณดังนี้:

$นาโนคงที่/app.js


พิมพ์รหัสบรรทัดต่อไปนี้ใน app.js ไฟล์.

หน้าต่าง.addEventListener('โหลด',หลัก);

การทำงานหลัก() {
การทำงานtoggleApplianceState(และ) {
ที่ไหนNS=และ.เส้นทาง[1].NS;

ที่ไหนhttp= ใหม่XMLHttpRequest();

http.onreadystatechange = การทำงาน() {
ถ้า(นี้.พร้อมสถานะ === 4 && นี้.สถานะ === 200) {
ถ้า(เจสันแยกวิเคราะห์(นี้.ข้อความตอบกลับ).สถานะ === จริง) {
ถ้า(และ.เส้นทาง[1].มีแอตทริบิวต์('ข้อมูลที่ใช้งานอยู่')) {
และ.เส้นทาง[1].ลบแอตทริบิวต์('ข้อมูลที่ใช้งานอยู่')
} อื่น {
และ.เส้นทาง[1].setAttribute('ข้อมูลที่ใช้งานอยู่', 'คล่องแคล่ว')
}
}
}
}

http.เปิด('รับ',``/เครื่องใช้/สลับ/${NS}``, จริง);
http.ส่ง();
}


ที่ไหนเครื่องใช้ไฟฟ้า=เอกสาร.getElementsByClassName('เครื่องใช้');
สำหรับ(ผม=0;ผม<เครื่องใช้ไฟฟ้า.ระยะเวลา;ผม++) {
เครื่องใช้ไฟฟ้า[ผม].addEventListener('คลิก',toggleApplianceState);
}
}

เสร็จแล้วกด + X ติดตามโดย และ และเพื่อบันทึก app.js ไฟล์.


ที่นี่บรรทัดที่ 1 วิ่ง หลัก() ทำงานเมื่อโหลดหน้าเว็บเสร็จ

ใน index.html ไฟล์ เครื่องใช้ในบ้านแต่ละเครื่องอยู่ใน an เครื่องใช้ ระดับ. บรรทัดที่ 26-29 ใช้สำหรับเลือกเครื่องใช้ในบ้านแต่ละเครื่องจากหน้าเว็บและแนบ คลิก เหตุการณ์ที่เครื่อง เมื่อมีคนคลิกที่เครื่องใช้ในบ้านจากหน้าเว็บ toggleApplianceState() ฟังก์ชั่นจะทำงาน


ในบรรทัดที่ 4-23, the toggleApplianceState() ฟังก์ชันใช้เพื่อขอ /อุปกรณ์/สลับ/ จุดสิ้นสุดของเว็บเซิร์ฟเวอร์เพื่อเปลี่ยนสถานะของเครื่องใช้ในบ้านที่คลิก คำขอทำในพื้นหลังผ่าน AJAX เมื่อได้รับการตอบกลับแล้ว หน้าเว็บจะได้รับการอัปเดตตามนั้น


นำทางไปยัง คงที่/ ไดเร็กทอรีในไดเร็กทอรีโครงการของคุณดังนี้:

$ซีดีคงที่/


ดาวน์โหลด Font Awesome ด้วยคำสั่งต่อไปนี้:

$wgethttps://use.fontawesome.com/เผยแพร่/v5.15.1/fontawesome-free-5.15.1-web.zip


เมื่อดาวน์โหลด Font Awesome แล้ว คุณควรหาไฟล์ zip ใหม่ fontawesome-free-5.15.1-web.zip ใน คงที่/ ไดเรกทอรี

$ลส -lh


เปิดเครื่องรูด fontawesome-free-5.15.1-web.zip ไฟล์ด้วยคำสั่งต่อไปนี้:

$เปิดเครื่องรูดfontawesome-free-5.15.1-web.zip


NS fontawesome-free-5.15.1-web.zip ไฟล์ควรได้รับการคลายซิปแล้ว


ไดเร็กทอรีใหม่ fontawesome-free-5.15.1-เว็บ/ ควรสร้างในไดเร็กทอรี static/ ดังที่คุณเห็นในภาพหน้าจอด้านล่าง

$ลส -lh

เปลี่ยนชื่อไดเร็กทอรี fontawesome-free-5.15.1-เว็บ/ ถึง fontawesome / ด้วยคำสั่งดังนี้

$mv -vfontawesome-free-5.15.1-เว็บ fontawesome


ตอนนี้คุณไม่จำเป็นต้อง .อีกต่อไป fontawesome-free-5.15.1-web.zip ไฟล์. ดังนั้น ให้เอา . ออก fontawesome-free-5.15.1-web.zip ไฟล์ด้วยคำสั่งต่อไปนี้:

$rm -vfontawesome-free-5.15.1-web.zip


NS คงที่/ โครงสร้างไดเร็กทอรีควรมีลักษณะตามที่แสดงในภาพหน้าจอด้านล่าง

$ลส -lh


กลับไปที่ไดเร็กทอรีโครงการ ~/www ดังนี้

$ซีดี..

การทดสอบ Home Automation Web App

หากต้องการทดสอบเว็บแอประบบอัตโนมัติในบ้าน ให้เรียกใช้คำสั่งต่อไปนี้ในไดเรกทอรีโครงการของคุณ:

$FLASK_APP=server.py flask รัน


เว็บแอปควรพร้อมใช้งานบนพอร์ต 5000 ของ Raspberry Pi ของคุณ


จากเว็บเบราว์เซอร์ Chromium ให้ไปที่ http://localhost:5000 . ควรโหลดแอปพลิเคชันเว็บระบบอัตโนมัติภายในบ้าน

คลิกที่ไอคอนหลอดไฟที่แสดงในภาพด้านล่าง


ตอนนี้ควรเปิดหลอดไฟ AC แล้ว สีของไอคอนควรเปลี่ยนเป็นสีเขียวด้วย ซึ่งแสดงว่าหลอดไฟเปิดอยู่


ดังนั้น เว็บแอประบบอัตโนมัติในบ้านจึงใช้งานได้ กด + C เพื่อยุติเว็บเซิร์ฟเวอร์

การสร้าง Systemd Service สำหรับ Home Automation Web App

ในส่วนนี้ ฉันจะแสดงวิธีสร้างไฟล์บริการ systemd สำหรับเว็บแอประบบอัตโนมัติภายในบ้าน เพื่อที่จะเริ่มทำงานโดยอัตโนมัติเมื่อบู๊ตเครื่อง

ขั้นแรกให้สร้าง raspi-home-automation.service ในไดเร็กทอรีโครงการของคุณดังนี้:

$นาโนraspi-home-automation.service

พิมพ์บรรทัดต่อไปนี้ในไฟล์ raspi-home-automation.service

[หน่วย]
คำอธิบาย=บริการเว็บระบบอัตโนมัติในบ้าน Raspberry Pi
หลังจาก=network.target
[บริการ]
ไดเรกทอรีการทำงาน=/บ้าน/พาย/www
สิ่งแวดล้อม=FLASK_APP=server.py
สิ่งแวดล้อม=FLASK_ENV=การผลิต
ExecStart=/usr/เป็น/วิ่งขวด--เจ้าภาพ= 0.0.0.0
มาตรฐานเอาท์พุต=สืบทอด
มาตรฐานบกพร่อง=สืบทอด
เริ่มต้นใหม่=เสมอ
ผู้ใช้= ปี่
[ติดตั้ง]
WantedBy=ผู้ใช้หลายคน.target

เสร็จแล้วกด + X ติดตามโดย และ และเพื่อบันทึก raspi-home-automation.service ไฟล์.


คัดลอก raspi-home-automation.service ไฟล์ไปที่ /etc/systemd/system/ ไดเร็กทอรีด้วยคำสั่งต่อไปนี้:

$sudo cp -vraspi-home-automation.service/ฯลฯ/ระบบ/ระบบ/


รีโหลด systemd daemons เพื่อให้การเปลี่ยนแปลงมีผลดังนี้:

$sudosystemctl daemon-reload


เพิ่ม raspi-home-automation บริการเพื่อเริ่มต้นระบบของ Raspberry Pi OS ด้วยคำสั่งต่อไปนี้:

$sudosystemctlเปิดใช้งานraspi-home-automation.service


รีบูต Raspberry Pi ด้วยคำสั่งต่อไปนี้:

$sudoรีบูต


เมื่อบูท Raspberry Pi แล้ว raspi-home-automation บริการควรเปิดใช้งาน/ทำงานดังที่คุณเห็นในภาพหน้าจอด้านล่าง

$sudoสถานะ systemctl raspi-home-automation.service

การเข้าถึง Home Automation Web App จากอุปกรณ์อื่น

ในการเข้าถึงเว็บแอประบบอัตโนมัติภายในบ้านจากอุปกรณ์อื่นๆ ในเครือข่ายในบ้านของคุณ คุณจะต้องทราบที่อยู่ IP ของอุปกรณ์ Raspberry Pi ของคุณ

คุณสามารถค้นหาที่อยู่ IP ของอุปกรณ์ Raspberry Pi 4 ได้จากอินเทอร์เฟซการจัดการเว็บของเราเตอร์ที่บ้านของคุณ ในกรณีของฉัน ที่อยู่ IP คือ 192.168.0.103 สิ่งนี้จะแตกต่างกันสำหรับคุณ ดังนั้นอย่าลืมแทนที่ IP ของฉันด้วยของคุณตั้งแต่บัดนี้เป็นต้นไป


หากคุณมีสิทธิ์เข้าถึงคอนโซล Raspberry Pi คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อค้นหาที่อยู่ IP ได้เช่นกัน

$ชื่อโฮสต์ -ผม


เมื่อคุณทราบที่อยู่ IP ของอุปกรณ์ Raspberry Pi แล้ว คุณสามารถเข้าถึงได้จากอุปกรณ์ใดก็ได้ในเครือข่ายภายในบ้านของคุณ

ดังที่คุณเห็นในภาพหน้าจอด้านล่าง ฉันได้เข้าถึงเว็บแอประบบอัตโนมัติภายในบ้านจากสมาร์ทโฟน Android ของฉันแล้ว


อย่าลืมเสียบปลั๊กหลอดไฟเข้ากับเต้ารับไฟฟ้าที่ผนัง


ควรปิดหลอดไฟตามค่าเริ่มต้น


หากคุณแตะไอคอนหลอดไฟจากเว็บแอประบบอัตโนมัติในบ้าน สีของไอคอนหลอดไฟควรเปลี่ยนเป็นสีเขียว ซึ่งแสดงว่าหลอดไฟเปิดอยู่


ดังที่คุณเห็นในภาพด้านล่าง หลอดไฟเปิดอยู่

บทสรุป

บทความนี้แสดงวิธีใช้รีเลย์ 5V เพื่อควบคุมอุปกรณ์ไฟฟ้ากระแสสลับแรงสูงจาก Raspberry Pi โดยใช้ภาษาการเขียนโปรแกรม Python บทความนี้ยังแสดงวิธีเขียนเว็บแอป Python flask ที่ใช้ API เพื่อควบคุมการถ่ายทอดจากเว็บเบราว์เซอร์ บทความนี้จะช่วยคุณเริ่มต้นใช้งานระบบอัตโนมัติภายในบ้านโดยใช้ Raspberry Pi