Azure RTOSのGetting StartedをmacOSで実行してみました

この無線設備は、電波法に定める技術基準への適合が確認されておらず、法に定める特別な条件の下でのみ使用が認められています。この条件に違反して無線設備を使用することは、法に定める罰則その他の措置の対象となります。 

はじめに

昨日、LinuxでもAzure RTOSの実行環境を作れたので、macOSでも実現できるか試してみました。

blog.logicdesign.jp

blog.logicdesign.jp

必要なもの

  • macOSがインストールされているMac

手順(差分)

ツールのインストール

% brew tap ArmMbed/homebrew-formulae
% brew install arm-none-eabi-gcc ninja cmake

イメージのビルド

% bash getting-started/STMicroelectronics/STM32L4/tools/rebuild.sh

下記のようなエラーメッセージが出て止まります。

readlink: illegal option -- f
usage: readlink [-n] [file ...]
CMake Error: The source directory "/Users/ytakeuch/azure-rtos" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
Error: could not load cache

CMakeLists.txtが見つからないということなので、有る場所まで降りて行ってビルドを実行します。

% cd getting-started/STMicroelectronics/STM32L4/
% bash tools/rebuild.sh

build/app/以下に.binファイルが出来上がります。

イメージの書き込み

基板をMacに接続して、USB Mass Strage Deviceとしてマウントされたら.binファイルをコピーします。

% cp build/app/stm32l475_azure_iot.bin /Volumes/DIS_L4IOT

ターミナル接続

screenでシリアル接続します。

% screen /dev/tty.usbmodem413 115200


macOSでも環境を構築することができました。

Azure RTOSのGetting StartedをLinuxで実行してみました

この無線設備は、電波法に定める技術基準への適合が確認されておらず、法に定める特別な条件の下でのみ使用が認められています。この条件に違反して無線設備を使用することは、法に定める罰則その他の措置の対象となります。 

はじめに

readme.mdにはWindows PCが必要と書かれていましたが、バッチファイルのある場所にシェルスクリプトもあるのでビルドまではできると思っていました。

blog.logicdesign.jp


今週頭ごろのreadme.mdにはSTM32 ST-LINK Utilityで書き込む手順になっていたのですが、現在はMBED方式で書き込むようになっているので、Linuxでも環境を構築できるか試してみました。

必要なもの

  • Ubuntu 20.04がインストールされているPC

手順(差分)

ツールのインストール

% bash getting-started/tools/get-toolchain.sh

下記のようなエラーメッセージが出て止まります。

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 cmake : Depends: libssl1.0.0 (>= 1.0.2~beta3) but it is not installable
E: Unable to correct problems, you have held broken packages.

getting-started/tools/get-toolchain.shを見てみると...

sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'

という行にbionic(18.04 LTS)という文字列があるのでfocal(20.04 LTS)に置き換えます。

sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'

再度シェルスクリプトを実行します。

% bash getting-started/tools/get-toolchain.sh

今度はうまくツールをインストールできました。

イメージのビルド

% sh getting-started/STMicroelectronics/STM32L4/tools/rebuild.sh

getting-started/STMicroelectronics/STM32L4/build/app/以下に.binファイルが出来上がります。

イメージの書き込み

基板をPCに接続して、USB Mass Strage Deviceとしてマウントされたら.binファイルをコピーします。

% cp getting-started/STMicroelectronics/STM32L4/build/app/stm32l475_azure_iot.bin /media/ytakeuch/DIS_L4IOT

ターミナル接続

screenでシリアル接続します。

% sudo screen /dev/ttyACM0 115200


Linuxでも環境を構築することができました。

Azure RTOSのGetting Startedを実行してみました

この無線設備は、電波法に定める技術基準への適合が確認されておらず、法に定める特別な条件の下でのみ使用が認められています。この条件に違反して無線設備を使用することは、法に定める罰則その他の措置の対象となります。 

はじめてのAzure RTOS

Azure RTOSGitHubに上がっていたのでGetting Startedを実行してみました。

github.com

github.com

基板の選定

サポートされている基板は次の通りです。

  • Microchip ATSAME54-XPRO
  • NXP MIMXRT1060-EVK
  • Renesas Synergy Platform
  • STMicroelectronics BL-475E-IOT01

ルネサスSynergy Platformというのは良く分からなかったので他の3つから選びました。

Wi-Fiで値段が一番安いということでSTMicroelectronicsのB-L475E-IOT01Aにしました。
B-L475E-IOT01A1とB-L475E-IOT01A2の2種類がありますが、違いはSub-GHzのモジュールだけです。前者が米国向けで後者が欧州向けです。

私はDigi-Keyから購入しました。6,000円以上なので送料無料でした。
FedExで4日で届きました。

f:id:ytakeuch:20200525182753j:plain
B-L475E-IOT01A

技適未取得機器を用いた実験等の特例制度の届け出

B-L475E-IOT01に搭載されているWi-FiモジュールはInventek Systemsの43362-M3G-L44というもので技適マークは付いていません。
そのため技適未取得機器を用いた実験等の特例制度の届け出が必要です。

2020年5月27日からWeb届け出ができるようになっています。

exp-sp.denpa.soumu.go.jp

本人確認の方法は電子署名を用いたオンラインでの本人確認(個人の場合はマイナンバーカードの署名用電子証明書を用いた電子署名)または、各総合通信局での対面での本人確認です。

メーカー・型番・シリアル番号・FCC ID等を記載して届け出ます。
Webで届け出ると【開設届出を受け付けました】というメールが届きます。

Getting Started

基板毎にGetting Startedが違うのでB-L475E-IOT01Aのreadme.mdの手順通りに進めていきます。

github.com

必要なもの

  • Windows(10を推奨)がインストールされているPC
  • Azure subscription
  • Git
  • ハードウエア
    • B-L475E-IOT01A / B-L4S5I-IOT01A
    • 2.4GHzのWi-Fi AP
    • USB AからMicro USB Bへのケーブル

開発環境の準備

チュートリアルのレポジトリのクローン

> git clone https://github.com/azure-rtos/getting-started

ツールのインストール

  • GCC
  • Cmake
  • Ninja
  • Termie

「管理者権限の」コマンドプロンプトで下記のバッチファイルを実行する。

> getting-started\tools\get-toolchain.bat

Azureのリソースの準備をする

Azure CLIを使用するための準備を行います。

ローカルでAzure CLIを使用する場合は下記のURLからインストールします。

docs.microsoft.com


ブラウザ上でAzure CLIを使用する場合はAzure Cloud shellから実行します。

shell.azure.com

IoT hubを作成します。

パラメータは一部を除いてreadme.mdのままで実行しました。

> az extension add --name azure-iot
> az group create --name MyResourceGroup --location eastus
> az iot hub create --resource-group MyResourceGroup --name {IoTHubの名前}

{IoTHubの名前}はAzure全体でユニークである必要があるので、ユニークなものに置き換えます。

IoT hubを作成するとコンソールにJSONが出力されるので、hostNameの値を書き留めておきます。

バイスの登録

> az iot hub device-identity create --device-id MySTMDevice --hub-name {IoTHubの名前}

{IoTHubの名前}はaz iot hub create --resource-grouupで決めた名前に置き換えます。

バイスを登録するとコンソールにJSONが出力されるので、deviceIdとprimaryKeyの値を書き留めておきます。

バイスの準備

テキストエディタでgetting-started\STMicroelectronics\STM32L4\app\azure_config.hを編集します。

APのSSIDは必ず2.4GHz側にしてください。

// ----------------------------------------------------------------------------
// WiFi connection information
// ----------------------------------------------------------------------------
#define WIFI_SSID           "APのSSID"
#define WIFI_PASSWORD       "APのパスワード"
#define WIFI_MODE           Wi-Fiの暗号化モード

// ----------------------------------------------------------------------------
// Azure IoT Device information
// ----------------------------------------------------------------------------
#define IOT_HUB_HOSTNAME    "hostNameの値"
#define IOT_DEVICE_ID       "deviceIdの値"
#define IOT_PRIMARY_KEY     "primaryKeyの値"

イメージのビルド

> getting-started\STMicroelectronics\STM32L4\tools\rebuild.bat

実行すると、getting-started\STMicroelectronics\STM32L4\build\app\stm32l475_azure_iot.binというイメージが出来上がります。

イメージの書き込み

右上のUSB STLinkと書かれたMicro USBコネクタをPCに接続します。

f:id:ytakeuch:20200604113933p:plain

基板がUSBのMass Strage DeviceとしてDIS_L4IOT(F:)のように見えるので、ビルドしたイメージ(stm32l475_azure_iot.bin)をDrag & Dropします。
イメージの書き込み中はMicro USBコネクタの横のLEDが赤と緑に変化します。緑色固定になったら完了です。
自動的にAzure RTOSが実行され、次のような画面になります。

f:id:ytakeuch:20200604144634p:plain

テレメトリーを見る

コンソールからaz iot hub monitor-eventsコマンドを実行することでテレメトリーを観測できます。

> az iot hub monitor-events --device-id MySTMDevice --hub-name {IoTHubの名前}

f:id:ytakeuch:20200604145611p:plain

Elixir事始め(その3)

https://elixir-lang.jp/images/logo/logo.png


Getting StartedでElixirを学習しています。

基本型

elixir-lang.jp

7つの基本型の例です

  • 整数型(integer) → 10
  • 浮動小数点型(float) → 10.0
  • 論理型(boolean) → true
  • アトム型(atom) → :atom
  • 文字列型(binary) → "hello"
  • リスト型(list) → [1, 2, 3, 4]
  • タプル型(tuple) → {1, 2, 3, 4}

基本算術

iex> 1 + 1
2
iex> 2 - 1
1
iex> 3 * 3
9
iex> 4 / 2
2.0

/による除算は常に浮動小数点型を返します。

整数で除算の結果や剰余を得たい場合はdiv/2やrem/2関数を用います。

iex> div(5, 2)
2
iex> rem(5, 2)
1

Elixirの浮動小数点型は64ビットの倍精度です。

round/1関数は与えられた浮動小数点数に対して最も近い整数を返します。
trunc/1関数は与えられた浮動小数点数の整数部分を返します。

iex> round(1.45)
1
iex> round(1.55)
2
iex> trunc(1.99)
1

関数の識別と説明文書の取得

関数は関数の名前とアリティの両方で識別されます。アリティは関数が受け取る引数の数です。
四則演算で例示した、div/2、rem/2、round/1、trunc/1のように記載します。

Elixirシェルのh/1関数は与えられた関数の説明文書を返します。

iex> h trunc

                               def trunc(number)                                

  @spec trunc(value) :: value when value: integer()
  @spec trunc(float()) :: integer()

guard: true

Returns the integer part of number.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> trunc(5.4)
    5
    
    iex> trunc(-5.99)
    -5
    
    iex> trunc(-5)
    -5

論理値型

真はtrueで、偽はfalseです。頭文字は小文字です。
Elixirには値の型をチェックする関数があります。

論理値型であるかをチェックする関数はis_boolean/1です。

iex> is_boolean(true)
true
iex> is_boolean(True)
false

アトム型

アトムは名前に対応した値が対応する定数です。他のいくつかの言語ではシンボルと呼ばれています。
次のような個別の値を列挙するのに役立ちます。

iex> :apple
:apple
iex> :orange 
:orange
iex> :rasberry  
:rasberry
iex> 

文字列型

無名関数

(連結)リスト

タプル

リスト or タプル

Elixir事始め(その2)

https://elixir-lang.jp/images/logo/logo.png

Getting StartedでElixirを学習しています。

はじめに

elixir-lang.jp

インタラクティブ・モード

iexコマンドを実行します。

$ iex
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]

Interactive Elixir (1.9.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 

式を入力すると評価値が返されます。

iex(1)> 256 + 64
320
iex(2)>

iexを終了するためには「Control-C」を二度押します。

iex(1)> 
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution
$

スクリプトファイルの実行

elixirコマンドでスクリプトファイルを実行します。

elixirの拡張子は .exs です。
Hello world!を出力するスクリプトを作成します。

hello_world.exs

IO.puts "Hello world!"

elixirを実行します。

$ elixir hello_world.exs 
Hello world!

Elixir事始め(その1)

https://elixir-lang.jp/images/logo/logo.png

発端

SWEST21の基調講演でNervesプロジェクトに興味を持ちました。Nervesプロジェクトは組込みソフトウェア開発にElixirを使用するためのフレームワークです。
そこでNervesを使うためにElixirを学ぶことにしました。

swest.toppers.jp

ちなみに、10年ほど前にElixirと同じくErlang VMで動作するErlangを学ぼうとして、挫折した経験がありますorz...。

ElixirのWebサイト

ElixirのWebサイト(日本語版)はhttps://elixir-lang.jp/です。

まずはGetting Startedを一通りやってみます。

インストール

Getting Startedの前にElixirをインストールします。

elixir-lang.jp

インストール先のOSはUbuntu 18.04です。

入力したコマンドは次の通りです

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
$ sudo apt-get install esl-erlang
$ sudo apt-get install elixir

インストールの確認

インストールしたElixirのバージョンは次のコマンドで確認できます。

$ elixir --version
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]

Elixir 1.9.1 (compiled with Erlang/OTP 21)

Redox OSをVirtualBox上で動かしました(道半ば)

今度はVirtualBox上でRedox OSを動かそうとしてみました。
まずは、
qiita.com
を参考にして、ストレージをSATAAHCIとしてredox_0.5.0_livedisk.isoをマウントしてブートしてみましたが、

f:id:ytakeuch:20190328004047p:plain
Redox ISOイメージ ブート失敗

同上のページを参考にしてRAWイメージからVDIイメージを作成しました。

$ VBoxManage convertfromraw redox_0.5.0_harddrive.bin redox.vdi

redox.dviをハードディスクイメージとしてマウントしたらブートできました。

f:id:ytakeuch:20190328004328p:plain
Redox 画面

キーボードは効くのでブートできましたが、マウスが効きません。

Input→Mouse Integrationをいじったらマウスが効くようになりました。

しかし、ネットに繋がりません。

f:id:ytakeuch:20190328005610p:plain
Redox ネットに繋がりません

Intel PRO/1000 MT Desktop (82540EM)を選択しているのですが...