Mac で ESPr Developer: ESP-WROOM-02開発キットのシリアルポートが表示されないとき

Qiitaにも書いた記事ですが、備忘録としてこちらにも

ESPr Developer

スイッチサイエンスで販売しているESPr Developerは、ESP-WROOM-02の開発キット。
シリアルモジュールも実装されているから、USBでPCと接続するだけで、IoT開発を始められる…!

接続してもシリアルポートに出てこない

Arduinoを接続しているときは、シリアルポートのメニューにちゃんと、/dev/cu.usbmodem1411のようなポート名が表示されます。 
しかしながら、ESPr Developerを接続したときには、それらしいポートは見当たりません。ましてや、Bluetoothのはずがない…!

FT231X のVCPドライバをインストール

VCP(仮想COMポート)が必要でした!
FTDIのサイトから、Mac OS X 10.9 and aboveの64bit用ドライバをダウンロードしました。

ダウンロードしたdmgを開き、インストールします。
インストールしたあとは、再起動が必要です(そうしないとArduino IDEのポートに表示されなかった)。

シリアルポートが表示された!

無事に表示されました!
(よくわかんないけど、きっとこれがポートなんだろう!とりあえず選択しておきます)

シリアルモニタを開いて、ボーレートを115200 bpsにし、改行コードをCRおよびLFで設定します。
ESPr Developerのリセットボタンを押すと……ESP-WROOM-02からreadyのレスポンスが届きました!

readyが表示されている!

これで、ESPr Developerで開発を始められます!


なぜFTDIのVCPドライバをインストールしたか

USBに刺さっているものが、FT231Xだとわかったからですね。
(このMacについて > システムレポート… から行ける画面ですね)

システムレポートのUSBの項目

この画面を開くきっかけになったのは、「Mac USB serial port not showing」のクエリでググっている時に見た、Appleのサポートコミュニティのサイトで、「設定のところから、USBに刺さってるものが何なのか見てごらんよ」って書いてあったので、「システムレポート」にたどり着きました。

とはいえ、それよりも前に、Arduinoのフォーラムのスレッド中に解決策が書いてあったのですが、気づかず読み過ごしていました……。なぜなら最後の投稿に、「ケーブル変えたら直ったよ!やいやらw」って書いてあったので……。

ひとまず、これで開発を始められます!

Arduinoを使って娘の覚醒状態をLINE通知する(試作最終形)

3月から始めたArduinoからLINEに通知するシステムですが、4月は忙しく全く手がつかず、5月の連休にやっと最終形にたどり着きました。途中の投稿はこちら。

Arduinoを使って娘の覚醒状態をLINE通知する(まだ途中)

試作機最終形

最終形と言っているものの、ひとまず手元にあったケースに入れただけ。とはいえ、マイクで声を拾って、LINEに通知を送る目的は達成しました。

制作意図と課題

課題は、1階で食器洗いや洗濯をしていると、2階で寝ている娘の泣き声が聞こえにくいことでした。

システム

Arduinoでマイクの音を処理し、一定のレベルを超える入力があったら、娘ボットのAPIに通知します。娘ボットAPIから、LINE Messaging APIにプッシュ通知リクエストを投げ、妻と僕のLINEに通知が届くようにしました。

Arduino側の実装

ここについては、だいたい当初の予定通り、ESP-WROOM02とアンプ付きマイクモジュールをArduinoに接続するだけで達成。その他、システムの状態を表示するLEDを付けたりもしました。

最低限の実装は下の写真の通り。

 

覚醒状態検出アルゴリズム

大したことをしているわけではないです。アンプ付きのマイクモジュールがノイズを拾いやすかったことと、Arduinoで使えるデータストレージが小さいので、いろいろ処理しています。

通知までの処理は、差分→差分の移動平均→しきい値を超えた回数をカウント→カウントのしきい値を超えたら通知することにしています。

元の波形。

差分。

差分の移動平均。

ここに、声ははっきり現れるので、どれくらい長く変化が続いたかを数えることで、泣いているかどうかを判定します。

試行と感想

実際に娘が寝ている横でArduinoの電源を入れ、ちゃんと通知が届くことを確認しました。まれに泣いていなくても通知が来ることがありましたが、ある程度の精度はありました。使用した妻からは、泣いているときは通知がくるので安心との感想を得ることができました。

システムの弱点が有ることも予想できていました。大きな音のノイズには弱いです。5月上旬は寒かったので、エアコンを付けていたのですが、それから出る低周波に反応してしまいました。

差分でやっている以上、しかたがないことです。FFTなどで周波数ごとに分解して処理するようにしたら、エアコンに反応しないようにできるかもしれません。

今後の課題

いろいろありますが、ざっくり以下のような感じです。

  • ノイズに反応しないように改善する
    • ハイパス、ローパスの回路を組み込んでアンプを自作する
    • FFTをかけて、人の声の周波数帯で音量を測定するようにする
  • 機械の堅牢性を高める
    • 娘に壊されないよう、ある程度雑に扱っても壊れないようにする
    • コンセント電源をやめ、電池駆動にする
    • 専用のケースを作る
      • 手作業での木材の加工は意外と難しいことがわかったので、その他の材料を検討する
  • 2階で拾った音をそのまま1階でスピーカーなどで流せばよかったのではという代替案も出てきた

以上。

ArduinoとESP-WROOM-02(ESP8266)の接続

Arduinoを使って娘の覚醒状態をLINE通知しようとして早1ヶ月半が経ちましたが、3月後半〜4月は忙しく、全然制作が進んでいませんでした。その間に娘はすっかり成長し、寝返りも良くするようになったし、いよいよハイハイもし始めるんじゃないかという状況。別の課題が出てくる前に、泣いたら通知するところまでは作りたい。

ESP-WROOM-02(ESP8266)

とりあえずESP-WROOM-02が全然うんともすんとも言わなくて(「ready」って表示してくれなくて)しんどかった。

とりあえず、以下のような接続をしたらArduinoとシリアル通信ができた。

  • 3v3とEVに3.3Vつなぐ(EVには適当な抵抗を付けとく)
  • GNDは接地。2つあったけど片方でも良さそう。
  • RSTには3.3Vかけておく。ボタンがあれば、ボタンを押したときに接地するようにしておけばリセット機能が使える
  • GPIO15は接地(これを知らなくて1日ハマった)。なぜこれをしなきゃならないのかさっぱりわからん。

不要だった部品

  • レギュレータのモジュール(どこのメーカーかわからない3.3V、800mAのレギュレータ。Amazonで買った。Arduinoから出る3.3Vでは足りないという記事もあったが、問題なかった)
  • レベルシフタ(有るとシリアル通信が良くなるのだと思うけれど、無くても動いた)

ノイズ

ESP-WROOM-02のすぐそばで、秋月で買ったアンプ付きマイクモジュールを使っているのだけれど、かなりノイズが乗っていて使い勝手が悪い。そもそものモジュールにマイクを付けるときに温め過ぎちゃったのか、アンプ回路にWifiの電波が干渉しているのか、さっぱりわからない。

引き続きがんばる…。

Arduinoを使って娘の覚醒状態をLINE通知する(まだ途中)

制作動機と課題感

娘は家の2階で寝ているのですが、1階で食器洗いや洗濯をしていると、娘が泣いている声が聞こえず、しばらく泣いたまま放置してしまうことがありました。そこで、娘が泣き始めたらLINEに通知が行くような道具を作ろうと考えました。

関連ツール

知人や最近あった人に聞いたところによると、

  • SONYが出しているIoTデバイス「MESH」でできるよ
  • 余っているスマホがあれば「Alfred」があるよ

という有力情報をいただきました。

しかし、やはり自分で作ってみたい気持ちの方が大きかった……。

システム案

  • Arduinoで、泣いたかどうかを判定する
  • 泣いたら、独自実装したAPIにPOSTリクエストを送る(Google CloudFunctionsや、Herokuで良いと思ってる、Node.jsかGoでサクッと作るつもり)
  • APIにリクエストが来たら、LINE Messaging APIのWebHook URLを叩き、娘が泣いたことを夫と妻のスマホにPushする(あれ、Pushってできるんだっけ…?)

資材調達

そもそも家には、電子工作の道具がまったくなかったので、全て秋月電子のお店で、店員さんに聞きながら集めました。結局、抵抗とかトランジスタはいまいちわからなかったので、全てモジュールを購入しました。モジュール内に抵抗とかは実装されているので、入力する電圧や端子さえ間違えなければ大丈夫(モジュールを使う点は、なんかオブジェクト指向というか、メソッドっぽい。カプセル化されている)。

はんだ付け

電子工作自体は中学の技術の授業以来。はんだこてを使うのは、高校の放送部でケーブル補修して以来。ケーブル補修が週末の日課だったので、なんとなく自信はあったけど、あっけなく崩れた。はんだを乗せる場所(ランドっていうらしい)が小さすぎてすごく難しかった。

なんとか無事、すべてのモジュールのはんだ付けが終わって、液晶もうまく表示ができました。

次の週末は、API側の実装とArduino側の実装、どちらもできるといいなぁ。