ALGYAN4周年イベントで登壇しました
4/6にマイクロソフト品川で開催された、ALGYAN4周年 IoT祭り2019『IoTとAIとセキュリティ』大講演会&豪華ノベルティ抽選会!に登壇しました。
ちょっと過去の思い出を
ALGYAN発足から、わずか4年。まだ4年だったのね。
一番最初のイベントで、いきなり東京と大阪の同時開催。東京以外も大事にしている感ありますw
イベント申込ページが初々しい。
このときは、PinKit(GR-PEACH)+NETMFの講習でした。
PinKit(NETMF) -> Event Hub -> Stream Analytics -> Power BI, Machine Leaning
Event Hubってのが、時代を感じるなー
当時の写真を見ると、あれまここで出会っていたのねという方々が。このイベントをキッカケに、デバイス沼にハマってしまった人も多数いるようです。
ALGYAN4周年
で、ALGYAN4周年。
まぁ、すごかった。
人多すぎ
溢れんばかりの。。。というか、セミナールーム溢れていました。
ある方は「セミナールーム入ったときに(熱気で)曇っていた。」とおっしゃっていました。
講演すご
日本マイクロソフト、Seeed(「e」3つ)、インテル、エヌビディア、ソニーセミコンダクタソリューションズ、STMicroelectronics、などなど、、、
名だたる企業の中の人が、IoT, AI, セキュリティの最新情報を一気に聞くことができました。
各支部の活動紹介も楽しかったです。
もうちょっとちゃんと時間を取ってあげたかったですね。
ふんわりした雰囲気
ビジネスイベントと違って、良い意味でふんわりとした雰囲気でした。
登壇者の方々も楽しそう。
で、登壇振り返り
当日の様子は、4/6のtweetを見ていただくということで、、、
わたし自身の登壇について、振り返りたいと思います。
ノベルティボード解説&CAD解説
www.slideshare.net
今回、Seeed(「e」3つ)のFusionPCBチームにスポンサーになっていただき、先着約130名にノベルティボードを配布しましたが、このノベルティボードの開発経緯と開発の流れ、部品の実装方法を解説しました。
概要と苦労した点、実装の3部でざっと説明しましたが、みなさん実装に興味があるようでした。カプトンテープ。
なお、ノベルティボードはこちらのリンクからデータをダウンロード、追加発注可能です。どうぞよろしく!
4周年記念基板がゲットできなかった方へ。
— matsujirushi (@matsujirushi12) April 8, 2019
ポチっとFusionPCBで発注できるよう、FusionGallaryに掲載しました。https://t.co/SDopD5QcUw
がっ!
デフォルトだと150枚なので、、、数量変更を忘れずに。#algyan
IoT祭り2019 Azure Sphereの今
www.slideshare.net
2018年10月からの、Azure Sphereのアップデートを解説するつもりでしたが、Azure Sphere知らない人も多いかな?と思い、Azure Sphereの本質(なぜ我々はAzure Sphereを作ったのか?)と、アップデートの2部構成にしました。
冒頭、Azure Sphereを知っている方に挙手いただいたのですが、、、8割くらい知っていると。
想定崩れて、うろたえて気持ち不安定になり、、、思っていたより言葉少なめ、硬めなトークになってしまいました。XBoxネタ、滑った感じだしorz
聞き苦しかったかと思います...。
思うところ
- 良くも悪くも、tweetしたり声をかけてもらえたりして、嬉しかった。(反応無いと寂しい)
- 次は、もうちょっと落ち着いて丁寧に話そう。
- 人多くて想定外な部分もあったかと思うが、大きなトラブルなく運営すばらしい。
Azure Sphere 19.02がリリース
Azure Sphere 19.02がリリースされました。
このブログ記事から気になる点のピックアップと、リリースノートを確認したいと思います。
ブログ記事
わたしが気になったところだけ抜粋。
Expect to see additional silicon announcements in the near future,
今はMT3620一択ですが、近いうちに別のチップが発表されることを示唆しています。
organizations will be able to use new peripheral classes (I2C, SPI) from the A7 core.
A7(Cortex-A7)から、I2CとSPIが使えるようになりました。
I2CはSeeed製Grove Shield併用で通信できたので気になりませんが、SPIは出来なかったので、SPI使いたい人には朗報ですね。
adding new platform support for critical networking services (DHCP and SNTP)
プライベートイーサネットにDHCPとSNTP追加されました。
プライベートイーサネット、、、ゲートウェイ用途が多いのかなぁ。IIoTとか。
by leveraging our new reference solutions and hardware modules,
リファレンスソリューションとハードウェアモジュールが増えました。
リファレンスソリューションはこれ。AzureIoTとI2C, SPIは気になるので後で見る。
ハードウェアモジュールは、、、具体的に何だろう?ブログからは分かりませんでした。
リリースノート
新機能と変更
SPI
MT3620のSPIサポートが追加されました。(BetaAPI) (^^)/
APIはこちら。
I2C
MT3620のI2Cサポートが追加されました。(BetaAPI) (^^)/
APIはこちら。
DHCPサーバとSNTPサーバ
プライベートイーサネットにDHCPサーバとSNTPサーバのサポートが追加されました。
(プライベートイーサネット試している人って、どれくらいいるんだろう??)
アプリケーションサイズとストレージ
フラッシュメモリの1MBを、アプリケーションを展開するイメージパッケージで使えるようになりました。
Flash、RAMに関して、詳しくはこちら。
アプリケーションのメモリ使用状況を知ることができるようになりました。こちら。これはかなりうれしい。
また、azsphere device sideload show-quota
コマンドでmutable storageの使用量を表示できるようになりました。
アプリからread-only flash storageが読めるようになったっぽい。18.02でも出来たのかな?
Azure IoTサポート
Azure Sphere OSに入っているAzure IoT SDKを2018/10 LTSバージョンに更新しました。
Azure IoT CentralやAzure IoT Hubに繋ぐことができます。
ぱっと見、Azure IoT Centralは未だ辛そう... 要調査。
OSアップデートのリカバリ
Azure Sphere OSは、デバイス起動に失敗する可能性があるアップデートを検知して、ロールバックします。
CMake
CMakeのプレビューを公開しました。
BLE経由のWi-Fi設定
BLEからWi-Fiを設定するリファレンスソリューションを更新しました。
OSフィード
OSフィードをPreview MT3620
から、
Retail Azure Sphere OS
Retail Evaluation Azure Sphere OS
<- 追加
にしました。
くわしくはこちら。
将来、
Retail Evaluation Azure Sphere OS
はRetail Azure Sphere OS
よりも2週間前にリリースされる予定。(いまは同時リリース)
旧リリースとの互換性
(省略。Previewなんだから、最新の19.02で再構築しましょう。)
既知の問題
詳細はリリースノートを見てください。
- Visual Studio 2017とVisual Studio 2019 Previewの両方をインストールしているとき
azsphere device wifi show-status
でdevice error 13.1
- パスにASCII以外(日本語とか)が含まれているのは未サポート
- C++コードでビルドエラーは発生しないが未サポート。(C言語のみサポート)
Seeed ReButtonでメール送信
この記事の続きです。
ReButtonを押すとAzure IoT Centralにメッセージが飛んで記録されるところまで出来たので、今回はAzure IoT Centralにメッセージが来たらEメールを送信する、、、バックエンドの設定をやってみたいと思います。
ボタンを押すとAzure IoT Centralに表示される
まず、前記事の設定が正しく動いているか確認します。
ボタンをシングルクリックして、Azure IoT Centralにメッセージが届くことを確認。
よしよし、ちゃんと動くぞ。
ルールを追加
メッセージが届いたときにEメール送信するにはルールというものを追加します。
まず、ルールを選択して、テンプレートの編集をクリックしてください。
次に、新しい規則をクリックしてください。
テレメトリとイベントが表示されるので、イベントをクリックしてください。
名前を適当に入れて、条件+をクリック、測定でメッセージを選んでから、保存をクリックしてください。
ちょっと分かりにくいですが、、、
ここまでの操作で、
- ルールを追加(イベントルール)
- ルールに、条件を追加(メッセージが発生)
が出来上がりました。
ようするに、
「イベントの”メッセージ”が来たら、なにかやるぞ!」
が設定できた状態です。
次に、Eメール送信を設定します。
アクション+をクリックして、電子メールをクリックしてください。
そして、終了(!?)に、Eメールアドレスを入力してから、保存をクリックしてください。
このEメールアドレスは、Azure IoT Centralにサインインしたメールアドレスを入力してください。
終了ってなんだ??と思うでしょうが、、、英語表示にするとToですw
最後に、テンプレートの編集のDoneをクリックしてください。
ボタンを押す!
ボタンをシングルクリックすると、、Eメールが届くようになりました!!
Eメールの宛先を増やす
Eメールの宛先は、Azure IoT Centralに登録されていて、かつ、サインインしたアドレスしか指定することができません。
ユーザーは、管理 > ユーザー で追加することができます。
Seeed ReButtonを動かしてみる
マイクロソフトが開催している、IoT in Actionというイベントシリーズがあるのですが、
私たちはパートナー企業やお客様とともにあり、IoTの導入によって企業が驚くほど革新的に変わっていく様子を何度も目撃してきました。IoT in Action イベントシリーズは、マイクロソフトのお客様とパートナーエコシステムを活用して、世界を変える新しいIoTソリューションを構築・展開するためのコラボレーションの機会を提供します。
一部地域で開催されたイベントで、アンケートに答えると、なななんと!マイクロソフトとSeeedが一緒に作った、ReButton(非売品)が配られていたんです!!
そして、昨日東京で開催されたイベントでも、ReButtonの配布がありました。
何ができるのか?をざっくり(一例?)書くと、
- ボタンのクリック(5種類)をAzure IoT Centralに通知
- Azure IoT Centralでクリックしたタイミングを可視化
- Azure IoT Centralから外部サービスに連携(メール通知とか)
で、単四電池2本で動くWi-Fi接続型のボタンです。
詳細は公式ドキュメントを見ていただくとして、ここでは、ボタンをクリックしたらAzure IoT Centralに表示されるまでのセットアップ方法を書いておきます。
ハードウェア
電池を入れる
裏蓋を外して、単四電池2本を入れてください。
蓋はシリコン製なのでグンニャリします。隙間にツメを突っ込んで引っ張り上げれば簡単に外れると思います。
電池を入れるとこんな感じになります。
電池を入れたら、裏蓋は元の状態に戻してください。
ボタン操作を練習する
ReButtonは、最初のクリックの反応が遅いです。これは、ボタンを押したときに回路の電源スイッチがONして動き出そうとしている時間です。
そのため、最初のプッシュはちょっと長めに押し続ける必要があります。「強く押す」ではありません!「長く押す」です。
コツとしては、、、LEDが青色に点灯するまで押して、青色になったら離す。ちょっとコツが必要ですw
ボタンの内部プログラムでは、
- 押す→LEDが青色に
- 離す→LEDは青色のまま
- 1秒間放置→シングルクリックと判断
- クラウドへ通知しようとしてエラー(LEDが赤色で3回点滅)
とクリックを判定しています。
まだWi-FiやAzure IoT Centralが設定されていないため、エラー(LEDが赤色)になります。
また、3.の1秒間放置のときに押すと、ダブルクリック、トリプルクリックと変化して、LED表示が変わります。
クリック種類 | LED色 |
---|---|
シングルクリック | 青 |
ダブルクリック | 緑 |
トリプルクリック | 紫 |
何回か試してみて、クリックのコツを掴みましょうw
10秒長押しすると、LEDが消灯しなくなります。(白色の点滅) そうなったときは、一度電池を抜いて電源を断ってください。
Azure IoT Central
Azure IoT Centralを用意する
Azure IoT Centralにアクセスして、マイクロソフトアカウントでサインインしてください。アカウントを持っていない場合は、作成を選んで、アカウントを作ってください。
Azure IoT Centralのアプリケーションマネージャーが表示されたら、新しいアプリケーションをクリックしてください。
アプリケーションの作成に必要な情報を入力します。
Azureサブスクリプションを持っているなら、重量課金制を。持っていないorまずは動くのを見たいだけなら、評価版を選択してください。
アプリケーションテンプレートはカスタムアプリケーションを。
アプリケーション名とURLは任意なので分かりやすいものを入れてください。
このように表示されれば成功です。
これを、Azure IoT Centralのアプリケーションと言います。
Azure IoT Centralアプリケーションにテンプレートを追加する
アプリケーションビルダー画面を表示してください。
右側にある下から3つ目のアイコンをクリックすると表示されます。
デバイステンプレートの作成をクリックしてください。
カスタムをクリックしてください。
デバイステンプレートの名前に分かりやすい文言を入れて、作成をクリックしてください。
これで、テンプレートが追加され、そこにシミュレートのデバイスが1つ追加された状態になりました。
デバイスエクスプローラを見ると、テンプレートとデバイスを確認することができます。
自動的に作成されたシミュレートのデバイスは、削除しても問題ありません。
デバイスを追加する
テンプレートを作成すると、デフォルトでシミュレートのデバイスが1つ追加されますが、これをそのまま物理デバイスに紐づけることはできません。
物理デバイスを追加する必要があります。
デバイスエクスプローラのデバイス一覧の上にあるプラスマークをクリックして、実際(英語だとReal)を選択してください。
デバイス名を分かりやすい文言に変更して、作成をクリックしてください。
このように表示されれば成功です。
イベントにメッセージの項目を追加する
ボタンから送られてくるメッセージを、テンプレートに追加します。
テンプレートに追加ですが、、、実際の操作は、デバイスを選んでから、テンプレートの編集という流れになります。(ちょっと分かりにくい)
デバイスエクスプローラでデバイス一覧を表示して、デバイスをクリックしてください。
そして、テンプレートの編集をクリックしてください。
新しい測定をクリックして、イベントを選択してください。
Display Nameにメッセージ、フィールド名にmessage、規定の重要度を情報にして、保存をクリック、最後にDoneをクリックしてください。
フィールド名は、必ずmessage
と入れてください。
イベントの欄に、メッセージが追加されていれば成功です。
接続情報を取得
後でReButtonに設定する、Azure IoT Central(のデバイス)への接続情報を取得します。
デバイスエクスプローラでデバイス一覧を表示して、デバイスをクリックしてください。
そして、右上の接続をクリックしてください。
表示されたデバイス接続情報のうち、
を、後で使うのでメモ帳などにコピーしてください。
ReButton
ReButtonをAccess Pointモードで起動して、パソコンからReButtonに接続、WebページでWi-FiアクセスポイントとAzure IoT Centralの接続情報を設定します。
ReButtonをAccess Pointモードで起動
ボタンを押し続けてください。10秒以上。 この間、LEDが青色→黄色→水色→白色と変化します。白色になったら、ボタンを離してください。
すると、ボタンがAccess Pointモードで起動して、LEDが白色の点滅になります。
ReButtonのアクセスポイントに接続
AZB-xxxxxxxxという名前のアクセスポイントがReButtonです。
パソコンからこのアクセスポイントに接続してください。
接続操作すると、接続試行中で時間がかかりますが、接続試行中表示のまま、次の作業に進んでください。
Wi-FiとAzure IoT Centralの接続を設定する
任意のブラウザで、http://192.168.0.1/ にアクセスしてください。
Wi-Fiをクリックして、SSIDとパスフレーズを入力、Saveをクリックしてください。
Homeをクリック、Azure IoT Centralをクリックしてから、
を入力して、Saveをクリックしてください。
最後に、Shutdownをクリックしてください。
ボタン通知
ボタンをクリックすると、、、
Azure IoT Centralにメッセージが通知され、Webで確認することができます!
Azure SphereのOSアップデートの挙動を調べた
以前から、OSアップデートするときにアプリケーションはどうなるのか気になっていた、、、
- OSのダウンロード中にアプリは停止するのか?
- アプリの停止は事前に通知されるのか?
- アプリの停止時間は?
のですが、1/10にAzure Sphere OS 18.11.2のOSアップデートがOTA配信開始したので、挙動を調べることに。
挙動を調べるためのコード
アプリが再起動するため、Visual Studio(やgdb)でLog_Debugを見て確認することができません。 そこで、UARTに連続してデータを出力して、それをロジックアナライザでキャプチャすることにしました。
アプリは、起動時に"STX\n"を送信した後、0x00~0xffを連続して送信し続けます。SIGTERMを受けたら、"ETX\n"を送信して終了。
int main(int argc, char *argv[]) { Log_Debug("Application starting.\n"); // Register a SIGTERM handler for termination requests struct sigaction action; memset(&action, 0, sizeof(struct sigaction)); action.sa_handler = TerminationHandler; sigaction(SIGTERM, &action, NULL); UART_Config config; UART_InitConfig(&config); config.baudRate = 115200; config.flowControl = UART_FlowControl_None; int uartFd = UART_Open(MT3620_UART_ISU3, &config); assert(uartFd); write(uartFd, "STX\n", 4); char data = 0; while (!terminationRequired) { int ret = write(uartFd, &data, 1); if (ret == 1) data++; } wait_ms(100); // easyio write(uartFd, "ETX\n", 4); wait_ms(100); // easyio close(uartFd); Log_Debug("Application exiting.\n"); return 0; }
実行手順
色々と試しましたが、、、この流れがベストのようです。
azsphere device recover
でOSを18.11にする。azsphere device prep-debug
。- VSからアプリを実行して、停止。(Flashにアプリを入れる)
- ロジックアナライザを接続。
- resetボタンをクリック。
- ロジックアナライザがキャプチャできていることを確認。
azsphere device wifi add
して、azsphere device wifi list
でconnectedになることを確認、すぐにresetボタンをクリック。←この操作は短時間に!- 10分くらいキャプチャし続ける。
実行結果
- アプリが起動してから(OSアップデートで)停止するまで、約377秒(約6分)
- (OSアップデートで)アプリ停止時間、約83秒(約1分)
- OSのダウンロードがアプリ稼働中か停止中かは、判断つかなかった。
- アプリ停止直前は、SIGTERMシグナルが来ていた。
まとめ
実運用では、OSアップデートで1分くらい停止しても大丈夫なように、全体設計しておく必要がありそうです。
Azure Sphereの18.11がマイナーアップデート
Azure Sphere 18.11がマイナーアップデートされました。
リリースノートから、どんな変更点があったのか?確認したいと思います。
18.11,18.11.1,18.11.2リリースノート
リリースノートはこちらです。
18.11リリースノートを変更して、18.11.1と18.11.2が追加されています。
18.11.1と18.11.2が同時リリースってちょっとおかしくない?という感じですが、
ということで、OSの18.11.1は存在しないようです。
SDK 18.11.1 リリース
Private Ethernetの機能が追加されました。
これだけなので、この機能を使わないなら、SDKをアップデート不要です。
なお、SDK 18.11から18.11.1へアップデートは自動ではありません。SDK18.11.1をダウンロード、インストール操作してください。
OS 18.11.2 リリース
Azure SphereデバイスがWi-Fiに接続できない問題が解決されました。
OS 18.11から18.11.2はOTAで自動的にアップデートされます。更新は10分以内です。
18.11.2になると、azsphere device image list-installed --full
を実行して表示されるNW KernelのImage IDが44ed692e-ce49-4425-9aa6-952b84ce7b32
になります。
感想
C#コードでMT3620を動かしてみた
Seeed UG Advent Calendar 2018の23日目に誰をも寄せ付けないクレイジーな面白そうな記事が投稿されました。
MT3620セットアップに始まり、Cサンプルコードの解説、C#で開発するためのビルド環境の整備、C#からCのInterop、疑似イベント駆動と、すげー長いので、、、
「とりあえず、ビルドして動かしてみたい」
というライトなユーザー向けに、ブログを書いておこうと思いました。
MT3620でC#を動かすテクノロジー「IL2C」
現在、MT3620の開発言語はC言語だけです。
じゃあ、どうやってC#を動かすのか?ですが、C#コードをビルドした結果のMSILを、IL2C.Coreを使ってCコードを生成して、そのCコードをCコンパイラでビルドして、実行のバイナリイメージを作成、MT3620で実行します。(下図の右側)
C#コード
-> ビルド -> MSIL
-> IL2C.Core-> Cコード
-> ビルド -> バイナリイメージ
IL2C.Coreが生成したCコードは、それ単独をビルド、実行することができません。IL2C.CoreでCコードを生成するときに、IL2C.Runtimeを呼び出すCコードを出力しているからです。そのため、Cコードのビルド時にIL2C.Runtimeも加える必要があります。(下図の左側)
大きく、
- IL2C.Core
- IL2C.Runtime
の2つが重要!
IL2C.CoreとIL2C.Rumtimeがどこから来るのかというと、、、kekyoさんが鋭意開発していて、全ソースが彼のgithubに上がっています。
あと、上図の「IL2C」はIL2C.Buildという名前でnugetに上がっているので、実際に必要になるものは、
- IL2C.Build (IL2C.Coreが含まれている)
- IL2C.Runtime
ってことになります。
MT3620のサンプルコードを動かす
それでは、用意されているサンプルコードを動かしてみましょう。
MT3620の開発に必要な、ボード購入やらAzureSphereSDKインストール、デバイスのクレームなどは省略で。ググってください。Visual Studioを使って、(C言語で)MT3620を開発、実行ができている前提で。
必要なファイルをコピー
kekyo/IL2CリポジトリにIL2C.Runtimeライブラリとサンプルコードが含まれています。ローカルにクローンしてください。
git clone https://github.com/kekyo/IL2C.git
サンプルコードのソリューションを開く
Visual Studioで、samples/AzureSphere/AzureSphere.sln
を開いてください。
3つのプロジェクトが含まれているはずです。
デフォルトでスタートアッププロジェクトが不適切なので、、、
Mt3620App
プロジェクトを右クリックして、スタートアッププロジェクトに設定
を選択してください。Mt3620App
が太字で表示されればOKです。
ビルド&実行
PCにMT3620を接続して、デバッグ実行してください。
すると、自動的にnugetからIL2C.Buildをダウンロードしてきて、あれやこれやをやった後に、MT3620へデプロイ、プログラムが実行されます。
おまけ
C#コードでブレークポイントやステップ実行ができるぅ!!!
謎技術。
(さすがに、変数ウォッチはできません。)
<kekyoコメント>
デバッグ時の変数の参照は、プリミティブ型であれば見えると思う。オブジェクト参照は、frame__の下に入ってるけど、コードが抽象型で書かれていて、実際のインスタンスが具象型の場合は正しく見えない可能性がある あとラムダ式で変数キャプチャすると、クロージャ型の中を見ないと見えないけど、ローカルスタックフレームのどれがそのクロージャ型のインスタンスなのかを特定するには、いくつかツリーを開いて中身確認してみないとわからないかも知れない
今回、MT3620視点で書いていますが、、、 サンプルコードに、AzureSphere以外のmicro:bitやWio LTE、M5Stackもあるので、今後が楽しみですね。