#はじめに
Nefry Advent Calendar 2017 の15日目です。よろしくお願いします。
NefryBTをお借りしてから、少しずつですが勉強中です。
未だ初心者の域を超えておらず、でも初心者ならではの疑問、つまずきは今しかない(たぶん)と思うので、**「NefryBTでLチカをして、さあGroveセンサーをつなげてみるぞ」**のフェーズで起こりうる問題について、超音波センサーを例にまとめてみようと思います。
#フェーズ1:Groveセンサーをつなげる
NefryBTはGrove端子があるので、Groveセンサーを手軽に接続できる・・はずなのですが、4つのGrove端子のうち、どこに接続すればいいのかがわかりません。
Seeed社のHPをみよう
Seeed社の各センサーのHPにはArduinoのGrove Base Shieldの接続例が記載されています。例えば、超音波センサーでは、Grove Base ShieldのD7端子に接続しています。
この例から、超音波センサーは、デジタル(D)に接続すれば良さそうということがわかります。NefryBTはデジタルがD2なので、D2に接続します。
#フェーズ2:ライブラリが必要(な時がある)
センサーの中には、ライブラリが用意されていて、サンプルもこのライブラリを使用したものになっています。
先ほどの超音波センサーにもライブラリがあり、Githubからダウンロードして、インストールする必要があります。
Seeed社のHPをみよう
超音波センサーのHPのSoftwareの箇所にGithubのダウンロードリンクとライブラリのインストール方法へのリンクがあります。
ライブラリのzipファイルをダウンロードして、Arduino IDEの「スケッチ」-「ライブラリをインクルード」-「.zip形式のライブラリをインストール」にてダウンロードしたライブラリのzipを指定するとインストールできます。
#フェーズ3:ソースをコピぺ
超音波センサーのHPのサンプルコードをコピペするのですが、ちょっとだけ修正が必要となります。
ここで問題となるのが、D2に接続したセンサーは、このサンプルの「Ultrasonic ultrasonic(7);
」の7は**いくつにすればいいのだ?**という疑問にぶつかります。
##NefryBTの説明書をみよう
NefryBTの説明書は、dotstudio株式会社のNefryBT関連リンク内の説明書にて公開されています。
このうち、「各入出力のピンの機能」にNefryBTのピンと、ESP32のピンのマッピング表があるので、ここから、NefryBTのD2がESP32ピンの何番になっているのかを調べます。
すると、23番であることがわかりますので、先ほどの「Ultrasonic ultrasonic(7);
」は、「Ultrasonic ultrasonic(23);
」 に置き換えることになります。
あとは、「#include <Nefry.h>;
」 を追加すれば、完成です。
#include <Nefry.h>
#include <Ultrasonic.h>
Ultrasonic ultrasonic(23);
void setup() {
Serial.begin(9600);
}
void loop() {
long RangeInInches;
long RangeInCentimeters;
Serial.println("The distance to obstacles in front is: ");
RangeInInches = ultrasonic.MeasureInInches();
Serial.print(RangeInInches);//0~157 inches
Serial.println(" inch");
delay(250);
RangeInCentimeters = ultrasonic.MeasureInCentimeters(); // two measurements should keep an interval
Serial.print(RangeInCentimeters);//0~400cm
Serial.println(" cm");
delay(250);
}
シリアルモニタへの出力から、Web Consoleに変えたソースがこちら
#include <Nefry.h>
#include <Ultrasonic.h>
Ultrasonic ultrasonic(23);
void setup() {
}
void loop() {
long RangeInInches;
long RangeInCentimeters;
Nefry.println("The distance to obstacles in front is: ");
RangeInInches = ultrasonic.MeasureInInches();
Nefry.print(RangeInInches);//0~157 inches
Nefry.println(" inch");
Nefry.ndelay(250);
RangeInCentimeters = ultrasonic.MeasureInCentimeters(); // two measurements should keep an interval
Nefry.print(RangeInCentimeters);//0~400cm
Nefry.println(" cm");
Nefry.ndelay(250);
}
最後に
超音波センサーを例にまとめましたが、前回NefryBTからセンサーの値をSlackに投稿するで使用したJoystickはアナログだったので、analogReadはどうするんだといった疑問がありました。使用するセンサーごとにノウハウも違ってくると思いますので、各センサーごとにNefryBTとの繋ぎ方や、サンプルソースなどをまとめていけたらと思います。