สารบัญ:

กระดานประกาศดิจิทัลที่ใช้ Raspberry Pi และโปรโตคอล MQTT: 8 ขั้นตอน
กระดานประกาศดิจิทัลที่ใช้ Raspberry Pi และโปรโตคอล MQTT: 8 ขั้นตอน

วีดีโอ: กระดานประกาศดิจิทัลที่ใช้ Raspberry Pi และโปรโตคอล MQTT: 8 ขั้นตอน

วีดีโอ: กระดานประกาศดิจิทัลที่ใช้ Raspberry Pi และโปรโตคอล MQTT: 8 ขั้นตอน
วีดีโอ: NodeMCU ESP8266 Send Data to Raspberry Pi Using MQTT Broker 2024, พฤศจิกายน
Anonim
Image
Image
ป้ายประกาศดิจิทัลที่ใช้ Raspberry Pi และ MQTT Protocol
ป้ายประกาศดิจิทัลที่ใช้ Raspberry Pi และ MQTT Protocol

ป้ายประกาศใช้ได้ทุกที่ เช่น สำนักงาน โรงเรียน โรงพยาบาล และโรงแรม สามารถใช้ซ้ำแล้วซ้ำอีกเพื่อแสดงประกาศสำคัญหรือโฆษณากิจกรรมหรือการประชุมที่จะเกิดขึ้น แต่ต้องพิมพ์ประกาศหรือโฆษณาบนกระดาษและปักหมุดบนกระดานประกาศ

ในคำแนะนำนี้ เรามาเรียนรู้การสร้างกระดานประกาศดิจิทัลด้วย Raspberry Pi เพื่อประหยัดกระดาษและผงหมึกจำนวนมาก!

ขั้นตอนที่ 1: กระดานประกาศดิจิทัลทำงานอย่างไร

กระดานประกาศดิจิทัลทำงานอย่างไร
กระดานประกาศดิจิทัลทำงานอย่างไร
  • Raspberry Pi เชื่อมต่อกับจอแสดงผล HDMI ซึ่งเป็นบอร์ดประกาศดิจิทัลของเรา
  • พีซีที่ใช้ Windows ใช้เพื่อเผยแพร่ประกาศบนกระดานประกาศดิจิทัลผ่านอินเทอร์เน็ต
  • ประกาศที่เผยแพร่โดย Windows PC จะได้รับจาก Digital Notice Board ผ่านนายหน้า CloudMQTT
  • การสื่อสารระหว่าง Windows PC และ Digital Notice Board ทำได้โดยโปรโตคอล MQTT

ขั้นตอนที่ 2: สิ่งที่จำเป็น:

  1. Raspberry Pi พร้อม Rasbian OS
  2. แสดงผลด้วยพอร์ต HDMI
  3. พีซีที่ใช้ Windows
  4. การเชื่อมต่ออินเทอร์เน็ต
  5. บัญชี CloudMQTT

ขั้นตอนที่ 3: การออกแบบ GUI สำหรับแสดงประกาศ:

Image
Image
การออกแบบ GUI สำหรับแสดงประกาศ
การออกแบบ GUI สำหรับแสดงประกาศ

เราต้องออกแบบ GUI 2 อัน อันหนึ่งสำหรับ Raspberry Pi เพื่อแสดงประกาศบนจอแสดงผล HDMI และอีกอันสำหรับ Windows PC เพื่อเผยแพร่ประกาศไปยัง Raspberry Pi ผ่านนายหน้า CloudMQTT

การออกแบบ GUI ขึ้นอยู่กับสถานที่ที่คุณจะวาง Digital Notice Board ตัวอย่างเช่น ให้ฉันออกแบบ GUI สำหรับ Instructables Office เพื่อแสดงกิจกรรมและการประชุมที่จะเกิดขึ้นเพื่อให้พนักงานสามารถอัปเดตข้อมูลล่าสุดได้

การออกแบบ GUI ใน Windows PC เป็นเรื่องง่าย ดังนั้นให้เราออกแบบ GUI ของ Digital Notice Board ใน Windows PC และคัดลอกโค้ดไปยัง Raspberry Pi

ซอฟต์แวร์ที่จำเป็น:

Anaconda (ซึ่งรวมถึง python 2.7, Qt Designer package และ Spyder IDE)

Qt Designer เป็นเครื่องมือที่ใช้ในการออกแบบ GUI ผลลัพธ์ของ Qt Designer จะเป็นไฟล์.ui ภายหลังสามารถแปลงเป็น.py เพื่อดำเนินการต่อไปได้

เกิดอะไรขึ้นในวิดีโอ:

  • ดาวน์โหลด Anaconda Windows Installer สำหรับ python 2.7 และติดตั้งใน Windows PC (ขั้นตอนการติดตั้งปกติ)
  • หลังการติดตั้ง คุณสามารถค้นหาเครื่องมือ Qt Designer ได้ใน "installation_directory\Library\bin\designer.exe" (สำหรับฉันคือ "C:\Anaconda2\Library\bin\designer.exe")
  • สร้างทางลัดสำหรับ "designer.exe" และวางไว้บนเดสก์ท็อป
  • เปิด "designer.exe"
  • สร้างหน้าต่างหลักใหม่
  • เลือกและวางเค้าโครงและมุมมองที่ต้องการ (มุมมองข้อความ มุมมองป้ายกำกับ ฯลฯ)
  • บันทึกเป็นไฟล์ Rpi_UI.ui
  • หากต้องการแปลงเป็นไฟล์.py ให้เปิด cmd prompt ในโฟลเดอร์ปัจจุบันที่มีไฟล์ Rpi_UI.ui อยู่ และพิมพ์คำสั่งต่อไปนี้

Installation_directory\Library\bin\pyuic5.bat -x RPi_UI.ui -o RPi_UI.py

สำหรับฉันมันคือ

C:\Anaconda2\Library\bin\pyuic5.bat -x RPi_UI.ui -o RPi_UI.py

คำสั่งนี้จะแปลงไฟล์ Rpi_UI.ui เป็นไฟล์ Rpi_UI.py และวางไว้ในไดเร็กทอรีเดียวกัน

  • เปิดไฟล์ Rpi_UI.py ด้วย Spyder IDE ซึ่งรวมอยู่ใน Anaconda
  • การเรียกใช้สคริปต์จะแสดง GUI ที่เราออกแบบไว้ก่อนหน้านี้

ต่อไป ให้เราตั้งค่าบัญชี CloudMQTT

ขั้นตอนที่ 4: ตั้งค่าบัญชี CloudMQTT:

Image
Image
  • เยี่ยมชมลิงค์นี้
  • สร้างบัญชีด้วยอีเมลและเข้าสู่ระบบบัญชีของคุณ
  • สร้างอินสแตนซ์ใหม่ (ฉันตั้งชื่อเป็น TEST_1)
  • เปิดข้อมูลอินสแตนซ์
  • จดบันทึกเซิร์ฟเวอร์ ผู้ใช้ รหัสผ่าน และพอร์ต
  • อ้างถึงเอกสารประกอบ CloudMQTT Python และบันทึกสคริปต์เป็น CloudMQTT.py
  • โค้ดตัวอย่างในเอกสารประกอบต้องใช้ไลบรารี paho ติดตั้ง Paho Python Client โดยใช้เครื่องมือ pip เปิดคำสั่ง cmd ในฐานะผู้ดูแลระบบ และป้อนคำสั่งต่อไปนี้

pip ติดตั้ง paho-mqtt

ขั้นตอนที่ 5: คำอธิบายรหัสสุดท้ายของ Raspberry Pi:

ที่นี่ ให้ฉันอธิบายวิธีที่ฉันรวมไฟล์ RPi_UI.py กับ CloudMQTT.py และบันทึกเป็น RPi_UI.py

นำเข้าไลบรารี หากไม่ได้ติดตั้งไว้ ให้ติดตั้ง

นำเข้า paho.mqtt.client เป็น mqtt

นำเข้า urlparse จาก PyQt5 นำเข้า QtGui, QtWidgets, QtCore จาก PyQt5. QtCore นำเข้า QTimer, QTime จากการนำเข้าเธรด การนำเข้าเธรด sys การนำเข้าอีกครั้งจาก google_drive_downloader นำเข้า GoogleDriveDownloader เป็น gdd นำเข้าระบบปฏิบัติการ

ในการติดตั้ง googledrivedownloader ให้ใช้คำสั่ง

pip ติดตั้ง googledrivedownloader

ตัวแปรเริ่มต้น

ไอคอน = "[email protected]"

ContestImg = "black" meeting1 = "Meeting1:" สถานที่1 = "เวลาและสถานที่1" meeting2 = "Meeting2:" สถานที่2 = "เวลาและสถานที่2" meeting3 = "Meeting3:" สถานที่ 3 = "เวลาและสถานที่3"

ตามด้วยคลาส Ui_MainWindow

คลาส Ui_MainWindow (วัตถุ):

def setupUi(ตัวเอง, MainWindow): … def retranslateUi(ตัวเอง, MainWindow): … def _update(self): …

บรรทัดต่อไปนี้ในฟังก์ชัน setupUi จะอัปเดต GUI ทุกๆ 3 วินาทีโดยเรียกใช้ฟังก์ชัน _update

self.retranslateUi (หน้าต่างหลัก)

QtCore. QMetaObject.connectSlotsByName (หน้าต่างหลัก) self.timer = QTimer () self.timer.timeout.connect (self._update) self.timer.start (3000)

ฟังก์ชัน on_message จะรอข้อความจากนายหน้า เมื่อได้รับข้อความแล้ว ระบบจะดาวน์โหลดรูปภาพจาก Google ไดรฟ์โดยใช้ ID ลิงก์ที่แชร์ได้ของ Google ไดรฟ์ และยังเปลี่ยนค่าของตัวแปรส่วนกลางด้วย

def on_message(ไคลเอนต์, obj, msg):

print(str(msg.payload)) if(str(msg.payload)): NoticeReceived = str(msg.payload) ผลลัพธ์ = re.search('%1(.*)%2(.*)%3(. *)%4(.*)%5(.*)%6(.*)%7(.*)%8', แจ้งรับแล้ว) การแข่งขันระดับโลกImg global meeting1 สถานที่จัดงานระดับโลก1 การประชุมระดับโลก2 สถานที่จัดงานทั่วโลก2 การประชุมระดับโลก3 สถานที่จัดงานทั่วโลก3 fileId = "" +result.group(1)+"" path = "/home/pi/Desktop/Instructables/RPi UI/ContestImages/"+result.group(1)+".jpg" gdd.download_file_from_google_drive(file_id = fileId, dest_path=) เส้นทาง) ContestImg = result.group(1) meeting1 = result.group(2) สถานที่1 = result.group(3) meeting2 = result.group(4) สถานที่2 = result.group(5) ประชุม3 = result.group(6) สถานที่ 3 = ผลกลุ่ม (7)

รหัสประกอบด้วย 2 ลูปไม่สิ้นสุด

rc = mqttc.loop()

และ

sys.exit(app.exec_())

ในการเรียกใช้ลูปเหล่านี้พร้อมกัน ฉันได้ใช้แนวคิดเธรด

def sqImport(tId): if tId == 0: while 1: rc = 0 while rc == 0: rc = mqttc.loop() print("rc: " + str(rc))if tId == 1: while 1: app = QtWidgets. QApplication(sys.argv) MainWindow = QtWidgets. QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_()) threadA = Thread(เป้าหมาย) = sqImport, args=[0]) threadB = Thread(เป้าหมาย = sqImport, args=[1]) threadA.start() threadB.start() threadA.join() threadB.join()

เยี่ยมมาก เราตั้งค่า Raspberry Pi เสร็จแล้ว ต่อไปให้เราออกแบบ GUI สำหรับ Windows PC เพื่อเผยแพร่ข้อความไปยัง Raspberry Pi

ขั้นตอนที่ 6: Windows PC GUI:

Windows PC GUI
Windows PC GUI
  • ออกแบบ GUI สำหรับ windows และบันทึกเป็น Windows_UI.ui
  • แปลงเป็นไฟล์หลาม
  • รวมกับไฟล์ CloudMQTT.py และบันทึกเป็น Windows_UI.py
  • การทำงานของไฟล์ Windows_UI.py นั้นคล้ายกับไฟล์ RPi_UI.py ข้อแตกต่างเพียงอย่างเดียวคือไฟล์ Windows_UI.py เผยแพร่ข้อความในขณะที่ RPi_UI.py ได้รับข้อความ

ขั้นตอนที่ 7: อธิบายรหัสสุดท้ายของ Windows PC:

  • ไฟล์ Windows_UI.py มีคลาสและฟังก์ชันทั้งหมดของ RPi_UI.ui ยกเว้นบางส่วน
  • แทนที่จะใช้ฟังก์ชัน on_message มีฟังก์ชัน on_publish เพื่อเผยแพร่ข้อความ
  • โค้ดต่อไปนี้ภายในฟังก์ชัน retranslateUi จะเรียกใช้ฟังก์ชันเผยแพร่เมื่อคลิกปุ่ม PUBLISH

self.pushButton.clicked.connect (ตนเองเผยแพร่)

  • ฟังก์ชันเผยแพร่เชื่อมต่อรหัสลิงก์ที่แชร์ได้ของ Google ไดรฟ์และข้อมูลการประชุม และเผยแพร่ภายใต้หัวข้อ "ประกาศ"
  • Raspberry Pi จะได้รับข้อความนี้

ขั้นตอนที่ 8: ตั้งค่ากระดานประกาศดิจิทัล:

  • เชื่อมต่อ Raspberry Pi กับจอแสดงผล HDMI ฉันใช้ Sony TV เป็นจอแสดงผล Digital Notice Board
  • เรียกใช้ไฟล์ RPi_UI.py ใน Raspberry Pi
  • เรียกใช้ไฟล์ Windows_UI.py ใน Windows PC
  • ป้อนรหัสลิงก์ Google ไดรฟ์ของภาพการแข่งขันและประกาศการประชุม
  • คลิกปุ่มเผยแพร่
  • ตอนนี้คุณสามารถดู Digital Notice Board ที่อัปเดตได้ภายในไม่กี่วินาที

คำแนะนำ:

  • คุณสามารถสร้างบอร์ดประกาศดิจิทัลได้ตามจำนวนที่ต้องการ และบอร์ดสามารถสมัครรับข้อมูลในหัวข้อต่างๆ ได้
  • ในการทำให้ไฟล์ Windows_UI.py พกพาได้ คุณสามารถแปลงไฟล์เป็นไฟล์สั่งการได้โดยใช้ pyinstaller เพื่อให้คุณสามารถเรียกใช้ไฟล์ปฏิบัติการในพีซี Windows เครื่องใดก็ได้โดยไม่ต้องติดตั้งไลบรารีที่จำเป็นในพีซี

ขอขอบคุณ

ซาบาริ คันนัน มู

แนะนำ: