子育てしながらエンジニアしたい

現在 3 歳 女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

ESP32 (Arduino) でアナログ距離センサー GP2Y0E02A を使う

ESP32 を仕事でいろいろ使っています。
といってもこれまでは I2C をはじめとしたデジタル信号しか使っていませんでした。
今回、アナログ信号による距離センサーを使うことになったので記録しておきます。

アナログ距離センサー GP2Y0E02A (Sharp)

akizukidenshi.com

秋月電子で購入。
電源電圧は 3.3V なので、ESP32 で使えます。
距離を電圧に変換してくれます。

測距範囲は 4cm ~ 50cm。
アプリケーションノートによると、距離に応じて以下の電圧が出力されます。

距離 電圧 (Min) 電圧 (Typ) 電圧 (Max)
50cm 0.3V 0.55V 0.8V
10cm 1.9V 2V 2.1V
4cm 2.1V 2.2V 2.3V

ESP32 との接続

f:id:edosha:20190514140126j:plain
ESP32 と GP2Y0E02A の接続

GP2Y0E02A の端子は以下のようになっています。

f:id:edosha:20190514140534p:plain
GP2Y0E02A の端子

これを ESP32 と次のように接続します。

ESP32 GP2Y0E02A
3v3 VDD
GND GND
IO35 Vout(A)
3v3 GPIO1

なお今回は Vout(A) を ESP32 の IO35 に接続しましたが、別のピンでも大丈夫です。
以下のサイトでアナログに使えるピンを解説してくれています。

ht-deko.com

距離センサーを常に使用する場合は GPIO1 と 3v3 を直結で良いようですが、
スタンバイなどを実装したい場合は IO ピンと接続するみたいです。
詳しくはアプリケーションノートで...

Arduino スケッチ

取得した距離をシリアルで送信します。

void setup() {
    // put your setup code here, to run once:
    Serial.begin(115200);
}

void loop() {
    // put your main code here, to run repeatedly:
    delay(100);

    long distA = 0;
    int i;

    // 100 回取得した結果を平均化
    for (i = 0; i < 100; i++)
    {
        distA += analogRead(35);
    }
    distA /= 100;

    long distAns1 = map(distA, 0, 4095, 0, 330);
    long distAns2 = map(distAns1, 55, 220, 50, 4);
    int distResult = distAns2;

    Serial.printf("Dist: %d cm\n", distResult);
}

こんな感じで出力されます。

f:id:edosha:20190514141512p:plain
GP2Y0E02A の出力

やってみて気づいたのですが、最小距離の 4cm を下回ると 65 cm が出力されるようです。
このへんは要注意ですね。

まとめ

ESP32 でアナログ距離センサー GP2Y0E02A を使いました。
Arduino と同様に ESP32 でも analogRead が簡単に使えました。

Ymobile から楽天モバイルに MNP した

技術的なカタイお話ばっかりだったので、たまには日常的な話を。

Emobile 時代だった Nexus 5 から、Nexus 5x へと使い続けてきた Ymobile。
契約更新月になったので、そろそろ MVNO にするかと思い立ち、各社 SIM のプランを調べてみました。
自分の使い方としては、月のデータ量 2~3GB + 短い音声通話が多いので、その条件で一番安い SIM を調べてみることに。

結果、楽天モバイルのスーパーホーダイ S にすることにしました。

楽天モバイルの月額試算

まず楽天モバイルのスーパーホーダイ S は以下のような条件です。

  • 月のデータ量 2 GB
  • 5 分の通話は何度でも無料 (楽天でんわから)
  • 楽天会員なら 1 年目は 2,138 円 / 月 (2 年目以降は 3,218 円)
  • 契約手数料 3,665 円 (税込)

この条件で、1 年契約ができるなら、1 年間だけ使えば最も安そうです。
1 年後にまた新たなプランが出てるのかもしれませんが、それはそれで嬉しいので良しとします。

また、申込みは価格コム経由ですることにしました。
価格コム経由だと \11,100 キャッシュバックがあり、他のサイトよりも良さそうだったからです。

kakaku.com

これに MNP 転出手数料 3,240 円 (税込) も加えると、1 年間のトータルで月額はこんな感じになります。

(2,138 x 12 (月額) + 3,665 (契約手数料) + 3,240 (MNP 転出手数料) - 11,100 (キャッシュバック)) / 12 = 1,788 円 / 月

今の Ymobile は約 4,300 円 / 月なので半額以下です。
安い!!

Mineo や UQ mobile なども調べましたが、ここまでの安さは実現できませんでした。
ということで楽天モバイルに決定!

Ymobile での MNP 予約番号発行

