Konfigurationsbefehl senden
Was dieses Beispiel zeigt
sendCommand() ändert jede Einstellung des Scanners, auch eine, für die das Modul keine eigene Funktion hat. Dieses Beispiel schaltet die Code ID ein und aus. Bei eingeschalteter Code ID setzt der Scanner jedem Code eine Symbologie-Kennung voran (zum Beispiel A für Code 128 und Q für QR Code), sodass Ihr Programm die Barcode-Typen unterscheiden kann.
Geben Sie y oder n in der REPL ein, um sie umzuschalten. Das Beispiel gibt weiterhin gescannte Codes aus, während es auf Ihre Eingabe wartet.
Verbinden Sie Pin 5 (TX) des Controllers mit RX des Scanners und Pin 4 (RX) mit TX des Scanners, dazu 3V3 und GND, oder ändern Sie tx und rx passend zu Ihrer Verdrahtung. Schalten Sie den Scanner zuerst auf UART um, indem Sie den Konfigurations-Barcode POR232 scannen.
Das Beispiel liest die Eingabe der REPL über uselect und sys ohne Blockieren; diese gehören nicht zum Modul de2120. Siehe die select-Dokumentation von MicroPython.
Der Beispielcode
import sys
import uselect
from de2120 import DE2120
import time
scanner = DE2120(tx=5, rx=4)
if not scanner.begin():
print("Scanner did not respond. Check wiring. Did you scan the POR232 barcode?")
raise SystemExit
print("Scanner online!")
# Set up non-blocking stdin so we can poll for barcodes while waiting for input
poll = uselect.poll()
poll.register(sys.stdin, uselect.POLLIN)
def stdin_available():
return bool(poll.poll(0))
def flush_stdin():
while stdin_available():
sys.stdin.read(1)
while True:
flush_stdin()
print()
print("Transmit Code ID with barcode? (y/n)")
print("-------------------------------------")
print("Type 'y' or 'n', or scan a barcode:")
while not stdin_available():
barcode = scanner.readBarcode()
if barcode:
print("...")
print("Code found:", barcode)
time.sleep_ms(200)
cmd = sys.stdin.read(1)
if cmd == "y":
print("Code ID will be displayed on scan")
scanner.sendCommand("CIDENA", "1")
elif cmd == "n":
print("Code ID will NOT be displayed on scan")
scanner.sendCommand("CIDENA", "0")
else:
print("Command not recognized")
🔗Vollständiges Beispiel öffnen
Examples/de2120-sendCommand.py im Commit 848e03e
Erwartetes Ergebnis:
Scanner online!
Transmit Code ID with barcode? (y/n)
-------------------------------------
Type 'y' or 'n', or scan a barcode:
Geben Sie y ein, und das Beispiel gibt Code ID will be displayed on scan aus; bei n gibt es Code ID will NOT be displayed on scan aus. Jede andere Taste gibt Command not recognized aus. Danach erscheint die Eingabeaufforderung erneut. Ein Code, der gescannt wird, während die Eingabeaufforderung wartet, wird als ... gefolgt von Code found: und dem Inhalt des Codes ausgegeben, bei eingeschalteter Code ID mit der Kennung vor dem Code.
Verwendete Funktionen
DE2120(uart=None, tx=None, rx=None, uart_id=1)returns DE2120Erstellt das Scanner-Objekt. Übergeben Sie eine selbst erstellte UART als uart, oder übergeben Sie die Pin-Nummern tx und rx, und das Modul erstellt darauf UART(uart_id) mit 9600 Baud. Ohne beides wird ein ValueError ausgelöst.
ReturnsDas Scanner-Objekt.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
UART | uart | Ein fertiges machine.UART-Objekt. Optional. |
int | tx | Der sendende Pin des Controllers, verbunden mit RX des Scanners. Das Beispiel verwendet 5. |
int | rx | Der empfangende Pin des Controllers, verbunden mit TX des Scanners. Das Beispiel verwendet 4. |
int | uart_id | Welche UART erstellt wird, wenn Sie tx und rx übergeben. Standardmäßig 1. |
scanner.begin()returns boolPrüft, ob der Scanner antwortet. Die UART wird auf 9600 Baud gesetzt und die Firmware-Version abgefragt. Bleibt eine Antwort aus, wird es mit 115200 Baud erneut versucht, dem Scanner der Wechsel auf 9600 Baud mitgeteilt und erneut gefragt. Bei Erfolg wird der Empfangspuffer geleert.
ReturnsTrue, wenn der Scanner geantwortet hat, False, wenn nicht.
scanner.readBarcode()returns str or NoneSammelt die vom Scanner wartenden Bytes. Ein Scan endet mit einem Wagenrücklauf (Carriage Return); sobald einer eintrifft, gibt die Funktion den Code ohne ihn zurück. Ein einzelner Code umfasst höchstens 256 Bytes.
ReturnsDer gescannte Code, oder None, wenn noch kein vollständiger Scan eingetroffen ist.
scanner.sendCommand(cmd, arg, max_wait_ms)returns boolSendet einen Konfigurationsbefehl an den Scanner, in dem Format, das er erwartet: ^_^, der Befehl, das Argument und ein abschließender Punkt (hier ^_^CIDENA1.). Danach wartet die Funktion auf die Antwort des Scanners: ein ACK-Byte (0x06) oder ein NACK-Byte (0x15).
ReturnsTrue bei ACK; False bei NACK oder wenn max_wait_ms ohne Antwort verstreicht.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
str | cmd | Der Befehl oder Eigenschaftsname, zum Beispiel CIDENA (Code ID übertragen). |
str | arg | Der Wert, zum Beispiel "1" zum Einschalten oder "0" zum Ausschalten. Standardmäßig leer. |
int | max_wait_ms | Wie lange auf eine Antwort gewartet wird, in Millisekunden. Standardmäßig 3000. |
Zusammenspiel
Bei jedem Durchlauf der Schleife werden zuerst alle noch wartenden Tasten geleert, dann wird die Eingabeaufforderung ausgegeben. Solange keine Taste eintrifft, ruft die Schleife alle 200 ms readBarcode() auf, sodass Scans weiterhin angezeigt werden. Aus einem y oder n wird sendCommand("CIDENA", "1") beziehungsweise sendCommand("CIDENA", "0").
Nach demselben Muster senden Sie jede andere Einstellung. Das Modul benennt die ihm bekannten am Anfang von de2120.py, zum Beispiel BEPSUC (Signalton bei erfolgreicher Dekodierung, standardmäßig 1) oder IMGREG (Lesebereich).