エンジニアの副業は週1からでも可能?副業の例や探し方も解説
- ITエンジニア
- 副業
みなさんは、ここ数年で注目を集めている「エンベデッドシステム」を知っていますか?
エンベデッドシステムとは、1980年代から電化製品などのハードウェアに搭載されている「組み込みシステム」のことです。
古くから存在するエンベデッドシステムですが、最近はIoT分野において話題になっています
この記事では、エンベデッドシステムの定義 / 特徴 / 構成、IoTのエンベデッドシステム構築で気をつけたいポイントなどをご紹介します。IoT分野に興味がある方や、将来IoTデバイスの開発に関わりたい方は、ぜひご覧ください。
エンベデッドシステム(embedded system)は、家電製品や電子機器などに組み込まれているコンピューターシステムを指します。
パソコンのように一台でさまざまな処理ができるコンピューターではなく、ある特定の用途に特化しているのが、エンベデッドシステムの特徴です。例えばエアコンであれば、室内の温度・湿度の調整に機能が特化されています。
この世界にあるすべてのコンピューターシステムは、大きく「ソフトウェア」と「ハードウェア」に分けられますが、エンベデッドシステムはハードとソフトが交差するところに存在すると言えます。
エンベデッドシステムは、1980年代からさまざまな電化製品に搭載されている技術であり、デバイス設計において長い歴史を持ちます。
しかしながら、これまではアプリケーションプログラミングの影に隠れていました。というのも、アプリケーションプログラミングが比較的レベルの高いオブジェクト指向の言語であるC++やJava、あるいはMATLABのようなグラフィカルアプリケーション開発環境があるのに対し、エンベデッドシステムのプログラミングはほとんどの場合で「CにはじまりCに終わる」からです。そのため、数の面では常にアプリケーションプログラマーに負けてきました。
ところが近年のIoTの興隆により、このバランスがついに変わろうとしています。いまや多くの電子レンジやトースター、時計、電球がIoT化されようとしているのです。市場はより多くのエンベデッドプログラマーと、簡単にハードウェアを実装できるツールを求めているのです。
もちろん今日もこれまで同様、簡単な言語を使ってアプリを開発し、世界にシェアする流れがあります。一方でエンベデッドシステムのプログラマーは、ハードウェアとファームウェアに向き合い、高度に制限のある環境の中で実行されるプログラムに対していかに書くかという、深い知識が要求されます。
エンベデッドシステムは機能特化のシステムであるため、即座に反応するリアルタイム性や、バグの起こりにくさ、動作に対する高い信頼性があります。たとえば自動車や医療用機器などのIoT分野は人命が関わるため、これらの要素はもっとも重要となります。
くわえてIoT製品は、家電や情報機器などのモノをインターネットに接続することで、相互の情報交換をおこないます。ハード製品からデータを直接収集するため、組み込み系のスキルは必要不可欠でなのです。
技術的観点からいうと、IoTはネットワークが埋め込まれた、マイクロプロセッサーによってコントロールされるデバイスです。そのネットワークが直接的(もしくは間接的)にインターネットに繋がっています。
IoTは以下の3つの柱によって構成されます。
IoTデバイスの普及率は年々増しており、エンベデッドシステムもすぐにユビキタスになるでしょう。
以下は、IoTが各産業にどのような変化を与えるかを簡単に示した図です。
IoTデバイスに直結するエンベデッドシステムは「製品に組み込むシステム」であるため、エンベデッドシステム特有の特徴や問題点があります。これらを理解することで、エンベデッドシステムの組み込みがスムーズになります。
エンベデッドシステムは、PCやスマホアプリのソフトウェア以上に、バグが致命的です。バグが発生したばあいは、製品を直接回収してバグを直さなければなりません。エンベデッドシステムはデバイスの中に組み込まれているため、アプリのようにソフトウェアアップデートで改善できないからです。
特に、自動車や医療機器、産業用機器などはエンベデッドシステムのバグによる誤作動が発生すると人命に関わる可能性があります。
IoTのエンベデッドシステムには、ソフトウェアだけでなくハードウェアの知識も必要不可欠です。
情報処理技術者のエンベデッドシステムスペシャリストに期待する技術水準の項目に、以下の記述があります。
機能仕様に基づき、ハードウェアとソフトウェアの適切な組合せを実現し、組込みシステム開発における各工程を主導的に遂行できる。
エンベデッドシステムスペシャリスト試験(ES)より
エンベデッドシステムに精通するためには、エンベデッドシステムを導入するハードウェアに関する知識が必要です。ハードウェア開発経験の有無が、エンベデッドシステムへの理解につながるともいえますね。
将来的には、エンベデッドシステムの活用先のほとんどがIoTデバイスになると予想されています。IoTを構成する技術を理解しておいて損はありません。
IoTを構成する技術は、主に以下の4点に分類されます。
エンベデッドシステムの組み込みは、IoTを構成する技術を知った上で考えることが必要です。
一般的なエンベデッド開発ボードは、5つの「モジュール」からできています。
プロセッサー、メモリ、入力装置、出力装置、そしてバスコントローラーです。
エンベデッドプロセッサーはふたつのカテゴリに分解できます。
ひとつは通常の「マイクロプロセッサー」。メモリと周辺機器の集積回路を分別するために使います。
もうひとつは「マイクロコントローラー」。内蔵周辺機器を備えており、パワー消費やサイズ、コストを減らします。例えば以下を含みます。
メモリはデバイス上で使われたデータをストアするために使われます。
エンベデッドシステムで使われるメモリには、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、アプリケーションのためだけでなく、エラーハンドリングやデバッグのためにも書かれます。
デバイスドライバーは、特定のハードウェア向けに書かれたエンベデッドコードです。
エンベデッドシステムには幅広い種類のOSが採用されており、RTOS(Real-time Operating System)やモバイルエンベデッドのもの、独立型のもの、そしてネットワークエンベデッドのものなどがあります。
ほとんどのエンベデッドソフトウェアはCとC++で書かれています。文法面からいうとCとC++に大きな違いはありませんが、C++はセキュリティを強化したり、現実世界のアプリケーションに近づけられるなど、より多くの機能を備えています。一方でCは動作の信頼性が高く、ハードウェアと直接つながるため、高いパフォーマンスを発揮できます。
物理的なデバイスに直接影響を与えるようなソフトウェアを書くためには、まずはArduinoやRaspberry Pi、Particleといったエンベデッドのプラットフォームを試してみるとよいでしょう。
また実際に動くプロダクトを開発するためには、以下のステップを踏むのがおすすめです。
多くのエンベデッドシステムで使われている、CまたはC++の言語を学びましょう。
どちらも詳しくない人にとってはもっとも大変なステップですが、根気強く学びましょう(いずれはRust等も学べると良いでしょう)。
少なくとも、電力、電流、電圧、抵抗、オームの法則などがどういうものか、理解できるくらいには学んだ方が良いでしょう。
エンベデッドプログラマーは物理的な世界と交流するため、はんだごてやデジタルマルチメーター(DMM)、ハードウェアのデバッガー、JTAGアダプター(ST-LinkやOLMEXアダプターなど)、ロジックアナライザーなどがあると助かるでしょう。
プログラムを実行するためには、マイクロコントローラーと、コードをコンパイルするコンパイラー、そしてハードウェア上にプログラムをロードするその他のツールが必要です。
マイクロコントローラーとツールチェーンの組み合わせの一例としては、arm-gccによってサポートされるSTM32マイクロコントローラーと、それに付属するopenOCDツールチェーンがあります。
実際にコードを書きはじめる前に、エンドユーザーが求めているものを理解しましょう。「作ったはいいけど、誰のためのデバイスか分からない……」といった事態が起こらないように。
プロダクトを作るために必要なコンポーネント(ソフトウェアとハードウェア)を分析して、ピックアップしましょう。
開発サイクルの中で、設計はもっとも重要なフェーズです。
エンベデッドプログラミングの特殊な点は、ハードウェアとソフトウェアを個別で開発し、のちに両方を統合させる点です。それを鑑みて設計する必要があります。
プロトタイプはコンセプトを検証するために作られたサンプルです。
あなたが選択したハードウェアとソフトウェアのツールを用い、仕様に従って開発しましょう。
プロトタイプが完成したら、アプリケーションの可能性を引き出すようなテストケースを実行しましょう。
アプリケーションをテストし終えたら、結果をリアルな環境でチェックし、Proof Of Concept(アイディアの妥当性を計るための手段)を実行しましょう。
必要ならばサポートを提供し、また新機能を開発してアプリケーションをアップグレードすると良いでしょう。
今回は、エンベデッドシステムについて取りあげました。
エンベデッドシステムは、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