Č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
/**
**************************************************
*
* @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:
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 NoneKonstruktor iz paketa za ESP32 pločicu. Stvara serijski port na jednom od hardverskih UART-ova ESP32. Primjer koristi UART2.
ReturnsKonstruktor; nema povratne vrijednosti.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
uint8_t | uart_nr | Broj 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 voidIz 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
| Tip | Naziv | Opis |
|---|---|---|
unsigned long | baud | Brzina prijenosa (baud rate). Primjer prosljeđuje 115200. |
uint32_t | config | Podatkovni bitovi, paritet i stop bitovi. SERIAL_8N1 je zadana vrijednost. |
int8_t | rxPin | Pin ESP32 koji prima, spojen na TX skenera. Primjer koristi 4. |
int8_t | txPin | Pin ESP32 koji šalje, spojen na RX skenera. Primjer koristi 5. |
DE2120_Soldered()returns NoneStvara 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 boolPovezuje 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
| Tip | Naziv | Opis |
|---|---|---|
HardwareSerial & | serialPort | Port 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
| Tip | Naziv | Opis |
|---|---|---|
char * | resultBuffer | Međuspremnik u koji se prikuplja kod. Primjer koristi 40 bajtova. |
uint8_t | size | Velič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.