nefry
NefryBT
NefryDay 15

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

はじめに

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