環境データ取得のIoT化(1)ESP-WROOM-02の準備(Arduino IDE 1.8 との通信準備)
室内の気温・湿度・気圧について、取得データを遠隔でみることができるように設定していく備忘録です。
大まかには
1)ESP-WROOM-02でデータ取得し、Wifiでクラウドに送る
2)クラウドで表示する
の流れにします。まずはESP-WROOM-02のセットアップから行います。
(1)使用機材
*秋月電子のWi-Fiモジュール ESP-WROOM-02 DIP化キット
(AE-ESP-WROOM-02)
ピンをはんだ付けして出来上がりです。
*3.3Vで通信できるUSBーシリアルコンバーター
AE-ESP-WROOM-02とパソコンの間で通信するために必要です。
AE-ESP-WROOM-02は3.3V駆動のため、3.3Vで通信できるものが必要です。
#5V駆動のピンをESP-WROOM-02へ刺すと壊れますので注意してください。
amazonでみつけた3個700円の
KKHMF 3個 CH340モジュール STC マイクロ コントローラー ダウンロード USBターンTTLシリアル
にしました。
こちらDTR, RST信号がなく、TX, RX, GNDの3ピンしか使用できません。
ESP-WROOM-02ですが、DTRやRST信号が使えると
プログラムの書き込み制御がスマートにできます。
今回はあえてDTRを使わない、単純なやり方でトライしていきます。
(2)ESP-WROOM-02の結線方法
DC3.3V電源は別途用意してあると仮定しまして、
無線LANのユニットを上にして、上から順番に
左側は(下図では下側を左から順に)
3V3:3.3V
EN:10kΩの抵抗を介して3.3V
IO14:無し
IO12:無し
IO13:無し
IO15:10kΩの抵抗を介してGND
IO2:10kΩの抵抗を介して3.3V
IO0:10kΩの抵抗を介して3.3V(とGNDに直結*1*2)
右側は(下図では上側を左から順に)
GND:GND直結
IO16:RSTと直結(*3)
TOUN:無し
RST:10kΩの抵抗を介して3.3V
+IO16と直結
(+ハードのリセット時にGNDへ一瞬だけ直結*1)
GND:USBシリアルのGND
TXD:USBシリアルのRXD
RXD:USBシリアルのTXD
IO4:無し
注意事項
*1 ESP-WROOM-02にプログラムの書込みか実行か、どちらを実施するか指定する
ピンになっています。今回の接続試験では、IO0,RSTともにGNDには接続しない形に
しておいてください。
*2後ほど説明しますが、
ESP-WROOM-02のプログラム書き込み時、IO0はGNDに接地する必要があるのですが、
このとき10kΩの抵抗を介して3.3Vにも接続しておかないと、
書き込みエラーが発生することが多いのでご注意ください(エラーの発生しないこともある)。
*3 こちらも後ほど、ESP-WROOM-02をDeepSleepモードで動かすために必要なので、
あらかじめ結線しておきました。
(3)シリアル通信の接続試験(Arduino IDE 1.8.##の場合)
早速ですが、パソコンからArduino IDEを使って通信テストをします。
ESP-WROOM-02ですが、電源を入れた直後の通信速度は74880bpsです。
この通信速度が厄介で、手元のwindows10に入っている、tera termや
Arduino IDEのver2以降では74880bpsの通信ができませんでした。
Arduino IDEの旧バージョン(1.8.##)では設定できますので
そちらでみていきます。
ESP-WROOM-02の結線について、上記(2)の*1の項目ですが、
IO0とRST共にGNDから外しておいてください。
1)まずUSBシリアルをパソコンに接続して、COMポートの情報を入手した上で
Arduino IDEの[ツール]メニュー~[シリアルポート]で目的のポートを選択します。
2)シリアルポートのデータを読み取ります。
Arduino IDEの[ツール]メニュー~[シリアルモニタ]を起動し、改行コードをCR+LFに
ボーレートを74880bpsに設定します。その後ESP-WROOM-02の電源をいれると、
シリアルモニタに以下のようなメッセージが流れると思います。
(↓下記の時刻は電源を入れた時刻に依存します)
---------------
13:49:00.660 -> ets Jan 8 2013,rst cause:1, boot mode:(3,0)
13:49:00.660 ->
13:49:00.660 -> load 0x40100000, len 2592, room 16
13:49:00.660 -> tail 0
13:49:00.660 -> chksum 0xf3
13:49:00.660 -> load 0x3ffe8000, len 764, room 8
13:49:00.660 -> tail 4
13:49:00.660 -> chksum 0x92
13:49:00.660 -> load 0x3ffe82fc, len 676, room 4
13:49:00.706 -> tail 0
13:49:00.706 -> chksum 0x22
13:49:00.706 -> csum 0x22
13:49:00.706 ->
13:49:00.706 -> 2nd boot version : 1.7(5d6f877)
13:49:00.706 -> SPI Speed : 40MHz
13:49:00.706 -> SPI Mode : DIO
13:49:00.706 -> SPI Flash Size & Map: 16Mbit(512KB+512KB)
13:49:00.706 -> jump to run user1 @ 1000
13:49:00.706 ->
13:49:00.798 -> rf cal sector: 507
13:49:00.798 -> freq trace enable 1
13:49:00.798 -> rf[112] : 03
13:49:00.798 -> rf[113] : 00
13:49:00.798 -> rf[114] : 01
13:49:00.798 ->
13:49:00.798 -> SDK ver: 2.2.1(6ab97e9) compiled @ Jun 7 2018 13:59:14
13:49:00.798 -> phy ver: 1136_0, pp ver: 10.2
13:49:00.798 ->
13:49:00.798 ->
13:49:00.798 -> ⸮r⸮)
---------------
のようなアウトプットが表示されると思います。
表示されたらシリアル通信はひとまずOKです。
ここで、-> 2nd boot version : 1.7(5d6f877)以降の3行の情報
------------------------------------------
(#時刻表示#) -> SPI Speed : 40MHz
(#時刻表示#) -> SPI Mode : DIO
(#時刻表示#) -> SPI Flash Size & Map: 16Mbit(512KB+512KB)
------------------------------------------
が、プログラム書き込み時に必要になりますのでメモしておいてください。
なおこの情報は、一度プログラムを書き込むと見えなくなります
(見る方法は無いわけではないですが、ここでメモしておいた方が楽です)。
最終行で文字化けしていますが、通信速度が115,200bpsに変わったためです。
115,200bpsではATと表示されると思います。
今回は使用しませんが、これ以降はATコマンド(詳細はググってください)を
受け付けるようになっています。
flsah sizeの内容については、espressifのドキュメントに書かれています
(ちなみにesp-wroom-02はEspressif Systems社のESP8266EX(SoC 32bit MCU)を搭載していて、
espはespressifの頭3文字)。
同社のESP8266のAT Instracution setによるとフラッシュサイズについて
2Mbyte(=16Mbit)には
16 Mbit-C1:16 Mbit Flash, Map: 1024 KB + 1024 KB
16 Mbit:16 Mbit Flash, Map: 512 KB + 512 KB
4Mbyt(=32Mbit)には
32 Mbit-C1:32 MBit Flash, Map: 1024 KB + 1024 KB
32 Mbit:32 Mbit Flash, Map: 512 KB + 512 KB
があるようです。
今回のチップは枝番-c1がつかない16 MBitのタイプに相当します。
512kb+512kbの512kbの中身はこちらのページの下の方
「SPI Flash Rom Layout (with OTA upgrades)」に記載されています。
メモリがどのタイプに当たるかの情報は次節のArduino IDEとの接続時の設定で必要となってきます。
次節で記載しますが、Arduino IDEでのタイプごとのフラッシュサイズの設定は同社のこちらに記載されていて
OTA(詳細はググってください)を使用するならば以下の通りとなるようです
(ちなみにarduino ide側のflash sizeの設定はOTA無しがありません)。
flash_size arg |
Number of OTA slots |
OTA Slot Size |
Non-OTA Space |
---|---|---|---|
2MB |
2 |
512KB |
1024KB |
4MB |
2 |
512KB |
3072KB |
2MB-c1 |
2 |
1024KB |
0KB |
4MB-c1 |
2 |
1024KB |
2048KB |
3)リセット動作の確認をします
各配線は2)のままで、RSTピンから配線を出して、一瞬だけGNDに接続してから離すと
上記2)とほぼ同じメッセージ(ただし1行目だけが下記の通り)が流れると思います。
(#時刻表示#) -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
1行目のメッセージのメッセージの中のcause:ですがザクっと
cause:2はリセットピンを使ってリセットしました
cause:1はリセットピン以外でリセットしました
という意味と思っておけば大丈夫です。
(4)プログラム書き込み用の配線準備
次にプログラム書き込み用に配線を変更します。
ESP-WROOM-02の結線について、上記(2)の*1の項目ですが、
IO0のGNDはつないでおいて、
RSTのGNDは外しておいてください。
またESP-WROOM-02の電源はいったん外してくだし。
1)まずUSBシリアルをパソコンに接続して、COMポートの情報をゲットし
Arduino IDEの[ツール]メニュー~[シリアルポート]で目的のポートを選択します。
2)シリアルポートのデータを読み取ります。
Arduino IDEの[ツール]メニュー~[シリアルモニタ]を起動し、改行コードをCR+LFに
ボーレートを74880bpsに設定します。
その後ESP-WROOM-02の電源をいれると、シリアルモニタに
ets Jan 8 2013,rst cause:1, boot mode:(1,7)
のようなアウトプットが表示されると思います。
表示されたらシリアル通信はひとまずOKです。
GND線について、IO0とRSTの両者ともGNDにつないであると
電源を入れてもアウトプットは出てきません。その場合はRSTのGND線を
抜いてからやり直してください。
3)ESP-WROOM-02のリセットについて
RSTピンのGND線の話題がでましたが、RSTピンについて
GNDピンに接地してから離すと、ハードウェアリセットが掛かります。
RSTピンによるリセットが掛かった場合、シリアルモニタの表示が
ets Jan 8 2013,rst cause:2 boot mode:(1,7)
のように,cause:の数字が2となりますので試してみてください。
ここまでで、パソコンからArduino IDE 1.8を介したESP-WROOM-02との通信の準備ができました。
次回はArduino IDE側の準備を行います。
« etopo1を利用してQGIS3で海底地形図を描く | トップページ | 環境データ取得のIoT化(2)Arduino IDE 1.8 の準備 »