This library use the Serial Api available in Chrome (with experimental flag enabled) to upload compiled .hex files on Arduino boards without Avrdude, directly from a web page!
For the moment it works only with stk500v1 protocol. That means it (should) works with Uno and Nano boards, but not with Leonardo or Mega boards).
# with npm
npm i avrbro --save
# or with yarn:
yarn add avrbro
import avrbro from 'avrbro'
const { parseHex, openSerial, flash, reset } = avrbro
// Here's just an helper function to use async/await with FileReader...
const readFileAsync = (file) => {
return new Promise((resolve, reject) => {
let reader = new FileReader()
reader.onload = () => {
resolve(reader.result)
}
reader.onerror = reject
reader.readAsArrayBuffer(file)
})
}
const flashMyBoard = async () => {
// connect to device using web serial API
const serial = await openSerial()
if (serial) {
// get .hex buffer
const response = await fetch('bin/my-firmware.hex')
const data = await response.blob()
const fileData = await readFileAsync(data)
const hexBuffer = parseHex(new TextDecoder("utf-8").decode(fileData))
// reset the board
await reset(serial)
// upload .hex file
const success = await flash(serial, hexBuffer, { boardName: 'nano' })
if (success) {
console.log('.hex file uploaded on board successfully!')
} else {
console.log('an error has occurred :(')
}
} else {
console.log('operation canceled by user')
}
}
flashMyBoard()
Allow to know if the serial API is available.
Returns: Boolean
Open serial connection with device. Once called, the browser will open a dedicated modal window to choose the device.
Params
- options
object
- baudrate
Number
- defaults to57600
- vendorId
Number
- defaults to0x2341
- baudrate
Returns: Object
or null
if cancelled. The Object
will match {port, reader, writer}
where:
- port
SerialPort
- reader
ReadableStream
- writer
WritableStream
Close serial connection with device.
Params
- serial
object
- port
SerialPort
- reader
ReadableStream
- writer
WritableStream
- port
Use Intel HEX file format to parse given data and prepare buffer for upload.
Params
- data
Object
- string in ASCII format or Buffer
Returns: Buffer
Flash the device connected on the given serial port with the given .hex file buffer.
Params
- data
Object
- string in ASCII format or Buffer Object - hexBuffer
Buffer
- the .hex buffer returned by the parseHex function - options
Object
- boardName
String
- Name of the target board (checksrc/board.js
to find available names) - debug
Boolean
- Allow to display logs during flash process
- boardName
Returns: Boolean
Reset board with cycle DTR.
Params
- serial
object
- port
SerialPort
- reader
ReadableStream
- writer
WritableStream
- port
Contributions in any form are welcome! If you find a bug, please file an issue.
This project is licensed under the MIT license. See the LICENSE file for more details.
All this stuff was made possible thanks to: