Edited at
NefryDay 15

NefryBTでGroveセンサーをつなげる時の?について

More than 1 year has passed since last update.


はじめに

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 ShieldD7端子に接続しています。

 image.png

 [Seeed社 HPより]

 この例から、超音波センサーは、デジタル(D)に接続すれば良さそうということがわかります。NefryBTはデジタルがD2なので、D2に接続します。

image.png


フェーズ2:ライブラリが必要(な時がある)

 センサーの中には、ライブラリが用意されていて、サンプルもこのライブラリを使用したものになっています。

 先ほどの超音波センサーにもライブラリがあり、Githubからダウンロードして、インストールする必要があります。


Seeed社のHPをみよう

超音波センサーのHPのSoftwareの箇所にGithubのダウンロードリンクとライブラリのインストール方法へのリンクがあります。

image.png

ライブラリのzipファイルをダウンロードして、Arduino IDEの「スケッチ」-「ライブラリをインクルード」-「.zip形式のライブラリをインストール」にてダウンロードしたライブラリのzipを指定するとインストールできます。


フェーズ3:ソースをコピぺ

 超音波センサーのHPのサンプルコードをコピペするのですが、ちょっとだけ修正が必要となります。

 ここで問題となるのが、D2に接続したセンサーは、このサンプルの「Ultrasonic ultrasonic(7);」の7はいくつにすればいいのだ?という疑問にぶつかります。

 

image.png


NefryBTの説明書をみよう

 NefryBTの説明書は、dotstudio株式会社NefryBT関連リンク内の説明書にて公開されています。

 このうち、「各入出力のピンの機能」にNefryBTのピンと、ESP32のピンのマッピング表があるので、ここから、NefryBTのD2がESP32ピンの何番になっているのかを調べます。

image.png

 すると、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との繋ぎ方や、サンプルソースなどをまとめていけたらと思います。