Raspberry Piにも多数のモジュールがありますが、Arduino向けのシールドもまた多数提供されています。特にArduinoではアナログデータを扱うのが簡単なので、圧力センサーなどを扱う際にはArduinoを使うことが多いようです。

デジアナ変換を用いることもできますが、今回は無理にセンサーを使うのではなくRaspberry PiからArduinoを扱う方法を紹介します。

Johnny Fiveを使う

Arduinoを操作するライブラリとしては一番簡単なのがJohnny Fiveです。インストールも簡単で、情報もたくさん出ています。まずJohnny Fiveをインストールしていきます。

Arduinoを接続する

Raspberry PiとArduinoをUSB接続します。そして、シリアル接続できるように gort というライブラリをインストールします。

sudo apt-get install gort

インストール後、scanを実行するとArduinoが出るはずです。デフォルトでは /dev/ttyACM0 になるようです。

$ gort scan serial

1 serial port(s) found.

1. [/dev/ttyACM0] - [usb-Arduino_LLC_Arduino_Yun-if00]
  USB device:  Bus 001 Device 008: ID 2341:8041 Arduino SA 

この /dev/ttyACM0 に書き込めるように dialout グループにユーザを追加します。

sudo usermod -aG dialout pi

そして arduino をインストールします。

gort arduino install

最後にファームウェアをアップデートします。

$ gort arduino upload firmata /dev/ttyACM0

母艦でファームウェアをアップデートする

これで使えるようになるはずなのですが、 avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00 というエラーが出る場合があります。この場合はWindowsやmacOSのArduino IDEを使ってファームウェアをインストールします。スケッチの場所はファイルメニュー > スケッチ例 > Firmata > StandardFirmata です。

 

 

Johnny Fiveをインストールする

環境を作ったらJohnny Fiveをインストールします。今回は適当なディレクトリを作成して、その中にセットアップします。

mkdir arduno-test
cd arduno-test
npm i johnny-five -S

さらに Error: Cannot find module 'serialport' というエラーが出た場合にはライブラリをインストールします。

npm i serialport -S

isaax プロジェクトの作成

まず最初にGitリポジトリを作っておきます。ディレクトリの中身は isaax.json というファイルで、内容は次の通りです。これはisaaxプロジェクトの設定ファイルです。

{
  "name": "node-app",
  "version": "",
  "description": "Node.js - raspberry-pi",
  "main": "app.js",
  "author": "",
  "language":"Node.js",
  "license": "",
  "scripts": {
     "start": "node app.js"
    }
}

これだけ作ったらGitHubまたはBitBucketでリポジトリを作成します。そして作成が終わったらisaaxで新規プロジェクトを作成し、その際に作成したGitリポジトリを指定します。

作成が終わるとRaspberry Pi上で実行するコマンドが表示されます。これを実行したらRaspberry Piとisaaxが繋がり、開発の準備が整った状態になります。

簡単なコードで試す

今回はテストとしてLEDを点滅させる、いわゆるLチカを試します。

const five = require("johnny-five");
const board = new five.Board();
const led = new five.Led(13);

board.on("ready", function() {
    led.strobe();
});

このコードを app.js として保存します。さらに package.json は以下のようになります。

{
  "name": "isaax-hello-world",
  "version": "0.0.5",
  "description": "",
  "main": "app.js",
  "dependencies": {
    "johnny-five": "1.0.0"
  },
  "devDependencies": {
  },
  "author": "",
  "license": "ISC"
}

これらのコードをGitリポジトリにプッシュします。コードはGitリポジトリを通じてisaaxに通知され、そしてRaspberry Piに自動的にデプロイされます。コードに問題がなければArduinoのLEDが点滅するのが確認できるでしょう。

後はRaspberry Piを通じて自由にArduinoの操作、そしてデータを取得してisaaxにアップロードというのも簡単にできるようになります。


ArduinoとRaspberry Piを連携させることで、Raspberry Pi向けには提供されていないセンサーデータを簡単に扱えるようになります。そしてネットワーク機能が貧弱なArduinoはRaspberry Piを通じてデータをアップロードしたり、コードの更新が実現できます。

isaaxを使うことで、皆さんのIoT開発がスピードアップします。ぜひご利用ください!

Isaax IoT


Leave a Reply

Your email address will not be published. Required fields are marked *