Inhoudsopgave:

Digitaal prikbord met Raspberry Pi en MQTT-protocol - Ajarnpa
Digitaal prikbord met Raspberry Pi en MQTT-protocol - Ajarnpa

Video: Digitaal prikbord met Raspberry Pi en MQTT-protocol - Ajarnpa

Video: Digitaal prikbord met Raspberry Pi en MQTT-protocol - Ajarnpa
Video: Intro to Home Display Boards - Dakboard and MagicMirror 2024, November
Anonim
Image
Image
Digitaal prikbord met Raspberry Pi en MQTT-protocol
Digitaal prikbord met Raspberry Pi en MQTT-protocol

Prikborden worden bijna overal gebruikt, zoals op kantoren, scholen, ziekenhuizen en hotels. Ze kunnen keer op keer worden gebruikt om belangrijke mededelingen weer te geven of om aanstaande evenementen of vergaderingen te adverteren. Maar de aankondiging of advertenties moeten op papier worden afgedrukt en op de mededelingenborden worden vastgemaakt.

Laten we in deze Instructable leren om ons digitale prikbord met Raspberry Pi te bouwen om veel papier en toner te besparen!

Stap 1: Hoe werkt het digitale prikbord?

Hoe werkt het digitale prikbord?
Hoe werkt het digitale prikbord?
  • Een Raspberry Pi aangesloten op een HDMI-scherm, ons digitale mededelingenbord.
  • Een Windows-pc wordt gebruikt om het bericht via internet op het digitale mededelingenbord te publiceren.
  • Het bericht dat door de Windows-pc wordt gepubliceerd, wordt ontvangen door het digitale mededelingenbord via een CloudMQTT-makelaar.
  • De communicatie tussen de Windows-pc en het digitale mededelingenbord wordt bereikt door het MQTT-protocol.

Stap 2: Dingen die nodig zijn:

  1. Raspberry Pi met Rasbian OS
  2. Scherm met HDMI-poort
  3. Windows-pc
  4. Internetverbinding
  5. CloudMQTT-account

Stap 3: GUI-ontwerp voor het weergeven van kennisgevingen:

Image
Image
GUI-ontwerp voor het weergeven van kennisgevingen
GUI-ontwerp voor het weergeven van kennisgevingen

We moeten 2 GUI's ontwerpen, een voor Raspberry Pi om de melding op het HDMI-display weer te geven en een andere voor Windows-pc om de melding naar Raspberry Pi te publiceren via CloudMQTT-broker.

Het GUI-ontwerp hangt af van de plaats waar u het digitale mededelingenbord gaat plaatsen. Laat me bijvoorbeeld een GUI ontwerpen voor Instructables Office om aanstaande evenementen en vergaderingen weer te geven, zodat de werknemers kunnen worden bijgewerkt met de laatste informatie.

Het is gemakkelijk om een GUI te ontwerpen op een Windows-pc, dus laten we de GUI van het digitale mededelingenbord in de Windows-pc ontwerpen en de code naar de Raspberry Pi kopiëren.

Benodigde software:

Anaconda (inclusief python 2.7, Qt Designer-pakket en Spyder IDE).

Qt Designer is de tool die wordt gebruikt om GUI's te ontwerpen. De uitvoer van de Qt Designer zal een.ui-bestand zijn, later kan het worden geconverteerd naar.py voor verder proces.

Wat gebeurt er in de video?:

  • Download Anaconda Windows Installer voor python 2.7 en installeer het op een Windows-pc (normaal installatieproces).
  • Na de installatie kunt u de Qt Designer-tool vinden in "installation_directory\Library\bin\designer.exe" (voor mij is het "C:\Anaconda2\Library\bin\designer.exe")
  • Maak een snelkoppeling voor "designer.exe" en plaats deze op het bureaublad.
  • open "designer.exe".
  • Maak een nieuw hoofdvenster.
  • Kies en plaats de lay-outs en de vereiste weergaven (tekstweergave, labelweergave, enz.).
  • Opslaan als Rpi_UI.ui-bestand.
  • Om het naar een.py-bestand te converteren, opent u de cmd-prompt in de huidige map waarin het Rpi_UI.ui-bestand bestaat en typt u de volgende opdracht

installatiemap\Bibliotheek\bin\pyuic5.bat -x RPi_UI.ui -o RPi_UI.py

voor mij is het, C:\Anaconda2\Bibliotheek\bin\pyuic5.bat -x RPi_UI.ui -o RPi_UI.py

deze opdracht converteert het bestand Rpi_UI.ui naar het bestand Rpi_UI.py en plaatst het in dezelfde map.

  • Open het Rpi_UI.py-bestand met Spyder IDE dat is opgenomen in Anaconda.
  • Als u het script uitvoert, wordt de GUI weergegeven die we eerder hebben ontworpen.

Laten we vervolgens het CloudMQTT-account instellen.

Stap 4: Stel een CloudMQTT-account in:

Image
Image
  • Bezoek deze link.
  • Maak een account aan met E-mail en log in op uw account.
  • Maak een nieuwe instantie (ik heb deze TEST_1 genoemd).
  • Open de instantie-info.
  • Noteer de server, gebruiker, wachtwoord en poort.
  • Raadpleeg CloudMQTT Python-documentatie en sla het script op als CloudMQTT.py.
  • De voorbeeldcode in de documentatie vereist paho-bibliotheek, installeer Paho Python Client met behulp van pip-tool, open cmd-prompt als beheerder en voer de volgende opdracht in.

