このPDFは，CQ出版社発売の書籍「定番STM32で始めるIoT実験教室」の一部見本です．
内容・購入方法については，下記のWebサイトをご覧ください．
内容：https://shop.cqpub.co.jp/hanbai/books/MTR/MTRZ202110.html

見本Introduction

IoT 開発の入門レッスン［著者］大中 邦彦，［作画］神崎 真理子

僕は玄関のチャイムが鳴ったらスマートフォンに知らせてくれるマシンが欲しいなぁ

古今先生，僕も IoT 機器を作ってみたいです

どんなものを作ってみたいのかな？
私は外出先から，猫がどうしているかのぞいたり，部屋の温度がわかるものがほしいわ！

インターネットを通じてスマートフォンと接続されるものばかりだね．
インターネットに簡単につなぐことができるデバイスにはどんなものがあるんだろう？
クラウド・サーバ（ビッグデータ）Wi-Fi
マイコンとセンサ

例えばこの ESP32．
これなら見た目は普通のマイコンだけど，Wi-Fiお小遣いで（Bluetooth も）を内蔵しているから，買えちゃう
簡単にインターネットに接続できるんだ．
しかも 1,000 円以下！

可視化
通知

難しそうですね

パソコン

制御
制御

スマートフォン

家の中にたくさん置けば，いつでも猫に話しかけられそうですね

見本
4Introduction

IoT 開発の入門レッスン

IoT 機器の 1 つ 1 つは非力だけど，たくさん集まれば集まるほどすごい力を発揮するんだ．だからできるだ
け安く簡単にインターネットに接続できる組み込みコンピュータがほしくなる
メール・サービス

お天気サーバビッグデータ

AⅠ（ニューラル・ネットワーク）

九州

クラウド
緯度，経度，高度，外気，温度，湿度，日時，年齢，性別，ペットの有無など

快適運転
パラメータ
気圧950hpa
外の湿度80％東京

センサ

気圧1000hpa
外の湿度60％除湿OK！

スマートスピーカやスマートフォン

センサ

12 時間35分
後に台風がきます．除湿を予約します

北海道

センサ

気圧1013hpa
外の湿度40％ウザイ奴

世界中みーんないつも快適！

マイコンよりも高性能なシングルボード・コンピュータを使うという手もある．代表格はRaspberry Pi（ラズベリー・パイ）！
Wi-Fi が搭載されているものを選べば，インターネットに簡単に接続できるよ．Wi-Fi 搭載でも5,000 円以下で買える

屋外など電源が取れない
ところでは，ESP32 のような低消費電力のマイコンのほうが電池が長持ちする

水やり装置

アリの群れがゾウを倒す…
みたいな？

そうか．機能だけじゃなくて，消費電力のことも考えないといけないん
ですね

ESP32 とはどういう違いがあるんですか？

Raspberry Pi は LinuxOS も動く本格的なコンピュータで性能が高いんだけど，その分消費電力も大きめだ

ここからは，IoT 機器の作り方を学ぶぞ．基本はマイコンを正しく制御するプログラミング技術だ
ソースコードあさがお
カメラ

ESP32デバイス

見本［予習］インターネット接続機能をもった “IoT 機器 ” を作ろう

5Discoveryシリーズ

拡張シールドピン配列が一緒で互換性がある

Nucleoシリーズ（a）Nucleo と Arduino UNO

写真 1 STM32F マイコンの魅力 1：千円台で入手できる開発ボードが各種販売されている

手 持 ち の STM32F ボ ー ド と 拡 張 シ ー ル ド． 左 か ら Ethernet Shield，SensorTile Shield，X−NUCLEO−IHM04A1 デュアル・モータ・ドライ バ，STM32F0 Discovery，STM32F7 Discovery，NUCLEO −F446RE，NUCLEO−F302R8

STM32F は，ST マイクロエレクトロニクスから発売 さ れ て い る 32 ビ ッ ト・ マ イ コ ン で す．“F” はFoundation の頭文字から採られており（1），本シリーズは，非常に多くの開発シーンで利用されています．
私も，IoT 向けの開発や電動自転車レース，ホビー向
けのドローンで STM32F を利用しました．
STM32F が人気を集めるのには，どういった理由があるのでしょうか？ここでは，STM32F の魅力や利用するメリットについて紹介します．

