INHOUDSOPGAWE:

Digitale kennisgewingbord met behulp van Raspberry Pi en MQTT -protokol: 8 stappe
Digitale kennisgewingbord met behulp van Raspberry Pi en MQTT -protokol: 8 stappe

Video: Digitale kennisgewingbord met behulp van Raspberry Pi en MQTT -protokol: 8 stappe

Video: Digitale kennisgewingbord met behulp van Raspberry Pi en MQTT -protokol: 8 stappe
Video: CS50 2013 - Week 10, continued 2024, November
Anonim
Image
Image
Digitale kennisgewingbord met behulp van Raspberry Pi en MQTT -protokol
Digitale kennisgewingbord met behulp van Raspberry Pi en MQTT -protokol

Kennisgewingborde word byna oral gebruik, soos kantoor, skole, hospitale en hotelle. Dit kan telkens gebruik word om belangrike kennisgewings te vertoon of om toekomstige geleenthede of vergaderings te adverteer. Maar die kennisgewing of advertensies moet op 'n papier gedruk word en op die kennisgewingborde vasgemaak word.

In hierdie instruksies, laat ons leer om ons digitale kennisgewingbord met Raspberry Pi te bou om baie papiere en toner te bespaar!

Stap 1: Hoe werk die digitale kennisgewingbord?

Hoe werk die digitale kennisgewingbord?
Hoe werk die digitale kennisgewingbord?
  • 'N Raspberry Pi wat gekoppel is aan 'n HDMI -skerm, wat ons digitale kennisgewingbord is.
  • 'N Windows -rekenaar word gebruik om die kennisgewing op die digitale kennisgewingbord via die internet te publiseer.
  • Die kennisgewing wat deur die Windows PC gepubliseer word, word deur die Digital Notice Board deur 'n CloudMQTT -makelaar ontvang.
  • Die kommunikasie tussen die Windows -rekenaar en die digitale kennisgewingbord word bereik deur die MQTT -protokol.

Stap 2: Vereiste dinge:

  1. Framboos Pi met Rasbian OS
  2. Vertoon met HDMI -poort
  3. Windows rekenaar
  4. Internet konneksie
  5. CloudMQTT -rekening

Stap 3: GUI -ontwerp om kennisgewings te vertoon:

Image
Image
GUI -ontwerp om kennisgewings te vertoon
GUI -ontwerp om kennisgewings te vertoon

Ons moet 2 GUI's ontwerp, een vir Raspberry Pi om die kennisgewing op die HDMI -skerm te vertoon en 'n ander vir Windows PC om die kennisgewing aan Raspberry Pi te publiseer via CloudMQTT -makelaar.

Die GUI -ontwerp hang af van die plek waar u die digitale kennisgewingbord gaan plaas. Laat ek byvoorbeeld 'n GUI vir Instructables Office ontwerp om komende geleenthede en vergaderings te vertoon sodat die werknemers opgedateer kan word met die nuutste inligting.

Dit is maklik om 'n GUI op 'n Windows -rekenaar te ontwerp, dus laat ons die GUI van die Digital Notice Board in die Windows PC ontwerp en die kode na die Raspberry Pi kopieer.

Sagteware benodig:

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

Qt Designer is die instrument wat gebruik word om GUI's te ontwerp. Die uitvoer van die Qt Designer sal 'n.ui -lêer wees, later kan dit omgeskakel word na.py vir verdere proses.

Wat gebeur in die video?:

  • Laai Anaconda Windows Installer vir python 2.7 af en installeer dit op 'n Windows -rekenaar (normale installasieproses).
  • Na die installasie kan u die Qt Designer -hulpmiddel vind in "installation_directory / Library / bin / designer.exe" (vir my is dit "C: / Anaconda2 / Library / bin / designer.exe")
  • Skep 'n kortpad vir "designer.exe" en plaas dit op die lessenaar.
  • maak "designer.exe" oop.
  • Skep 'n nuwe hoofvenster.
  • Kies en plaas die uitlegte en die vereiste aansigte (teksaansig, etiketweergawe, ens.).
  • Stoor as 'n Rpi_UI.ui -lêer.
  • Om dit in 'n.py -lêer te omskep, open cmd prompt in die huidige gids waar die Rpi_UI.ui lêer bestaan en tik die volgende opdrag

installation_directory / Library / bin / pyuic5.bat -x RPi_UI.ui -o RPi_UI.py

vir my is dit, C: / Anaconda2 / Library / bin / pyuic5.bat -x RPi_UI.ui -o RPi_UI.py

Hierdie opdrag sal die Rpi_UI.ui -lêer omskakel na die lêer RPI_UI.py en dit in dieselfde gids plaas.

  • Maak die Rpi_UI.py -lêer oop met Spyder IDE wat by Anaconda ingesluit is.
  • Die gebruik van die script sal die GUI wat ons vroeër ontwerp het, vertoon.

Laat ons dan die CloudMQTT -rekening opstel.

Stap 4: Stel 'n CloudMQTT -rekening op:

