
【まえがき公開】初めて学ぶならコレ!理論から実践まで――近刊『Arduinoで学ぶ組込みシステム入門(第2版)』
2023年5月下旬発行予定の新刊書籍、『Arduinoで学ぶ組込みシステム入門(第2版)』のご紹介です。
同書の一部を、発行に先駆けて公開します。

***
まえがき
◆身の回りの組込みシステム
一般に、コンピュータ制御によって動作する装置は「組込みシステム」とよばれている。身近なものでいえば、携帯電話、携帯音楽プレーヤー、ゲーム機、自動販売機、家庭電化製品などの製品があてはまる。このほかにも、人工衛星、自動車、航空機、工作機械、医療機器など、コンピュータが内蔵された製品は数多く存在する。これらの組込みシステムは大きさ、利用目的、動作環境に違いはあるものの、共通点も多い。たとえば、人工衛星と携帯電話を比べてみると、ともに、通信装置、入力装置(カメラ、GPSなど)、演算装置(コンピュータ)などの部品からできている。もちろん、両者の構成部品には大きさや性能などの点で違いはあるものの、いずれの構成部品もコンピュータによって制御されていること、制御の内容はすべてプログラムに記述されていることは共通である。
◆ソフトはハードのために、ハードはソフトのために
組込みシステムは多くの構成部品からできており、それらは総じてハードウェアとよばれる。ハードウェアを制御しながら望みのサービスを実現するための作業手順書がプログラムであり、ソフトウェアとよばれる。組込みシステムでは、ハードウェアはソフトウェアを効率よく高速に実行できるように設計され、ソフトウェアはハードウェアの性能を十分に引き出すように設計される。つまり、「ソフトウェアはハードウェアのために、ハードウェアはソフトウェアのために」設計されたのち実装されるものが組込みシステムである。
たとえば、人工衛星の場合、部品の故障に見舞われると、残されたハードウェアを駆使してミッションを継続させるためにソフトウェアが見直された。また、宇宙空間では宇宙線などの影響からメモリ上のプログラムが書き変わったりすることがある。そのため、プログラムを保護するために特別なハードウェアが開発された。このように、ハードウェアとソフトウェアが互いに助け合いながら協調動作できるように、設計、実装、さらには運用されている。
◆組込みシステム開発の基礎
ハードウェアとソフトウェアの協調動作を実現するためには、それぞれの動作原理、設計法、実装法などの習得が必要不可欠である。具体的には、ハードウェア(入出力装置、演算装置、通信装置)の動作原理、ハードウェアの制御の仕方、プログラムを構成する命令の種類、命令の実行順序の指定方法などである。
冒頭で述べたように、人工衛星と携帯電話をともに組込みシステムとしてとらえた場合、構造や動作原理は類似している。これらに限らず、さまざまな組込みシステムについて調べてみると、組込みシステム全般に共通の基礎知識や基礎技術が浮かび上がる。本書は、このような組込みシステム開発の基礎となる知識や技術を習得するための入門書である。
◆Arduinoによる組込みシステム開発
本書は、これから組込みシステムを学ぼうとする読者を対象としている。そのために、教材として取りあげるハードウェア(シングルボードコンピュータ)やソフトウェア(プログラミング言語や開発環境)はできるだけシンプルなもので、シングルボードコンピュータや言語の使い方を学ぶ時間が少なくて済むものが望ましい。そのため、本書ではArduino(アルドゥイーノ)を用いることにした。
Arduinoは2005年にイタリアのMassimo Banzi氏らによって開発されたマイクロコンピュータ(シングルボードコンピュータ)とソフトウェア開発環境、プログラミング言語の総称であり、次の特徴をもっている。
初心者向け:電子工学やプログラミングの経験のないデザイナー、アーティストでも使える教材として開発されている。
設計情報が公開:シングルボードコンピュータのアーキテクチャ(設計図)や統合開発環境(ソースコード)が公開されているので、内部の仕組みを勉強することもできる。
入手しやすい:シングルボードコンピュータを通販などにより購入しやすい。統合開発環境はインターネット上から無償でダウンロードして、macOS、Windows、Linuxのいずれのもとでも利用できる。
◆本書の構成
本書は、Arduinoを使った電子工作を説明する本ではなくて、Arduinoを使って、組込みシステムの開発手法(技法)を説明する本である。以下のような構成としている。
第I部(1~4章):組込みシステム開発に必要とされるハードウェアとソフトウェアの両者の基礎を説明する。
第II部(5~8章):組込みソフトウェアの設計から実装、検査までを系統的に行う「モデルベース開発手法」を説明する。
第III部(9、10章):組込みシステムとPCの協調動作(有線および無線による通信)による実践的な組込みシステム開発を説明する。
PCのもつ多様なインタフェースとArduinoとの協調動作を理解するために、Processingについても説明している。
本書の各章の関連を下図に示す。第I部(1~4章)で、「組込みシステム」と「Arduino」の基礎について学ぶ。すでにArduinoの使用経験がある場合には、1章を中心にして、2章と3章の必要な箇所を読むとよい。
第II部(5~8章)にかけては、「モデルベース開発」について、順序機械をモデル、実装先をArduinoとして、モデリング、実装、テスト技法について学ぶ。
第III部(9、10章)では、組込みシステム(Arduino+電子回路)とPC(Processing)との協調動作(計測、制御、有線による通信操作)、無線によるPCやインターネット上のサーバの利用法について学ぶ。