理由その 1：開発ボードが入手しやすい
写真 1 に示すのは，私の自宅にあった STM32F の開発 ボ ー ド Nucleo，Discovery と 拡 張 シ ー ル ド で す．
ST マイクロエレクトロニクスは，Discovery と Nucleoと呼ばれる 2 種類の開発ボードを提供しています．

18

第1章 STM32マイコンが世界標準になった理由（b）Arduino 用の拡張基板「シールド」
写真 2 Nucleo シリーズには Arduino UNO R3 と同じピン配列の拡張コネクタが付いている

NUCLEO−F446RE，Arudino UNO はピン配列が同じ．拡張ボードも各種同じインターフェースなので，Arduino 用のものでも Nucleo で利用できる．拡張シールドは左から eVY1，MP3 Player，Ethernet Shield，SensorTile Shield

特に Nucleo シリーズは，IoT（Internet of Things）
向けの展示会やイベントで ST マイクロエレクトロニクスが無料で配布していたり，2,000 円以下と非常に安価に入手できたりするので，持っている開発者も多いと思います．私も気づいたら多くの STM32F 開発ボードが自宅にありました．
STM32F は，STM32 シリーズの中でもメイン・ストリーム〜高スペックに位置付けられています（図 1）．
特に高スペックな製品は，AI（ディープ・ラーニング/CNN）や GUI を動かすことができます．このような見本

第2部

実験に使うハードウェア＆ソフトウェア

IoTプログラミング実験回路の準備
Wi-Fi＆センサ搭載でインターネット接続やアナログ信号処理の基本をマスタできる
白阪 一郎

Ichiro Shirasaka，永原 柊

Shu Nagahara

ここでは，CQ 出版社が開発した IoT プログラミング学習ボード「ARM-First」を紹介します．このボードだけで，気圧や加速度 / 角速度の測定，音声処理，マイクロ SD カードの読み書き，ネットワークへの接続ができます．

IoT プログラミング学習ボード
ARM−First
写真 1 に示すのは，CQ 出版社が開発した IoT プロ
グラミング学習ボード「ARM−First」です．ST マイクロエレクトロニクス社の STM32F405RGT6（Cortex−M4）を搭載したマイコン・ボードです．
Arduino拡張コネクタ

3.3V
レギュレータ

図 1 に示すように，このボードだけで，気圧や加速度/角速度の測定，音声処理，マイクロSDカード（SDIO
シリアル 4 ビット）の読み書き，ネットワークへの接続ができます．
（Inter − IC
音 声 処 理 は，MEMS マ イ ク（4 個 ），I2SSound）イ ン タ ー フ ェ ー ス を 持 つ D − A コ ン バ ー タ（192 kHz，24 ビット），ヘッドホン・アンプを搭載し，Arm32 ビット・マイコン
STM32F405RGT6

RESET
ボタン

加速度 / ジャイロ・センサ
LSM6DSL
気圧センサ
LPS22HB

ユーザ LED × 2
USB コネクタ

D-A コンバータ
WM8523

ヘッドホン・アンプ
NCP2811マイクロ SD
ソケット
ST-LINKコネクタ

ステレオ・オーディオ・ジャック
Arduino拡張コネクタDFU モード用のBOOT ボタン

MEMS マイク× 4
MP34DT05-A

32.768kHz
水晶発振子

12MHz
水晶発振子

見本

写真 1 気圧や加速度 / 角速度（ジャイロ）の測定，音声処理，マイクロ SD カード（SDIO シリアル 4 ビット）の読み書き，ネットワークへの接続ができる IoT プログラミング学習ボード「ARM−First」（設計：白阪 一郎）
学生向けマイコン・ボード Arduino Uno とサイズが同じ（約 5 × 7 cm）

36

第１章 IoTプログラミング実験回路の準備

IoTプログラミング学習ボード

マイクロSDカード

加速度/ジャイロ・センサ
気圧センサ

SDIO

