https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web
// Third-party WebUSB Arduino library
#include <WebUSB.h>
const WebUSBURL URLS[] = {
{ 1, "webusb.github.io/arduino/demos/" },
{ 0, "localhost:8000" },
};
const uint8_t ALLOWED_ORIGINS[] = { 1, 2 };
WebUSB WebUSBSerial(URLS, 2, 1, ALLOWED_ORIGINS, 2);
#define Serial WebUSBSerial
void setup() {
Serial.begin(9600);
while (!Serial) {
; // Wait for serial port to connect.
}
Serial.write("WebUSB FTW!");
Serial.flush();
}
void loop() {
// Nothing here for now.
}
まず上記の通りにArduinoに書き込んだけど、WebUSBURLっていう型がないのでコンパイル通らない。
バージョンの違いなのか、何か見当違いなのかわからんけど、ひとまずArduinoサンプルの方を使う。
https://github.com/webusb/arduino
#include <WebUSB.h>
WebUSB WebUSBSerial(1, "webusb.github.io/arduino/demos");
#define Serial WebUSBSerial
const int ledPin = 13;
void setup() {
while (!Serial) {
;
}
Serial.begin(9600);
Serial.write("Sketch begins.\r\n> ");
Serial.flush();
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial && Serial.available()) {
int byte = Serial.read();
Serial.write(byte);
if (byte == 'H') {
Serial.write("\r\nTurning LED on.");
digitalWrite(ledPin, HIGH);
} else if (byte == 'L') {
Serial.write("\r\nTurning LED off.");
digitalWrite(ledPin, LOW);
}
Serial.write("\r\n> ");
Serial.flush();
}
}
書き込めたけど、デバイス一覧にも表示されないし chrome://device-log にもそれらしいものない。
以下のイシューを読む。
https://github.com/webusb/arduino/issues/4
https://github.com/WICG/webusb/issues/75
最初に挿したときのドライバのせいで、どうのこうの、みたいなことっぽい。
ただ、USBに関する知識が全然ないので基本的に何を言ってるのかはよくわからない。
Zadigというツールを使って、書き換えたらイケたわ、みたいなところは読めた。
Arduino Leonardはinterfaceが2つあったので
interface2のほうをWinUSB(v6.1...)に書き換えた(WCIDドライバーからの置き換えだった)。
WCIDドライバーについては以下読んだけど、正直ほぼピンと来てない。
https://github.com/pbatard/libwdi/wiki/WCID-Devices
ちなみにinterface0のほうは書込用のUSBシリアルとして使われるっぽくて、置き換えたら書き込めなくなった。
(一回ドライバ削除しても戻らなくて焦ったが、USB Serialを選んでzadigから書き直したら戻った)
で、やっと、動いた。
動いたんだけど、正直何が悪くて、何が変わったのかよくわからないので、真似することはおすすめしない。
待ってればそのうちちゃんと動くようになるんではないか。
ちなみにUSB挿したときにポップアップが出ないのだけど、それについては
WICGのほうのイシューの中で、Windowsでは現状一時的に無効化されているという発言がある。