今回は、IT系ってナニ?ソフトウェアってナニ?という方に向けて組み込みソフトウェアの事を題材にしたいと思います。
Raspberry Pi(ラズベリーパイ) という学習&趣味用の超廉価PCがあります。これを使って、ゼロからプログラミングを習得する方法について書きます。
Raspberry Pi
ラズベリーパイ、通称ラズパイ。2013年に初代が発売されました。
ARMプロセッサを搭載しており、USB、Wi-Fi、Bluetooth、HDMI出力機能等を持っており、パソコン同等のハードウェア性能を持っています。
ラズパイ単体では何もできませんが、それはWindows PCも同じ。ソフトウェア(OS)を載せる事でパソコンとして使えるようになります。
ラズパイのOSは主にLinux(リナックス) です。Windowsも載せる事ができますが、Win 10とは別物なので、わざわざ載せるメリットは少ない為、Linux(RaspbianやUbuntu)を載せて使う人が多いと思います。
Linux OSは一般には聞き馴染みがないかもしれませんが、Unix互換のOSです。外国人と会議で話す時はライナックスと発音される場合があるので、ついでに覚えておくと役立つ事があるかもしれません。
オフィスではサーバー用途でLinux PCが使われている場合があり、また、組み込みLinuxと呼ばれるディストリビューションはTVやカーナビ等に採用されています。スマホやタブレットでお馴染みのAndroid OSは、Linuxカーネルを使用しており、今では身の回りにある電子機器に搭載されている一般的なOSの1種となっています。
組み込みソフトウェアとは?
ソフトウェアと言う言葉は知っていても「組み込みソフトウェア」というのは聞き慣れない言葉だと思います。
ソフトウェア
ソフトウェアとは、ハードウェア(機械) に対してどのように動くか命令するものです。ハードウェアだけがあっても、それを電源に繋いでも何も動きません。(アナログ回路やASICをメインにした回路は除外。)
例えばPCの場合は、WindowsはMac OS、LinuxといったOS(基本ソフト)を導入する事で各種ハードウェア(映像を出す、音を出すetc.) と言った機能を使えるようにしてくれます。
ですが、OSだけ載っていても、ユーザーが音楽を作ったり絵を描いたりする事はできません。それらを実現する為にはソフトウェアが必要となります。Word / Excel / Photoshop / Chrome / Edge / Vi / Emacs等のソフトウェアがある事で、PCを使って様々な事ができるようになります。
組み込みソフトウェア
身の回りにあるもの、スマホ、デジタル時計、炊飯器、カーナビ、パチンコ、TV、ゲーム機など、全ての電子機器にハードウェアを制御するソフトウェアが搭載されています。
組み込みソフトウェアとは、特定の機器を制御させる為のソフトウェアの事です。
下記は、ラズパイにLEDを接続して、プログラム(C言語)でLEDを点滅制御させたものです。
グローバルIP監視やWi-Fiアクセスポイントにして遊んでたラズパイ。
この前LED買ったからLチカさせた。C言語。 pic.twitter.com/Tgf2bYeEXH— Initial JJ (@initial_jj) 2020年9月8日
再びWindows PCを例にしますが、世界中のメーカーがWindows PCを製造していますが、全てWindowsというOSを搭載する事ができます。CPU / メモリ / HDD / 光学ドライブ / 出力モニターの解像度等、あらゆる部品が異なるのにWindowsの画面が出て、キーボードやマウスが使えます。
それはなぜか?
「下回り」と呼ばれる、ハードウェア(IC)を制御するプログラム(ソフトウェア)があり、セット毎に適したソフトウェアを用いて動作する仕組みがあるからです。
PCに新しい機器(HDDやiPhone etc.) を初回接続した際、「ドライバー」がインストールされます。これが、特定の機器(≒IC)を制御できるようにする為のソフトウェアです。
上位側のアプリケーション(Word / Excel等) は、ハードウェアの差異を意識する事なくプログラムが書かれており、ICの差異はドライバーが吸収してくれるように構成されています。
これが、ソフトウェアを「上位側」と「下位側(下回り)」に区別する理由です。
スマホやPCのアプリ、ゲームは組み込みソフトとは言いません。これらのアプリケーションは、実行されるハードウェアの差異は下位のソフトウェア(ドライバー) が吸収してくれるので、ハードウェアの知識がなくてもプログラムが書けます。組み込みソフトではなく、主に汎用ソフトウェアと呼ばれます。
この汎用ソフトウェアやWebデザイナーが、俗にIT系と称されるものです。
これは、組み込みソフトウェアと一括りにする事はできません。
組み込みソフトウェアがあるから、ハードウェアを動かせる。そして、ハードウェアを簡単に制御できるようする為に、ドライバやライブラリを上位層に提供する。上位ソフトはそれらを利用して、ゲーム等のソフトウェアを作る。
ソフトウェアと言っても、上位・下位によって役割や有知識が全く異なります。
この記事の目的
巷にはラズパイやLinuxのプログラムを説明したブログが多く、有知識者にとっては重宝できる情報が手に入りますが、逆にその筋の専門家以外には意味不明で、門前払いな内容とも言えます。
今回、私は文系の方やプログラムを何も知らない方でも「なぜ機械、家電が動いているのか?どうやって制御してるのか?」に興味があれば、その答えを出せる記事を書きたいと思いました。
近年、簡単にプログラマーになれるという類のサイトが増えました。
はっきり申し上げて、有名ブロガーが素人に毛も生えていない低レベルの記事で収益化を図るべく情報を発信していたりします。それ程、プログラミングに関心が高まっているという証ですが、プログラミングの世界って敷居が浅いんだな、と肯定的に読む位が丁度良い情報レベルだと思います。
残念ながら、このような情報を知識元にした所で、地力も応用力も身につきません。
反対に、下位層を担う組み込み系エンジニアは引く手あまたです。
上述の通り、デバイスを直接制御する見識が無いとプログラムが作れない、ゼロから作る下位層のデザイナー&プログラマーだからです。
組み込み系を知っていれば、上位層のソフトウェアはプログラミング言語を覚えれば作れますが、逆は絶対に無理だと断言します。
ソフトウェアを作りたいとして、自分が何を作りたいのかによって進む道が決まりますが、初心者でもわかる組み込み系の導入サイトは非常に少ないです。
そこで、簡単なハードウェア制御プログラムを作り、それを紹介する事で組み込み系の導入、興味を持つきっかけになれば良いなと考え、今回の企画に至りました。
今後、不定期ですがシリーズ化して記事を書こうと思います。組み込み系プログラムの説明を段階を踏んで説明したいと思っています。
今回はその導入として、ハードウェアとソフトウェアの関係、そしてソフトウェアの階層についての話でした。
ご覧いただき、ありがとうございました。
ランキングに参加しています。ポチッと押して去って頂けると、親父の血圧が下がる気がします。応援宜しくお願いします!。
にほんブログ村
人気ブログランキング
コメント