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 avrbroimport 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.jsto 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: