温度ロガーをの制作 (Arduino、ESP-WROOM-02)

/




Bluetoothモジュールを秋葉原まで買いに行く (2018/11/19)





ほとんど手をつけずに眠っていた、Arduino Unoスターターキット。
アプリ開発の息抜きに、温度センサーで遊んでみる。

先日キャンプで、寝るときの寒さに死ぬ思いをしたので、テント内とテント外の温度変化的なものをログれれば、などと考えているのである。
Arduinoにはタイムスタンプがないので(できないことはないのだが)、温度データーをスマホに飛ばしてスマホのunixtimeスタンプを使うことにする。
通信は、Wifi、Bluetooth、はたまたライン入力を使った音声データでのシリアル通信などを考えたが(FM変調的な)、汎用性を考えると素直にBluetoothを使った方が良さそうである。

ところで、プログラミングのような不健康で孤独な作業には、適度な運動が必要だ。
そんな口実をイチイチつけ、Bluetoothモジュールを買いに秋葉原まで歩くことにした。
赤羽から秋葉原までは二時間程度、意外と近い。



GoogleMapのチートは2回だけ、ほぼカンで歩いた。
田端あたりの土地勘がないため、焦りが形跡に出ていて面白い。
今度行くとしたら東大経由または上野経由が面白そうだな。
秋月電子、千石電商と回った。千石電商で小一時間、悩む。
結局このBluefruit LE UART Friendを2100円で購入。



ググってみると英語のみの情報しかないので辛いが、まぁなんとかなることでしょう。
付近の萌え萌えキュンには目もくれず、安定のケバブを食べ、そそくさと帰途についた。


BluetoothモジュールからのメッセージをiPhoneで受信する (2018/11/20)



まずは、Bluefruitの半田付け。
ピンを数カ所やるだけなので、物足りない半田付け作業だ。

トライアンドエラーでやっていくうちに、配線はこうなった。

Bluefruit Arduino
DFU 未接続
GND GND
RTS 未接続
VIN 5V
RXI DIGITAL 9
TXO DIGITAL 10
CTS DIGITAL 11
MOD 未接続

また、スイッチはUART側にしておく。

スマホからBluefruitに接続する専用のアプリがあるのでインストールする。
https://itunes.apple.com/jp/app/adafruit-bluefruit-le-connect/id830125974?mt=8&uo=4
https://play.google.com/store/apps/details?id=com.adafruit.bluefruit.le.connect

Arduinoにプログラムを書き込まなくても電源を入れれば、Bluefruitとは接続できる。



今度はArduinoのIDE側の設定をしていく。

Bluefruit LE UART Friendの情報はこちら。
https://learn.adafruit.com/introducing-the-adafruit-bluefruit-le-uart-friend/introduction

英語の情報できついが、なんとかやっていく。

サンプルコード(Adafruit_BluefruitLE_nRF51)をダウンロードする。
https://learn.adafruit.com/introducing-the-adafruit-bluefruit-le-uart-friend/software

解凍したらフォルダ名をAdafruit_BluefruitLE_nRF51にしてArduinoのライブラリフォルダに取り入れる。
場所はDocuments -> Arduino -> librariesになっていると思う。
これでArduino IDEのスケッチ例の中にAdafruit_BluefruitLE_nRF51のサンプルコードが入った。

サンプルコードを元に改造していく。
いらなそうなものは削って見やすくすると仕組みが分かってくる。
こちらは「debug」という文字を1秒間に一回、アプリへ送信するだけのプログラムだ。



結果を見てみよう。


Success! Connecting Arduino and smartphone with Bluetooth.

みごと、接続成功!⚡️


iOSとArudinoのBluetooth通信 (2018/11/21)



今度はiOSからArduinoへメッセージを投げて、さらにそのメッセージをArduinoから受け取ってみる。



Swiftでこんな感じのiOSアプリを作ってみることにした。
これができるようになればBluetoothでArduinoからデータを読み込んだり、Arduinoを操作したりすることができるようになる。





Arduino側のスケッチはこうなった。



見事、対話に成功した!


Successfully talked with iOS and Arduino on a Bluetooth connection!


[参考]
SwiftのBluetooth処理の大部分はこちらを参考にさせていただいた。
https://qiita.com/eKushida/items/def628e0eff6c106d467

UUIDはbluefruitのサイトに記されている。
https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/adding-app-support

Bluetooth用語に戸惑っていたが、こちらを読めばざっくりイメージがつく。
http://jellyware.jp/kurage/bluejelly/ble_guide.html


ESP-WROOM-02でWiFi通信するまで、その1 (2018-11-23)



Arduinoの情報を漁ってみると、数年前にESP-WROOM-02という画期的なWifiモジュールが出ていた事を知った。

早速、秋月電子で買ってきた。



1280円という安さもそうだが、Arduino UNOなどをわざわざ買わなくても、Arduino IDEで開発できてしまう事だ。
ちょっとしたセンサをつけて、IoT化なんてことができてしまうのだろう。

開発環境はMacBookPro(macOS Mojave 10.14)でおこなっていく。

秋月のESP-WROOM-02開発キットマニュアル。手順通り進めていく。
http://akizukidenshi.com/download/ds/akizuki/AE-ESP-WROOM02-DEV.pdf



動作確認



1. USBで直接つなぐと赤くLEDランプがつく。
2. Arduino IDEを立ち上げ、新規スケッチを開いておく。
3. メニューのツール->シリアルポートの一覧から、それらしきものを見つけ選択。
4. その後、シリアルモニターを立ち上げ、改行を「CRおよびLF」にし、通信速度を「115200bps」を選択する。
5. ESP-WROOM-02のRSTスイッチを押すと、文字化けしたメッセージが出てくるが、最後にReadyと帰って来ればおk。
6. 今度はシリアルから「AT」と入力して、OKと返ってくればおkだ。


Arduinoスケッチを書き込んでみる



半田付けをささっと終わらせ、Lチカ確認できるようにする。



IEDの設定は、秋月のマニュアル通り進めていく。
http://akizukidenshi.com/download/ds/akizuki/AE-ESP-WROOM02-DEV.pdf

何度かエラーの体験をしたが、この設定でうまく書き込めた。



書き込みをするときは、毎回次の手順を忘れないこと。
RSTとPGMを同時に押して、RSTからPGMの順番に離していく。


成功!



とりあえず、青色ダイオードのLチカに成功した。


次回はいよいよWifi経由で通信してみよう。

追記:
ちなみにESP-WROOM-02でLチカさせるのに70mA必要のようだ。




ESP-WROOM-02でWiFi通信するまで、その2 (2018-11-24)



秋月電子のマニュアル通り、ESP-WROOM-02をアクセスポイントにしてWiFiでダイレクトに接続してみる。
http://akizukidenshi.com/download/ds/akizuki/AE-ESP-WROOM02-DEV.pdf

スケッチ例の、ESP8266WiFi -> WiFiAccessPointを開く。



サンプルコードをちょっとだけ編集する。



スケッチをESP-WROOM-02に書き込む。
自分で設定したSSIDがWiFi接続にあらわれるので、それを選択してパスワードを入力する。
ちなみにパスワードは8文字以上でないと機能してくれないようだ。



シリアルモニタを開いてRSTボタンを押せば、ESP-WROOM-02のIPアドレスを教えてくれる。
ブラウザから http://192.168.4.1/へアクセス。



みごとWiFi通信に成功した!


やっぱりBluetooth通信にもどす、その1 (2018-11-24)



ESP-WROOM-02に浮気してしまったが、秋葉まで歩いているうちに少し冷静になった。



素直にArduino UNOを使った方がデバッギングしやすいのでは?
センサで遊んだり、特性を調べたり、手段が目的化してしまう人にはArduino UNOが良いんではないだろうかと。
個人で使うには、Arduino UnoでBluetooth通信がスマートではないのかと。

二日間さわってみて、ESP-WROOM-02の不満がある。

1. ADコンバーターが貧弱、1端子で1Vの範囲、使いづらい。
2. 書き込みエラーが起こりやすい。(書き込みリセットスイッチを押し忘れるから)
3. そもそもWiFi経由でログとる必要あるの?
4. 電力消費が気になる。
5. 電源供給を自前しなければならない。

1の「ADコンバーターが貧弱、1端子で1Vの範囲、使いづらい。」の件、Arduino UNOは5V、1024bit分解能のADコンバーターが5もついている。
1024bitはお遊びには十分、本気を出すなら自前でADコンバーターを用意すれば良い。

2の「書き込みエラーが起こりやすい。」の件、これは、Arduino UNOはよくできていて、リセットボタン押さずともスケッチ書き込みができる。
PCのプログラミングに慣れっこの世代にはとても大切な心遣いではないだろうか?

3の「そもそもWiFi経由でログとる必要あるの?」の件、「それを言っちゃあ、お終いよ」でもでも、IoTにするメリットは、巨大資本のメリットでしかないのでは?
IoT家電化すると、物レベルで人々の行動ログを取れてAnalytiscできるわけ。フィードバックが得られるから、IoT家電をバラまいた方がよりコスパ高い製品が作れるでしょう。

4の「電力消費が気になる。」の件、感覚的にBLEよりはWiFiの消費電力の方が大きそう。

5の「電源供給を自前しなければならない。」の件、ESP-WROOM-02でちょこっとテストしたいときは、電源供給が貧弱なので別途自前で電源回路を組んだり、いちいち電源のことまで考えたりしなければならない。目的がはっきりしていて、回路ができ上がっているならばよいが。比べてArduino UNOは5V、3.3Vの電源が簡単に取れるのでセンサー回路設計に集中しやすい。

そんなこんな思って、Arduino UNOをもう一度見直してみた。まずはデバッグ環境整えるべきかなと。
ブレッドボードを占有しているBluetoothモジュールは、どこかに納めたい。
しかし、これだけのためにシールドは大げさすぎるだろう。
ちょうどロゴの所にスペースがあったので、Bluetoothモジュールを埋め込んでみた。







電源は3端子レギュレーターへ直接接続。
これで左側のブレッドボードがスッキリした。


温度センサーDHT11を実装してみる (2018-11-24)





湿度と温度が測れるデジタルセンサDHT11をArduinoに2チャンネルで接続してみた。
屋外の気温と、屋内の気温を測定している。
Bluefruit LE UART Friendを通して、Bluetooth経由でiOSと接続。
Arduinoからの温度データをiOSアプリで受信している画像だ。

温度センサは取り変え可能なように、3極のオーディオケーブルとミニフォンプラグで取り付けてみた。
5V電源、GND、DATAである。



実際ここまでやってみたが、Arduino母体から有線でセンサを配線するというのがどうも気に入らない。
センサの位置は、その時々のアイデアで、雰囲気で位置を決めたいものである。
有線に縛られたくないのである。
そうなると、やっぱりESP-WROOM-02に戻るのかなぁ。。。


ESP-WROOM-02でSSLでHTTPSリクエストしてみる (2018/11/26)



スケッチ例のサンプルESP8266WiFi -> HTTPSRequestを元にHTTPSでリクエストを投げてみた。
3秒間に一回、SSL経由でPOSTデータを投げている。
尚、送信先のサーバーには、Let's encryptを設定済みだ。



サーバー側のスクリプトはこちら、いたって簡単な処理だ。





GETでパラメーターを渡してしまうと、SSLの意味がないと思うのでPOSTで送信した。
これを元にセンサの値をサーバーへ投げて、サーバー側ではUnixtimestampと共にデータをログって行こうと思う。