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();
}