В начале наших попыток найти версию esptool для браузера мы нашли проект от Adafruit, который портировал esptool на JavaScript. Это казалось именно тем, что нам было нужно. Однако их реализация была выполнена как приложение, а не как библиотека без хороших абстракций между манипуляциями с DOM и логикой приложения, что затрудняло повторное использование.

Не найдя подходящей библиотеки, мы решили написать ее сами и открыть исходный код: github.com/toitware/esptool.js. Наша реализация написана на TypeScript и распространяется по npm, чтобы упростить внесение и использование. Новый последовательный интерфейс в консоли Toit использует библиотеку для прошивки непосредственно из браузера, как вы можете увидеть в демонстрационном видео здесь:

Во время разработки библиотеки esptool.js мы столкнулись с несколькими проблемами. Одна из них заключалась в том, чтобы настроить скорость передачи данных, продолжая общаться с устройством. Python esptool использует низкую скорость передачи для установки заглушки загрузчика на ESP32, которую впоследствии можно использовать для увеличения скорости передачи для ускорения мигания. К сожалению, WebSerial API позволяет указывать скорость передачи данных только при первом открытии порта.

После нескольких попыток мы обнаружили, что можно имитировать изменение скорости передачи данных на лету, закрыв порт и снова открыв его с более высокой скоростью передачи:

После того, как мы начали создавать esptool.js, Espressif выпустила JavaScript-порт esptool. Это потрясающе, и мы были бы счастливы использовать это. Тем не менее, их реализация все еще находится на начальном этапе и, как и в приложении Adafruit, не имеет должного разделения между приложением и библиотекой.

Попробуй сам

Если вы хотите попробовать последовательный интерфейс самостоятельно, перейдите в Консоль Toit, зарегистрируйтесь, подключите ESP32 через последовательное соединение и прошейте его прошивкой Toit с помощью последовательного интерфейса.

И последнее, но не менее важное: я хотел бы поблагодарить Марию Меллису, которая является основным автором первоначальной реализации Adafruit.