LoginSignup
3
7

More than 5 years have passed since last update.

M5StackでセンサーデーターをAmbientに送る (MicroPython編)

Last updated at Posted at 2018-03-17

M5StackはEspressif社のマイコンESP32を搭載したコンパクトなIoT端末です。Arduino IDE、MicroPythonとEspressif社のESP-IDFでプログラミングできます。ここではM5Stackと温湿度・気圧センサーBME280、空気品質センサーBME680をMicroPythonで制御してセンサーデーターを読み、Ambientに送る例を紹介します。M5Stackの概要とArduinoで使う例は以下のページをご覧ください。

PC_M5Stack

M5Stackを使うためのMicroPythonの環境設定

M5StackのMicroPython開発環境には次の二つがあります。

  • M5Cloud: クラウドでソースコードを管理する開発環境
  • オフライン環境: ローカルのPCでソースを管理する環境

公式サイトの説明に沿って環境を設定していくとM5Cloud環境になりますが、M5Cloudは現時点(2018年3月16日)ではβ版で、一度つけたプロジェクト名が変更できないなど、まだ荒削りなところがあります。また、ソースコードのバージョン管理機能がないので、今回はローカル開発環境を使います。

USBドライバーのインストール

SiLabs CP2104 Driverをダウンロードしてインストールします。ここはArduino IDEで使う場合と共通です。

esptoolのインストール

過去にesptoolをインストールしていなければ、次のようにしてesptoolをインストールします。

$ sudo pip install esptool

以前にインストールしていれば、次のようにして更新します。

$ sudo pip install -U esptool

MicroPythonファームウェアのダウンロード

M5Stack用のMicroPythonファームウェアのダウンロードページでファームウェアをダウンロードします。この時、M5Cloud用とオフライン用があるので、オフライン用をクリックし、最新のファームウェアを選択します。

MicroPythonファームウェア

ファームウェアをM5Stackに書き込む

M5StackをUSBケーブルでPCに接続し、esptoolを使い、まずerase_flashコマンドでフラッシュを消し、次にwrite_flashコマンドでファームウェアを書き込みます。

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART erase_flash

$ esptool.py --chip esp32 --port /dev/tty.SLAB_USBtoUART write_flash --flash_mode dio -z 0x1000 m5stack-20180228-v0.3.4.bin 

Wi-Fiの設定

ファームウェアを書き込むと、M5Stackの画面に次のようなメッセージが表示されます。

スクショ0

M5StackがWi-Fiアクセスポイントになっているので、画面に表示されたssidにPCやスマートフォンで接続します。パスワードは設定されていません。ブラウザーで192.168.4.1にアクセスすると、次のような設定画面が表示されます。

スクショ1

お使いのWi-FiルーターのSSIDとPasswordを入力してConfigureをクリックすると、M5StackのWi-Fi環境が設定され、Wi-Fiに接続されます。

M5Stackの動作確認

PCからCoolTermなどの通信プログラム、あるいはcuコマンドなどでM5Stackにつなぎ、リターンキーを押すと、次のようにMicroPythonのプロンプトが表示されます。MicroPythonの文を入力すると、実行されます。ちなみに、cuコマンドは「~.(チルダ ピリオド)」で切断できます。

$ sudo cu -s 115200 -l /dev/tty.SLAB_USBtoUART 
Connected.

>>> print('hello world')
hello world
>>> 
>>> from m5stack import lcd     # lcdモジュールをインポート
>>> lcd.clear()    # lcdをクリア
>>> lcd.print('hello')    # lcdにhelloと出力される

>>> ~.

Disconnected.

温湿度・気圧センサーBME280を使う

M5StackにBME280をつなぐ

M5Stackの裏側

Arduino編と同様にM5Stackに温湿度・気圧センサーBME280をつないでみます。詳細は「M5Stack(Arduino編)」をご覧ください。

BME280を接続したら、M5StackをUSBケーブルでPCに接続し、通信プログラムを起動します。次のプログラムを入力すると、BME280のI2Cアドレスを確認できます。センサーの動作が簡単に確認できるところは対話モードは非常に便利です。

>>> from machine import I2C, Pin    # I2CモジュールとPinモジュールをインポート
>>> i2c = I2C(sda=Pin(21), scl=Pin(22))    # I2Cを初期化
>>> print('0x%x' % i2c.scan()[0])    # BME280のI2Cアドレスを確認する
0x76
>>> 

BME280ライブラリーをM5Stackに転送する

M5StackからBME280をアクセスするプログラムはGithubに置きました。
* ambient-python-lib

このページ右上の「Clone or download」をクリックし、「Download ZIP」をクリックして、ZIP形式のファイルをダウンロードし、適当なディレクトリーで展開します。

BME280のライブラリーはGithubに公開されているESP8266用MicroPythonライブラリ「catdog2/mpy_bme280_esp8266」を使いました。

PC上のファイルをM5Stackに転送するのはampyというコマンドが便利です。ampyコマンドのインストールと使い方は「ampy: MicroPythonマイコンとPCとのファイル転送ツール」をご覧ください。

$ export AMPY_PORT=/dev/tty.SLAB_USBtoUART
$ ampy put examples/M5_BME280/bme280.py
$ ampy ls /flash
boot.py
config.json
bme280.py

M5StackからBME280をアクセスする

PCからM5Stackに接続し、以下のMicroPythonプログラムを入力すると、BME280にアクセスして温度、湿度、気圧を取得し、表示するのが確認できます。

>>> import bme280
>>> from machine import I2C, Pin
>>> i2c = I2C(scl=Pin(22), sda=Pin(21))
>>> bme = bme280.BME280(i2c=i2c)
>>> print(bme.values)
('21.57C', '1017.90hPa', '40.41%')

BME280のデーターをAmbientに送信する

センサーデーターをAmbientに送信するMicroPythonライブラリーはESP8266用のものと同じです。BME280のデーターをAmbientに送信するプログラムは次のようになります。

これらのプログラムも先程Githubからダウンロードしてきたものに含まれています。main.pyのAmbientオブジェクトの初期化にご自分のチャネルIDとライトキーを設定し、ampyでM5Stackに転送します。

$ ampy put ambient.py
$ ampy put examples/M5_BME280/main.py
$ ampy ls /flash
boot.py
config.json
ambient.py
main.py
bme280.py

これでM5Stackに次のようにファイルが置かれます。

/flash
+---boot.py
    config.json
    ambient.py
    main.py
    bme280.py

/flashの下にmain.pyというファイルがあると、M5Stackがリセットされた時、そのプログラムが実行されます。

M5Stackをリセットして、Ambientサイトで設定したIDのチャネルページを見ると、次のように温度、湿度、気圧データーが送信されているのが確認できます。

Ambient画面

温湿度・気圧・空気品質センサーBME680を使う

M5StackにBME680をつなぐ

温湿度・気圧に加えて、空気品質を測定できるBME680というセンサーがあります。これもM5Stackにつなげてみます。接続の詳細は「M5Stack(Arduino編)」をご覧ください。

M5StackとBME680

M5StackからBME680をアクセスする

BME680をアクセスするPythonライブラリーモジュールはBME680モジュールを提供していPimoroni社のものを使いました。このライブラリーをMicroPythonで動かすためのアダプターも使います。
ファイルはBME280をアクセスするプログラムと一緒にGithubに公開してあり、すでにPC上にダウンロードされています。

次のようにM5Stackの/flashの下にbme680というディレクトリーを作り、必要なファイルを転送します。

BME280のアクセスから続いて操作している場合は、ここでM5Stackをリセットしてください。

$ ampy mkdir bme680
$ ampy put examples/M5_BME680/bme680/__init__.py /flash/bme680/__init__.py
$ ampy put examples/M5_BME680/bme680/constants.py /flash/bme680/constants.py
$ ampy put examples/M5_BME680/bme680/i2c.py /flash/bme680/i2c.py
$ ampy put examples/M5_BME680/main.py

これでM5Stackのファイルシステムは次のようになります。

/flash
+---boot.py
    config.json
    ambient.py
    bme280.py
    main.py
    bme680
    +---__init__.py
        constants.py
        i2c.py

M5Stackをリセットすると、今転送したmain.pyが実行され、BME680で取得した温度、湿度、気圧がAmbientに送信されます。

まとめ

M5Stackは5.4cm x 5.4cmのコンパクトなケースにESP32、電池、320 x 240 TFTカラーディスプレイなどが搭載されたIoT端末です。拡張モジュールを積み重ねることで機能を拡張していけます。
MicroPythonで使うと、対話モードでセンサーなどの動作を確認しながらプログラムを作っていけるので、プロトタイプ段階で特に便利です。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7