はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

M5Stack Core 2で始めるAzure IoT Hub入門(その2)

前回
hatsune.hatenablog.jp

2回目の今回は、M5Stackへの外部接続について、少しまとめておきたいと思います。
M5Stackの本体であるCoreモジュールには、外部機器との接続用インターフェースとして次の3つが用意されています。

  • USB
  • PORT.A.I2C
  • M-Bus

ピン配置などは、M5Stack Core 2の場合は本体裏面にプリントされています。
f:id:hatsune_a:20210605124344p:plain

USB

USB-Cが給電+シリアル接続用に用意されています。シリアル接続はCP2104を使って実現しており、ESP32でいえばTXD3とRXD3になります。
USB接続した端末で開発環境が稼働していれば、このルートを使ってシリアル入出力を実現しています。
また、AXP192という電源管理のチップセットがあり、内部電源か外部電源かやバッテリー電圧なども取得できます。FactoryTestスケッチなどはこのあたりを使っていると思います(FactoryTestスケッチについては後日取り上げる予定です)。

PORT.A.I2C

PORT.A.I2Cは、Inter-Integrated Circuitの略であり、アイ・スクエア・シーまたはアイ・ツー・シーと呼ばれるシリアルバス規格です。
I2C対応機器にはどのようなものがあって、どうやって繋ぐかなどは2015年の記事となりますが、buildinsiderで記事を書かせていただいていますので、そちらをご覧いただくとよいと思います。
www.buildinsider.net
Netduinoも電源5Vラインですのでピン配置に気を付ければ接続先の回路などはそのまま流用できます。

IC2のピン配置を確認する

記事中では、I2Cは「SCL」「SDA」「VDD」「GND」のピンがあるとしています。
M5Stack Core 2をみると、PORT.A.I2Cのピン配置は、液晶面を上にした状態で左から「G33」「G32」「5V」「GND」となっています。
このM-Basピン配列ではG33=PA_SCL、G32=PA_SDAとありますので、PORT.A.I2Cのピン配置は「SCL」「SDA]「5V」「GND」となります。
実際に端子を指すところにもSCLにはクロック信号っぽいマーク、SDAにはON/OFFの2値っぽいマークがついてます。
さらにダメ押しの確認としてPORT.A.I2Cに接続できる「温度湿度環境センサ付きユニット」の接続ピン配置を確認してみましょう。
f:id:hatsune_a:20210605124751p:plain
こちらはしっかりと「SCL」「SDA」「5V」「GND」って表記になっています。どうやらPORT.A.I2Cのピン配置は「SCL」「SDA]「5V」「GND」で間違いなさそうです。

PORT.A.I2CとGROVE互換インターフェース

M5StackのPORT.A.I2CはGROVE互換インターフェースとも呼ばれています。
GROVEは、Arduinoと容易に接続するためのインターフェースで、Seeed社から様々なGROVEシリーズのモジュール(拡張機器)が提供されています。
仕様が公開されていますので、Seeed社以外からも様々なモジュールが販売されています。
www.switch-science.com
GROVEと互換があるということはM5Coreでも、GROVEモジュールをつなげて使えるということになります。

M-Bus

M-Busは、ESP32 (Coreの中心となるSoC) の次のピンを取り出しているインターフェースです。

  • G0:I2S LRCK PDM CLK
  • G1:TXD0
  • G2:I2S DOUT
  • G3:RXD0
  • G13:RXD2
  • G14:TXD2
  • G18:SCK
  • G19:GPIO
  • G21:intSDA
  • G22:intSCL
  • G23:MOSI
  • G25:DAC
  • G26:DAC
  • G27:GPIO
  • G32:PA_SDA (PORT.A.I2Cと同じ)
  • G33:PA_SCL (PORT.A.I2Cと同じ)
  • G34:PDM DAT
  • G35:ADC
  • G36:ADC
  • G38:MISO
  • GND
  • 3.3V
  • 5V
  • RST
  • BAT

M-Busを使うことでESP32の(すべてではないですが)ピンに接続できますので、PORT.A.I2C端子よりもつながるものがかなり多くなります。また、ピン配置もM5Stackの「モジュール」と呼ばれるものであれば筐体の大きさも含めて、M5Coreとぴったり重ね合わせできるので、取り扱いも楽になります。
「モジュール」には、例えば、GPSモジュールなどはI2CではなくGPIOで接続するためM-Bus接続のモジュールとして提供されています。
www.switch-science.com

M-BusにPORT.A.I2Cと同じものがあるということは

GROVE互換インターフェースをもったものであれば、Busモジュールの中に入れてしまってM5Coreの下に重ね合わせてしまうなんていうこともできます。
www.switch-science.com

M-BusにGPIOがあるということは

M-BusにGPIOがあるということは、GPIOがつながる色々な機器ともつながるということですね。
みんな大好きMESHにもGPIOがありますから、MESHでの操作をGPIOでBusモジュール+M5Coreで収集して、Wi-Fiに飛ばしてAzureでなんということも可能です。
MESHとGPIOについての詳細は、BuildInsiderに記事を掲載いただいてますので、見ていただけると嬉しいです。
www.buildinsider.net

おまけ:温度湿度環境センサについて

www.switch-science.com
このセンサですが、温湿度センサーとしてSHT-30、気圧センサーとしてBMP280が内蔵されています。
BMP280単体のGROVEモジュールもあるので気圧センサーだけだったらそれを使う手もあります。
www.switch-science.com
GROVEモジュールであれば、GROVE互換インターフェースであるPORT.A.I2Cともつながります。
でも、M5Stack用のユニットなら外装あるので、ユニットの方が扱いが楽かもしれないですね。

それでは、また、次回まで!
次回はいよいよM5Stackのプログラミング(スケッチ)に取り掛かります。
その3→
M5Stack Core 2で始めるAzure IoT Hub入門(その3) - はつねの日記

M5Stack Core 2で始めるAzure IoT Hub入門(その1)

AzureとIoTとHoloLensはすごく相性がいいです。
build 2021でもかなり力を入れてAzure Digital Twinsとも絡めて多くの説明がありました。
このブログでも過去にArudinoやESP32、Netduino、Rasberry PIなどについて書いたエントリもあったりします。
今回は、みんな大好きM5Stackを使ってやってみたいと思います。
まず、第1回目の今回は、M5Stackのアプリをデプロイするところまでやってみましょう。

M5Stackとは

M5Stackは、ESP32というbluetoothWi-Fiを内蔵するSoCを使って、それに320x240のTFTカラー液晶、microSDカードスロット、スピーカーを組み合わせたコンパクトで便利な開発モジュールになります。
f:id:hatsune_a:20210604195926p:plain
ESP32はArudino環境で開発ができるのでM5Stackで動作するアプリもArduino環境で開発ができます。
M5Stackには様々な拡張モジュールがあり、M5Stack Coreと呼ばれるM5Stack本体に拡張モジュールを積み重ねていくことでいろいろな機能が拡張ができます。

M5Stack Core 2とは

今回使うM5Stack Core 2は、M5StackのCore機能を改良した第二世代のCoreデバイスとなります。
www.switch-science.com
M5Stack Core 2本体にはUSB Type-Cが用意されていて、こことPCのUSB Type-Aを接続するUSBケーブルも同封されています。
ただし、SDカードは付属していないので、忘れずに一緒に購入しておくとよいでしょう。

M5Stack Core 2の電源を入れる

PCとUSBケーブルを接続して電源ボタンをクリックするとすぐに立ち上がります。
f:id:hatsune_a:20210604201416j:plain
FactoryTestというスケッチ(アプリコード)が実行されてるのですが、色合いや表示されている表示なんかが、みんな大好きエヴァ風だったりします。
USBケーブルを抜くと「外部」から「内部」にちゃんと主要電源表示が切り替わります。すばらしい。

M5Stackの開発環境を整える

Arduio IDEで開発してもいいのですが、今回の目標は、Visual Studio CodeでM5Stack開発環境を整えて、簡単なコードをデプロイして動かすところまでを目標にします。
参考にするMicrosoft Docsはこちらになります。
docs.microsoft.com

開発環境のゴール

gist.github.com
M5Stackの画面にHelloWorldと表示します。

Arduino IDEをインストールする

https://www.arduino.cc/en/software
Visual Studio CodeからArduino IDEの動作環境を呼び出すため、Windows Appsではなく、Windows Win 7 and newerのリンクからexeファイルをダウンロードしてインストールします。
インストールオプションは変えずにそのままインストールしましょう。
f:id:hatsune_a:20210604203451p:plain

M5Stack Core 2との接続を確認する

M5Stack Core 2をPCにUSB接続したら、デバイスマネージャーでシリアル接続先として認識されているかを確認します。
f:id:hatsune_a:20210604205425p:plain
[ポート (COMとLPT) ]の中に「CP210x」があるかを探して、COMの番号を調べておきます。上手ではCOM4です。

Arduino IDEの設定を行う

Arduino IDEを起動したら、[ファイル]-[環境設定]メニューをクリックします。
f:id:hatsune_a:20210604205743p:plain
[追加のボードマネジャーのURL]に下記を設定します。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

[ツール]-[ボード]-[ボードマネージャー]メニューを選択します。
f:id:hatsune_a:20210604210051p:plain

ボードマネージャーで「m5stack」と入力して、M5Stackの公式ボードが検索されたらそれをインストールします。
f:id:hatsune_a:20210604210252p:plain

M5Stack Core2ライブラリのインストールを行う

[スケッチ]-[ライブラリをインクルード]-[ライブラリを管理]メニューをクリックします。
f:id:hatsune_a:20210604210649p:plain

ライブラリマネージャーで「m5core2」と入力して、M5Stack公式のライブラリをインストールします。
f:id:hatsune_a:20210604210841p:plain

ボードを選択する

[ツール]-[ボード]-[M5Stack Arudino]-[M5Stack-Core2]を選択します。
f:id:hatsune_a:20210604211022p:plain

シリアルポートを選択する

[ツール]-[シリアルポート]メニューで、デバイスマネージャーで確認したCOM番号のものを指定します。f:id:hatsune_a:20210604211146p:plain

Ardino IDEのシリアルモニタを開く

Arduino IDEで[ツール]-[シリアルモニタ]メニューをクリックしてシリアルモニタを開きます。
ボーレートには115200bpsをを指定しておきます。

スケッチ(プログラム)をデプロイする

[スケッチ]-[マイコンボードに書き込み]メニューをクリックするとしばらく時間がかかりますが、「Hard resetting via RTS pin...」と表示されて、M5Stack Core 2の画面がFactoryTestから変わってスケッチで記述した表示に変わります。

Ardino IDEのシリアルモニタで確認する

スケッチが起動すると、次のような表示が出力されます。
f:id:hatsune_a:20210606155126p:plain

Visual Studio Codeをインストールする

もう大抵の開発機にはインストールされているとは思いますが、Visual Studio Codeで今回は開発するのでVisual Studio Codeもインストールしておきます。

Visual Studio CodeArduino拡張をインストールする

サイドメニューアイコンの[拡張機能]を選択して、「Arduino」で検索して拡張機能をインストールします。
f:id:hatsune_a:20210604214216p:plain

Arduino用の設定を行う

拡張機能Arduinoから「Arduino: Path」の設定にパスを設定します。
f:id:hatsune_a:20210604232818p:plain

IntelliSenseの設定を行う

拡張機能C/C++から「C_Cpp: Intelli Sense Engine」の設定を「Tag Parser」にします。
f:id:hatsune_a:20210604232445p:plain

フォルダを開く

[ファイル]-[フォルダを開く]メニューでコードを置く場所を開きます。

シリアルポートの設定

VSCodeでCtrl+Shift+Pで「Arduino: Select Serial Port」で、先ほど調べた「COM4」を指定します。
f:id:hatsune_a:20210604235204p:plain
これで、フォルダの中に[.vscode]-[arduino.json]ファイルが作成されます。

ボードを選択する

Ctrl+Shift+Pで「Arduino: Board Config」を選択して、ボードを選択します。
f:id:hatsune_a:20210605002930p:plain
これで、フォルダの中に[.vscode]-[c_cpp_properties.json]ファイルが作成されます。

M5Stack用のインテリセンスが効くように設定する

c_cpp_properties.jsonを開いて、includePathにArduino IDEで指定したスケッチブックの保存場所の中のライブラリを指定します。

例:"C:\Users\hatsune\Documents\Arduino\libraries\\**",

前の行の最後に , を入れるのも忘れないようにしましょう。

シリアルモニターとの通信ボーレートを指定する

Ctrl+Shift+Pで「Arduino: Change Baud Rate」を選択して、115200を選択します。
f:id:hatsune_a:20210606162306p:plain

コードを書く

HelloWorld.inoをフォルダの中に作成します。

スケッチ(プログラム)をビルドする

Ctrl+Alt+RまたはVSCodeの右上のVerifyアイコンをクリックしてコンパイルします。
ベリファイが終わると次の表示がでます。

[Done] Finished verify sketch - helloworld.ino

スケッチ(プログラム)をデプロイする

Ctrl+Alt+UまたはVSCodeの右上のUploadアイコンをクリックしてコンパイルします。

[Done] Uploaded the sketch: helloworld.ino

シリアルモニタに接続する

スケッチが起動したことを確認したら、Visual Studio Codeの画面最下部のコンセントマークをクリックしてシリアルモニターをオープンします。
f:id:hatsune_a:20210606182414p:plain
シリアルモニタには、次のような表示が出力されます。
f:id:hatsune_a:20210606185316p:plain
なお、シリアルモニタをオープンしたまま、スケッチをデプロイしようとすると「スケッチの書き込み中にエラーが発生しました」となりますので注意してください、


ここまで順調にできたならば、開発環境の準備は終わりです。
次回をお楽しみに!
その2→
M5Stack Core 2で始めるAzure IoT Hub入門(その2) - はつねの日記

Azure Digital Twinsを学ぶために最適なLearn

Microsoft Build 2021に参加していて、Azure Digital Twinsについて、もう一度ちゃんと把握したくなったのでdocsで資料読むだけじゃなくてMicrosoft Learnでも学んでみようと思い立ったので、該当するLearnのURLをあつめてみました。
docs.microsoft.com
docs.microsoft.com
docs.microsoft.com
docs.microsoft.com
docs.microsoft.com
このあたりを一通り進めてみようと思います。

Microsoft Graph REST APIを使うときに必要な私たちのLearn

Microsoft 365(TeamsとかOffice 365)のデータにアプリからアクセスしようとした場合、Microsoft Graphを経由してアクセスすることになります。
Microsoft Graphによって、AzureADに登録したアプリごとのアクセス権に基づいたAPI呼出し制限や、テナントに対する流量制限なども行えるため、アプリ側の問題などで、利用中のMicrosoft 365データに対して予期しない操作を防止することができます。
Graphを使うためには、Graph SDKREST APIの2つの方法があります。
SDKが対応している言語やプラットフォームであればSDKを使うのも1つの方法です。
しかし、.NET 5などで、マルチプラットフォームでの動作を想定するならばREST APIも押さえておくのが良いでしょう。

そこで、REST APIを使ってMicrosoft Graph APIに接続するときに分かりやすいLearnを見つけたので共有します。
docs.microsoft.com
ぜひ、挑戦してみてください。

そろそろ.NET 6のWindows OS動作環境をまとめておこう

2021年5月現在、サポート対象となっている.NET (.NET Core) のバージョンは、.NET Core 2.1、.NET Core 3.1、.NET 5です。

Windows クライアント 動作OS

それらがサポートしているWindows クライアント OSとしては次のものがあります。

Windows 7で注意しなければならないのは、SP1定期済であり、また、通常サポートも終了(2020年1月14日)しているので拡張セキュリティ更新プログラム (ESU) が適用されていることです。
docs.microsoft.com
ESUは最大3年の施策ですから、2023年1月14日にはWindows 7 SP1自体のOSとしてのサポートも終わります。
Windows 8.1のサポート終了が2023年1月10日ですので、あと約2年くらいでWindows 10にWindows OSを1本化できる世界線がやってきます。

.NET 6 のWindows動作OS

github.com
リリースノートによれば、.NET 6についても同様にWindows クライアントOSについては、

となっています。
.NET 6はプレビュー版ですが、.NET 5で簡単なWPFアプリなどを作成しておいて、配布先で動作するかをためしておくと.NET 6がGA (正式リリース) されたときの移行もスムーズかもしれませんね。

.NET 5アプリを動作させる上でのその他の注意点

Windows 7では更に次の2つもインストールされている必要があります。

Windows 8.1では次のものがインストールされている必要があります。

  • Microsoft Visual C++ 2015-2019再配布可能パッケージ

そろそろ.NET 5のWindows OS動作環境をまとめておこう

2021年5月現在、サポート対象となっている.NET (.NET Core) のバージョンは、.NET Core 2.1、.NET Core 3.1、.NET 5です。

Windows クライアント 動作OS

それらがサポートしているWindows クライアント OSとしては次のものがあります。

Windows 7で注意しなければならないのは、SP1定期済であり、また、通常サポートも終了(2020年1月14日)しているので拡張セキュリティ更新プログラム (ESU) が適用されていることです。
docs.microsoft.com
ESUは最大3年の施策ですから、2023年1月14日にはWindows 7 SP1自体のOSとしてのサポートも終わります。
Windows 8.1のサポート終了が2023年1月10日ですので、あと約2年くらいでWindows 10にWindows OSを1本化できる世界線がやってきます。

.NET 6 のWindows動作OS

github.com
リリースノートによれば、.NET 6についても同様にWindows クライアントOSについては、

となっています。
.NET 6はプレビュー版ですが、.NET 5で簡単なWPFアプリなどを作成しておいて、配布先で動作するかをためしておくと.NET 6がGA (正式リリース) されたときの移行もスムーズかもしれませんね。

.NET 5アプリを動作させる上でのその他の注意点

Windows 7では更に次の2つもインストールされている必要があります。

Windows 8.1では次のものがインストールされている必要があります。

  • Microsoft Visual C++ 2015-2019再配布可能パッケージ

Microsoft Build 2021前夜祭に登壇します

azurerockstar.connpass.com

日本時間で2021/05/26の深夜から始まるMicrosoft Build 2021の前夜祭のイベントに登壇することになりました。

  1. 22:30 Buildのアップデートを先取り! 「Book of News」を見ながらトーク
  2. 24:00 日本語解説付きMicrosoft Build 2021基調講演ライブビューイング

2021/05/26 22:30からは、build 2021の直前情報をほかのパネリストの方と一緒にご紹介します。
また、24時、つまり5/7の0時からは基調講演の副音声として、これまた他のパネリストの人と基調講演をみながらあれこれしゃべっちゃいます。

ぜひぜひ、基調講演が始まるまでの眠気覚ましとしてもご活用いただければと思います!
register.build.microsoft.com

Build自体をよりお楽しみいただくために、ぜひ、build 2021の事前参加登録もよろしくお願いいたします。
register.build.microsoft.com