みなさんは、ここ数年で注目を集めている「エンベデッドシステム」を知っていますか?
エンベデッドシステムとは、1980年代から電化製品などのハードウェアに搭載されている「組み込みシステム」のことです。
古くから存在するエンベデッドシステムですが、最近はIoT分野において話題になっています
この記事では、エンベデッドシステムの定義 / 特徴 / 構成、IoTのエンベデッドシステム構築で気をつけたいポイントなどをご紹介します。IoT分野に興味がある方や、将来IoTデバイスの開発に関わりたい方は、ぜひご覧ください。
エンベデッドシステムとは
エンベデッドシステム(embedded system)は、家電製品や電子機器などに組み込まれているコンピューターシステムを指します。
パソコンのように一台でさまざまな処理ができるコンピューターではなく、ある特定の用途に特化しているのが、エンベデッドシステムの特徴です。例えばエアコンであれば、室内の温度・湿度の調整に機能が特化されています。
この世界にあるすべてのコンピューターシステムは、大きく「ソフトウェア」と「ハードウェア」に分けられますが、エンベデッドシステムはハードとソフトが交差するところに存在すると言えます。
エンベデッドシステムの歴史
エンベデッドシステムは、1980年代からさまざまな電化製品に搭載されている技術であり、デバイス設計において長い歴史を持ちます。
しかしながら、これまではアプリケーションプログラミングの影に隠れていました。というのも、アプリケーションプログラミングが比較的レベルの高いオブジェクト指向の言語であるC++やJava、あるいはMATLABのようなグラフィカルアプリケーション開発環境があるのに対し、エンベデッドシステムのプログラミングはほとんどの場合で「CにはじまりCに終わる」からです。そのため、数の面では常にアプリケーションプログラマーに負けてきました。
ところが近年のIoTの興隆により、このバランスがついに変わろうとしています。いまや多くの電子レンジやトースター、時計、電球がIoT化されようとしているのです。市場はより多くのエンベデッドプログラマーと、簡単にハードウェアを実装できるツールを求めているのです。
もちろん今日もこれまで同様、簡単な言語を使ってアプリを開発し、世界にシェアする流れがあります。一方でエンベデッドシステムのプログラマーは、ハードウェアとファームウェアに向き合い、高度に制限のある環境の中で実行されるプログラムに対していかに書くかという、深い知識が要求されます。
IoTとエンベデッドシステム

▲出典:富士通
エンベデッドシステムは機能特化のシステムであるため、即座に反応するリアルタイム性や、バグの起こりにくさ、動作に対する高い信頼性があります。たとえば自動車や医療用機器などのIoT分野は人命が関わるため、これらの要素はもっとも重要となります。
くわえてIoT製品は、家電や情報機器などのモノをインターネットに接続することで、相互の情報交換をおこないます。ハード製品からデータを直接収集するため、組み込み系のスキルは必要不可欠でなのです。
IoTとエンベデットシステムが変える世界
技術的観点からいうと、IoTはネットワークが埋め込まれた、マイクロプロセッサーによってコントロールされるデバイスです。そのネットワークが直接的(もしくは間接的)にインターネットに繋がっています。
IoTは以下の3つの柱によって構成されます。
- エンベデッドプログラミング
- ネットワーク技術
- 情報技術
IoTデバイスの普及率は年々増しており、エンベデッドシステムもすぐにユビキタスになるでしょう。
以下は、IoTが各産業にどのような変化を与えるかを簡単に示した図です。

▲出典:sciforce
- 産業 – 産業機械の制御、温度モニタリングと不良品の検知
- ヘルスケア – 血圧や心拍数のモニタリング、フィットネスの計測、医薬品の配送
- 宇宙空間と国防 – フライトコントロールシステム、空気と熱の管理、エンジンパワーモニタリングと管理
- スマートホーム – ホームセキュリティシステム、デジタルカメラ、テレビ、キッチン器具
IoTのエンベデッドシステムで気をつけたい3ポイント

