ITで遊ぶ

ブラウザーとシリアル通信

大きく誤解を招く(少なくとも私は誤解した)ものにJavascriptのSerialとWebUSBがあります。

これらふたつは別物です。WebUSBはとっくに終わったプロジェクトです。にもかかわらず2024年でも紹介記事を書いている人は少なくありません。WebSerialはここにドキュメントがあります。このとおり動きます。(手引書というものも)

しばしば「httpsでないとテストもできない」と書いている人がいますが、それは何年も前の話です。テストはlocalhostで可能です。

以下がサンプルJavascriptです。HTMLにid=statusのテキスト、id=connectButtonというボタン、id=logDataButtonというボタン(最初はdisable)を用意してください。

    let port;
    let reader;

    async function connectToArduino() {
      try {
        port = await navigator.serial.requestPort();
        await port.open({ baudRate: 9600 });

        reader = port.readable.getReader();
        document.getElementById("status").textContent = "Arduino connected!";
        document.getElementById("logDataButton").disabled = false;
      } catch (err) {
        console.error("Failed to connect to Arduino:", err);
      }
    }

    async function logDataToSheets() {
      if (!reader) return;

      try {
        const { value, done } = await reader.read();
        if (done) {
          console.log("Stream closed");
          reader.releaseLock();
          return;
        }

        const sensorData = new TextDecoder().decode(value).trim();
        console.log("Sensor data:", sensorData);
      } catch (err) {
        console.error("Error reading from Arduino or logging data:", err);
      }
    }

    document.getElementById("connectButton").addEventListener("click", connectToArduino);
    document.getElementById("logDataButton").addEventListener("click", logDataToSheets);

Arduino側はこんな感じ。

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  Serial.println("Hello");
  delay(300);
}

これで作るアプリも画面はひとつかふたつで、後はJavascriptでデータを画面に表示することになるでしょうね。
あと、HTMLでダイアログボックス作れればパーフェクトなんですけどねぇ。
いずれにしても、だんだん、CodeIgniterとかRuby On Railsから遠ざかる。。。

関連記事

  1. CakePHP(2)

  2. 音声をテキストに(google speech-to-text API)…

  3. Arduinoで脈拍を測る

  4. 省電力一定時間点滅 スイッチ付プログラム

  5. PHPのクラスの継承

  6. なんでもスマホへ

  7. Visual Studio 2017 Visual Basic データ…

  8. 思想をあらわすプログラミング