MEMSマイク

I2S

MEMSマイク
MEMSマイク

I2S

I2C

STM32F405
マイコン

I2S

RTC

MEMSマイクUSB（仮想COM）

D-A
コンバータ
WM8523

L
R

ヘッドホン・アンプ
NCP2811

ヘッドホン

UART2
Wi-Fiインターネット・モジュール
ESP-WROOM-02マイコンパソコン

Wi-Fi

図1 IoTプログラミング学習ボードだけで，気圧・温度や加速度/角速度（ジャイロ）の測定，音声処理，マイクロSDカード（SDIO
シリアル 4 ビット）の読み書きができる

高音質の音声処理や音楽再生ができます．
Arduino 仕様の拡張コネクタも搭載しています．液
晶ディスプレイやグラフィック・ディスプレイ，モータ・ドライバなど，周辺I/Oを拡張するボード（Arduinoシールド）を接続することにより，実用的なアプリケーションにも活用できます．
本ボードは，AVR マイコンを搭載した学生向けマイコン・ボードである Arduino Uno とサイズが同じで，約 5 × 7 cm です．
● 特徴①：さまざまな開発環境が使える（1）ST マイクロエレクトロニクス社純正の開発環境
STM32CubeIDE を使って，C 言語や C++ 言語によるプログラム開発ができます．
（2）Arduino 用のボード・ライブラリSTM32GENERICを利用して，Arduino IDE によるプログラム開発ができます．
（3）Pyboard 用MicroPythonのライブラリを使ったプログラム開発ができます．MicroPython の1 行入力でコマンドを実行できるコマンド・インターフェースにより，ビギナでもすぐに組み込み機器のプログラムが作れます．

写真 2 IoT プログラミング
学 習 ボ ード「ARM − First」に搭載された Arm マイコン
STM32F405RGT6（ST マイクロエレクトロニクス）

ク ロ ッ ク 周 波 数 168 MHz，
RAM：192 K バイト，フラシュ・メモリ：1024 Kバイトを
搭 載 し た 64 ピ ン の 32 ビ ット・プロセッサ● 特徴②：Arm マイコンのデファクト・スタンダー
ド STM32F4 マイコン
（STM32F405）を搭載
IoT プログラミング学習ボードに搭載された Armマイコン（写真 2）は，ST マイクロエレクトロニクス
社の STM32F405RGT6（Cortex−M4）です．クロック
周波数 168 MHz，RAM：192 K バイト，フラッシュ・メモリ：1024 K バイトを搭載した 64 ピンの 32 ビット・プロセッサです．最新のプロセッサではありませんが，そのぶん多くのライブラリが蓄積されています．
初めて使うマイコンのプログラム作成は，マイコンの仕様書を読むだけでは難しいものです．このときに大きな助けとなるのが，実際に動作するサンプル・プ
ログラムです．デファクト・スタンダードのマイコンは，ネット上にたくさんサンプル・プログラムがあり，プログラム作成の敷居を大幅に下げてくれます．
● 特徴③：Wi−Fi 接続用モジュールを搭載

IoT プログラミング学習ボードの裏面側にインターネット接続用の Wi−Fi モジュールを搭載しています（写真 3，写真 4）．
インターネット・ラジオの再生や，クラウド上のAI サーバにセンサ・データを送ればインターネットを介した高度なデータ処理ができます．
● 特徴④：AI スピーカや IoT 機器を作るためのセンサを各種搭載
オーディオ入力用の MEMS マイク（4 個），出力用のハイレゾ対応 D−A コンバータ，ヘッドホン・アンプ，大量データの高速保存・読み出しができるマイクロSD 用のソケットを搭載しています．外付け部品なしでビーム・フォーミングやハイレゾ音楽再生などの音
響関連のアプリケーション製作や実験ができます．

見本

IoT プログラミング学習ボード ARM−First

37

第3部

IoT プログラミング入門［著］永原 柊［監修］ST マイクロエレクトロニクス

こ こ で は， 第 2 部 で 紹 介 し た STM32 マ イ コ ン 搭 載 ボ ー ド「ARM−First」 と プ ロ グ ラ ミ ン グ 環 境
STM32CubeIDE を使って，ボードに実装されているさまざまな機能の動かし方を解説します．
「どういう場合にその機能が必要とされるのか」についても，あわせて示します．

第 1章

ディジタル出力回路を動かす

デ ィ ジ タ ル 出 力 機 能 は， マ イ コ ン で 照 明 の ON/OFF を制御するなど，外付けのデバイスを動かすときに使う機能の１つです〔表 1（a）〕．

表1

複数のディジタル出力を組み合わせる

2 つのディジタル出力を組み合わせれば，4 とおりの制御ができる扇風機を OFF/ 弱 / 中 / 強の 4 段階で制御したければ，表1（b）のようにディジタル出力を 2 つ組み合わせることで実現できます．

動かしてみるディジタル
出力 1ディジタル
出力 2扇風機の状態

00OFF01

弱ディジタル
機器の状態
出力0OFF10中1ON

11

強(a) ディジタル出力の値 (b) 複数のディジタル出力を組み合わせると多くの状態を指定できると制御する機器の状態● 実験回路作 成 す る 回 路 を 図 1 に 示 し ま す． 拡 張 端 子 D4（Arduiro 拡張端子名で表記，以下同様）と GND の間に，抵抗と LED を直列に入れます．LED には極性があるので注意してください．
この回路をブレッドボードで実現した例を写真 1 に示します．Arduino のシールドにブレッドボードを載せたものがあるので，それを使うと便利です．
● マイコンの設定
前章（第 2 部 第 2 章）では ARM−First 基板上の LEDを点滅させるために，PA15 と PB4 を GPIO_Output に設定しました．今回，外付け LED をつないだ拡張端子 D4 は，マイコンの PC13 ピンに接続されています．
そ こ で，PA15 と PB4 に 加 え，PC13 も GPIO_Outputに設定します．
● プログラムの作成
設定を行った上で，前章で説明したように，プログラムのソース・コードを自動生成します．生成された
main.c を開いて，リスト 1 のように記述を追加します．
このプログラムをコンパイルしてマイコンに書き込み，実行すると，ARM−First 上の LED と外付け LEDがすべて 0.5 秒消灯して 1.5 秒点灯する，という動作を

D4（PC13）
図 1 ディジタル出力の実験回路
リスト 1

抵抗1k

赤色LEDGND

ディジタル出力させるプログラム例

3 つの出力ピンに対して 0.5 秒間 0を出力し，1.5 秒間 '1'を出力することを繰り返しているGND

拡張端子 D4

拡張端子 D4 はマイコンの PC
13 ピンにつながっている

写真 1

58

実験回路をブレッドボードで実現した例

第1章 ディジタル出力回路を動かす/* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */上の2行はARM-First上のLEDを操作
0.5秒間，'0'を出力1.5秒間，'1'を出力/* USER CODE BEGIN 3 */HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);HAL_Delay(500);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);HAL_Delay(1500);}/* USER CODE END 3 */見本

3行目は外付けLEDを操作

マイコン

マイコン
ピンの電圧が3.3Vになる
3.3V

ピンの電圧が0Vになる
3.3V

マイコンのピン

‘1’
‘0’

‘0’

ディジタル出力

GND

マイコンのピン

‘1’

GND

GND

（a）ディジタル出力を‘1’に設定するとLEDに電流が流れて点灯する

ディジタル出力GND（b）ディジタル出力を‘0’に設定するとLEDに電流が流れなくなって消灯する

図 2 '1' を出力するとLEDが点灯するときのマイコンの内部動作繰り返します．
プログラムの内容を見ると，HAL_GPIO_WritePinという関数でディジタル出力を行っています．その引き数は，最初の 2 つで出力するピンを指定し，最後の値で出力する値を指定します．
最初の引き数は GPIOx の形式で，x のところに PA，● 実験回路
先ほどは拡張端子 D4 と GND の間に LED を入れましたが，今度は図 3 のように 3.3V と拡張端子 D4 の間に LED を入れる構成に変更します．
● 動作の確認
先ほどは，ARM−First 上の LED と外付け LED がPB，PC の A，B，C が 入 り ま す． 最 後 の 引 き 数 は
GPIO_PIN_RESET か GPIO_PIN_SET で，GPIO_PIN_RESET は 0，GPIO_PIN_SET は 1 を表します．

First 上の LED が点灯しているときは外付け LED が消灯し，ARM−First 上の LED が消灯しているときは外● マイコンの内部動作
図 2 を見てください．ディジタル出力で 1 を出力す
ると，マイコン内部では図 2（a）のような接続になります．つまり，マイコンのピンには電源電圧である3.3V が出力されます．すると，このピンから抵抗を通って LED に電流が流れるので，LED が点灯します．
逆に，ディジタル出力で 0 を出力すると，マイコン内部では図 2（b）のような接続になります．つまり，マイコンのピンの電圧は GND と等しくなります．すると，LED の両端が GND につながっていることになるので，LED には電流が流れず消灯します．

「0 を出力すると外付け LED が点灯する回路」に変える

同 時 に 点 灯 / 消 灯 し て い ま し た が， 今 度 は ARM−

付け LED が点灯します．
プログラムの動作と関連付けて言うと，ディジタル出力で 1 を出力すると外付け LED は消灯し，ディジタル出力で 0 を出力すると外付け LED は点灯します．
● マイコン内部の動作
ディジタル出力で 1 を出力した場合，図 4（a）のようにマイコンのピンは 3.3V と接続されます．すると今回の外付け LED 回路では，LED の両端が同じ 3.3V になって電流が流れないので LED が消灯します．
ディジタル出力で 0 を出力した場合，図 4（b）のようにマイコンのピンは GND と接続されます．すると，LED に電流が流れて点灯します．

外付け LED をつなぐ回路の構成を変えて，ディジタル出力で 0 を出力したときに外付け LED を点灯させます．

3.3V
図 3 '0' を出力す
るとLED が点灯する回路
D4（PC13）

マイコン

マイコン内部

3.3V

‘1’
‘0’
GND

マイコンのピンディジタル出力（a）ディジタル出力を‘1’に設定するとLEDに電流が流れなくなって消灯する

図 4 '0' を出力するとLEDが点灯するときのマイコンの内部動作

赤色LED

3.3V

ピンの電圧が3.3Vになる
3.3V

抵抗1k

ピンの電圧が0Vになる
3.3V
‘1’

マイコンのピン‘0’
GND

ディジタル出力見本（b）ディジタル出力を‘0’に設定するとLEDに電流が流れて点灯する「0 を出力すると外付け LED が点灯する回路」に変える

59

第4部

本格リアルタイム信号処理の実際：
音声ビーム・フォーミングの実験髙梨 光Hikaru Takanashi

STM32 マイコンと 4 つの MEMS マイクを搭載した IoT プログラミング学習ボード「ARM−First」を使って，音源の方向推定とビーム・フォーミングを実現します．
これを開発するために，ST マイクロエレクトロニクスが提供している音声信号処理用ソフトウェア X−
CUBE−MEMSMIC1を活用します．これにより，複雑な信号処理アルゴリズムや DSP プログラムを開発せずにファームウェアを作成することができ，簡単に STM32 マイコンのリアルタイム音声信号処理能力を体感できます．

第 1章

ビーム・フォーミングの基本
複数のマイクの音声信号から信号処理で指向性を形成する！

マイクのS /N が大きく改善される「ビーム・フォーミング技術」● 4 つのマイクで音源の方向を割り出す
写真 1 に示すように，IoT プログラミング学習ボー
ド「ARM−First」には，STM32F405 マイコン
（以下マイクロUSBポート

オーディオD-Aコンバータ

