Arduino

M5StickCでPuppyCを動かす

はじめに

PuppyCにM5StickCを接続して動かしてみます。

  1. 必要なもの
  2. スケッチ例
  3. 実行

 

1.必要なもの

M5SticKCとPuppyCが必要です。

番号

商品名

価格

参考販売店

1

M5StickC

1980円(セット)

1650円(本体のみ)

SwitchSience

2

PuppyC

2002円

SwitchSience

PuppyCはM5StickC用の四脚ロボットベースです。

 

長方形の箱に入っていますが、半分はクッションです。

 


2.PuppyCの動作確認

PuppyCの動作確認はスケッチ例の中にある「PuppyC」で確認します。

[ファイル]⇒[スケッチ例]⇒[M5StickC]⇒[HAT]⇒[PuppyC]でスケッチを書き込みます。

ソースコードを見ると、puppy.hがインクルードされています。これはpuppuy.cppで作成した関数 IIC_Init()、angle_all_set、angle_setを使用するためです。

初期化用の関数IIC_Init()はpuppy.cppで定義されています。WireはI2Cとの通信を可能にするために必要なライブラリです。beginで接続します。第1引数はデータを送受信するためのポート名、第2引数はクロックに使用するポート名、第3引数は周波数(100は100kbit/s)です。

GitHubにあるESP32のWire.hを見るとデフォルト値は以下のように設定されています。

angle_all_setは4つのサーボモーターすべての動作位置を指定、angle_setは個々のサーボモーターの動作位置を決定するのに使用します。

Wire.beginTransmission(SERVO_ADDRESS)でサーボ―モータを動かすためのアドレスを設定します。このあと、Wire.Write()でデータを送信したのち、Wire.endTransmission()で通信を終了します。angle_all_setは第1引数からサーボモーターの1番、2番、3番、4番に割り振られています。設定する値は角度(angle )を表しています。値に90と記述すると90°を意味し、サーボモーターが地面と垂直になっている状態です。

angle_all_setが全体のサーボモーターに設定しているのに対して、angle_setは個別にサーボモーターを設定することができます。内部で使用している関数はangle_all_setと同様です。

PuppyCではangle_all_setを使用して前に進むための関数puppy_startと後ろに進むための関数puppy_backを作成しています。

サーボモーターの1番は左前足、2番は右の後足、3番が左の後足、4番が右の前足となっています。

 

 

3.実行

M5StickCをPuppyCの上に載せ、実行すると前に後ろにと交互に動きます。PuppyCの後ろのスイッチをONにしないと書き込みを行っても動作しないので、注意が必要です。スイッチが付いている方が後ろのようです。

 

参考

ESP32データシート

 

M5SticKCで防犯センサ

はじめに

M5SticKCに人感センサーを取り付けます。人感センサーが反応した場合にIFTTTに通知が来る構成です。

  1. 必要なもの
  2. IFTTTの設定
  3. スケッチ例
  4. 実行

 

1.必要なもの

M5StickCと人感センサーが必要です。

番号

商品名

価格

参考販売店

1

M5StickC

1980円(セット)

1650円(本体のみ)

SwitchSience

2

M5StickC PIR Hat(AS312搭載)

363円

SwitchSience

 

2.IFTTTの設定

IFTTTとは「if this then that」というシンプルなコンセプトに基づく「レシピ」を作成したり共有したりできるサービスです。URL:https://ifttt.com/

Apple、Google、Facebookのアカウントがあればサインインできます。

IFTTTにログインできたら左上の[Create]をクリックします。色々なアプリを組み合わせることができますが、今回はWebhookとIFTTTのNOtificationsを使用します。あるアプリから別のアプリにリアルタイムで情報を送るしくみのことをWebhookと呼びます。今回はM5SticCの情報をIFTTTのNotificationsに送るために使用します。IFTTTのNotificationsは受信があったときに通知をしてくれます。

「if this then that」のthisがWebhook、thatの部分がIFTTTのNotificationsとなります。

thisから作成します。[If This]をクリックします。

 

webで検索すると候補がでてきます。[Webfooks]を選択します。

真ん中の[Receive a web request]をクリックします。

 

Event Nameを入力する画面になります。Event Nameは何でもいいですが、ここではm5c1にしています。記入したら[Create trigger]をクリックします。

 

次に「if this then that」のthatを作成します。[Then That]をクリックします。

候補をしぼるために、検索にnotifiと入力します。左のベルを選択します。

 

中ほどの左の[Send a notification from the IFTTT app]を選択します。

 

次にM5StickCの人感センサーが反応したときに表示されるメッセージを[Message]に記入します。

 

不在時に侵入者があった場合のメッセージを記入します。完了したら[Create action]をクリックします。

 

thisとthatができたので[Continue]をクリックし最後に[finish]を押します。

 

ベルの横の三角の頂点がまるで囲まれた図をクリックします。

Webhooksが一つだけの画面になります。右上の[Settings]をクリックすると、URLが表示されるのでそれをコピーしておきます。

IFTTTはレシピを3つまで無料で作成できます。すでにあるレシピを共有する分にはいくつも利用できます。

 

3.スケッチ例

今回もIFTTTにアクセスするためにHTTPClient.hをインクルードします。

11行目のurlの設定は決まった形になりますので、この通りに使用します。maker_EventはIFTTTで設定したEvent Nameを記述します。make_KeyにはIFTTTのWebhooksで表示されていたURLのuse以降の文字列を記入します。(https://maker.ifttt.com/use/ここの部分

 

4.実行

スケッチを書き込んだら、実行する前にスマホにIFTTTアプリをインストールしておきます。

センサーに反応すると、スマホに表示されます。

 

今回はIFTTTを使用してM5StickCの人感センサーが反応したらスマートフォンに表示するという内容でした。IFTTTのレシピはすべて「if this then that」で構成されています。[that」の部分をlineのnotifyに変更すればlineに通知が来る構成に変更できます。

 

レシピを作成しても、IFTTTに反映されるまで時間がかかる場合があります。

IFTTTに反映されても実行に時間がかかる(レスポンスが遅い)場合もあります。IFTTTのレシピを開いて[check now]をクリックするとすぐに反映されるので、動作しているのかしないのかを確認できます。

 

webhookがそもそも動作しているのかを確認したい場合はコマンドラインで確認できます。DOSプロンプトを開いて以下を実行し[Congratulations! You’ve fired the m5c1 event]と表示されれば、OKです。

( 上記のm5c1はイベント名です。作成したレシピの[Event Name]に置き換えて実行してください。

abcdefghijklmnopqrstuvは作成したレシピのキーに置き換えて実行してください。)

line notifyなどを使用して変数を渡したい場合はスケッチに以下を追加します。

 

 

 

 

 

 

 

 

 

 

 

 

M5stickCを使用したセンサーの値をGoogleスプレッドシートに

はじめに

M5stickCに人感センサーを接続し、センサーが反応したらその時刻をGoogleのスプレッドシートに表示します。

 

  1. 必要なもの
  2. Googleスプレッドシートの編集
  3. スケッチ例
  4. 実行

 

1.必要なもの

 

M5StickCと人感センサーです。(SwitchSienceは年末セール中のようです)

番号

商品名

価格

参考販売店

1

M5StickC

1980円(セット)

1650円(本体のみ)

SwitchSience

2

M5StickC PIR Hat(AS312搭載)

363円

SwitchSience

 

2.Googleスプレッドシートの編集

 

Googleスプレッドシートを使用するにはGoogleアカウントが必要です。Googleアカウントを取得したら以下にアクセスします。 sheets.google.comまたはsheets.google.com/create で直接スプレッドシートを開きます。

 

左上の「無題のスプレッドシート」をクリックして題名を付けます。

M5stickCのデータと取得時間を表示します。A1セルとB1セルに「メッセージ」と「時刻」を記述します。

[ツール]⇒[<>スクリプトエディタ]を選択してApp Scriptを開きます。

関数を2つ記入します。

setData
M5StickCから受け取ったデータをシートに記入する関数です。
  • sheet.insertRows(2,1)
    2行目に1行挿入します。
  • sheet.getRange(2,1).setValue(val);
    2行1列目のセル(A2)にvalを書き込みます。
  • Sheet.getRange(2,2).setValue(new Date());
    2行2列目のセル(B2)に日付を書き込みます。

doPost
WebアプリにPOSTリクエストが送られた時に実行される関数です。

  • var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘シート1’);
    sheetにシート1を代入します。
  • var params = JSON.parse(e.postData.getDataAsString());
    送られてきたデータをJSON形式に変換してpramに代入します。
  • var val = params.check;
    valにprams.checkの値を代入します。checkはArduinoのスケッチで定義します。

関数を記述したらプロジェクト名を記入します。

最後にデプロイします。

デプロイの方法が変更されているようです。右上の[デプロイ]⇒[新しいデプロイ]を選択し、[種類の選択]の横の歯車をクリックして、[ウェブアプリ]を選びます。

[アクセスできるユーザー]を[全員]にし、デプロイをクリックします。

アクセスを承認をクリックします。Choose an accountと表示されるので自分のアカウントを選択します。

 

「Google has’nt verified this app」と表示されるので「Advanced」をクリックします。

(日本語表記ならば以下のように表示されると思います。
「このアプリは確認されてません」と表示されるので「詳細を表示」をクリックします。)

[Go to M5stickCの人感センサープロジェクト1 (unsafe)]と表示されている部分をクリックします。
(もしくはM5stickCの人感センサープロジェクト1(安全でないページ)に移動)

[Allow]をクリックします。(もしくは「許可」をクリックします)

 

(GMAILに本人確認用のメールも来ます。心当たりがあるを選択します。)

ウェブアプリのURLが表示されるので、控えておきます。

URLの確認は[デプロイ]⇒[新しいデプロイ]⇒[デプロイ]で表示されます。

 

3.スケッチ例

 

データをJSONフォーマットで扱うためにArduinojsonライブラリを追加します。[スケッチ]⇒[ライブラリをインクルード]⇒[ライブラリを管理]で、ライブラリマネージャを開きます。

「Arduinojson」で検索し、インストールします。

 

スケッチは前回の「M5StickCと人感センサーで画像表示」を使用します。WiFi接続の記述は「M5StickC WiFi接続」を使用します。

WiFiの追加とGoogleスプレッドシートにアクセスするための記述を追加します。Googleスプレッドシートにアクセスするために、HTTPClient.hをインクルードします。インストールしたArduinojsonライブラリもインクルードします。

センサーに反応した場合に、データをGoogleスプレッドシートに送る関数sendData()を追加しています。

 

4.実行

スケッチをM5StickCに書き込みます。

センサーが反応したらM5StickCのスケッチのsendData関数からデータが送られてスプレッドシートにライトされます。送付データはcheck変数の値で、checkが1の時に送付しているので、スプレッドシートには常に1が表示されます。

日付だと毎回同じなので、日時に変更します。[123]⇒[日時]で変更します。

 

変更後