Могу ли я использовать Web Serial API для отправки G-кода на Ender 5 Pro?

Недавно я начал экспериментировать с отправкой G-кода на свой принтер через USB-кабель. Я загрузил Printrun, и он отлично работает! Однако я хочу иметь возможность делать это из своего веб-браузера, поскольку приложение, которое я разрабатываю, основано на веб-технологиях.

Я нашел это приложение Chrome под названием chrome-gcode-sender, которое делает это, но, к сожалению, оно больше не работает, поскольку Google, к сожалению, прекратил поддержку всех приложений Chrome в июне 2022 года.

Создатель этого приложения предположил на GitHub, что то же самое можно сделать с помощью Web Serial API. Я пытаюсь заставить это работать уже почти два дня, но без особого успеха. Я нашел несколько руководств в сети о том, как использовать Web Serial API, но ничего для этого конкретного случая использования. Вот пример кода, который я разработал на данный момент, просто простой HTML-документ с некоторым количеством ванильного JavaScript:

<html>
  <head>
    <title>Web Serial API Demo</title>
  </head>
  <body>
    <button id="connect">Connect</button>
    <script>

        var device
        let button = document.getElementById("connect")

        document.addEventListener("DOMContentLoaded", event => {
            button.addEventListener("click", async() => {
                try {

                    device = await navigator.serial.requestPort()

                    await device.open({baudRate: 9600})

                    console.log("Opened: ", device)
                    console.log("Info: ", device.getInfo())

                    const encoder = new TextEncoder()
                    const writer = device.writable.getWriter()

                    await writer.write(encoder.encode("G28"))

                    writer.releaseLock()

                    await device.close()

                } catch (error) {

                    console.log(error)

                }
            })
        })

    </script>
  </body>
</html>

Когда я нажимаю кнопку «Подключиться» и выбираю нужное мне устройство, оно, кажется, подключается нормально. Однако, когда я пытаюсь отправить простой G-код, такой как G28 (autohome), принтер ничего не делает. Если у кого-то есть идеи, как заставить это работать, пожалуйста, дайте мне знать! Я также на 100 % открыт для альтернативного подхода! Основная идея — просто иметь возможность отправлять G-код из браузера на принтер.

Примечания:

  • Я также пробовал экспериментировать с Web USB API, но и здесь безуспешно.

, 👍4


1 ответ


Лучший ответ:

3

Наконец-то, понял! Я был очень близок, но для того, чтобы пример заработал, нужно было внести два изменения в код выше.

  1. Необходимо изменить baudRate на 115200. Это значение может различаться от принтера к принтеру, но 115200 довольно распространено и, таким образом, является хорошим значением по умолчанию. Если вы обнаружите, что это не работает, попробуйте найти рекомендуемое значение baudRate для вашего принтера/версии прошивки.

  2. Мне нужно было добавить \n в конец моей строки G-кода. В этом примере была только одна команда, G28\n, но если вам нужно несколько команд в одной строке, вам нужно будет добавить \n после каждой из них.

Потрясающе!!! Возможно отправить G-код на принтер из веб-браузера с помощью всего нескольких строк JavaScript!

Обновление: Если кому-то интересно, я создал это простое приложение в стиле терминала. Оно должно работать с любым совместимым браузером, а также его можно использовать офлайн, если вы клонируете репозиторий и откроете файл sender.html в своем браузере.


,