MEMSマイクSTM マイコン）のほか，音声信号を扱うための入出力デバイスが搭載されています．
入 力 用 デ バ イ ス と し て 4 つ の MEMS（Micro −Electrical−Mechanical Systems）ディジタル・マイク（以下 MEMS マイク，または単にマイク）が，出力用デバイスとしてオーディオ用 24 ビット・ステレオ D−A コンバータ（Digital−to−Analog Converter，以下
オーディオ D−A コンバータ）などがあります．
このボードにはなぜ 4 つもMEMS マイクが搭載されているのでしょう．単に音声の録音を行うならマイクは 1 つでも十分です．ステレオで録音するにしてもマイク間の距離が近すぎるのでは？と，いろいろ疑問がわいてきます．
実は，複数のマイクから得られる音声を信号処理することで，どの方角から音声が入ってくるかがわかったり，雑音の中から特定の方角の音声を拾い出すことができるのです（写真 2）．

LEDが点灯STM32F405マイコン
写真 1

ヘッドホン・ジャック

IoT プログラミング学習ボード「ARM−First」の外観

STM32F4 マイコンを中心に USB オーディオ用マイクロ USB ポート，4 つの MEMS マイク，オーディオ用 D−A コンバータ，ヘッドホン・ジ
ャックを搭載している● 複数のマイクの音声信号から音源の方角がわかる「音源位置の角度推定」
音声がどの方角からマイクに入ってくるかは，マイク間の距離と音声の到達時間の差から推定できます．
図 1 は 2 つのマイクを使った場合の模式図です．音源の方角（角度）θ［rad］は次の式で表されます．

cΔ
θ＝ sin − 1 ―d

ただし，d ：マイク間の距離［m］，Δ：音声の到達時間の差［s］，c ：音速［m/s］
LEDが点灯LEDが点灯音源

音源
音源

110°の方角から（a）110°の方角から音声が到来
写真 2270°の方角から（b）270°の方角から音声が到来

音源の方向を推定してその方向を示す LED を点灯させた例

315°の方角から

見本（c）315°の方角から音声が到来

4 つのマイクからの音声をディジタル信号処理して音源の方向を推定する．得られた角度推定結果をもとに 360°を 8 分割した範囲判定を行い，該当する LED を点灯させている．角度の基準は図 5 を参照のこと

100

第１章 ビーム・フォーミングの基本

MIC（R）
2

マイク間の距離［m］：d
音速［m/s］：cd sinθ
音声の到達時間の差［s］：Δ＝c

マイク間の距離［m］：d
音速［m/s］：c
音声の到達時間の差［s］：

遅延Δ

dd
Δ＝ cー！
あ－MIC（L）
11 次差動マイク・アレイd

図2180

θ

0dB

210

Δ

MIC1（L）

150－10dB240

図1出力＋MIC2（R）

120－20dB

音源位置の角度推定の基本原理－30dB● 2 つの無指向性マイクの音声信号から信号処理で指向性を形成する「ビーム・フォーミング」
図 2 は，ビーム・フォーミングの基本となる 1 次差動マイク・アレイ（Differential Microphone Array）のブロック図です．
1 つのマイク（MIC2）の音声信号を遅延させ，もう 1つのマイク（MIC1）の音声信号から減算することで図3

270

音源位置の角度推定とビーム・フォーミングのソフトウェア
音源 位 置 の 角 度 推 定 と ビ ー ム・ フ ォ ー ミ ン グ のSTM マイコン向けソフトウェアは，ソフトウェア・パッケージ「X−CUBE−MEMSMIC1 注 1」として ST
マイクロエレクトロニクスより提供されています．
X−CUBE−MEMSMIC1 には，音源位置の角度推定用の「AcousticSL ライブラリ」と，ビーム・フォーミングの信号処理用として「AcousticBF ライブラリ」が用意されています．

■ AcousticSL ライブラリ
AcousticSL ライブラリを使用することで，2 つまた
は 4 つの MEMS マイクから得られる音声信号より，音源位置の角度推定（Sound Source Localization）の信号処理を実装できます．角度推定アルゴリズムは，時間
注 1：https://www.st.com/ja/embedded−software/x−cube−me
msmic1.html

6030030330の指向性パターンが得られます．遅延Δはマイク間の距離d に相当する音声の到達時間です．

図 3 のような 1 つの方向からの音声に対して高い感度をもつ指向性パターンをカーディオイド（Cardioid）と呼びます．

90－40dB0
最大の感度を得られる方角
図3

カーディオイド・ビーム・パターン

この指向性パターンはシミュレーションにて計算した領域の相互相関や周波数領域の一般化相互相関など 3
種 類 か ら 選 択 で き， マ イ ク の 個 数 と 配 置 に 応 じ て180°または 360°の範囲で角度を推定できます．
● 音源位置の角度推定

図 1 に 2 つのマイクを使った場合の角度推定について説明しましたが，図 4 のように 2 つのマイクを配置した場合は，180°（ ± 90°）の範囲でしか角度を推定できません．
図 5 のように 4 つのマイクを配置した場合には，対角に配置される MIC1 と MIC4，MIC2 と MIC3 でそれぞれ 180°の範囲をカバーし，結果を総合することで360°の範囲で推定することができます．
● 3 種類の角度推定アルゴリズム
AcousticSL ライブラリには，表 1 に示す 3 種類の角度推定アルゴリズムが用意されています．目的はどれも同じですが，推定できる角度の分解能，マイク配置

見本

音源位置の角度推定とビーム・フォーミングのソフトウェア

101

第5部

 rduino IDE や MicroPython でも動かせる！
ASTM32 マイコンあれこれ実験室

マイコン・ビギナ向け開発環境
Arduino IDEでLチカ
プログラムを作って動かしてみよう！
白阪 一郎

Ichiro Shirasaka

ここでは，IoT プログラミング学習ボード「ARM−First」を使って LED をチカチカ点滅（L チカ）させてみます（写真 1）．開発環境の構築にあたり，Arduino IDE，ボード・ライブラリ，フラッシュ書き込み
ツールのインストール方法や，ツールの設定について説明します．本ボードへのプログラムの書き込みは，STM32F405 に内蔵されている DFU 機能で USB から行うことができます．パソコンと本ボードがあればすぐに実験を始めることができます．
ここにある緑色のLEDを点滅（Lチカ）させる①コンパイル②コンパイル，書き込み，実行

USB
コネクタ
ST-LINK
コネクタ

プログラムの初期設定部分をここに書く

繰り返し実行するプログラムをここに書く
写真 1 IoT プログラミング学習ボード「ARM−First」を使って，LED をチカチカ点滅（L チカ）させてみる
本ボードにはプログラムを書き込むための USB シリアル変換回路が実装済みであり，パソコンと IoT プログラミング学習ボードがあればすぐにプログラミングが始められる

開発環境のセットアップ● Arduino IDE のインストール
Arduino の統合開発環境（IDE）は，いろいろなハードウェアや OS 上で動くクロス・プラットフォームのJava アプリケーションです．プログラムを作成するエディタ，コンパイラ，マイコン・ボードへのプログラムの書き込み機能をもっています．
開発言語は C 言語をベースに，String 型などの追加や，オブジェクト指向の機能を使った組み込み向けのライブラリによるプログラム作成に最適化されています．
図 1に示すのは Arduino IDE の画面例です．初めてプログラミングを始めるビギナでも簡単に扱えるように，操作箇所の少ない非常にシンプルな構成になっています．Arduino IDE は次の URL からダウンロードで

126

第１章 マイコン・ビギナ向け開発環境 Arduino IDEでLチカ

図 1 ArduinoIDE の画面は，プログラミングを始めるビギナでも簡単に扱えるように，操作箇所の少ない非常にシンプルな構成になっている

きます．
https://www.arduino.cc/en/Main/Software● ボード・ライブラリのインストール
インストールした初期状態では，ボード・ライブラリから AVR マイコンのボードしか選べません．そこ
で，筆者が開発した STM32 用のボード・ライブラリ
を 次 の URL か ら ダ ウ ン ロ ー ド（［Code］−［DownloadZIP］を選択）して解凍します．
https://github.com/alto0126/STM32GENERIC
解凍すると「STM32GENERIC−master」というフォルダ名のボード・ライブラリが得られます．
図 2 に示すのは，Arduino IDE の［ファイル］−［環境設定］の画面です．解凍した「STM32GENERIC−

見本

master」フォルダは，スケッチブックの保存場所に書かれたフォルダ内の「hardware」の中に置きます．
「hardware」フォルダがない場合は，フォルダを作成

見本