JavaScriptとArduinoの接続方法を調べていたのですが、初心者のため、Node.jsを使う方法でうまく繋がらず、この方法でやっと接続できましたので、メモとして残して起きます。
ブラウザに表示されたグラデーションをドラッグするとLEDが調光されるプログラムです。こちらのYouTubeを参考に、p5.jsとArduinoを使って作成しました。 参考動画と異なる部分は、VSCodeでコードを作成し、Arduino Unoを使用している点です。 VSCodeおよびArduino IDEのインストール方法等は割愛しております。
環境構築
- VSCodeの拡張機能をインストール
- p5.serialcontrolのダウンロード
VSCodeの拡張機能をインストール
VSCode上でp5.jsのコーディングがやりやすくなる拡張機能を2つインストールします。
Live Preview
エディタ内でライブプレビューする拡張機能。入力したコードの実行結果が逐次プレビューされます。
p5js Snippets
p5.jsの入力補完をしてくれます。今回は、ほぼコピペでできるので入れなくてもOKです。
p5.serialcontrolのダウンロード
Arduinoとシリアル接続するためのアプリケーションです。こちらからダウンロードします。私はバージョン「Alpha 7」のdarwin(mac)を使用しました。
Arduinoの配線
下記が必要なハードウェアです。
- Arduino本体
- usbケーブル(PCと接続用)
- ブレッドボード
- ジャンパワイヤ x 2本
- 抵抗 220Ω
図のように接続します。調光(PWM)を使用するので、赤い線は番号の前に「~」が付いたピンでなければ上手く動きません。今回は9番ピンを使いました。
必要なファイルを準備
テストなので、必要最低限のファイル構成です。
- Arduino用のコード
- htmlファイル
- JavaScriptファイル
Arduino用のコード
以下のコードをArduinoに書き込んでおきます。
const int ledPin = 9;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
int brightness;
if(Serial.available() > 0){
brightness = Serial.read();
analogWrite(ledPin, brightness);
}
}
その際にArduinoが接続されているポート番号を確認しておきます。 [ツール]→[シリアルポート:]で、(Arduino Uno)と書かれているポートです。このポート番号はあとで使います。
HTMLファイル
以下をコピペして「index.html」の名前で保存してください。
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- p5.jsとp5.serialportのライブラリ -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.js"></script>
<script src="https://cdn.jsdelivr.net/npm/p5.serialserver@0.0.28/lib/p5.serialport.js"></script>
</head>
<body>
<!-- 作成したp5.jsのスケッチ -->
<script src="sketch.js"></script>
</body>
</html>
JavaScriptファイル
リンク先のコードをVSCodeにコピペします。ただし20行目の
serial.open('/dev/tty.usbmodem143201');
のポート番号を、先ほどArduino IDEで確認した番号に変更してください。(今回の例の場合は、「/dev/tty.usbmodem143301」に変更)
「sketch.js」の名前でindex.htmlと同じフォルダに保存します。
プレビュー
ファイルが準備できたら、VSCodeでindex.htmlを開き、右上の虫眼鏡のアイコンをクリックします。
コードが間違っていなければ、右側に黄色のグラデーションが表示されます。
接続
先ほどダウンロードしたp5.serialcontrolを立ち上げます。「Selected Port:」から、Arduinoが接続されているポートを選択し「OPEN」をクリックします。クリックした際にArduinoの基盤のLEDが点滅すればたぶん成功です。
VSCodeに戻り、グラデーションをドラッグすると、グラデーションの明度に合わせて、ブレッドボードに接続されたLEDの明るさが変化するはずです。
プログラムや配線が間違っていないのに接続できない場合は、USBポートを一度抜いて接続し直すと上手くいくことがあります。その際に別のUSBポートに繋ぐとポートの番号も変わりますので、都度sketch.jsの20行目のポート番号も書き換え、p5.serialcontrolで接続し直してください。