Image
Image
  • Besoek hierdie skakel.
  • Skep 'n rekening met e-pos en meld aan by u rekening.
  • Skep 'n nuwe instansie (ek noem dit TEST_1).
  • Maak die Instansie -inligting oop.
  • Let op die bediener, gebruiker, wagwoord en poort.
  • Verwys na CloudMQTT Python -dokumentasie en stoor die script as CloudMQTT.py.
  • Die voorbeeldkode in die dokumentasie vereis paho -biblioteek, installeer Paho Python -kliënt met behulp van pip -hulpmiddel, open cmd prompt as administrateur en voer die volgende opdrag in.

pip installeer paho-mqtt

Stap 5: Raspberry Pi Finale kode verduidelik:

Laat ek hier verduidelik hoe ek die RPi_UI.py -lêer met die CloudMQTT.py gekombineer en as RPi_UI.py gestoor het.

Voer biblioteke in, installeer dit as dit nie geïnstalleer is nie

voer paho.mqtt.client in as mqtt

invoer urlparse van PyQt5 invoer QtGui, QtWidgets, QtCore van PyQt5. QtCore invoer QTimer, QTime van threading invoer thread import sys import re from google_drive_downloader import GoogleDriveDownloader as gdd invoer os

Gebruik die opdrag om googledrivedownloader te installeer

pip installeer googledrivedownloader

Initialiseer veranderlikes,

icon = "[email protected]"

contestImg = "black" meeting1 = "Meeting1:" venue1 = "Tyd en plek1." meeting2 = "Meeting2:" venue2 = "Tyd en plek2." meeting3 = "Meeting3:" venue3 = "Tyd en plek3."

Gevolg deur die klas Ui_MainWindow

klas Ui_MainWindow (voorwerp):

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

Die volgende reëls in die funksie setupUi werk die GUI elke 3 sekondes by deur die _update -funksie te skakel

self.retranslateUi (MainWindow)

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

Die on_message -funksie wag op die boodskap van die makelaar, sodra die boodskap ontvang is, laai dit die prent van die Google Drive af met behulp van die skakel -ID van Google Drive en verander dit ook die waardes van die globale veranderlikes

def on_message (kliënt, 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 ', noticeReceived) globale wedstrydImg globale vergadering1 globale venue1 globale vergadering2 globale venue2 globale vergadering3 globale venue3 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 = result.group (1) meeting1 = result.group (2) venue1 = result.group (3) meeting2 = result.group (4) venue2 = result.group (5) meeting3 = result.group (6) venue3 = result.group (7)

Die kode bestaan uit 2 oneindige lusse,

rc = mqttc.loop ()

en

sys.exit (app.exec_ ())

Om hierdie lusse gelyktydig te laat loop, het ek die konsep Threading gebruik

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

Cool, ons het die opstelling van die Raspberry Pi voltooi, en laat ons dan 'n GUI ontwerp vir Windows PC om die boodskap aan die Raspberry Pi te publiseer.

Stap 6: Windows PC GUI:

Windows PC GUI
Windows PC GUI
  • Ontwerp 'n GUI vir Windows en stoor dit as Windows_UI.ui.
  • Skakel dit om in 'n python -lêer.
  • Kombineer dit met die CloudMQTT.py -lêer en stoor dit as Windows_UI.py.
  • Die funksie van die Windows_UI.py -lêer is soortgelyk aan die RPi_UI.py -lêer; die enigste verskil is dat die Windows_UI.py -lêer die boodskap publiseer, terwyl die RPi_UI.py die boodskap ontvang.

Stap 7: Finale kode van Windows PC verduidelik:

  • Die Windows_UI.py -lêer bevat alle klasse en funksies van RPi_UI.ui, behalwe 'n paar.
  • In plaas van die on_message -funksie, het dit 'n on_publish -funksie om die boodskap te publiseer.
  • Die volgende kode binne die retranslateUi -funksie noem die publiseerfunksie sodra op die PUBLISH -knoppie geklik word.

self.pushButton.clicked.connect (self.publiseer)

  • Die publiseerfunksie verbind die skakel -ID met Google Drive en die vergaderingsinligting aanmekaar en publiseer dit onder die onderwerp "kennisgewing".
  • Hierdie boodskap sal deur die Raspberry Pi ontvang word.

Stap 8: Stel die digitale kennisgewingbord op:

  • Koppel die Raspberry Pi aan 'n HDMI -skerm, ek het my Sony TV gebruik as 'n digitale kennisgewingbord.
  • Begin die RPi_UI.py -lêer in die Raspberry Pi.
  • Begin die Windows_UI.py -lêer op die Windows -rekenaar.
  • Voer die Google Drive -skakel -ID van 'n wedstrydbeeld en die aankondiging van die vergadering in.
  • Klik op die PUBLISH -knoppie.
  • Nou kan u die opgedateerde digitale kennisgewingbord binne 'n paar sekondes sien.

Wenke:

  • U kan die gewenste aantal digitale kennisgewingborde skep, en die borde kan op verskillende onderwerpe ingeteken word.
  • Om die Windows_UI.py -lêer draagbaar te maak, kan u die lêer omskep in 'n uitvoerbare lêer met behulp van pyinstaller, sodat u die uitvoerbare lêer op enige Windows -rekenaar kan laat loop sonder om die vereiste biblioteke op die rekenaar te installeer.

Dankie

SABARI KANNAN M

Aanbeveel: