【シリアル通信〜基礎編】Arduino UnoとWeb Serial APIでブラウザ直通シリアル通信を利用する
※ 当ページには【広告/PR】を含む場合があります。
2021/11/30
Arduino側の実装
char data = 'a';
void setup() {
//👇シリアルのボーレートは9600bpsにする
Serial.begin(9600);
delay(200);
}
void loop() {
//👇1秒おきにハードウェアシリアルでPC側へ文字を送信
Serial.println(data);
delay(1000);
}
「a」
DTRをハード的に無効化する
RESET-GND
HTMLファイルを実装
Web Serial API
chrome://flags
[Experimental Web Platform features] > [Enable]
デモ版でサクッとシリアルを試す
スクリプトの自作
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Web Serial API - Reading Test</title>
</head>
<body>
<h3>はじめてのWeb Serial API|読込テスト</h3>
<button onclick="startSerial()">接続</button>
<button onclick="stopSerial()">切断</button>
<script>
let stopFlag = false;
async function startSerial() {
try {
console.log("INFO: 接続が確立しました");
stopFlag = false;
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
while (port.readable) {
const reader = port.readable.getReader();
try {
while (!stopFlag) {
const { value, done } = await reader.read();
if (done) {
console.log("INFO: 読込モード終了");
break;
}
//👇生データはバイナリなので、ユニコード文字へデコード
const inputValue = new TextDecoder().decode(value);
console.log(inputValue);
}
} catch (error) {
console.log("ERROR: 読み出し失敗");
console.log(error);
} finally {
reader.releaseLock();
await port.close();
console.log("INFO: 接続を切断しました");
}
}
} catch (error) {
console.log("ERRORR: ポートが開けません");
console.log(error);
}
}
function stopSerial() {
stopFlag = true;
}
</script>
</body>
</html>
動作テスト
まとめ
参考サイト
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー