Slanje konfiguracijske naredbe
Što ovaj primjer prikazuje
sendCommand() mijenja bilo koju postavku skenera, čak i onu za koju modul nema posebnu funkciju. Ovaj primjer uključuje i isključuje Code ID. Kad je Code ID uključen, skener ispred svakog koda stavlja identifikator simbologije (na primjer A za Code 128 i Q za QR Code), pa vaš program može razlikovati vrste barkodova.
Utipkajte y ili n u REPL kako biste ga uključili ili isključili. Primjer i dalje ispisuje skenirane kodove dok čeka vaš pritisak tipke.
Povežite pin 5 (TX) kontrolera sa RX skenera i njegov pin 4 (RX) s TX skenera, uz 3V3 i GND, ili promijenite tx i rx prema svom 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 MicroPythonovu dokumentaciju za select.
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!")
# 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")
🔗Otvorite cijeli primjer
Examples/de2120-sendCommand.py na commitu 848e03e
Očekivani rezultat:
Scanner online!
Transmit Code ID with barcode? (y/n)
-------------------------------------
Type 'y' or 'n', or scan a barcode:
Utipkajte y i primjer ispisuje Code ID will be displayed on scan; utipkajte n i ispisuje Code ID will NOT be displayed on scan. Svaka druga tipka ispisuje Command not recognized. Zatim se ponovno pojavljuje upit. Kod skeniran dok upit čeka ispisuje se kao ..., a zatim Code found: i sadržaj koda, s identifikatorom ispred koda kad je Code ID uključen.
Korištene funkcije
DE2120(uart=None, tx=None, rx=None, uart_id=1)returns DE2120Stvara objekt skenera. Proslijedite UART koji ste sami stvorili kao uart ili proslijedite brojeve pinova tx i rx pa modul na njima stvara UART(uart_id) brzine 9600 baud. Ako nema ni jednog ni drugog, podiže 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 stvoriti kad proslijedite tx i rx. Zadano 1. |
scanner.begin()returns boolProvjerava odgovara li skener. Postavlja UART na 9600 baud i traži verziju firmwarea. Ako nema odgovora, ponovno pokušava na 115200 baud, kaže skeneru da se prebaci na 9600 baud i ponovno pita. Nakon uspjeha prazni prijemni međuspremnik.
ReturnsTrue kad je skener odgovorio, False kad nije.
scanner.readBarcode()returns str or NonePrikuplja bajtove koji čekaju od skenera. Skeniranje završava znakom carriage return; kad on stigne, funkcija vraća kod bez njega. Jedan kod zadržava najviše 256 bajtova.
ReturnsSkenirani kod ili None kad potpuno skeniranje još nije stiglo.
scanner.sendCommand(cmd, arg, max_wait_ms)returns boolŠalje skeneru jednu konfiguracijsku naredbu, uokvirenu na način koji skener očekuje: ^_^, naredba, argument i završna točka (ovdje ^_^CIDENA1.). Zatim čeka odgovor skenera: ACK bajt (0x06) ili NACK bajt (0x15).
ReturnsTrue kod ACK-a; False kod NACK-a ili kad istekne max_wait_ms bez odgovora.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
str | cmd | Naredba ili naziv svojstva, na primjer CIDENA (prijenos Code ID-a). |
str | arg | Vrijednost, na primjer "1" za uključivanje ili "0" za isključivanje. Zadano prazno. |
int | max_wait_ms | Koliko čekati odgovor, u milisekundama. Zadano 3000. |
Sastavljanje cjeline
Svaki prolaz petlje prvo isprazni sve tipke koje još čekaju, a zatim ispiše upit. Dok nijedna tipka ne stigne, poziva readBarcode() svakih 200 ms, pa se skeniranja i dalje prikazuju. Tipka y ili n postaje sendCommand("CIDENA", "1") ili sendCommand("CIDENA", "0").
Isti obrazac šalje bilo koju drugu postavku. Modul navodi one koje poznaje na vrhu datoteke de2120.py, na primjer BEPSUC (zvučni signal pri uspješnom dekodiranju, zadano 1) ili IMGREG (područje čitanja).