pip installeer paho-mqtt

Stap 5: Raspberry Pi definitieve code uitgelegd:

Laat me hier uitleggen hoe ik het RPi_UI.py-bestand combineerde met de CloudMQTT.py en het opsloeg als RPi_UI.py.

Importeer bibliotheken, als het niet is geïnstalleerd, installeer het dan gewoon

importeer paho.mqtt.client als mqtt

import urlparse uit PyQt5 importeer QtGui, QtWidgets, QtCore uit PyQt5. QtCore importeer QTimer, QTime uit threading import Thread import sys import re uit google_drive_downloader importeer GoogleDriveDownloader als gdd import os

Gebruik de opdracht om googledrivedownloader te installeren:

pip installeer googledrivedownloader

variabelen initialiseren,

icon = "[email protected]"

contestImg = "black" meeting1 = "Meeting1:" venue1 = "Tijd en locatie1." meeting2 = "Meeting2:" venue2 = "Tijd en locatie2." meeting3 = "Meeting3:" venue3 = "Tijd en locatie3."

Gevolgd door de klasse Ui_MainWindow

klasse Ui_MainWindow(object):

def setupUi(self, MainWindow): … def retranslateUi(self, MainWindow): … def _update(self): …

De volgende regels in de functie setupUi updaten de GUI elke 3 seconden door de _update functie aan te roepen

self.retranslateUi(Hoofdvenster)

QtCore. QMetaObject.connectSlotsByName(MainWindow) self.timer = QTimer() self.timer.timeout.connect(self._update) self.timer.start(3000)

De functie on_message wacht op het bericht van de broker, zodra het bericht is ontvangen, downloadt het de afbeelding van de Google Drive met behulp van de Google Drive deelbare link-ID en verandert ook de waarden van de globale variabelen

def on_message(client, obj, msg):

print(str(msg.payload)) if(str(msg.payload)): noticeReceived = str(msg.payload) result = re.search('%1(.*)%2(.*)%3(. *)%4(.*)%5(.*)%6(.*)%7(.*)%8', berichtOntvangen) wereldwijde wedstrijdImg wereldwijde bijeenkomst1 wereldwijde locatie1 wereldwijde bijeenkomst2 wereldwijde locatie2 wereldwijde bijeenkomst3 wereldwijde locatie3 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= pad) contestImg = resultaat.groep(1) meeting1 = resultaat.groep(2) locatie1 = resultaat.groep(3) meeting2 = resultaat.groep(4) venue2 = resultaat.groep(5) meeting3 = resultaat.groep(6) locatie3 = resultaat.groep(7)

De code bestaat uit 2 oneindige lussen,

rc = mqttc.loop()

en

sys.exit(app.exec_())

Om deze lussen tegelijkertijd uit te voeren, heb ik het concept Threading gebruikt

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(target = sqImport, args=[1]) threadA.start() threadB.start() threadA.join() threadB.join()

Cool, we hebben de Raspberry Pi-setup voltooid, laten we vervolgens de GUI voor Windows-pc ontwerpen om het bericht naar de Raspberry Pi te publiceren.

Stap 6: Windows PC GUI:

Windows-pc-GUI
Windows-pc-GUI
  • Ontwerp een GUI voor Windows en sla deze op als Windows_UI.ui.
  • Converteer het naar een python-bestand.
  • Combineer het met het CloudMQTT.py-bestand en sla het op als Windows_UI.py.
  • De functie van het Windows_UI.py-bestand is vergelijkbaar met het RPi_UI.py-bestand, het enige verschil is dat het Windows_UI.py-bestand het bericht publiceert terwijl het RPi_UI.py het bericht ontvangt.

Stap 7: Windows PC definitieve code uitgelegd:

  • Het bestand Windows_UI.py heeft alle klassen en functies van RPi_UI.ui op enkele na.
  • In plaats van de functie on_message heeft het een functie on_publish om het bericht te publiceren.
  • De volgende code in de functie retranslateUi roept de functie publiceren aan zodra op de knop PUBLICEREN is geklikt.

self.pushButton.clicked.connect(self.publish)

  • De publicatiefunctie voegt de deelbare link-ID van Google Drive en de informatie over de vergadering samen en publiceert deze onder het onderwerp "kennisgeving".
  • Dit bericht wordt ontvangen door de Raspberry Pi.

Stap 8: Stel het digitale prikbord in:

  • Sluit de Raspberry Pi aan op een HDMI-scherm, ik heb mijn Sony TV gebruikt als het digitale mededelingenbord.
  • Voer het RPi_UI.py-bestand uit in de Raspberry Pi.
  • Voer het bestand Windows_UI.py uit op de Windows-pc.
  • Voer de Google Drive-link-ID van een wedstrijdafbeelding en de aankondiging van de vergadering in.
  • Klik op de PUBLISH-knop.
  • Nu kunt u binnen enkele seconden het bijgewerkte digitale mededelingenbord zien.

tips:

  • U kunt het gewenste aantal Digitale Prikborden aanmaken en de Borden kunnen op verschillende Onderwerpen geabonneerd worden.
  • Om het bestand Windows_UI.py draagbaar te maken, kunt u het bestand converteren naar een uitvoerbaar bestand met behulp van pyinstaller, zodat u het uitvoerbare bestand op elke Windows-pc kunt uitvoeren zonder de vereiste bibliotheken op de pc te installeren.

Bedankt

SABARI KANNAN M

Aanbevolen: