電気機器、機械、部品などをインターネットにつなげるためには、IoTデバイスとして、超小型の「通信ボード」を使います。通信ボードには、CPU、RAM、ROM(またはフラッシュメモリ)、通信チップ、センサーなどの周辺デバイスが実装されます。
その超小型び通信ボードをまじめに開発するには、回路図を設計し、基盤を作り、CPUや通信チップなどを実装し、動作させるまでには、スキルだけでなくかなりの費用と期間が必要です。
しかし、ありがたいことに、誰でも、安価に、IoTデバイスのプロトタイプを手に入れることができます。さらに、プログラムを容易に作れる、コンパイラー・リンカ―などの開発環境(Arduinoと呼ばれる)までそろっています。
■ IoT用通信ボードを購入する
今回、スイッチサイエンス社のホームページから、以下のIoTデバイスのプロトタイプを購入しました。
選定のポイントは、デバッカが使える、無線LANが使える、BlueToothが使えるの3つです。
「Arduino MKR WiFi 1010」
https://www.switch-science.com/catalog/7384/
実際に購入したものは、以下のようなものです。



また、スイッチサイエンスのホームページからデータシート、回路図などを取得できます。
■ 購入したIoT用通信ボードの仕様
「Arduino MKR WiFi 1010」 のハードウェア仕様は以下の通りです。
(スイッチサイエンスのホームページより引用)
- ボード電源電圧(USB) : 5 V
- 回路動作電圧 : 3.3 V
- マイクロコントローラ : SAMD21 Cortex-M0+ 32bit ARM MCU
- 通信モジュール : u-blox製 NINA-W102
- セキュアエレメント : ATECC508
- 対応バッテリ : Li-Poシングルセル、3.7 V、1024 mAh(最少)
- ペリフェラル
- デジタルI/Oピン:8ピン
- PWMピン:13ピン(0 .. 8, 10, 12, 18 / A3, 19 / A4)
- UART:1
- SPI:1
- I2C:1
- アナログ入力:7(8/10/12ビット ADC)
- アナログ出力:1(10ビット DAC)
- 外部割り込み : 10(0, 1, 4, 5, 6, 7, 8, 9, 16 / A1, 17 / A2)
- I/Oピン経由DC電流 : 7 mA
- メモリ
- CPUフラッシュメモリ : 256 KB(内蔵)
- SRAM : 32 KB
- EEPROM : なし
- クロック
- RTC:32.768 kHZ
- メインクロック:48 MHz
- LED:6
- USB:USB Full-Speed(デバイス/ホスト)
- 寸法(mm) : 61.5 x 25 mm
- 重量 : 32 g
また、ピン配列は以下の通りです。これらのピンを使って、センサーなどの周辺デバイスと接続します。
(スイッチサイエンスのホームページより引用)

■ 統合開発環境:Arduino IDEのインストール
デバック機能が追加された最新バージョン2.0のベータ版をインストールします。
https://www.arduino.cc/en/software

ダウンロードして、インストーラをダブルクリックします。

ライセンス契約に同意します。

現在のユーザのみにインストールを選択します。

インストール先を指定します。


しばらく待って、インストール完了です。

■ 統合開発環境:Arduino IDEのセットアップ
インストールした Arduino IDE 2.0を起動します。
「Arduino MKR WiFi 1010」を使うには、Toolsメニュー からBoard → Board Managerを選択します。

左のBoard Managerの入力ボックスに「Arduino MKR」と入力します。
そうすると、「Arduino SAND Boards・・・」が表示されますので、”INSTALL”をクリックします。




インストールが終わったら、
ToolsメニューからBoard→”Arduino SAND Borad…”→” Arduino MKR WiFi 1010 ”を選択します。

「Arduino MKR WiFi 1010」 をUSBケーブルでPCに接続します。

Windowsのコントロールパネルからファイルマネージャを開き、 「Arduino MKR WiFi 1010」 が接続されたポート名(COM3)を確認します。

Toolsメニューから”Port COM3″→”COM3(Arduino MKR WiFi 1010)”を選択します。

「Arduino MKR WiFi 1010」 からボード情報を取得して、接続を確認します。
Toolsメニューから”Get Bord Info”を選択します。

バード情報が表示されます。

以上 で「Arduino MKR WiFi 1010」を使う準備ができました。
■ プログラムのコンパイル・リンク、デプロイ、動作
無線LAN(WiFI) を使ったサンプルのプログラムをコンパイル・リンクし、ボードに配置後、動作させてみます。
1) WiFiNINAライブラリ をインストールする
無線LAN(WiFI)を使ったプログラムをつくるには、ライブラリが必要になります。
「Arduino MKR WiFi 1010」には、SSLなどがサポートされた「WiFiNINA」というライブラリがありますので、これを使います。
これを端末側にもインストールするため、ファームウェア更新をします。
Toolsメニューから”WiFi101 / WiFiNINA Firmware Updater”を選択します。
ポップアップが表示されますので、ポートと最新バージョンを選択し、”Install”をクリックします。
成功するとポップアップに「Firmware Successfully installed」と表示されます。
失敗した場合、複数のArduino IDEが立ち上がっていることが影響していることがあります。
それらをクローズしてから再度実施してみてください。


2)サンプルのWebClientをコンパイル・リンク、デプロイ、動作
FileメニューからExamples→WiFiNINA→WiFiWebClientを選択します。

すると、 WiFiWebClient プログラムのプロジェクト画面(スケッチ)が起動します。

arduino_secrets.hタブを選択し、お使いのアクセスポイントのSSID、パスワードを設定します。

SketchメニューからVerify/Compileを選択し、コンパイル・リンクを実行します。
正常に終了すれば、”Compilation Complete.”が出力画面に表示されます。


SketchメニューからUploadを選択し、ボードにプログラムを配置します。
フラッシュメモリに書き込まれます。
配置されると、”Upload Complete.”が表示されます。


このサンプルプログラムは、動作ログをシリアル経由で出力します。この出力はUSB経由でArduino IDE上で見ることができます。
Toolsメニューから”Serial Monitor”を選択すると、下部にログが出力されます。


■ デバックはプローブがないとできない
このようにして、 IoTデバイスのプロトタイプである「Arduino MKR WiFi 1010」 を動作させることができます。
しかし、プログラムをボード上で動作させながらデバック(ステップ実行、ブレークポイント設定など)には、
別売のプローブ(Segger J-Link debugger)が必要となります。
学習用(EDU版)であれば、1万円前後で買えますが、製品用となると以下のように高額です。
SEGGER デバッガ プログラマ/インサーキットエミュレータ フラッシュマイクロコントローラ用 デバッグエミュレータ 1個入り 8.08.00 J-LINK BASE
また、以下のようにプローブを接続するにはボード側も、裏面にコネクタを半田付けする必要があります。
Using the Segger J-Link debugger with the MKR boards
残念ながら、今回は、デバックをあきらめました。
デバックが必要な場合、原始的ですが、ログを入れて動作をチェックするしかありません。
■ まとめ
ブート、割り込み制御、例外制御などCPUや各デバイスを直接操作するようなローレベルのプログラミングはできず、またOSもないため、本格的な組み込みプログラミングをすることはできません。
しかし、数百円~数千円で、プログラミングできるCPUボードを手に入れることができます。
プログラムをROM(フラッシュメモリ)に焼いてから起動させ、自律動作させるという流れは、組み込みプログラミングの手順通りです。
手軽にIoTデバイスを動かし、ネットワーク接続をさせ、Webサーバと連動したアプリケーションを手を動かしながらプロトタイピングできることは、技術開発を行う上でも有効な手段となります。
ソフトウェア開発・システム開発業務/セキュリティ関連業務/ネットワーク関連業務/最新技術に関する業務など、「学習力×発想力×達成力×熱意」で技術開発の実現をサポート。お気軽にお問合せ下さい