Azure Sphereのアプリケーションデプロイ

Azure Sphereの特徴の一つに、アプリケーションのデプロイ機能があります。 一般にOver-the-Air(OTA)とか、自動更新などと言われるもので、デバイスのアプリケーションを遠隔で入れ替えることができる機能です。
Azure Sphereでは、チップ上で動いているAzure Sphere OSが定期的にクラウド、Azure Sphere Security Service(AS3)をチェックして、新しいOSやアプリケーションが有ったときにダウンロードして入れ替えることで実現しています。

で、アプリケーションを更新したいときはAS3にアップロードするわけですが、、、まー、構造がややこしい。どれくらいややこしいかというと、これくらい。(松岡調べ)

f:id:matsujirushix:20200601211955p:plain

まー、ややこしい。(2度目)

こんな声が届いたのか分かりませんが、ちょっと前にこのあたりの構造が大幅に変更されシンプルになりました。

変更後がこんな感じ。(松岡調べ)

f:id:matsujirushix:20200601212416p:plain

シンプルにはなったものの、まだ把握不十分な感じもしていてモヤモヤとしていたのですが、、、
先日、Azure Sphere Public APIなるものが公開されて、これを見てみたところ、スッキリ・バッチリと構造を理解することができました。

結果がこちら。(松岡調べw)

f:id:matsujirushix:20200601210818p:plain

  • 製品をProductとする。
  • アプリケーションの配布単位にDevice Groupを設ける。
  • DeviceDevice Groupと紐づいている。
  • Device Groupに配布するアプリケーションDeploymentを紐づける。
  • と、結果としてデバイスDeviceに紐づいたDevice Group、に紐づいたDeploymentImageをインストールする。

です。

さらに細かな点を言うと、

  • 内部はIDで管理。(なので、名前が重複しても関係ない)
  • DeviceGroupは、複数Productで兼用されない。
  • DeviceGroupからDeploymentのカレント参照は1つのみ。

でした。

あー、スッキリした。

Azure Sphere SDKのバージョンアップに注意を!

縁あって参加させていただいた、AVNETさんのセミナーで気になるお話しが。

20.04から、Azure Sphere SDKVisual Studio拡張が別々になったので(略

別々!?

いままでは、Azure Sphere SDKをインストールすれば、Azure SphereVisual Studio拡張も自動的にインストールされていましたが、どうやら別々に提供されるようになったみたい。
知らなかった...

というわけで、手元の環境を確認することにします。

現在のバージョン

Azure Sphere SDK

コントロールパネルで、Azure Sphere SDKのバージョンを確認。
20.4.7.42974なので、現在の最新でした。

f:id:matsujirushix:20200516204037p:plain

azsphere

azsphereコマンドのバージョンを確認。
こちらも、20.4.7.42974です。

f:id:matsujirushix:20200516204252p:plain

Visual Studio Extension for Azure Sphere

Visual Studioで、Azure SphereVisual Studio拡張のバージョンを確認。
20.1.7.495...

f:id:matsujirushix:20200516204534p:plain

古 い ぞ ! !

この情報はちゃんと公開されているのか?

ちゃんと公開されていました...ハイ。

20.04概要に、

f:id:matsujirushix:20200516204948p:plain

Visual Studio用とVSCode用のSDKを同一のSDKにして、Visual Studio拡張やVSCode拡張はマーケットプレイスで配布になったと、ちゃんと書いてあります

Visual Studio Extension for Azure Sphereの最新バージョンは?

Visual Studioマーケットプレイスを覗くと、、、20.4.7.49790でした。

f:id:matsujirushix:20200516205324p:plain

Visual Studio Extension for Azure Sphereの更新

これをポチっとやればOK。

f:id:matsujirushix:20200516205605p:plain

教訓。
What's newは隅々確認しましょう。

Seeeduino XIAOのタッチ入力

Seeed K.K. エンジニアブログにも記事をポストしていますが、雑多な感じのものはこっちの個人ブログへポストすることにします。

タッチ入力を、ちょー軽く確認しました。

ライブラリの追加が必要

Seeeduino XIAOのArduinoパッケージには、タッチ入力の機能が含まれていません。

ググってみたところ、Adafruit_FreeTouchで出来るようです。

Arduinoライブラリマネージャで出てくるので、ここからインストールしました。

f:id:matsujirushix:20200423173122p:plain

ソフトウェア

Adafruit_FreeTouchに同封のサンプルコードを修正して、A0~A10をシリアルプロッタに出力しました。

(具体的なコードは省略w)

結果

f:id:matsujirushix:20200423173325p:plain

凡例が間違っているのは無視してください(汗

A0~A1、A6~10が、タッチ入力で使えました。
(A2~A5は使えませんでした。)

f:id:matsujirushix:20200423173627p:plain

Seeeduino XIAOのデジタル入力

Seeed K.K. エンジニアブログにも記事をポストしていますが、雑多な感じのものはこっちの個人ブログへポストすることにします。

今回は、デジタル入力を確認しましょう。

ハードウェア

デジタル出力のときと同様、(電源を除いた)全ピンで入力できるようです。

f:id:matsujirushix:20200418162232p:plain

なので、D0にタクトスイッチ経由で3V3(3.3V)に結線し、かつ、D0を抵抗経由でGNDに結線しました。

f:id:matsujirushix:20200418200744p:plain

ソフトウェア

タクトスイッチを押したときに、オンボードの黄色LEDを点灯するコードを作成しました。
オンボードの黄色LEDは13で、論理が反対(LOWで点灯)なので注意してください。

constexpr int BTN = 0;  // D0
constexpr int LED = 13; // YELLOW_LED

void setup()
{
  pinMode(BTN, INPUT);
  pinMode(LED, OUTPUT);
}

void loop()
{
  digitalWrite(LED, digitalRead(BTN) ? LOW : HIGH);
}

実行!

タクトスイッチを押すと、黄色LEDが点灯しました。(動画は割愛w)

プルアップ/プルダウン抵抗って省略できないの?

SAMD21マイコンのPORTには、内蔵プルアップ/プルダウンの機能があります。
↓データシートから抜粋
f:id:matsujirushix:20200418201437p:plain

Platformにも、それらしい定義があるので試してみることに。

f:id:matsujirushix:20200418201544p:plain

ハードウェアはこちら。プルダウン抵抗を取っ払いました。
f:id:matsujirushix:20200418201637p:plain

ソフトウェアは、pinMode()で指定していたINPUTINPUT_PULLUPにしました。

constexpr int BTN = 0;  // D0
constexpr int LED = 13; // YELLOW_LED

void setup()
{
  pinMode(BTN, INPUT_PULLDOWN); // <---
  pinMode(LED, OUTPUT);
}

void loop()
{
  digitalWrite(LED, digitalRead(BTN) ? LOW : HIGH);
}

結果、ちゃんと動作しましたー

おしまい。

Seeeduino XIAOのデジタル出力

Seeed K.K. エンジニアブログにも記事をポストしていますが、雑多な感じのものはこっちの個人ブログへポストすることにします。

Seeeduino XIAO、ちっちゃカワイイので、のんびりじっくりと時間をかけて楽しもうと思っています。

f:id:matsujirushix:20200418162027p:plain

www.seeedstudio.com

さっそく、基本中の基本、デジタル出力を確認しましょう。

ハードウェア

下図の「D〇」のピンがデジタル入出力で使えるみたい。

f:id:matsujirushix:20200418162232p:plain

ということは、、、つまり、(電源を除いた)どのピンでもデジタル入出力可能!!
ほほー。

ってことで、D0とD1に、LED-電流制限抵抗-GNDの流れを結線しました。

f:id:matsujirushix:20200418162540p:plain

ソフトウェア

LED1が点灯(0.2秒)、LED2が点灯(0.2秒)、消灯(1秒)を繰り返すコードを作成しました。

constexpr int LED1 = 0; // D0
constexpr int LED2 = 1; // D1

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}

void loop()
{
  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, LOW);
  delay(200);
  
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, HIGH);
  delay(200);
  
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  delay(1000);
}

実行!

えー、点滅しました。(動画は割愛w)

デジタル出力のピン番号って不思議ですよね?

Seeeduino XIAOの回路図を見ると、D0はSAMD21マイコンのPA2に接続されています。

f:id:matsujirushix:20200418163106p:plain

f:id:matsujirushix:20200418164413p:plain

でも、digitalWrite()に指定するピン番号は2ではなくて0...。

どこかで番号を変換(マッピング)していると思われるので、探しました。

定義しているのはココ。Platformのvariants\XIAO_m0\variant.cppでした。

f:id:matsujirushix:20200418163851p:plain

そして、これを使っている箇所は、、、色々w
デジタル出力のときは、cores\arduino\wiring_digital.cでした。

f:id:matsujirushix:20200418164112p:plain

API set "4" is not valid.エラーと対処方法

久しぶりにAzure Sphereサンプルコードをビルドしてみたところ、CMakeでAPI set "4" is not valid.というエラーが発生しました。

f:id:matsujirushix:20200222173312p:plain

続きを読む

ESP32-Azure IoT Kit ソフト編

これの続きです。

matsujirushi.hatenablog.jp

それでは、ESP32-Azure IoT Kitを動かしてみたいと思います。

Getting Started的な手順は、いろいろとリンクを漁ってみたところ、次の2箇所にありました。

続きを読む