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:
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 DE2120Erstellt 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
| 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 | Welcher UART erstellt wird, wenn Sie tx und rx übergeben. Standardmäßig 1. |
scanner.begin()returns boolPrü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 boolVersetzt 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
| Typ | Name | Beschreibung |
|---|---|---|
int | repeat_interval | Fü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 NoneSammelt 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.