AIナイト2000を作る その2
AIナイト2000の続きを書こうと思ってもなかなかできない。色々端折って書いてしまおうと思う。
まずはキットが喋っている間だけナイト2000のスキャナーが光るようにするための、PCとArduinoを連動について書いておく。
基本的にはKODAさんの記事を真似させていただいた。
環境づくりがなかなか一仕事だ。
まず、Arduinoを動かす環境としてArduinoIDEをインストールする。中華コピー品を使う場合はそれ用のドライバも。
次はNode.jsの導入。ネットワークアプリケーションの開発環境だそうだ。何なのかさっぱりわからない。途中で一度チェックマークするところがある。これチェック必須。
つぎはJonney-fiveのインストール。これも何なのか分からないがJavaScriptでマイコンを動かすためのライブラリだとか。
こちらを参考に、自分のPCのルートに「Knight」というフォルダを作ってそこにインストールしておいた。
ArduinoにStandard Firmataを書きこみ。
こちらも上掲のページを参考にさせていただいた。
ところで、最新版のIDEだと書きこみに失敗した。こちらのページで助けられた。
前回はこれでうまく行ったのだが、今回はexpress、soclet.ioがないと文句を言われる。コマンドプロンプトを出してnode_modulesのフォルダで
npm install -g express
npm install socket.io
とやってモジュールを追加。これでうまくいくかと思ったら今度はWSLがないと言われる。
再びコマンドプロンプトで
wsl --install
と入れるとなにやらインストールされて、ようやく動くようになった。
コードを以下に付す。といってもほぼKODAさんのものの引写しなのだが…
これを私の場合index.jsという名前でc:\knight/に保存した。
このコードはArduinoをUSBの3番ポートにつないだ時に機能する。違う場合は下記の"COM*"の*を自分がつないでいる番号に直す必要がある。
board = new five.Board({ port: "COM3" }),
また、実行させたいhtmlは、c:\knight\htdocs内に保存する必要がある。
これは
app.use(express.static('htdocs'));
この行の設定をそのまま使っているからで、変えたい場合はここを書き換える必要がある。
=============================
console.log("Node.jsアプリケーションが起動しました。");
var express = require('express'),
app = express(),
http = require('http').Server(app),
port = 3000,
io = require('socket.io')(http),
five = require("johnny-five"),
board = new five.Board({ port: "COM3" }),
// const board = new Board({ port: "COM3" }); // Arduino Nanoを接続しているシリアルポート名を指定
led,
server = function(){
app.use(express.static('htdocs'));
http.listen(port,function(){
console.log("Expressサーバーがポート%dで起動しました。モード:%s",port,app.settings.env);
});
};
board.on("ready", function() {
server();
led = new five.Led(12),
io.on('connection', function(socket) {
socket.on('led', function(data) {
if (data === true) {
led.on();
} else {
led.off();
}
});
});
});