Skip to main content

Čitanje barkodova preko hardverskog UART-a

Što ovaj primjer prikazuje​

ESP32 komunicira sa skenerom preko svog hardverskog UART2 sučelja i ispisuje svaki kod koji skener pročita u Serial Monitor. Hardverski UART je namjenska serijska periferija, koju komentar u samom primjeru opisuje kao pouzdaniju od SoftwareSerial.

Spojite ga kako navodi komentar u primjeru: GPIO4 je RX pin ESP32 (na TX skenera), a GPIO5 njegov TX pin (na RX skenera), uz 3V3 i GND. Prvo prebacite skener na UART skeniranjem konfiguracijskog barkoda POR232.

Ovaj primjer također koristi HardwareSerial, koji dolazi uz paket za ESP32 pločicu.

Kod primjera​

Select Board
HardwareScan.ino
/**
**************************************************
*
* @file HardwareScan.ino
* @brief Scan and output barcodes using the DE2120 1D/2D barcode
* scanner module over HardwareSerial (UART2) on ESP32.
*
* Unlike SoftwareSerial, HardwareSerial uses a dedicated
* UART peripheral for reliable communication at 115200 bps.
* The library will automatically negotiate the baud rate
* down to 9600 bps on first connect.
*
* Default wiring: GPIO4 = RX (scanner TX),
* GPIO5 = TX (scanner RX). Change the pin arguments in
* scannerSerial.begin() to match your wiring.
*
* The scanner must first be put into TTL/RS232 mode by
* scanning the POR232 barcode from the DYScan settings
* manual before uploading this sketch.
*
* Make sure you have SoftwareSerial library installed. It
* can be found in Arduino library manager.
*
* @authors Fran Fodor @ soldered.com
***************************************************/

#include "HardwareSerial.h"
HardwareSerial scannerSerial(2); // Use UART2

#include "DE2120-SOLDERED.h"
DE2120_Soldered scanner;

#define BUFFER_LEN 40
char scanBuffer[BUFFER_LEN];

void setup()
{
Serial.begin(115200);
Serial.println("DE2120 Scanner Example");

scannerSerial.begin(115200, SERIAL_8N1, 4, 5); // RX=GPIO4, TX=GPIO5
delay(500);

if (scanner.begin(scannerSerial) == false)
{
Serial.println("Scanner did not respond. Please check wiring. Did you scan the POR232 barcode? Freezing...");
while (1);
}
Serial.println("Scanner online!");
}

void loop()
{
if (scanner.readBarcode(scanBuffer, BUFFER_LEN))
{
Serial.print("Code found: ");
for (int i = 0; i < strlen(scanBuffer); i++)
Serial.print(scanBuffer[i]);
Serial.println();
}
delay(200);
}

Očekivani rezultat:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
DE2120 Scanner Example
Scanner online!

Zatim pritisnite okidač na pločici i usmjerite skener prema kodu. Svaki kod koji skener pročita ispisuje se u zasebnom retku kao Code found: , a iza toga slijedi sadržaj koda. Kada skener ne odgovara, skica ispisuje Scanner did not respond. Please check wiring. Did you scan the POR232 barcode? Freezing... i zaustavlja se.

Korištene funkcije​

HardwareSerial(uint8_t uart_nr)returns None

Konstruktor iz paketa za ESP32 pločicu. Stvara serijski port na jednom od hardverskih UART-ova ESP32. Primjer koristi UART2.

ReturnsKonstruktor; nema povratne vrijednosti.

Parametri

TipNazivOpis
uint8_tuart_nrBroj hardverskog UART-a. Primjer prosljeđuje 2.
scannerSerial.begin(unsigned long baud, uint32_t config = SERIAL_8N1, int8_t rxPin = -1, int8_t txPin = -1, ...)returns void

Iz paketa za ESP32 pločicu. Pokreće hardverski UART zadanom brzinom prijenosa i formatom okvira na RX i TX pinovima koje navedete. Biblioteka skenera nakon toga sama mijenja brzinu prijenosa, pa je 115200 ovdje samo početna vrijednost.

ReturnsNišta.

Parametri

TipNazivOpis
unsigned longbaudBrzina prijenosa (baud rate). Primjer prosljeđuje 115200.
uint32_tconfigPodatkovni bitovi, paritet i stop bitovi. SERIAL_8N1 je zadana vrijednost.
int8_trxPinPin ESP32 koji prima, spojen na TX skenera. Primjer koristi 4.
int8_ttxPinPin ESP32 koji šalje, spojen na RX skenera. Primjer koristi 5.
DE2120_Soldered()returns None

Stvara objekt skenera. Još ne drži nikakve pinove ni port: begin() ga povezuje sa serijskim portom.

ReturnsKonstruktor; nema povratne vrijednosti.

scanner.begin(HardwareSerial &serialPort)returns bool

Povezuje objekt skenera s hardverskim serijskim portom i provjerava odgovara li skener. Postavlja port na 9600 baud i traži verziju firmwarea. Ako nema odgovora, ponovno pokušava na 115200 baud, nalaže skeneru da prijeđe na 9600 baud i opet pita. Nakon uspjeha prazni prijemni međuspremnik kako bi se prvo skeniranje pročitalo čisto.

Returnstrue kada je skener odgovorio, false kada nije.

Parametri

TipNazivOpis
HardwareSerial &serialPortPort na koji je skener spojen, ovdje scannerSerial.
scanner.readBarcode(char *resultBuffer, uint8_t size)returns bool

Čita bajtove koji čekaju od skenera u resultBuffer. Skeniranje završava znakom za povratak na početak retka (carriage return); kada on stigne, funkcija vraća true, a međuspremnik sadrži kod, carriage return i završnu nulu. Međuspremnik koji već sadrži završeno skeniranje briše se prije sljedećeg. Pozivajte je opetovano iz loop().

Returnstrue kada je potpuno skeniranje u međuspremniku, false kada još nije stiglo potpuno skeniranje.

Parametri

TipNazivOpis
char *resultBufferMeđuspremnik u koji se prikuplja kod. Primjer koristi 40 bajtova.
uint8_tsizeVeličina međuspremnika. Čita se najviše toliko bajtova, pa se dulji kod skraćuje.

Sve zajedno​

scannerSerial.begin() postavlja UART2 na pinove koje ste spojili, a scanner.begin() koristi taj port kako bi pronašao skener i postavio ga na 9600 baud. Od tada loop() svakih 200 ms provjerava readBarcode(). Kada vrati true, skica ispisuje međuspremnik znak po znak nakon Code found: .

Skener se pokreće u ručnom načinu rada, pa čita dok je okidač pritisnut ili dok je TRIG držan u niskom stanju. Za čitanje bez okidača pogledajte Promjena postavki skenera iz Serial Monitora.