IoTデバイスに直結するエンベデッドシステムは「製品に組み込むシステム」であるため、エンベデッドシステム特有の特徴や問題点があります。これらを理解することで、エンベデッドシステムの組み込みがスムーズになります。
1. バグの発生が致命的
エンベデッドシステムは、PCやスマホアプリのソフトウェア以上に、バグが致命的です。バグが発生したばあいは、製品を直接回収してバグを直さなければなりません。エンベデッドシステムはデバイスの中に組み込まれているため、アプリのようにソフトウェアアップデートで改善できないからです。
特に、自動車や医療機器、産業用機器などはエンベデッドシステムのバグによる誤作動が発生すると人命に関わる可能性があります。
2. ハードウェアの知識が必要
IoTのエンベデッドシステムには、ソフトウェアだけでなくハードウェアの知識も必要不可欠です。
情報処理技術者のエンベデッドシステムスペシャリストに期待する技術水準の項目に、以下の記述があります。
機能仕様に基づき、ハードウェアとソフトウェアの適切な組合せを実現し、組込みシステム開発における各工程を主導的に遂行できる。
エンベデッドシステムスペシャリスト試験(ES)より
エンベデッドシステムに精通するためには、エンベデッドシステムを導入するハードウェアに関する知識が必要です。ハードウェア開発経験の有無が、エンベデッドシステムへの理解につながるともいえますね。
3. IoTを構成する技術の理解が必要
将来的には、エンベデッドシステムの活用先のほとんどがIoTデバイスになると予想されています。IoTを構成する技術を理解しておいて損はありません。
IoTを構成する技術は、主に以下の4点に分類されます。
- センシング:対象とする機器からデータを取り出す技術
- コネクティビティ:対象とする機器をネットワーク(インターネット)に接続する技術
- データを収集する技術
- 収集したデータを分析・活用する技術
エンベデッドシステムの組み込みは、IoTを構成する技術を知った上で考えることが必要です。
エンベデッドシステムの仕組み:ハードウェア
一般的なエンベデッド開発ボードは、5つの「モジュール」からできています。
プロセッサー、メモリ、入力装置、出力装置、そしてバスコントローラーです。

▲出典:sciforce
エンベデッドシステムのハードウェアコンポーネント
【プロセッサー】
エンベデッドプロセッサーはふたつのカテゴリに分解できます。
ひとつは通常の「マイクロプロセッサー」。メモリと周辺機器の集積回路を分別するために使います。
もうひとつは「マイクロコントローラー」。内蔵周辺機器を備えており、パワー消費やサイズ、コストを減らします。例えば以下を含みます。
- マイクロコントローラー(CPU):ユーザーによって指示されたタスクを実行したり、精細な計算をする小さなアプリケーションを立てるためのインテリジェンスデバイスです
- システムオンチップ (SoC):ひとつの半導体チップ上に、CPUや周辺機器(タイマーやカウンターなど)、通信インターフェース(I2C, SPI, UART)、パワーマネジメント回路などが集積されています
- ASICプロセッサー:企業や製造元によって特定のアプリケーション向けにデザインされたプロセッサーです
- DSPプロセッサー:オーディオやビデオアプリのノイズを取り除き、信号の質を向上させます
【メモリ】
メモリはデバイス上で使われたデータをストアするために使われます。
エンベデッドシステムで使われるメモリには、Non-Volatile RAM(Random Access Memory)や、Volatile RAM、DRAM(Dynamic Random Access Memory)などがあります。
【入力装置】
入力装置とは、センサーやスイッチ、フォトダイオード、オプロカプラーなどのことです。
外界からのデータを捉える装置を指します。
【出力装置】
出力装置は、LCD(Liquid Crystal Display)およびLED(Light Emitting Diode)ディスプレイ、セブンセグメントディスプレイ、ブザー、中継装置などを含みます。
CPUからのインプットイベントに応答するものです。
【バスコントローラー】
バスコントローラーはコミュニケーション装置で、エンベデッドシステム内のコンポーネント間のデータを転送します。
最も広く使われているバスコントローラーとして、シリアルバス(I2C, SPI, SMBusなど)やRS232、RS485、そしてUSBがあります。
エンベデッドシステムの仕組み:ソフトウェア
エンベデッドソフトウェアは「ファームウェア」とも呼ばれ、デバイスドライバーやOS、アプリケーションのためだけでなく、エラーハンドリングやデバッグのためにも書かれます。

