Die Kundenanzeige wurde angezeigt. Es wurde interessant zu versuchen, es als Informationstafel zu verwenden, um Informationen über den aktuellen Tag, die Uhrzeit bis zum Ende des Arbeitstages / der Woche, Wetterinformationen und Wechselkurse anzuzeigen.
Gleichzeitig wollte ich keine ressourcenintensiven Anwendungen und meinen PC verwenden. Er blieb bei einem Haufen Mini-PC Raspberry + Linux + Customer Display stehen.


Erforderliche Kommentare
Ich denke in diesem Artikel nicht daran, Linux OS auf einem Raspberry-Gerät zu installieren und zu konfigurieren.
Zum Bearbeiten von Text unter Linux habe ich die Editoren nano und mcedit verwendet.
Um über die Windows-Umgebung auf Mini-PCs mit Linux-Betriebssystem zuzugreifen, habe ich Clients für den Remotezugriff über das SSH-Protokoll KiTTY / PuTTY verwendet.
Um Dateien zwischen Windows und Linux zu übertragen, habe ich WinSCP verwendet.
Bash - Shell (Shell).
Bash ist eine Abkürzung für "Bourne-Again Shell" ("wiederbelebte" Shell). Schlüsselwörter, Syntax und andere grundlegende Funktionen der Sprache wurden von einer anderen sh-Shell (kurz für shell) entlehnt.
Bash ist auch eine leistungsstarke Programmiersprache.
Ich beschäftige mich mit der Wartung von Softwareprodukten auf Basis von 1C und für mich war es eine Gelegenheit, mich selbst mit der Programmierung in der Linux-Umgebung vertraut zu machen.
Nach meinem besten Verständnis werde ich die Befehle erklären, die ausgeführt werden. Dies geschieht mit dem Ziel, ein großes Publikum zu erreichen.
Was hast du benutzt?
- Raspberry Pi 2 Model B v1.1 Single Board Computer mit installiertem Raspbian GNU / Linux 9.4 (Stretch).
- Kundenanzeige POSUA LPOS-VFD USB.
- Die Bash-Shell
1. Stufe. Schließen Sie die Kundenanzeige an und richten Sie sie ein
Nachdem Sie das Display (DP) des Kunden an den USB-Anschluss angeschlossen haben, werden die Parameter des angeschlossenen Geräts ermittelt. Führen Sie im Terminal den folgenden Befehl aus:
usb-devices
Holen Sie sich eine Liste der an Raspberry angeschlossenen USB-Geräte:
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev
Aus den vom Befehl empfangenen Informationen ergibt sich die Zeile Produkt = POSua LPOS-II-VFD USB CDC . Dies ist unsere Kundenanzeige. In diesem Abschnitt benötigen wir die Zeile Vendor = 0000 ProdID = 0131 Rev = 01.00. Nämlich Hersteller = 0000 prodID = 0131 . Das Gerät identifiziert sich also.
Für den korrekten Betrieb mit dem DP muss das USB-Betriebsmodul in den Systemkern geladen werden. Führen Sie den Befehl mit erhöhten Berechtigungen aus:
sudo modprobe usbserial vendor=0x0000 product=0x0131
modprobe
ist ein Programm zum Hinzufügen von Modulen zum Linux-Kernel. usbserial
ist ein Kernelmodul, das einen COM-Port auf USB-Geräten emuliert. 0x - bedeutet hexadezimales Format.
Da auf einem Linux-System ein USB-Gerät angeschlossen ist, empfängt es automatisch die ttyUSB0- Datei. Dies ist eine wichtige Funktion bei der Interaktion mit Geräten unter Linux - das Arbeiten mit dem Gerät als Datei. Gerätedateien werden im /dev
gespeichert.
Um korrekt mit DP zu arbeiten, stellen Sie die Datenübertragungsrate ein:
stty -F /dev/ttyUSB0 9600
stty
- Der Befehl legt die Terminal-Ein- / Ausgabeparameter für das Gerät fest. -F
ist das Gerät. In unserem Fall lautet die Anzeige des Käufers /dev/ttyUSB0
. Und für dieses Gerät ist eine Geschwindigkeit von 9600 Baud eingestellt.
Jetzt können Sie versuchen, eine Begrüßungsnachricht anzuzeigen (bisher auf Englisch):
echo "Hello!" > /dev/ttyUSB0
Wenn alles richtig gemacht wurde, erscheint unsere Meldung auf dem Bildschirm. Weitere Details zum Team unten.
2 Stufe. Programmierung
In der vorherigen Phase haben wir oben auf dem Begrüßungsbildschirm des Geräts eine Meldung in englischer Sprache angezeigt. Und es ist nicht sehr schön.
Führen Sie den folgenden Befehl aus, um den Bildschirm zu löschen:
echo -e -n "\x0c\x0b" > /dev/ttyUSB0
echo
- Terminal Ausgabebefehl. Die Option -e
- aktiviert die Unterstützung für die Ausgabe von Escape-Sequenzen, -n
- gibt an, dass keine Zeilenvorschübe ausgegeben werden müssen. Der Eintrag -en
ist zulässig.
Kombinationen von Zeichen, die aus einem Backslash \
gefolgt von einem Buchstaben oder einer Reihe von Zahlen bestehen, werden als Escape-Sequenzen bezeichnet.
0
- löscht den Bildschirm und bricht den 0b
- bewegt den Cursor an die Position ganz links oben. Symbol >
- Flusskontrolle (leitet die Ausgabe um). In diesem Fall die Datei / dev / ttyUSB0 unseres Geräts. Wenn Sie nur das echo "Hello!"
Anschließend wird der in Anführungszeichen angegebene Text im Terminalfenster angezeigt.
Übrigens könnte der Befehl, der die Geschwindigkeit für die Übertragung von Daten an das Gerät ändert, wie folgt geschrieben werden:
stty 9600 < /dev/ttyUSB0
Um Nachrichten auf Russisch anzuzeigen, gehen Sie wie folgt vor:
echo -n "!" | iconv -f UTF-8 -t CP866 > /dev/ttyUSB0
|
- Leitet die Ausgabe eines Befehls auf die Eingabe eines anderen (Pipeline) um. In unserem Fall ist die Zeichenfolge "Hallo!" Es wird nicht sofort in die Gerätedatei ausgegeben, sondern an das Dienstprogramm "Konvertierung" iconv übertragen. iconv
- konvertiert von einer Codierung in eine andere.
Mit der Bash-Shell können Sie nicht nur Befehle direkt im Terminal ausführen, sondern auch Skriptdateien schreiben.
Ein Skript ist eine Nur-Text-Datei mit einer Folge von ausgeführten Befehlen.
Damit bash versteht, dass es "sein" ist, wird #! / Bin / bash am Anfang der Datei angezeigt. Um das Skript direkt auszuführen, müssen Sie den folgenden Befehl ausführen:
sudo chmod u+x namefile.sh
Wobei namefile.sh die Skriptdatei ist. Die Erweiterung sh - bedeutet, dass es sich um eine Bash-Skriptdatei handelt. chmod
ist ein Programm zum Ändern der Zugriffsrechte auf Dateien und Verzeichnisse. u+x
- legt das Recht fest, die Datei für den aktuellen Benutzer auszuführen.
Wir werden das Problem mit zwei Skripten lösen. Das erste Skript ist das Hauptskript ( dispos.sh ). Es zeigt alle notwendigen Informationen auf dem Display des Käufers an. Das zweite Hilfsmittel ( parse.sh ) empfängt Wetterdaten, Währungsnotierungsdienste und schreibt Daten in Zwischendateien. Zwischendatendateien werden im ersten Skript verwendet.
Damit Skripte ausgeführt werden können, müssen Sie die folgenden Befehle ausführen:
sudo chmod +x dispos.sh sudo chmod +x parse.sh
Beachten Sie, dass nur +x
. Dies ist eine verkürzte Version von u+x
.
Skripte müssen in regelmäßigen Abständen ausgeführt werden. Verwenden Sie dazu den Standard-Crontab-Scheduler. Verwenden Sie zum Bearbeiten den folgenden Befehl:
crontab -e
Fügen Sie dem Scheduler zwei Zeilen hinzu:
*/20 * * * * /home/pi/parse.sh */1 * * * * /home/pi/dispos.sh
Das Skript parse.sh wird alle 20 Minuten und das Skript dispos.sh jede Minute ausgeführt.
Vor der ersten Anzeige des Kunden auf dem Display müssen Sie zuerst das Skript parse.sh ausführen, das die primären Wetter- und Währungsdaten empfängt.
./parse.sh
Als nächstes werde ich die vollständigen Skripte mit kurzen Kommentaren geben.
Beschreibung der Skriptdateien
Dispos.sh-Datei
Kommentare
Verwenden Sie den Befehl date, um das aktuelle Datum anzuzeigen. Beispiel
echo `date "+%d.%m.%Y %H:%M"`
Nach der Ausführung erhalten wir das Datum des Formulars: 20.05.2019 12:11.
Um die Zeit bis zum Ende des Tages zu berechnen, verwenden wir die zusätzliche Variable TIME_OF_WORKDAY
und setzen den Wert TIME_OF_WORKDAY="18:00:00"
. Dann berechnen wir die Stunden und Minuten bis zum Ende des Arbeitstages:
HOURS=$(( ( $(date +%s --date=$TIME_OF_WORKDAY) - $(date +%s) ) / 3600 )) MINUTES=$(( (( $(date +%s --date=$TIME_OF_WORKDAY) - $(date +%s) ) - $HOURS * 3600) / 60 ))
Das $
-Symbol zeigt an, dass es sich um eine Variable handelt.
Das #
-Symbol ist ein Kommentar.
date +%s
- Ermittelt das aktuelle Datum und die aktuelle Uhrzeit in Sekunden.
date +%s --date=$TIME_OF_WORKDAY
- date +%s --date=$TIME_OF_WORKDAY
die Zeit in Sekunden bis TIME_OF_WORKDAY ("18:00:00")
.
Berechnung der Zeit bis zum Ende der Arbeitswoche:
DAYS=$(( ($DAY_OF_WEEKEND-$(date +%s)) / (24*3600) )) HOURS=$(( (($DAY_OF_WEEKEND-$(date +%s)) - ($DAYS*24*3600)) / 3600 )) MINUTES=$(( (($DAY_OF_WEEKEND-$(date +%s)) - ($DAYS*24*3600) - ($HOURS*60*60)) / 60 ))
Wobei DAY_OF_WEEKEND=`date +"%s" --date="friday 17:00:00"`
die Zeit in Sekunden von der aktuellen Zeit bis Freitag 17:00:00 ist.
Ein Teil des Skripts wird mithilfe von Funktionen implementiert. Zum Beispiel
disp_clear()
ist der Name der Funktion. In {}
werden ausführbare Befehle angezeigt.
Die Variable DEV_DISPLAY
ist "global" und wird am Anfang des Skripts und entsprechend DEV_DISPLAY="/dev/ttyUSB0"
.
Lesen von Daten aus einer Datei, z. B. einer bestimmten Zeile (1):
LINE1=$(sed -n '1{p;q}' /tmp/weather.txt)
sed
ist ein Texteditor, der Bearbeitungsvorgänge für Informationen in einem Standardeingabestream oder einer Standarddatei ausführt. Die -n
zeigt die aktuell ausgewählte Zeile an. '1{p;q}'
- druckt 1 Zeile und wird beendet, ohne den Rest zu lesen ( p
- print, q
- output).
Eine weitere Option zum Lesen aus einer Datei (Zeile für Zeile):
while read line do BTC=${line:0:13} done </tmp/bitcoin.txt
Und so DISPLAY_LINE1=${LINE1:0:14}
LINE1
DISPLAY_LINE1=${LINE1:0:14}
aus der Zeile LINE1
einen Teilstring mit einer Länge von 14 Zeichen ab 0.
Die Zeichen werden durch die Kombination //
, z. B. DOLLAR//–/-
. Das Symbol "-" wird durch ein "-" ersetzt.
Datei parse.sh
Kommentare
Mit dem Befehl wget
können Sie Dateien, Seiten usw. aus dem Netzwerk herunterladen. Die Option -q
- zeigt ein Minimum an Informationen an, -O
- speichert in der angegebenen Datei.
Die folgenden Zeilen schreiben in die Datei:
echo "${WEATHER1}" > /tmp/weather.txt echo ${WEATHER2%.*} >> /tmp/weather.txt
Wenn außerdem die Umleitung des Ausgabestreams in die Datei >
, wird der Inhalt der Datei überschrieben, und mit >>
werden Daten an die Datei angehängt.
Ein Beispiel für die Verwendung eines Parameters in einer Funktion:
conv 6
Direkt in Funktion:
CURRENCY=$(sed -n '1!G;h;$p' /tmp/ex.xml | sed -n "${1}{p;q}")
Wobei {1}
der Parameter ist. Die Nummer 6 wird übergeben.
Beachten Sie die komplizierte Funktion zum Ersetzen von Teilzeichenfolgen, zum Beispiel:
LINEBTC//[^.^0-9]/
Nur das "." und alle Zahlen sind von 0 bis 9.
Nachwort
In bash sind fast alle Funktionen "gewöhnlicher" Programmiersprachen verfügbar. Und einige Teams überraschen im Vergleich zu Analoga in 1C mit ihrer Lakonizität und Funktionalität.
Derzeit ist die Anzeige des Kunden als Schwarzes Brett seit mehr als sechs Monaten stabil.
Liste der Ressourcen
- LPOS-VFD Käuferanzeigeseite
- Programmieren Sie Währungssymbole für die Kundenanzeige
- BASH-Grundlagen (Teil 1)
- BASH-Grundlagen (Teil 2)
- Wie benutzt man PuTTY?
- Linux Nano Text Editor für Anfänger
- Handbuch für WinSCP-Benutzer