Promjena postavki skenera iz REPL-a
Što prikazuje ovaj primjer
Izbornik u REPL-u upravlja skenerom dok radi: pokretanje i zaustavljanje skeniranja, uključivanje i isključivanje bijelog osvjetljenja i crvenog svjetla za ciljanje, odabir koliki se dio slike kamere pretražuje u potrazi za kodom, odabir ručnog, kontinuiranog čitanja ili čitanja uz detekciju pokreta te uključivanje i isključivanje skupina 1D i 2D simbologija. Kodovi koje skenirate dok bilo koji izbornik čeka i dalje se ispisuju.
Povežite pin 5 (TX) kontrolera na RX skenera i njegov pin 4 (RX) na TX skenera, uz 3V3 i GND, ili promijenite tx i rx prema svojem spoju. Prvo prebacite skener na UART skeniranjem konfiguracijskog barkoda POR232.
Primjer čita ulaz REPL-a bez blokiranja pomoću uselect i sys, koji nisu dio modula de2120; pogledajte dokumentaciju za select u MicroPythonu.
Kod primjera
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!")
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)
def wait_for_key():
"""Block until a key is typed, printing any scanned barcodes in the meantime."""
while not stdin_available():
barcode = scanner.readBarcode()
if barcode:
print("...")
print("Code found:", barcode)
time.sleep_ms(200)
return sys.stdin.read(1)
def menu_flashlight():
flush_stdin()
print()
print("-------------------------------------")
print("1) Enable Flashlight")
print("2) Disable Flashlight")
print("-------------------------------------")
print("Select an option number:")
cmd = wait_for_key()
if cmd == "1":
print("White scan light on")
scanner.lightOn()
elif cmd == "2":
print("White scan light off")
scanner.lightOff()
else:
print("Command not recognized")
def menu_reticle():
flush_stdin()
print()
print("-------------------------------------")
print("1) Enable Reticle")
print("2) Disable Reticle")
print("-------------------------------------")
print("Select an option number:")
cmd = wait_for_key()
if cmd == "1":
print("Red scan reticle on")
scanner.reticleOn()
elif cmd == "2":
print("Red scan reticle off")
scanner.reticleOff()
else:
print("Command not recognized")
def menu_reading_area():
flush_stdin()
print()
print("-------------------------------------")
print("1) Full Width (Default)")
print("2) Center 80%")
print("3) Center 60%")
print("4) Center 40%")
print("5) Center 20%")
print("-------------------------------------")
print("Select an option number:")
cmd = wait_for_key()
areas = {"1": 100, "2": 80, "3": 60, "4": 40, "5": 20}
if cmd in areas:
pct = areas[cmd]
print("Scanning {}% of frame".format(pct))
scanner.changeReadingArea(pct)
else:
print("Command not recognized")
def menu_reading_mode():
flush_stdin()
print()
print("-------------------------------------")
print("1) Manual Read Mode (Default)")
print("2) Continuous Read Mode")
print("3) Motion Sensor Mode")
print("-------------------------------------")
print("Select an option number:")
cmd = wait_for_key()
if cmd == "1":
print("Manual Trigger Mode enabled")
scanner.disableMotionSense()
elif cmd == "2":
print("Continuous Read Mode enabled")
scanner.enableContinuousRead()
elif cmd == "3":
print("Motion Trigger Mode enabled")
scanner.enableMotionSense()
else:
print("Command not recognized")
def menu_symbologies():
flush_stdin()
print()
print("-------------------------------------")
print("1) Enable All 1D Symbologies")
print("2) Disable All 1D Symbologies")
print("3) Enable All 2D Symbologies")
print("4) Disable All 2D Symbologies")
print("-------------------------------------")
print("Select an option number:")
cmd = wait_for_key()
if cmd == "1":
print("1D Symbologies enabled")
scanner.enableAll1D()
elif cmd == "2":
print("1D Symbologies disabled")
scanner.disableAll1D()
elif cmd == "3":
print("2D Symbologies enabled")
scanner.enableAll2D()
elif cmd == "4":
print("2D Symbologies disabled")
scanner.disableAll2D()
else:
print("Command not recognized")
while True:
flush_stdin()
print()
print("DE2120 Barcode Scanner")
print("-------------------------------------")
print("1) Start Scan")
print("2) Stop Scan")
print("3) Enable/Disable Flashlight")
print("4) Enable/Disable Aiming Reticle")
print("5) Set Reading Area")
print("6) Set Reading Mode")
print("7) Enable/Disable Symbologies")
print("-------------------------------------")
print("Select an option number:")
cmd = wait_for_key()
if cmd == "1":
scanner.startScan()
elif cmd == "2":
scanner.stopScan()
elif cmd == "3":
menu_flashlight()
elif cmd == "4":
menu_reticle()
elif cmd == "5":
menu_reading_area()
elif cmd == "6":
menu_reading_mode()
elif cmd == "7":
menu_symbologies()
else:
print("Command not recognized")
🔗Otvorite cijeli primjer
Examples/de2120-serialSettings.py u commitu 848e03e
Očekivani rezultat:
Scanner online!
DE2120 Barcode Scanner
-------------------------------------
1) Start Scan
2) Stop Scan
3) Enable/Disable Flashlight
4) Enable/Disable Aiming Reticle
5) Set Reading Area
6) Set Reading Mode
7) Enable/Disable Symbologies
-------------------------------------
Select an option number:
Upišite broj za odabir opcije. Opcije od 3 do 7 otvaraju drugi izbornik i nakon odabira ispisuju potvrdu, na primjer White scan light on, Scanning 60% of frame ili Continuous Read Mode enabled; opcije 1 i 2 djeluju odmah, bez poruke. Zatim se glavni izbornik ponovno prikaže. Kod skeniran dok bilo koji izbornik čeka ispisuje se kao ..., a nakon toga Code found: i sadržaj koda.
Korištene funkcije
DE2120(uart=None, tx=None, rx=None, uart_id=1)returns DE2120Stvara objekt skenera. Proslijedite UART koji ste sami napravili kao uart ili proslijedite brojeve pinova tx i rx pa modul na njima stvara UART(uart_id) brzinom 9600 baud. Bez ijednoga baca ValueError.
ReturnsObjekt skenera.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
UART | uart | Gotov objekt machine.UART. Neobavezno. |
int | tx | Pin kontrolera koji šalje, spojen na RX skenera. Primjer koristi 5. |
int | rx | Pin kontrolera koji prima, spojen na TX skenera. Primjer koristi 4. |
int | uart_id | Koji UART treba stvoriti kada proslijedite tx i rx. Zadano 1. |
scanner.begin()returns boolProvjerava odgovara li skener. Postavlja UART na 9600 baud i traži verziju firmvera. Ako nema odgovora, ponovno pokušava na 115200 baud, nalaže skeneru prelazak na 9600 baud i ponovno pita. Nakon uspjeha prazni prijemni međuspremnik.
ReturnsTrue kada je skener odgovorio, False kada nije.
scanner.readBarcode()returns str or NonePrikuplja bajtove koji čekaju od skenera. Skeniranje završava znakom carriage return; kada stigne, funkcija vraća kod bez njega. Pojedinačni kod sadrži najviše 256 bajtova.
ReturnsSkenirani kod ili None ako potpuno skeniranje još nije stiglo.
scanner.startScan()returns boolŠalje naredbu SCAN, koja pokreće jedno skeniranje u ručnom (okidačkom) načinu rada.
ReturnsTrue kada je skener potvrdio naredbu.
scanner.stopScan()returns boolŠalje naredbu SLEEP, koja zaustavlja skeniranje u tijeku.
ReturnsTrue kada je skener potvrdio naredbu.
scanner.lightOn()returns boolUključuje bijele LED diode za osvjetljenje (LAMENA1). Zadano su uključene.
ReturnsTrue kada je skener potvrdio naredbu.
scanner.lightOff()returns boolIsključuje bijele LED diode za osvjetljenje (LAMENA0).
ReturnsTrue kada je skener potvrdio naredbu.
scanner.reticleOn()returns boolUključuje crveno svjetlo za ciljanje (AIMENA1). Zadano je uključeno.
ReturnsTrue kada je skener potvrdio naredbu.
scanner.reticleOff()returns boolIsključuje crveno svjetlo za ciljanje (AIMENA0).
ReturnsTrue kada je skener potvrdio naredbu.
scanner.changeReadingArea(percent)returns boolPostavlja koliki dio slike kamere, mjereno od njezina središta, skener pretražuje u potrazi za kodom (IMGREG0 do IMGREG4). Zadano je cijela slika.
ReturnsTrue kada je skener potvrdio naredbu; False za vrijednost koju funkcija ne prihvaća.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | percent | 100 (puna širina), 80, 60, 40 ili 20. |
scanner.disableMotionSense()returns boolPostavlja skener u ručni (okidački) način rada, koji je zadan (SCMMAN). Primjer ga koristi za opciju Manual Read Mode.
ReturnsTrue kada je skener potvrdio naredbu.
scanner.enableContinuousRead(repeat_interval=2)returns boolPostavlja skener u kontinuirani način rada (SCMCNT), u kojem čita bez okidača, i određuje koliko se često isti kod šalje ponovno (CNTALW).
ReturnsTrue kada je skener potvrdio postavku intervala; False za vrijednost izvan raspona od 0 do 3.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | repeat_interval | Za isti kod: 0 izlaz jednom, 1 bez odgode, 2 svakih 0,5 s, 3 svake 1 s. Zadano 2, što primjer zadržava. |
scanner.enableMotionSense(sensitivity=50)returns boolPostavlja skener u način rada s detekcijom pokreta (SCMMDH) i određuje osjetljivost na pokret (MDTTHR).
ReturnsTrue kada je skener potvrdio postavku osjetljivosti; False za vrijednost koju funkcija ne prihvaća.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | sensitivity | 15 (najviša), 20, 30, 50 ili 100 (najniža). Zadano 50, što primjer zadržava. |
scanner.enableAll1D()returns boolUključuje dekodiranje svih 1D simbologija (ODCENA).
ReturnsTrue kada je skener potvrdio naredbu.
scanner.disableAll1D()returns boolIsključuje dekodiranje svih 1D simbologija (ODCDIS).
ReturnsTrue kada je skener potvrdio naredbu.
scanner.enableAll2D()returns boolUključuje dekodiranje svih 2D simbologija (AQRENA).
ReturnsTrue kada je skener potvrdio naredbu.
scanner.disableAll2D()returns boolIsključuje dekodiranje svih 2D simbologija (AQRDIS).
ReturnsTrue kada je skener potvrdio naredbu.
Sve na okupu
wait_for_key() je srž primjera: neprestano poziva readBarcode() dok ne stigne tipka, pa se skeniranje nikad ne zaustavlja dok je izbornik otvoren. Svaka stavka izbornika zatim se preslikava na jednu funkciju, a svaka funkcija šalje jednu ili dvije konfiguracijske naredbe skenera i čeka njezinu potvrdu. Primjer zanemaruje povratne vrijednosti; u vlastitom kodu provjerite ih kako biste saznali je li skener prihvatio postavku.
U kontinuiranom načinu rada skener čita bez okidača. Za čitanje na zahtjev ostanite u ručnom načinu rada i pozovite startScan() iz svojeg koda ili povucite TRIG na nisku razinu.