Core2AWSライトスイッチ

M5Stack

* @AJB2K3ご提供のソースコードとプロジェクト情報に感謝します

本プロジェクトで使用されている機材

ハードウェアコンポーネント

M5Stack Core2 AWS × 1

M5Stack ミニ3Aリレーユニット x 1

ソフトウェアアプリとオンラインサービス

M5Stack UIFlow

ストーリー

M5Stack Core2 AWSでライトを制御する

このガイドでは、M5StackのCore2 AWSリレーユニットを使って、ベッドサイドのランプを制御する方法を紹介します。

警告!このプロジェクトは、英国の主電源(AC240V)で動作する必要があります。もし、あなたが主電源での作業に自信がないのであれば、この作業は行わないでください。

はじめに

このプロジェクトは、Facebookで私に届いたチュートリアルのリクエストとして始まりました。

私は、例えばオン/オフスライドで制御されるリレーを介してランプを点灯させるように、今のところM5stackをプログラムしようと考えています。

Core2 AWSリレーユニットを使えばいいだけの簡単なプロジェクトだったので、断われませんでした。

ハードウェアを接続する

M5StackのリレーユニットCore2 AWSと一緒に使用する場合は、リレーユニットをCore2 AWSベースのブラックポートBに接続するだけですが、キットで提供されているような光アイソレータ付きのリレーモジュールを使用する場合は、

シングルチャンネル光絶縁リレーモジュール

Grove to Dupontヘッダケーブルを使用する必要があります。


M5StackのGrove to Dupontヘッダケーブル

デュポンのケーブルを用いてこのようなM5Stack以外のリレーモジュールに接続する場合、赤いワイヤはリレーのVCCに、黒いワイヤはリレーのGNDに、黄色のワイヤは入力ピンまたは信号ピンに接続する必要があります。

ハードウェアが接続されたら、コードの作成を開始します。

GUIエレメント

ライトスイッチを制御するコードを作成する前に、まず、いくつかのGUIエレメントを追加する必要があります。

Core2AWSにはタッチスクリーンがあり、グラフィック要素をタッチすることで光を制御することができます。今までのバージョンのM5Stack Coresと異なり、Core2ファミリはGUIエレメントの表現にLVGLを使用するため、タッチスクリーン制御方法の実装がより簡単になりました。

最初のステップで、左のメニューからLVGLラベルエレメントをバーチャルGUIに追加し、ラベルをクリックしてスクリーンショットに示すように設定を変更しました。

LVGLラベルのデフォルトパラメータの設定

次に、LVGLのスイッチエレメントを追加しました。


LVGLスイッチエレメントのパラメータの設定

デフォルトでは、エレメントのサイズが小さいので、図のように設定を変更しました。

次に、ラベルを追加しました。これはスイッチエレメントのデジタル表示に使用されるので設定をデフォルトのままにしました。


スイッチの値を表示するため、デフォルト設定のラベルを追加

これで、プログラムのGUI側に必要な準備がすべて揃いました。

UIFLOWコード

GUIを構築したので、UIFLowでコードを作成することができました。

このコードは、基本的なものですが、3つのループを含んでいます。最初のループは、LVGL GUIスイッチの値を表示するためにlabel1を設定するブロックを含み、次のループはLVGL GUIスイッチの位置を監視し、スイッチがtrueに設定されている場合、リレーをオンにします。最後のループはLVGL GUIスイッチがfalseに設定されているかどうかを確認して、リレーをオフにします。

関数をif/then文に結合しようとしましたが、LVGL GUIの状態がリレーのトリガになっていないことがわかりました!

以下に示すUIFlowのコードは、私が動作させることができた最も基本的なバージョンです。


リレーユニット制御用M5Stack UIFlowコード

観察

M5Stackのリレーで使用した場合、動作は正常でしたが、キットリレーモジュールではリレーが逆に動作することがわかりました(ピンをローにすると、リレーがオンになってしまう)。

このような場合、リレーブロックの位置を図のように入れ替えるだけでいいのです。


逆作動モジュールのリレー制御を反転

コード

UIFlow ランプコントロールMicroPython

from m5stack import *
from m5stack_ui import *
from uiflow import *
import unit


screen = M5Screen()
screen.clean_screen()
screen.set_screen_bg_color(0xFFFFFF)
relay_0 = unit.get(unit.RELAY, unit.PORTB)






switch0 = M5Switch(x=85, y=126, w=150, h=50, bg_c=0xCCCCCC, color=0x0288FB, parent=None)
label0 = M5Label('Light Switch', x=55, y=25, color=0x000, font=FONT_MONT_34, parent=None)
label1 = M5Label('label1', x=140, y=85, color=0x000, font=FONT_MONT_14, parent=None)

def switch0_on():
  # global params
  relay_0.on()
  pass
switch0.on(switch0_on)

def switch0_off():
  # global params
  relay_0.off()
  pass
switch0.off(switch0_off)


while True:
  label1.set_text(str(switch0.get_state()))
  wait_ms(2)

主要部品とコンポーネント

すべてのDigi-Keyパーツをカートに入れる

  • 2221-U023-ND
  • 2221-K010-AWS-ND
  • 2221-A034-ND
  • 2221-A034-B-ND
  • 2221-A034-C-ND
  • 2221-A034-D-ND
  • 2221-A034-E-ND



オリジナル・ソース(English)