- ส่วนประกอบที่จำเป็น
- แผนภูมิวงจรรวม
- การติดตั้ง MQTT Cloud Libraries บน Raspberry Pi
- คำอธิบายการเข้ารหัสสำหรับควบคุม Raspberry Pi GPIO ด้วย MQTT
ในบทช่วยสอนก่อนหน้านี้เราได้พูดคุยเกี่ยวกับ MQTT Protocol และติดตั้งเซิร์ฟเวอร์ MQTT ในเครื่องบน Raspberry Pi ของเราเพื่อควบคุม GPIO ในเครื่อง แต่ข้อเสียเปรียบของเซิร์ฟเวอร์ MQTT ในพื้นที่คือเราไม่สามารถควบคุม GPIO ได้จากทุกที่ในโลก แต่ให้บริการเฉพาะในพื้นที่เท่านั้น แต่ถ้าเซิร์ฟเวอร์ MQTT นี้โฮสต์บนคลาวด์บางเครื่องก็จะสามารถควบคุมอุปกรณ์ที่เชื่อมต่อกับ Raspberry Pi ได้ทั่วโลก
ที่นี่ในการกวดวิชานี้เราจะใช้ Adafruit IO เป็นนายหน้า MQTT เพื่อควบคุมเครื่องใช้ไฟฟ้า AC เชื่อมต่อกับราสเบอร์รี่ Pi GPIO ตรวจสอบบทช่วยสอนระบบอัตโนมัติในบ้านที่ควบคุมด้วย IoT อื่น ๆ:
- ระบบอัตโนมัติภายในบ้านที่ควบคุมด้วยเสียงที่ใช้ IOT โดยใช้ ESP8266 และ Android App
- สมาร์ทโฟนควบคุมระบบอัตโนมัติภายในบ้านโดยใช้ Arduino
- ระบบอัตโนมัติในบ้านที่ควบคุมบนเว็บด้วย IoT โดยใช้ไมโครคอนโทรลเลอร์ PIC และ Adafruit IO
- ระบบอัตโนมัติภายในบ้านที่ควบคุมด้วยเว็บบน IoT โดยใช้ Raspberry Pi
- ระบบอัตโนมัติภายในบ้านที่ควบคุมด้วยเสียงของ Google Assistant โดยใช้ DIY Arduino Wi-Fi Shield
ส่วนประกอบที่จำเป็น
- Raspberry Pi พร้อม Raspbian Stretch ติดตั้งอยู่
- โมดูลรีเลย์
- หลอดไฟ
- สายจัมเปอร์
ที่นี่เราจะใช้ SSH เพื่อเข้าถึง Raspberry Pi บนแล็ปท็อป คุณสามารถใช้การเชื่อมต่อ VNC หรือเดสก์ท็อประยะไกลบนแล็ปท็อปหรือสามารถเชื่อมต่อ Raspberry pi กับจอภาพ เรียนรู้เพิ่มเติมเกี่ยวกับการตั้งค่า Raspberry Pi โดยไม่ต้องใช้จอภาพ
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับเครื่องใช้ในบ้านที่ควบคุมด้วย IoT ด้วยคลาวด์ MQTT และ Raspberry Piนั้นง่ายมากเพียงแค่เชื่อมต่อหลอดไฟกับโมดูลรีเลย์บน GPIO พิน 35 ของราสเบอร์รี่ Pi
การติดตั้ง MQTT Cloud Libraries บน Raspberry Pi
นี่แพลตฟอร์ม Adafruit IO จะใช้กับราสเบอร์รี่ Pi เป็นนายหน้า เนื่องจากเราใช้แพลตฟอร์มAdafruit IOหลายครั้งในบทช่วยสอนก่อนหน้านี้ในทำนองเดียวกันเราสามารถใช้ใน Raspberry Pi ได้
เพียงสร้างบัญชีบนแพลตฟอร์ม Adafruit IO และสร้างฟีดหากคุณไม่รู้วิธีสร้างฟีดและปรับแต่งแดชบอร์ด Adafruit ให้ไปที่ลิงค์
หลังจากสร้างแดชบอร์ดแล้วให้ติดตั้งไลบรารีบางส่วนใน Raspberry Pi เพื่อเริ่มต้นกับ MQTT
1. ขั้นแรกอัปเดต Pi และ Python ของคุณโดยออกคำสั่งต่อไปนี้
sudo apt-get update sudo apt-get upgrade ติดตั้ง sudo pip3 - อัปเกรดsetuptools
2. ตอนนี้ติดตั้งไลบรารี Rpi.gpio และ Adafruit กะพริบโดยใช้คำสั่งด้านล่าง
sudo pip3 ติดตั้ง RPI.GPIO sudo pip3 ติดตั้ง adafruit-blinka
3. ติดตั้ง Adafruit IO library โดยใช้คำสั่งด้านล่าง
sudo pip3 ติดตั้ง adafruit-io
4. โคลนตัวอย่าง adafruit จาก github โดยใช้คำสั่งด้านล่าง
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5. จากนั้นไปที่โฟลเดอร์ตัวอย่างโดยป้อนคำสั่งต่อไปนี้ในเทอร์มินัล:
cd Adafruit_IO_Python / ตัวอย่าง / ข้อมูลเบื้องต้น
หากคุณไม่แน่ใจว่าไดเรกทอรีที่คุณอยู่ในคุณสามารถตรวจสอบเรื่องนี้โดยการเรียกใช้ รหัสผ่าน
6. สำหรับตัวอย่างทั้งหมดในโฟลเดอร์นี้คุณจะต้องตั้งค่า ADAFRUIT_IO_KEY และ ADAFRUIT_IO_USERNAMEซึ่งสามารถพบได้จากแดชบอร์ด Adafruit ดังแสดงด้านล่าง
สลับปุ่มบนแดชบอร์ด Adafruit IO และคุณจะเห็นสิ่งต่อไปนี้ในเทอร์มินัลของ Pi ของคุณ
7. ตอนนี้เปิดไฟล์subscribe.pyโดยใช้ตัวแก้ไข นาโน พิมพ์คำสั่งต่อไปนี้เพื่อเปิด
sudo nano subscribe.py
เราต้องแก้ไขโปรแกรมนี้เพื่อควบคุม GPIO จากแดชบอร์ด
คำอธิบายการเข้ารหัสสำหรับควบคุม Raspberry Pi GPIO ด้วย MQTT
ขั้นแรกให้นำเข้าไลบรารีที่จำเป็นทั้งหมดเพื่อใช้พิน GPIO และไคลเอนต์ Adafruit MQTT
นำเข้า RPi.GPIO เป็นระบบ นำเข้า GPIO จาก Adafruit_IO นำเข้า MQTTClient
ตอนนี้ตั้งค่าโหมด GPIO และกำหนดหมายเลขพิน LED และตั้งเป็นเอาต์พุต
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
ต่อไปเราต้องตั้งค่าคีย์ AIO และชื่อผู้ใช้ที่เราพบในขณะที่สร้างแดชบอร์ด
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
ป้อนชื่อฟีดที่คุณตั้งไว้เพื่อเปิดและปิดไฟ นี่คือ "แสง"
FEED_ID = 'แสง'
ตอนนี้กำหนดฟังก์ชั่นที่จะถูกเรียกใช้เมื่อมีเหตุการณ์เกิดขึ้น ดังนั้นเราจะสมัครฟีดโดยใช้ client.subscribe (FEED_ID)
def เชื่อมต่อ (ไคลเอนต์): client.subscribe (FEED_ID) พิมพ์ ('กำลังรอข้อมูลฟีด… ')
หลังจากสมัครรับฟีดเราต้องตรวจสอบค่าใหม่และเก็บไว้ในตัวแปรเพย์ โหลด สำหรับฟังก์ชันข้อความนี้เรียกว่า ดังนั้นเมื่อใดก็ตามที่มี“ 1” ในตัวแปร payload ให้กำหนดขา led HIGH และสำหรับ“ 0” ให้เป็น LOW
ข้อความ def (ไคลเอนต์ feed_id, payload): พิมพ์ ('ฟีด {0} ได้รับค่าใหม่: {1}'. รูปแบบ (feed_id, payload)) ถ้า payload == 1: GPIO.output (ledPin, GPIO.HIGH) อื่น ๆ: GPIO.output (ledPin, GPIO.LOW)
ตอนนี้สร้างไคลเอนต์ MQTT เพื่อเชื่อมต่อกับแพลตฟอร์ม Adafruit IO และส่งข้อความไปมา
ไคลเอนต์ = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = connected client.on_disconnect = disconnected
นอกจากนี้โปรดดูแลเกี่ยวกับการเยื้องที่เหมาะสมในรหัสมิฉะนั้นจะแสดงข้อผิดพลาด รหัสหลามที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอน
สุดท้ายบันทึกโปรแกรมโดยใช้ ctrl + x แล้วกด Enter ตอนนี้เราต้องเรียกใช้สคริปต์เพื่อสมัครรับข้อความ ดังนั้นในประเภทเทอร์มินัลpython subscribe.pyและกด Enter
python subscribe.py
คุณจะเห็นข้อความ กำลังรอข้อมูลฟีด …ดังที่แสดงด้านล่างภาพรวม
ตอนนี้ตรวจสอบให้แน่ใจว่าโมดูลรีเลย์เชื่อมต่อกับพิน GPIO ของ Raspberry Pi จากนั้นไปที่แดชบอร์ด Adafruit IO และเปลี่ยนฟีดแสง หลอดไฟควรเปิดเมื่อ“1” จะได้รับและปิดเมื่อ“0” จะได้รับดังต่อไปนี้
ด้วยวิธีนี้เราสามารถควบคุมอุปกรณ์จากทุกที่ในโลกโดยใช้ Raspberry Pi และ MQTT cloud