(以下略)
***
第2版の発行にあたって
本書は、Arduinoを用いて、組込みシステムの基礎、設計から実装までを系統的に説明するモデルベース開発、実践的な組込みシステム開発の3つのステップを通して、組込みシステム開発の手法や流れを学べるようにまとめたものである。
初版出版からここ数年、通信機能をもつ多数のデバイスがインターネットを通じて、他のデバイスやサーバとデータのやりとりをしながらサービスを提供するIoT (Internet of Things)実現のための技術開発や環境整備が進んでいる。それにともない、Arduinoのプログラムと互換性があり、通信機能を有するマイクロコンピュータも入手しやすくなった。
この状況をふまえ、IoT実現の基礎となる知識や技術が習得できるように、「組込みシステムとインターネット」(第10章)を新設し、改訂することとした。新たな章の特徴はつぎのとおりである。
マイクロコンピュータとして、Arduinoの開発環境が利用でき、通信機能をもつESP32-DevKitCを取りあげた。
組込みシステムを、無線通信(Bluetooth、Wi-Fi)によってパソコンと通信する方法や、インターネット上のサーバと通信する方法について述べた。
組込みシステムをクラウド(Arduino Cloud)に接続し、データを送受信する方法について述べた。
引き続き、本書が組込みシステムの学びの助けになれば幸いである。
***
岩手県立大学 猪股俊光 (著)
【目次】
第Ⅰ部 組込みシステム,Arduinoの基礎
1 組込みシステムとArduino
1.1 身の回りの組込みシステム
1.2 組込みシステムの仕組み
1.3 組込みシステムでのデータの取り扱い
1.4 Arduinoを用いた組込みシステム
1.5 組込みシステムとPC の協調動作
1.6 組込みシステムと無線通信
2 組込みシステムのハードウェア
2.1 マイクロコンピュータの概要
2.2 マイクロコンピュータのアーキテクチャ
2.3 メモリの種類と入出力インタフェース
2.4 入出力のための主な電子部品
3 組込みシステムのソフトウェア
3.1 組込みソフトウェアの構成
3.2 組込みシステムが立ち上がるまで
3.3 組込みソフトウェアの生成,転送
3.4 組込みソフトウェアのメモリへの配置
3.5 プログラムの状態
4 Arduinoによるプログラミング実習
4.1 Arduinoのハードウェアとソフトウェア
4.2 Arduinoプログラムの構造
4.3 Arduinoの開発環境
4.4 データ構造
4.5 Arduinoと電子回路の接続
4.6 ブレッドボードによる電子回路の実装
第Ⅱ部 モデルベース開発
5 組込みシステムのモデリング
5.1 組込みシステムのモデルベース開発
5.2 順序機械
5.3 順序機械の表現法
6 組込みシステムの実装法
6.1 モデルの実装
6.2 制御対象への出力
6.3 計測装置の制御
6.4 シリアル通信
6.5 電子回路の実装法
6.6 順序機械の配列による実装
7 組込みソフトウェアの作成技法
7.1 データ入力の技法
7.2 割込み処理
7.3 タイマ割込み
7.4 組込みソフトウェアにおけるビット演算
7.5 コーディング作法
8 組込みシステムのテスト技法
8.1 モデルベース開発と品質
8.2 プログラムのテスト
8.3 ブラックボックステスト
8.4 ホワイトボックステスト
8.5 モデルのテスト
8.6 実装時のよくある誤り
第Ⅲ部 実践的な組込みシステム開発
9 組込みシステムとPC の協調動作
9.1 組込みシステムとPC
9.2 組込みシステムとPC による計測
9.3 PCによる組込みシステムの制御
9.4 GUIによる組込みシステムの制御
9.5 列車運転制御システム
10 組込みシステムとインターネット
10.1 組込みシステムと通信
10.2 Bluetoothによる通信
10.3 Wi-Fiによる通信
10.4 インターネットへつながる組込みシステム
10.5 クラウドへつながる組込みシステム