3B+で感圧センサーの値を、A/Dコンバーターを経由してI2CでNode.jsを使って取得するNode.jsRaspberryPiI2C背景IoT界隈に私のようなWEB系エンジニアが入り込みやすい時代になりました。パッケージ化された電子工作部品がどんどん出回り始め、ライブラリなども増えてきたおかげで、PythonやNode.jsを使った電子回路の制御がお手軽に出来るようになってきています。必要なパーツはほとんどAmazonで揃いますし、秋月電子通商やスイッチサイエンスなどの通販サイトを探せば使いやすいパーツがデータシートのリンク付きで数多く掲載されています。IDLE(Pythonの開発環境)が最初から入っていたり、Node.jsもNPMを探せば各種モジュールを扱うためのパッケージが転がっているので、それらを使えば簡単に入門することができます。3B+で感圧センサーの値を、A/Dコンバーターを経由してI2CでNode.jsを使って取得」してみたいと思います。今回、既に先人がいたので、下記サイトを参考に回路図を設計していきます。下記サイトと異なる点として、今回はMCP3002を使ったSPI通信ではなく、ADS1115を使ったI2C通信で試してみたいと思います。必要なものは下記です。参考までに購入元リンクも置いておきます。3B+https://www.amazon.co.jp/gp/product/B07BFH96M3/感圧センサーhttps://www.switch-science.com/catalog/2614/A/Dコンバーター(ADS1115)https://www.amazon.co.jp/gp/product/B0793J1YKP/ブレッドボード・ジャンパーワイヤー(あると便利)ワニ口クリップブレッドボードとワニ口クリップは適当なものを使ってます。ちなみにラズパイ側のGPIOがオスなので、オスメスのジャンパーワイヤーがあると便利です。ブレッドボード)https://www.amazon.co.jp/gp/product/B06ZZXH4XT/Fritzingで配線図・回路図の作成ブレッドボードの配線図や回路図の作成にFritzingを使います。Downloadhttp://fritzing.org/download/Fritzingでパーツ作成(ADS1115)FritzingにはADS1115のパーツが見つからなかったので今回適当に作成しました。適当なのでかなり手抜きで荒いです。本当はブレッドボードに直接配置出来るようにしたかったのですが、サイズを間違えたのかうまくいかず・・・。今回のざっくり設計には十分なのでこれをそのまま使おうと思います。ちなみにパーツ作成は下記サイトを参考にしました。CS5.1でも割と簡単に作れたので、なかったらどんどん作ると良さそうです。Piの3B+がなかったので、3Bをそのまま使ってます。※ちなみにケースは下記のものを使ってます。3B+用https://www.amazon.co.jp/gp/product/B07LGHZF8W/A/DコンバーターとI2C通信(ADS1115)について配線についてですが、今回把握しておく必要があるのがA/DコンバーターとI2C通信です。Piに送れるようにデジタル信号に変換します。I2C通信は2本の信号線で複数の端末と通信するための方式です。今回だと下記のような構成が可能で、4×4=16個のセンサーを2本の信号線でぶら下げることができそうです。PiADS1115感圧センサーADS1115(0x48~0x4Bの最大4つ)(A0~A3の最大4つ)ADS1115の各インターフェースについてADS1115の各インターフェースについて簡単に記載しておきます。VDD:プラス電源GND:信号グラウンドSCL、SDA:I2C通信の信号線ADDR:I2C通信をする際のアドレスを決めるために使われる。繋げる先で下記のようにアドレスが変わるGND:0x48VDD:0x49SDA:0x4ASCL:0x4BALRT:入力電圧が閾値を超えた時にアラートのデジタル信号を出すA0~A3:各アナログ信号の入力ADDRは今回GNDに繋げることで0x48のアドレスでI2C通信を行うように設定しています。感圧センサーについて感圧センサーですが、実際には圧がかかった際に抵抗値が変わる可変抵抗器と考えると分かりやすいと思います。つまみ回す代わりに圧をかけるイメージ。感圧センサーの代わりに可変抵抗器入れてもOKです。B+を動かすために、まずOSであるRaspbianをSDカードかUSBメモリにセットアップします。SDカードがありませんでした。B+からはUSBブートが標準対応となっているとのこと。そのため、今回は手元のUSB3.0、8GBのUSBメモリを使ってRaspbianをセットアップしていきます。手元のPCに下記サイトから最新のRaspbianとWin32DiskImagerをダウンロード・解凍し、Win32DiskImagerでRaspbianをUSBメモリに書き込みます。ダウンロードhttps://www.raspberrypi.org/downloads/raspbian/Win32DiskImagerhttps://ja.osdn.net/projects/sfnet_win32diskimager/結構時間がかかるのですが、手元だと10~20分くらいで完了しました。Piの電源を入れればOKです。B+」で標準対応になったUSBブートを試してみた。PiでI2C通信が出来るように設定するターミナルでraspi-config叩いても良いのですが、せっかくなのでGUI上から設定します。Piを操作していますが、今回は必須ではありません。Piの設定をクリックします。インターフェースタブを選択し、I2Cを有効にします。Node.jsのraspi-kit-ads1x15パッケージを使って、A/DコンバーターとI2C通信するさて、I2C通信が出来るようになりました。後は具体的なプログラムを用意して、実際にA/Dコンバーターと通信してみます。今回使用するのはraspi-kit-ads1x15パッケージですが、これが無くともi2c-busで通信することは可能です。i2c-busは一般的なi2cの通信をするだけのものなので、これだけではADS1115との通信について全て1から書く必要があります。raspi-kit-ads1x15パッケージであれば、この辺りは抽象化されて呼び出せばすぐに分かりやすく情報を手に入れることができます。I2Chttps://www.npmjs.com/package/raspi-kit-ads1x15i2c-busでの通信については下記サイトを参考にしました。piのハードウェアを叩く7つの方法https://qiita.com/ksksue@github/items/d0f02675f11ab38c190c#4-i2c%E9%80%9A%E4%BF%A1%E3%81%99%E3%82%8BNode.jsのインストールまず最初にNode.jsをインストールします。アップデートしておきます。nodeのバージョン管理のため、NodeBrewをセットアップします。現時点で最新のNode.jsをインストールしておきます。続いて、npmで必要なパッケージを取ってきます。--save-devこれで準備が整いました。後はここにスクリプトを書いて置いていくだけです。A/Dコンバーターとの通信用サンプルスクリプト下記サイトにサンプルがあるのですが、これだとADS1015用なので一部書き換えて使います。nanoかvmでindex.jsとして保存します。ここをADS1115に修正します。});});I2Cの情報を取得さぁ、実際に通信してみましょう。0.45088876003295997現在のValueとVoltsが表示されました。取得したデータをブラウザ上で表示させています。upLoginユーザーは見つかりませんでした。