Zum Hauptinhalt springen

Barcodes kontinuierlich lesen

Was dieses Beispiel zeigt​

Das Beispiel schaltet den Scanner in den kontinuierlichen Modus, in dem er selbstständig liest, ohne Auslöser-Taste und ohne Aufruf von startScan(). Halten Sie ihn auf einen Code, und der Code wird in der Shell ausgegeben. Das Beispiel stellt ein Wiederholungsintervall von 0,5 s für denselben Code ein.

Verbinden Sie Pin 5 (TX) des Controllers mit RX des Scanners und Pin 4 (RX) mit TX des Scanners, dazu 3V3 und GND, oder passen Sie tx und rx an Ihre Verdrahtung an. Schalten Sie den Scanner zuerst auf UART um, indem Sie den Konfigurations-Barcode POR232 scannen.

Der Beispielcode​

from machine import UART
from de2120 import DE2120
import time

# Adjust tx and rx to match the pins you have wired on your board.
scanner = DE2120(tx=5, rx=4)

if not scanner.begin():
print("DE2120 not detected. Check wiring.")
raise SystemExit

# Enable continuous read with a 0.5 s repeat interval for the same barcode
scanner.enableContinuousRead(repeat_interval=2)

print("DE2120 in continuous read mode. Point at a barcode.")

while True:
barcode = scanner.readBarcode()
if barcode:
print("Scanned:", barcode)
time.sleep_ms(50)

🔗Vollständiges Beispiel öffnen

Examples/de2120-continuousRead.py im Commit 848e03e

→

Erwartetes Ergebnis:

ShellMicroPython
DE2120 in continuous read mode. Point at a barcode.

Jeder vom Scanner gelesene Code wird dann als Scanned: gefolgt vom Inhalt des Codes ausgegeben. Wenn der Scanner nicht antwortet, gibt das Beispiel DE2120 not detected. Check wiring. aus und hält an.

Verwendete Funktionen​

DE2120(uart=None, tx=None, rx=None, uart_id=1)returns DE2120

Erstellt das Scanner-Objekt. Übergeben Sie einen selbst erstellten UART als uart, oder übergeben Sie die Pin-Nummern tx und rx, und das Modul erstellt darauf UART(uart_id) mit 9600 Baud. Wird keines von beiden übergeben, löst es einen ValueError aus.

ReturnsDas Scanner-Objekt.

Parameter

TypNameBeschreibung
UARTuartEin fertiges machine.UART-Objekt. Optional.
inttxDer sendende Pin des Controllers, verbunden mit RX des Scanners. Das Beispiel verwendet 5.
intrxDer empfangende Pin des Controllers, verbunden mit TX des Scanners. Das Beispiel verwendet 4.
intuart_idWelcher UART erstellt wird, wenn Sie tx und rx übergeben. Standardmäßig 1.
scanner.begin()returns bool

Prüft, ob der Scanner antwortet. Es stellt den UART auf 9600 Baud ein und fragt die Firmware-Version ab. Bleibt eine Antwort aus, versucht es es erneut mit 115200 Baud, weist den Scanner an, auf 9600 Baud umzuschalten, und fragt erneut. Bei Erfolg leert es den Empfangspuffer.

ReturnsTrue, wenn der Scanner geantwortet hat, False, wenn nicht.

scanner.enableContinuousRead(repeat_interval=2)returns bool

Versetzt den Scanner in den kontinuierlichen Modus (SCMCNT), in dem er ohne Auslöser liest, und legt fest, wie oft derselbe Code erneut gesendet wird (CNTALW).

ReturnsTrue, wenn der Scanner die Intervalleinstellung bestätigt hat; False bei einem Wert außerhalb von 0 bis 3.

Parameter

TypNameBeschreibung
intrepeat_intervalFür denselben Code: 0 einmalige Ausgabe, 1 keine Verzögerung, 2 alle 0,5 s, 3 alle 1 s. Standardmäßig 2; das Beispiel übergibt 2.
scanner.readBarcode()returns str or None

Sammelt die vom Scanner wartenden Bytes ein. Ein Scan endet mit einem Wagenrücklauf (Carriage Return); sobald einer eintrifft, gibt die Funktion den Code ohne diesen zurück. Rufen Sie sie wiederholt in einer Schleife auf. Ein einzelner Code umfasst höchstens 256 Bytes.

ReturnsDer gescannte Code oder None, wenn noch kein vollständiger Scan eingetroffen ist.

Zusammenfassung​

Nachdem begin() den Scanner gefunden hat, ändert ein einziger Aufruf von enableContinuousRead() dessen Lesemodus. Von da an sendet der Scanner Codes selbstständig, und die Schleife sammelt sie nur noch alle 50 ms mit readBarcode() ein.

Um zur Auslöser-Taste zurückzukehren, rufen Sie disableContinuousRead() auf, wodurch der Scanner wieder in den manuellen Modus versetzt wird.