Google Chrome 61から正式にサポートされるようになったWebUSB機能を使ってWebページとArduino Micro または Arduino Leonardo を連携動作させる実験を行いました。
- 概要
- WebUSBはChromeブラウザからUSBデバイスを制御する機能です。
https://gigazine.net/news/20160414-webusb-api/
2017年9月以降のChrome 61 から正式サポートされるようになりました。 - このWebUSBの機能を使ってArduinoボードとWebページを連携動作させる実験環境WebUSB/Arduinoがあります。
https://github.com/webusb/arduino - WebUSB/Arduino のGetting startのガイドに従って実験環境をインストールするとWebUSBの動作を体験できますが,インストールの際にArduino IDE本体の環境設定を手動でイジる必要があり煩わしいところがありました。そこで,WebUSB/Arduinoのファイルやディレクトリを組み替えてArduino IDEのボードマネージャから簡単にインストールができるようにしました。
https://github.com/kimio-kosaka/webUSB-arduino - 【2018.04.26追記】 WebUSB/Arduinoの環境のインストール不要
WebUSBライブラリをインクルードするだけで動くのではないかと考えて実験したところ…難なく動きます! - 実験環境は次のとおりです
- macOS HighSierra
- Arduino IDE 1.8.5
- Arduino Leonardo
- Google Chrome 64
- Windows / Linux 環境下では稼働実験は行っていません。
WebUSB/ArduinoのREADME.mdには次のような記述がありますのでWindowsでは動かないでしょう。
Windows: This notification is currently disabled in Chrome on Windows due to Chromium issue 656702.
- WebUSBはChromeブラウザからUSBデバイスを制御する機能です。
- WebUSBライブラリのみをインストールしてWebUSBを利用する場合
WebUSB/arduino環境をインストールする場合は,この項は飛ばします。- 次の直接リンクURLからWebUSBライブラリのZIPファイルをダウンロードします。
https://github.com/kimio-kosaka/webUSB-arduino/releases/download/v1.0.0/WebUSB.zip - Arduino IDE を起動します
- メニューバーの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール…」と進みます
- ファイル選択ウインドウが開くのでダウンロードしたWebUSB.zipを選択します。
- Arduino IDEを終了し再度起動します。
- メニューバーの「スケッチ」→「ライブラリをインクルード」と進みライブラリ一覧にWebUSBがリストされていれば正しくインストールされています。
- Arduino IDEにWebUSBライブラリがインストールされたらWebUSB.zipは削除廃棄してかまいません。
- 次の直接リンクURLからWebUSBライブラリのZIPファイルをダウンロードします。
- WebUSB/arduino環境をインストールしてWebUSBを利用する場合は以下の手順で行います(mac版Arduio IDE 1.8.5 )
前述WebUSBライブラリのみのインストールで利用する場合は,この項を飛ばします。- 下の直接リンクURLをコピーします。
https://kimio-kosaka.github.io/webUSB-arduino/package_webUSB_index.json - Arduino IDEのメニューバー「Arduino」→「Preferences」と進み 追加のボードマネージャのURL欄 を開いて1のURLを追加ペーストします。図1
- メニューバー「ツール」→「ボード」→「ボードマネージャ」と進み検索欄にwebusbと入力して表示されたWebUSBボードをインストールします。図2
図1
図2
- インストールが正しく行われると次の2つのボードが追加されているはずです。
Arduino Micro (WebUSB)
Arduino Leonardo (WebUSB)
- 下の直接リンクURLをコピーします。
- サンプル・スケッチの実行
- Chomeブラウザを起動しておきます。
- Arduino Micro または Leonardo を用意します(Pro micro などのATmaga32U4搭載互換ボードでも可)
- Auduino IDEを起動しボードを選択します
- ライブラリのみインストールの場合:
Arduino MicroまたはArduino Leonardoを選択 - WebUSB/Arduino利用の場合:
Arduino Micro(WebUSB)またはArduino Leonardo(WebUSB)を選択
- ライブラリのみインストールの場合:
- サンプル・スケッチ consoleを呼出します。
メニューバー「ファイル」→「スケッチ例」→「WebUSB」→「console」 - 「マイコンボードに書き込む」ボタンをクリックして,コンパイル〜アップロードが終わるのを待ちます。
- アップロードが終了してしばらくすると…
- WebUSB Demos ページのConsoleをクリックして操作ページを開きます。図5
- コンソール(黒い画面)をクリックしてキーボードからHを入力するとD13-LEDが点灯します。Lを入力すると消灯します。図6
(大文字小文字を識別するのでH,Lは大文字で入力)図5
図6
- 終了はDisconnectボタンをクリックしてリンクを切断した後,WebUSB Demos ページを閉じます。
- 再接続はArduino Micro/Leonardo をリセットして,”Arduino xxxx WebUSB」を検出しました…”とメッセージが表示されるの待ちます。
- サンプル・スケッチrgbの実行
- WebUSBの接続認証
- 一度,WebUSBへの接続を許可すると それ以後 そのUSBデバイスは認証なしでChromeブラウザに接続されるようになります。
- WebUSB接続許可の取り消し方法は不明です(現在,探索中)
- 参考
- Web–>USB アクセス方法
https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web - WebUSBのAPI解説
https://wicg.github.io/webusb/ - Chromeのデバイスアクセスログ
chrome://device-log - WebUSB Demo ページのソースコード
https://github.com/kimio-kosaka/webUSB-arduino/tree/master/docs
- Web–>USB アクセス方法
- 感想
Chromeブラウザから直接USBデバイスを操作できるのは面白いです。
USBのデバイスドライバがWebページのjavascriptプログラムとして埋め込まれて動いているというのが私の理解です。図8
私にはUSBデバイスの挙動を見てjavascriptプログラムを書く技量がないので,図9のようになれば大変うれしいです。
javascriptの達人の方に作っていただきたいです。Johnny-fiveをベースにしてArduinoとのリンク部分をWebUSB依存にすればできるのではないかと…図8
図9
- 自前のスケッチを動かしてみた
- Suz Hinton氏のデモ
何と,SuzさんがWebUSBに関するTalkとdemoをJSConf AU 2018でやっておられます。
10分47秒あたりからWebUSBに関するTalkが始まります。
demoのソースコードはココ
https://github.com/noopkat/webusb-fun