最初に
IoT機器を作りたいと思い、温度取得まで出来たのでここにメモを残します。
用意するもの
・BMP280
(Amazonだと安くて1個200円くらい、ただ湿度がとれるBME280のほうが少し高いけど良いかもしれません。)
※Amazonにもありますが、改造が必要です。
実施
配線
1.準備
モジュールを利用するために、下記のURLをボードマネージャに追加します。
http://arduino.esp8266.com/stable/package_esp8266com_index.json
ボードはボードマネージャからesp
と探すとesp8266
というのが出るので、この設定を利用します。
私の設定値はこんな感じです。
2.Code
モジュールインストール
まず、利用するモジュールをダウンロードします。
ライブラリをインクルードからライブラリの管理を選択します。
ライブラリマネージャ
でBME280
と検索します。
BME280というモジュールをインストールします。
ソースコード編集
モジュールにはコーディング例が入っているのでこれを利用します。
ファイル
のスケッチ例
と選択して、下の方に行きます
BME280
の中にBME_280_I2C_Test
という項目があるのでこれを選択します。
ソースコードを下記のように変更します。
Wire.begin();
を削除し、2行追加します。
これはi2cで利用するポートの初期化と指定です。
Wire.pins(0, 2); //追加
Wire.begin(0, 2); //追加
//Wire.begin(); 削除
while(!bme.begin())
{
Serial.println("Could not find BME280 sensor!");
....
3.書き込みとテスト
これを、書き込み用の環境に接続し、書き込みを行います。
下記のような表示が出れば正常に終了です。
Executable segment sizes:
IROM : 238256 - code in flash (default or ICACHE_FLASH_ATTR)
IRAM : 27680 / 32768 - code in IRAM (ICACHE_RAM_ATTR, ISRs...)
DATA : 1260 ) - initialized variables (global, static) in RAM/HEAP
RODATA : 888 ) / 81920 - constants (global, static) in RAM/HEAP
BSS : 25456 ) - zeroed variables (global, static) in RAM/HEAP
最大958448バイトのフラッシュメモリのうち、スケッチが268084バイト(27%)を使っています。
最大81920バイトのRAMのうち、グローバル変数が27604バイト(33%)を使っていて、ローカル変数で54316バイト使うことができます。
esptool.py v2.8
Serial port /dev/cu.wchusbserial1410
Connecting....
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: b4:e6:2d:26:d9:43
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 1MB
Compressed 272240 bytes to 198387...
Writing at 0x00000000... (7 %)
Writing at 0x00004000... (15 %)
Writing at 0x00008000... (23 %)
Writing at 0x0000c000... (30 %)
Writing at 0x00010000... (38 %)
Writing at 0x00014000... (46 %)
Writing at 0x00018000... (53 %)
Writing at 0x0001c000... (61 %)
Writing at 0x00020000... (69 %)
Writing at 0x00024000... (76 %)
Writing at 0x00028000... (84 %)
Writing at 0x0002c000... (92 %)
Writing at 0x00030000... (100 %)
Wrote 272240 bytes (198387 compressed) at 0x00000000 in 22.6 seconds (effective 96.3 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
感想
実際に、ハードウェアがからんでくるため、いろいろなところで悩んでしまいました。
電気系の勉強もサボっているため、引き続きしていきたいと思います。
参考になったら良いね
ください!
詰まったところ、詰まりそうなところ
USB to Serial はMACではドライバが必要
組み込み系のケーブルは基本的にはドライバが必要です。
購入した機器により、異なるのですが基本的には「型番」で検索をすると出てきます。
「型番」が不明な場合は、基板上の英数字で検索すればいいと思います。
恐ろしく読みづらいので、私はスマホで撮影して拡大して見ています。
GNDレベルを同一にしないとSerial通信ができない
シリアル通信を行う場合、該当の機器と電位差が発生してしまう事があります。
そうすると、うまく通信が行えない場合があるので、各グランド線は同一にしておくと良いです。
※私もこれで通信できず悩みました…
電源が安定化しないと動かない場合がある(書き込み失敗も含む)
今回は3.3Vでしたが、電源がこの電圧を出力できていてもうまく行かない場合があります。
理由として、電気を消費し始めると電圧が下がってしまい安定動作しなくなります。
対策としてキャパシタなどをグランドと3.3Vの間に挟んでおくと、電流が不足した場合にそこから
取得するようなイメージになるので安定化します。
私も電源回路には10μF
と0.1μF
のキャパシタを挟んでいます。
シリアル通信で変な文字が出る
Serialの通信速度が異なる場合になります。
ソースコードで定義されている通信速度に合わせる、または何度か変更してみるのもいいと思います。
Serialが複数ポートあり、選択に失敗している。
私もよく間違えるのですが、2台以上のSerialポートが有る場合に選択を間違えているとうまく動きません。
ツール
>シリアルポート
から選択が可能です。
書き込みモードにならない
Amazonなどに売っている、書き込み用の機材は一部配線を改造しなければ書き込みできません。
私もこのようにGPIO0
とGND
ショートさせています。