▲出典:sciforce
エンベデッドシステムのソフトウェアコンポーネント
【デバイスドライバー】
デバイスドライバーは、特定のハードウェア向けに書かれたエンベデッドコードです。
【オペレーティングシステム(OS)、またはマイクロOS】
エンベデッドシステムには幅広い種類のOSが採用されており、RTOS(Real-time Operating System)やモバイルエンベデッドのもの、独立型のもの、そしてネットワークエンベデッドのものなどがあります。
ほとんどのエンベデッドソフトウェアはCとC++で書かれています。文法面からいうとCとC++に大きな違いはありませんが、C++はセキュリティを強化したり、現実世界のアプリケーションに近づけられるなど、より多くの機能を備えています。一方でCは動作の信頼性が高く、ハードウェアと直接つながるため、高いパフォーマンスを発揮できます。
エンベデッドシステムを作る11ステップ
物理的なデバイスに直接影響を与えるようなソフトウェアを書くためには、まずはArduinoやRaspberry Pi、Particleといったエンベデッドのプラットフォームを試してみるとよいでしょう。
また実際に動くプロダクトを開発するためには、以下のステップを踏むのがおすすめです。
Step1. CまたはC++を学ぶ
多くのエンベデッドシステムで使われている、CまたはC++の言語を学びましょう。
どちらも詳しくない人にとってはもっとも大変なステップですが、根気強く学びましょう(いずれはRust等も学べると良いでしょう)。
Step2. 電子工学の基礎を学ぶ
少なくとも、電力、電流、電圧、抵抗、オームの法則などがどういうものか、理解できるくらいには学んだ方が良いでしょう。
Step3. 基本的な機器を手にいれる
エンベデッドプログラマーは物理的な世界と交流するため、はんだごてやデジタルマルチメーター(DMM)、ハードウェアのデバッガー、JTAGアダプター(ST-LinkやOLMEXアダプターなど)、ロジックアナライザーなどがあると助かるでしょう。
Step4. マイクロコントローラーとツールチェーンを選ぶ
プログラムを実行するためには、マイクロコントローラーと、コードをコンパイルするコンパイラー、そしてハードウェア上にプログラムをロードするその他のツールが必要です。
マイクロコントローラーとツールチェーンの組み合わせの一例としては、arm-gccによってサポートされるSTM32マイクロコントローラーと、それに付属するopenOCDツールチェーンがあります。
Step5. データシートを理解する
実際にコードを書きはじめる前に、エンドユーザーが求めているものを理解しましょう。「作ったはいいけど、誰のためのデバイスか分からない……」といった事態が起こらないように。
Step6. コンポーネントを検証する
プロダクトを作るために必要なコンポーネント(ソフトウェアとハードウェア)を分析して、ピックアップしましょう。
Step7. プロダクトを設計する
開発サイクルの中で、設計はもっとも重要なフェーズです。
エンベデッドプログラミングの特殊な点は、ハードウェアとソフトウェアを個別で開発し、のちに両方を統合させる点です。それを鑑みて設計する必要があります。
Step8. プロトタイプを開発する
プロトタイプはコンセプトを検証するために作られたサンプルです。
あなたが選択したハードウェアとソフトウェアのツールを用い、仕様に従って開発しましょう。
Step9. アプリケーションをテストする
プロトタイプが完成したら、アプリケーションの可能性を引き出すようなテストケースを実行しましょう。
Step10. アプリケーションをデプロイする
アプリケーションをテストし終えたら、結果をリアルな環境でチェックし、Proof Of Concept(アイディアの妥当性を計るための手段)を実行しましょう。
Step11. サポートとアップグレードをする
必要ならばサポートを提供し、また新機能を開発してアプリケーションをアップグレードすると良いでしょう。

まとめ
今回は、エンベデッドシステムについて取りあげました。
エンベデッドシステムは、IoT製品が普及するとともにますます重要になる技術です。
また、エンベデッドシステムを取り扱う資格としてエンベデッドシステムスペシャリストという資格があります。ハードウェアとソフトウェア、両方の理解が必要とされる資格ですので、将来IoT開発に携わりたい方は資格を取るのもおすすめです。
(執筆:Sato Kiyofumi / Shimizu Yui 参考:Embedded Programming for the Internet of Things)
IT系資格おすすめ20選。受験料&合格率を徹底比較!
Workship MAGAZINE
IoTプラットフォームの3種類を比較!データ管理を効率化するのにぴったりな選び方をご紹介
Workship MAGAZINE
React.jsはIoTプロジェクトに向いている?長所・短所をそれぞれ徹底解説!
Workship MAGAZINE