楽天モバイルに申し込む前に、まずは Ymobile で MNP の予約番号を取る必要があります。
My Ymobile からもできるようですが、わかりづらかったので音声ガイダンスでやりました。
Ymobile 端末から 116 にかけて、ガイダンスにしたがって操作します。
下記のページには MNP の項目はありませんでしたが、音声ガイダンスを聞いていたらちゃんとありました。

www.ymobile.jp

最終的にはオペレーターにつながります。
転出先とか転出理由を聞かれましたが、まぁそこはなんでも良いでしょう。

MNP 予約番号は SMS で送られてきます。

楽天モバイルの申し込み

さっきも書きましたが価格コム経由で。

kakaku.com

申込後、身分証明書の写真をアップロードする必要があります。
その後、自分の場合は 2 日間で SIM カードが届きました。

Nexus 5x の SIM ロック解除

SIM カードが届きましたが、Nexus 5x は SIM ロックがかかっているので解除しないといけません。
My Ymobile から手続きできます。

契約内容の確認・変更 -> ご契約内容の確認 -> SIM ロック解除の手続き

という感じで SIM ロック解除のメニューに入れます。
製造番号 (IMEI) を入れろと出てくるので、Nexus 5x の端末情報から IMEI 番号を探して入力します。
すると、SIM ロック番号というのが発行されます。

そうしたら、

Nexus 5x の電源 OFF -> 楽天モバイルの SIM 挿入 -> Nexus 5x の電源 ON

します。
そこで SIM ロック番号を入れるよう表示が出るので、さきほどの番号を入力します。
ハイフンは不要なので番号だけ入れれば良いようです。

これで晴れて SIM が使えるようになる・・・のですが、ここでもう一度 Ymobile の SIM に戻す必要があります。
なぜなら MNP 開通手続きをするのに、Ymobile の SIM を入れた状態で楽天モバイル開通受付センターに電話しないといけないからです。
この電話を終えたら、あらためて楽天モバイルの SIM を入れましょう。

楽天モバイルの SIM 開通

送られてきたガイドにしたがって、APN 情報などを入力します。
書かれているとおりに入力したら、無事に開通しました。

実際の使用感は、またそのうちにでも・・・

Wemos Lolin ESP32 OLED で、BME280 温湿度センサーを使う

前回の記事で、ESP32 OLED の画面に文字や図形を出力できるようになりました。

edosha.hatenablog.jp

しかし、これではまだ単体で動作しているだけです。
せっかくの組み込みデバイスなので、センサーをつなげてみたい...
ということで、わかりやすい (?) 温湿度センサーをつなげてみることにしました。

温湿度センサー BME280

BME280 は Bosch 社が出している温湿度センサーです。
温度、湿度、気圧を 1 つのセンサーで計測することができます。

www.bosch-sensortec.com

このセンサーを組み込みやすくするために、いろいろなところからモジュール化された製品が発売されています。
秋月電子スイッチサイエンスが有名どころだと思いますが、ちょっと高いのでケチって以下のものにしました。
Amazon なので他のものと合わせ買いして、送料もケチります。

接続

BME280 のピン配置については以下のサイトが詳しく記載してくれています。

ht-deko.com

また、ESP32 OLED の I2C ピンは前回の記事のように以下の配置になっています。

  • SCL: GPIO 4
  • SDA: GPIO 5

よって以下のようにつなぎます。

BME280 ESP32
VCC 3.3V
GND GND
SCL GPIO 4
SDA GPIO 5
CSB 未接続
SDO GND

ちょっと見にくいかもしれませんが、以下のような感じです。

f:id:edosha:20180112143806j:plain

MicroPython BME280 ドライバーの導入

ありがたいことに MicroPython 用の BME280 ドライバーを公開してくださっている方がいます。

github.com

bme280.py を、前回のように uPyCraft を使って ESP32 にダウンロードしましょう。

Python コード

あとは BME280 ドライバーの仕様にしたがって値を取得するだけです。
せっかくなので、取った値を OLED にも出力してみました。

import bme280
import ssd1306

i2c = machine.I2C(scl=machine.Pin(4), sda=machine.Pin(5))
bme = bme280.BME280(i2c=i2c)
oled = ssd1306.SSD1306_I2C(width=128, height=64, i2c=i2c)

def show():
    oled.fill(0)
    oled.text(bme.values[0], 0, 0)
    oled.text(bme.values[1], 0, 10)
    oled.text(bme.values[2], 0, 20)
    oled.show()

show()

f:id:edosha:20180112145343j:plain

取れた!!!!
一つ一つ、やってることは簡単なことなのですが、実際に取れると感動します。

なお画像には、関係ないボタンがうつってますが、これは次回以降使おうと思って設置したものです。
次は何をするか決めてませんが... 乞うご期待 (?)