M5StackとPythonで始めるIoTプログラミング|環境モニタリングからクラウド連携まで 

プログラミング
記事内に広告が含まれています。
スポンサーリンク

はじめに

brian
brian

M5StackとPythonでIoT開発を始めてみませんか?このガイドでは、M5Stackの基本からPython環境のセットアップ、センサー連携、クラウド活用まで、初心者にもわかりやすく解説しています。IoTに興味がある方は、ぜひチェックしてみてください!

M5Stackとは?

M5Stack(エムファイブスタック)は、ESP32マイクロコントローラを搭載した開発ボードシリーズです。IoT(モノのインターネット)デバイスやプロトタイプの開発に適したデバイスで、コンパクトな筐体にディスプレイやボタン、バッテリー、拡張ポートが統合されています。

主な特徴

  • プログラム可能:Python(MicroPython)、Arduino、UIFlow(ブロックプログラム)など、複数のプログラム言語に対応。
  • ディスプレイ付き:LCDディスプレイが標準装備され、視覚的な情報表示が可能。
  • 拡張性が高い:さまざまなモジュールやセンサーと簡単に接続できる。
  • Wi-FiとBluetooth搭載:ネットワーク機能を活用したIoTシステムの構築が容易。

M5Stackの用途

M5Stackは以下のようなシーンで活躍します。

  1. IoTシステムの試作
    温湿度センサーやGPSモジュールを利用してデータを収集し、クラウドに送信。
  2. 教育・学習用途
    プログラミング教育や電子工作の入門用デバイスとして人気。
  3. プロトタイピング
    製品開発の初期段階で、短期間で動作確認を行うツールとして活用。
  4. スマートデバイス制御
    リモコンやスマートホームの制御デバイスとして応用。
スポンサーリンク

M5Stackの種類と選び方

M5Stackの主なモデル

M5Stackには複数のモデルがあり、それぞれ特徴や用途が異なります。ここでは代表的なモデルを紹介します。

M5Stack Core2

  • 特徴: タッチスクリーンと内蔵バッテリーを搭載した高機能モデル。
  • 用途: ディスプレイを活用したUI開発やIoTデバイスのプロトタイピングに最適。
  • インターフェース: GPIOピン、I2C、SPIなどの多様な接続方法をサポート。

M5Stack CoreS3

  • 特徴: ESP32-S3を搭載し、より高性能なプロセッサとAI機能に対応。
  • 用途: 機械学習やAI処理を含むアプリケーションに適している。
  • 拡張性: USB-C接続と豊富なモジュールサポート。

M5StickC Plus

  • 特徴: コンパクトサイズで携帯性に優れる。バッテリーも内蔵。
  • 用途: ウェアラブルデバイスや小型IoT機器の開発に便利。
  • ディスプレイ: 1.14インチのTFT液晶を搭載。

M5Stack Atomシリーズ

  • 特徴: 小型ながらフル機能を備えたモデル。
  • 用途: スペースが限られた場所でのデバイス制御や組み込み用途に最適。
  • 拡張性: 小型センサーやモジュールと簡単に接続可能。

用途に応じたモデルの選び方

  • UI重視なら「Core2」や「CoreS3」がおすすめ。ディスプレイを使った操作画面の開発が可能です。
  • サイズ重視なら「M5StickC Plus」や「Atom」シリーズ。持ち運びや小型デバイスへの組み込みに適しています。
  • AI活用を検討している場合は「CoreS3」が最適。画像処理や音声認識などの高度な処理が可能です。

拡張モジュールとアクセサリ

M5Stackは、さまざまな拡張モジュールやセンサーと簡単に接続できる点も魅力です。

  • センサーモジュール: 温湿度センサー、加速度センサーなど。
  • 通信モジュール: LoRaやGSMなどの通信拡張機能。
  • ディスプレイと入力デバイス: 外部LEDマトリクスやタッチパネルの追加。

これらの拡張機能により、用途に応じたカスタマイズが可能です。

スポンサーリンク

Python環境のセットアップ

MicroPythonとUIFlowの違い

M5Stackは複数のプログラミング環境に対応していますが、特に人気なのが MicroPython と UIFlow です。それぞれの特徴を簡単に説明します。

MicroPython

  • 概要: Pythonをベースとした軽量なプログラミング環境。
  • 特徴:
    • 標準的なPython文法が使用できるため、Pythonに慣れている人に最適。
    • スクリプトで直接デバイスを制御できる。
    • 柔軟なコード記述が可能で、複雑なアプリケーションにも対応。

UIFlow

  • 概要: ブロックベースのビジュアルプログラミングツール。Pythonコードにも変換可能。
  • 特徴:
    • コーディング初心者でも直感的にプログラムを作成できる。
    • Webブラウザや専用アプリからプログラムを編集・アップロード可能。
    • 開発速度が速く、簡単なプロトタイプ作成に便利。

おすすめポイント

  • プログラミングに慣れている人は MicroPython を選択。
  • 初心者や素早く試したい場合は UIFlow が使いやすいです。

開発環境のセットアップ

ここでは、MicroPythonを使用する場合の環境設定について説明します。

必要なソフトウェアの準備

  1. Pythonのインストール
    • Python公式サイトから最新版をダウンロードしてインストールします。
    • コマンドプロンプトまたはターミナルで以下を実行し、インストールを確認します。
Bash
python --version
pip --version
  1. Thonny IDEのインストール
    • MicroPython用の統合開発環境 (IDE) である Thonny をダウンロードします。
    • インストール後、起動して環境をセットアップします。
  2. M5Stack用ドライバとファームウェアツールのインストール
    • ドライバのインストール: M5StackがPCと接続できるように、CP210XまたはCH9102ドライバをインストールします。
    • M5BurnerのダウンロードM5Burner を使用してMicroPythonファームウェアをデバイスに書き込みます。

MicroPythonファームウェアの書き込み

  1. M5Burnerを起動し、デバイスをUSBケーブルでPCに接続します。
  2. デバイスを認識したら、MicroPythonの最新ファームウェアをダウンロードして選択します。
  3. 書き込みボタンをクリックしてファームウェアをインストールします。

接続と動作確認

  1. Thonnyを起動し、以下の設定を行います。
    • メニューから「ツール」→「インタープリタ」へ移動。
    • インタープリタに「MicroPython (ESP32)」を選択。
    • ポートにM5Stackが接続されているCOMポートを指定。
  2. 以下のコードを実行し、動作確認します。
Python
from machine import Pin
import time

led = Pin(2, Pin.OUT)
while True:
    led.value(1)
    time.sleep(0.5)
    led.value(0)
    time.sleep(0.5)

補足: UIFlowを使いたい場合

UIFlowを使う場合は、M5Stack公式UIFlowページにアクセスし、オンラインまたはデスクトップ版を使用します。設定はM5BurnerでUIFlowファームウェアをインストールするだけです。

スポンサーリンク

M5StackでPythonプログラミングを始めよう

LED制御の基本プログラム

ここでは、M5Stackの内蔵LEDを制御するプログラムを作成しながら、Pythonコードの基本操作を学びます。

プログラムの概要

内蔵LEDを0.5秒間隔で点滅させる簡単なコードを作成します。

コード例: LEDの点滅

Python
from machine import Pin  # ピン制御用ライブラリをインポート
import time              # 時間制御用ライブラリをインポート

led = Pin(10, Pin.OUT)   # GPIO10を出力ピンとして設定(M5StackのLEDピン)

while True:              # 無限ループ
    led.value(1)         # LEDを点灯
    time.sleep(0.5)      # 0.5秒待つ
    led.value(0)         # LEDを消灯
    time.sleep(0.5)      # 0.5秒待つ

コード解説

  1. from machine import Pin
    GPIOピンを制御するためのライブラリをインポートします。
  2. import time
    ウェイト処理を行うためのライブラリをインポートします。
  3. Pin(10, Pin.OUT)
    GPIO10ピンを出力モードとして設定します。
  4. led.value(1) と led.value(0)
    ピンの出力を1にすると点灯、0にすると消灯します。
  5. time.sleep(0.5)
    指定した秒数(0.5秒)待機します。

ボタン操作の基本プログラム

次に、M5Stackの内蔵ボタンを押すとLEDが点灯するプログラムを作成します。

コード例: ボタン操作でLEDを制御

Python
from machine import Pin
import time

led = Pin(10, Pin.OUT)   # GPIO10をLED出力ピンとして設定
btnA = Pin(39, Pin.IN)  # GPIO39をボタンAの入力ピンとして設定

while True:
    if btnA.value() == 0:  # ボタンが押された場合(0: 押された状態)
        led.value(1)       # LEDを点灯
    else:
        led.value(0)       # LEDを消灯
    time.sleep(0.1)        # 短い遅延を入れてボタン入力を安定化

コード解説

  1. Pin(39, Pin.IN)
    GPIO39ピンを入力モードに設定します。これはM5StackのAボタンに対応しています。
  2. btnA.value() == 0
    ボタンが押されると0(LOW)になるため、その状態を検出します。
  3. time.sleep(0.1)
    0.1秒ごとに状態を確認することで、ボタンのチャタリングを防ぎます。

プログラムの応用例

この基本操作を組み合わせることで、以下のような機能も実現できます。

  • ボタンを長押ししたときにLEDが点滅する。
  • ボタンの押下回数をカウントしてディスプレイに表示する。
  • 外部センサーからの入力に応じてLEDを制御する。
スポンサーリンク

センサーとデバイス連携の実例

温度・湿度センサーのデータ取得

ここでは、M5Stackと温湿度センサー(DHT11またはDHT22)を使用して、温度と湿度のデータを取得し、ディスプレイに表示するプログラムを作成します。

センサー接続と準備

  1. 使用するセンサー
    DHT11またはDHT22(デジタル温湿度センサー)
  2. 接続方法
    DHTセンサーのピン配列
    • VCC: 3.3Vまたは5V
    • DATA: データ信号線(GPIO21に接続)
    • GND: グランド

配線例

センサーM5Stack (Core2)
VCC3.3V
DATAGPIO21
GNDGND

コード例: 温度と湿度の表示

Python
from machine import Pin
import dht
from m5stack import lcd  # ディスプレイ制御用ライブラリ
import time

# センサー設定
sensor = dht.DHT22(Pin(21))  # GPIO21に接続したDHT22を使用

while True:
    try:
        sensor.measure()  # センサーからデータを取得
        temp = sensor.temperature()  # 温度を取得
        hum = sensor.humidity()      # 湿度を取得
        
        # ディスプレイ表示
        lcd.clear()  # 画面をクリア
        lcd.print("Temp: {:.1f} C".format(temp), 10, 10)
        lcd.print("Hum: {:.1f} %".format(hum), 10, 40)
        
    except OSError as e:
        lcd.print("Sensor Error", 10, 10)  # エラー表示
    
    time.sleep(2)  # 2秒ごとに更新

コード解説

  1. import dht
    DHTセンサー用の専用ライブラリをインポートします。
  2. dht.DHT22(Pin(21))
    GPIO21に接続したDHT22センサーを設定します。
    DHT11を使う場合は dht.DHT11(Pin(21)) に変更します。
  3. sensor.measure()
    センサーから最新データを取得します。
  4. lcd.print()
    取得したデータをディスプレイに表示します。座標(10, 10)から表示を開始します。
  5. time.sleep(2)
    更新間隔を2秒に設定します。

ディスプレイ表示の応用

上記プログラムを応用すると、以下の機能も実現できます。

  • しきい値設定: 温度や湿度が特定の値を超えた場合に警告を表示する。
  • データロギング: 測定データをSDカードやクラウドに保存する。
  • グラフ表示: 時系列でデータの変化をグラフ化する。

その他のセンサーとの連携例

  1. 加速度センサー(MPU6050)
    3軸加速度データを取得して、動き検知や姿勢検知を行う。
  2. 環境センサー(BME280)
    気圧や高度データも取得可能で、環境モニタリングに利用。
  3. 光センサー
    照度レベルを検出し、自動調光システムを構築。
スポンサーリンク

Wi-Fiとクラウド連携

Wi-Fi接続の設定

M5Stackは内蔵のWi-Fi機能を活用して、インターネットに接続できます。ここでは、Wi-Fiに接続し、デバイスのIPアドレスを表示する基本的なプログラムを作成します。

コード例: Wi-Fi接続とIPアドレス表示

Python
import network  # ネットワーク接続用ライブラリ
import time
from m5stack import lcd  # ディスプレイ表示用ライブラリ

# Wi-Fi設定
SSID = 'your-SSID'         # Wi-FiのSSIDを設定
PASSWORD = 'your-PASSWORD' # Wi-Fiのパスワードを設定

# Wi-Fi接続関数
def connect_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)  # ステーションモードに設定
    wlan.active(True)                    # Wi-Fiを有効化
    wlan.connect(ssid, password)         # 指定したSSIDとパスワードで接続

    # 接続待機
    while not wlan.isconnected():
        lcd.print('.', 10, 10)
        time.sleep(1)

    lcd.print('\nConnected!', 10, 30)
    lcd.print('IP: ' + wlan.ifconfig()[0], 10, 50)  # IPアドレス表示

# Wi-Fi接続実行
lcd.clear()
lcd.print('Connecting to Wi-Fi...', 10, 10)
connect_wifi(SSID, PASSWORD)

コード解説

  1. network.WLAN(network.STA_IF)
    ステーションモード(クライアントモード)を有効化します。
    Wi-Fiルーターに接続するための設定です。
  2. wlan.active(True)
    Wi-Fi機能を有効にします。
  3. wlan.connect()
    指定したSSIDとパスワードでWi-Fiに接続します。
  4. wlan.isconnected()
    Wi-Fi接続状態を確認します。接続完了まで待機します。
  5. wlan.ifconfig()
    IPアドレスやネットワーク設定を取得し、IPアドレスを表示します。

クラウド連携の基礎

Wi-Fi接続を利用して、クラウドサービスとのデータ送受信も簡単に実現できます。ここでは、HTTPを使ったクラウド通信の基本を紹介します。

コード例: HTTP GETリクエスト

以下は、天気予報APIを利用して現在の天気データを取得する例です。

Python
import urequests  # HTTPリクエスト用ライブラリ
from m5stack import lcd
import time

# 天気API設定
API_URL = 'http://api.openweathermap.org/data/2.5/weather'
CITY = 'Tokyo'
API_KEY = 'your-api-key'  # APIキーを設定
URL = f"{API_URL}?q={CITY}&appid={API_KEY}&units=metric"

# データ取得
try:
    response = urequests.get(URL)  # HTTP GETリクエスト送信
    data = response.json()         # JSON形式でデータ取得
    response.close()

    # データ表示
    lcd.clear()
    lcd.print('Weather: ' + data['weather'][0]['description'], 10, 10)
    lcd.print('Temp: {:.1f} C'.format(data['main']['temp']), 10, 30)
except Exception as e:
    lcd.print('Error: {}'.format(str(e)), 10, 10)

コード解説

  1. urequests.get(URL)
    指定したURLにHTTP GETリクエストを送信します。
  2. response.json()
    APIからの応答データをJSON形式で解析します。
  3. lcd.print()
    APIから取得した天気や気温データをディスプレイに表示します。
  4. エラーハンドリング
    接続エラー時は例外をキャッチし、エラーメッセージを表示します。

応用例: データ送信と通知

  1. データ送信
    測定した温度・湿度データをクラウドに送信し、ログを保存。
  2. 通知機能
    特定の条件を満たしたときにメールやLINE通知を送信。
  3. IoTプラットフォームとの連携
    BlynkやThingSpeakを利用してデータの可視化や遠隔制御を実現。
スポンサーリンク

プロジェクト事例紹介

環境モニタリングシステム

ここでは、M5Stackとセンサーを組み合わせた環境モニタリングシステムの構築例を紹介します。このシステムは、温湿度データをクラウドに送信し、リアルタイムで監視できる仕組みを実現します。

システム構成

  1. ハードウェア構成
    • M5Stack Core2: データの取得と表示を担当。
    • DHT22センサー: 温湿度データを測定。
    • Wi-Fi接続: クラウドへのデータ送信。
  2. ソフトウェア構成
    • MicroPython: デバイスプログラムの開発言語。
    • HTTP API: クラウドサービス(例: ThingSpeak)へのデータ送信。

コード例: データ取得とクラウド送信

Python
import network
import urequests
import dht
from machine import Pin
from m5stack import lcd
import time

# Wi-Fi設定
SSID = 'your-SSID'
PASSWORD = 'your-PASSWORD'

# ThingSpeak API設定
API_KEY = 'your-api-key'
URL = 'https://api.thingspeak.com/update'

# センサー設定
sensor = dht.DHT22(Pin(21))

# Wi-Fi接続
def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD)
    while not wlan.isconnected():
        time.sleep(1)

# データ送信
def send_data(temp, hum):
    try:
        response = urequests.get(f'{URL}?api_key={API_KEY}&field1={temp}&field2={hum}')
        response.close()
    except Exception as e:
        lcd.print('Error: {}'.format(str(e)), 10, 10)

# メイン処理
connect_wifi()
lcd.clear()
lcd.print('Monitoring...', 10, 10)

while True:
    try:
        sensor.measure()
        temp = sensor.temperature()
        hum = sensor.humidity()
        
        # ディスプレイ表示
        lcd.clear()
        lcd.print('Temp: {:.1f} C'.format(temp), 10, 10)
        lcd.print('Hum: {:.1f} %'.format(hum), 10, 30)
        
        # データ送信
        send_data(temp, hum)
    except Exception as e:
        lcd.print('Sensor Error', 10, 10)

    time.sleep(10)

ポイント解説

  1. クラウド連携
    ThingSpeakのAPIを使い、測定データをクラウドに送信します。送信間隔は10秒に設定されています。
  2. リアルタイム監視
    クラウド側のグラフ機能を使えば、データの推移を視覚的に確認できます。
  3. 拡張性
    他のセンサー(光センサーや加速度センサーなど)を追加することで、より多機能なモニタリングシステムに拡張できます。

応用例

  • 警告通知システム: 異常温度や湿度を検出した際にメール通知を送信。
  • リモート監視: クラウドを介してスマートフォンからリアルタイムデータを確認。
  • エネルギー管理システム: 電力使用量などのデータも追加し、エネルギー効率を分析。

スマートホーム制御

もう一つの事例として、M5Stackを使ったスマートホーム制御システムも紹介します。

システム構成

  1. スマートプラグ制御
    • 赤外線リモコンを利用して家電を操作。
    • Wi-Fi経由で遠隔操作。
  2. コード例: 赤外線リモコン操作
Python
from machine import Pin, PWM
import time

ir_led = Pin(15, Pin.OUT)  # 赤外線LEDをGPIO15に接続

def send_signal():
    for i in range(100):  # 信号の送信回数
        ir_led.value(1)
        time.sleep_us(560)  # 高速点滅
        ir_led.value(0)
        time.sleep_us(560)

send_signal()  # 赤外線信号を送信

応用例

  • スマートライト制御: 明るさや色を遠隔で調整。
  • エアコン操作: 温度設定をセンサーと連携して自動化。
  • ドアロック管理: Wi-Fi経由でドアロックを解除するシステム。

これらのシステムは、M5StackとPythonを使うことで手軽に構築できます。

スポンサーリンク

まとめと今後の展望

M5Stackの魅力と活用ポイント

M5Stackは、以下の点で非常に魅力的な開発プラットフォームです。

  • 多機能かつ拡張性が高い
    ディスプレイ、ボタン、Wi-Fi、Bluetoothなどを標準搭載し、追加センサーやモジュールとの接続も簡単です。
  • 多様なプログラミング環境に対応
    Pythonやブロックプログラム(UIFlow)を使って、初心者から上級者まで幅広く利用できます。
  • IoTプロジェクトに最適
    クラウド連携やリモート監視が簡単に構築できるため、IoTの試作やプロトタイプ作成に適しています。

応用例と発展可能性

M5Stackは、以下のような応用例にも発展させることができます。

  • スマート農業システム
    温湿度センサーや土壌センサーを組み合わせて、農作物の成長環境を遠隔監視・制御。
  • 防災モニタリングシステム
    地震センサーや水位センサーを使った災害予測や警報システムを構築。
  • ウェアラブルデバイス
    M5StickCを利用したヘルスケアモニタリングやスポーツ分析ツール。
  • AI・機械学習との統合
    ESP32-S3モデルを使い、画像認識や音声認識を組み込んだ高度なAIデバイスを作成。

今後の展望と学習リソース

M5Stackは、IoT分野の進化とともにさらに多様な活用法が期待されています。

  • 学習リソースの活用
    • 公式ドキュメントM5Stack公式サイト
    • フォーラムとコミュニティ: 開発者間での情報交換や質問サポート。
    • GitHubリポジトリ: サンプルコードやオープンソースプロジェクトを活用。
  • 最新技術への対応
    • MQTTやLoRaなど、最新の通信技術を使ったプロジェクトへの応用。
    • AIや機械学習モデルを活用した次世代IoTシステムの開発。

最後に

M5StackとPythonを使った開発は、手軽に始められるだけでなく、応用範囲が広くプロジェクトの可能性を大きく広げます。この記事を参考に、ぜひM5Stackで独自のIoTシステムやアプリケーションを作成してみてください。

brian
brian

ここまで読んでいただきありがとうございます!

UdemyのPythonコースにはオンラインで学習ができる動画コンテンツがたくさんあります。

当ブログのような文章メインの説明では足りない箇所を補えると思うので、もっと詳しく勉強したいという方はぜひチェックしてみてください!

コメント

タイトルとURLをコピーしました