pineTERM: in-browser UART terminal Code
Minimalistic but powerfull web/browser UART terminal
Brought to you by:
pinelab
| File | Date | Author | Commit |
|---|---|---|---|
| README.md | 1 day ago |
|
[93e570] Update README.md |
| commands_example.json | 2 days ago |
|
[a65550] README updated |
| index.html | 1 day ago |
|
[2cf114] cosmetic change |
| style.css | 1 day ago |
|
[ae0936] ajusted log div |
| term.js | 1 day ago |
|
[344e05] last 10 packets disp by default, ajustable |
A modern, browser-based serial terminal for UART communication with microcontrollers, embedded devices, and IoT hardware. No installation required - just open in your browser and connect to your serial device.
Use it right now: https://wespeakenglish.github.io/pineTERM/
Simply open the link above in a supported browser, click "Connect to UART", and select your device. That's it!
If you prefer to run locally:
git clone https://github.com/wespeakenglish/pineTERM.git
cd pineTERM
# Open index.html in Chrome/Edge/Opera
pineTERM supports automated command sequences via JSON files for testing and batch operations.
[
{
"type": "ascii",
"data": "AT+GMR",
"times": 1,
"preDelay": 0,
"postDelay": 100
}
]
| Field | Type | Default | Description |
|---|---|---|---|
type |
string | required | "ascii" for text commands, "hex" for raw bytes |
data |
string | required | Command payload. For hex: space-separated bytes (e.g., "FF FE 01 00") |
times |
integer | 1 |
Execution count: 0=skip, 1=once, N=repeat N times, -1=infinite loop |
preDelay |
integer | 0 |
Milliseconds to wait before sending this command |
postDelay |
integer | 100 |
Milliseconds to wait after sending (inter-command gap) |
[
{ "type": "ascii", "data": "AT\r\n", "times": 0 },
{ "type": "ascii", "data": "AT+GMR\r\n", "times": 1, "postDelay": 500 },
{ "type": "ascii", "data": "AT+CWMODE=1\r\n", "times": 1, "postDelay": 1000 },
{ "type": "ascii", "data": "AT+CWJAP=\"MyNetwork\",\"MyPassword\"\r\n", "times": 1, "preDelay": 200, "postDelay": 5000 },
{ "type": "hex", "data": "FF FE 01 00", "times": 3, "postDelay": 300 },
{ "type": "ascii", "data": "PING\r\n", "times": 5, "postDelay": 1000 },
{ "type": "hex", "data": "AA 55 0D 0A", "times": -1, "preDelay": 50, "postDelay": 50 }
]
| Setting | Options | Default |
|---|---|---|
| Baud Rate | 9600 - 921600 | 9600 |
| Data Bits | 7, 8 | 8 |
| Stop Bits | 1, 2 | 1 |
| Parity | None, Even, Odd | None |
| Flow Control | None, Hardware | None |
Choose transmission termination:
Enable "Separated less than X μSec treat like one package" to:
| Browser | Support | Notes |
|---|---|---|
| Chrome 89+ | Full | Windows, macOS, Linux, ChromeOS |
| Edge 89+ | Full | Windows, macOS, Linux |
| Opera | Full | Windows, macOS, Linux |
| Firefox | None | Vote for implementation |
| Safari | None | Not supported |
| Chrome Android | None | USB serial unavailable on mobile |
| Issue | Solution |
|---|---|
| "Web Serial API not supported" | Use Chrome/Edge/Opera desktop, check version 89+ |
| Device not appearing | Install USB-to-Serial drivers (CH340, CP2102, FTDI, etc.) |
| Garbled text | Verify baud rate matches device configuration |
| JSON commands fail | Validate JSON syntax, check console for errors |
Contributions welcome! Please:
Made with 💙 for hardware hackers