กระดานประกาศดิจิทัลที่ใช้ Raspberry Pi และโปรโตคอล MQTT: 8 ขั้นตอน
กระดานประกาศดิจิทัลที่ใช้ Raspberry Pi และโปรโตคอล MQTT: 8 ขั้นตอน
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 เครื่องใดก็ได้โดยไม่ต้องติดตั้งไลบรารีที่จำเป็นในพีซี

ขอขอบคุณ

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