Web Serial API

プログラムサンプル
2023.1.8
// USBを刺した時に呼ばれます
navigator.serial.addEventListener('connect', (e) => {
    console.log("connect");
    console.log(e.target);
});

// USBを抜いた時に呼ばれます
navigator.serial.addEventListener('disconnect', (e) => {
    console.log("disconnect");
    console.log(e.target);
});

// ページの読み込み時、`ports` を用いて利用可能なポートのリストを初期化します。
navigator.serial.getPorts().then((ports) => {
});

var mPort=null;    //ポートをグローバルに保存します
var mLog=null;
var mCnt=0;

window.onload = function() 
{
    mLog=document.getElementById("log");

    // ボタンを3つ準備して、押されたらそれぞれの動作を行います。
    $('#serial_start').click(function() {
        startpoart()
    });

    $('#serial_read').click(function() {
        mLog.innerText="Read Start\n";
        readport(mPort);    //データを読み込む
    });

    $('#serial_write').click(function(){
        mLog.innerText="Write\n";
        writepoart(mPort);
    });

}

//ポートに接続して、ボーレートを設定しポートを開きます。
function startpoart()
{
    navigator.serial.requestPort().then((port) => {
        // port`に接続した
        console.log("Ready Serial Port");
        mLog.innerText="Ready Serial Port\n";
        mPort=port;
        // portをボーレート112500bpsで開く
        port.open({ baudRate:112500 });
    }).catch((e) => {
        // error
        console.log("error");
    });
}

//受信
async function readport(port)
{
    while (port.readable) {
        const reader = port.readable.getReader();
        try {
            while (true) {
                const { value, done } = await reader.read();
                if (done) {
                // |reader| が中止になった。
                break;
                }
                // |value|に読み込んだデータが入っている。
                // consoleに書き出す
                console.log(value);
                mLog.innerText += value;
                mLog.innerText += ",";
                mCnt++;
                if(mCnt%16==0)
                    mLog.innerText += "\n";
           }
        } catch (error) {
            // Handle |error|...
        } finally {
            reader.releaseLock();
        }
    }
}

//送信
async function writepoart(port)
{
    const writer = port.writable.getWriter();
    let val=$("#vvalue").val();    // number ボックスから数字を読み込む
    let xint8 = new Uint8Array([val]);
    await writer.write(xint8);
    writer.releaseLock();        
}