インターネットとハードウェア

組込みプログラミングの必要性

プログラミングというとPC上でのプログラムが普通ですが、最近感じているのは組込み系のプログラミングの重要性です。単に組込みプログラミングというだけではなく、デバイスとネットワークを扱うためのプログラミングと言ったほうがいいかもしれません。

理由は下記の通り

  • 身近なものがインターネットに繋がる、モノのインターネットではデバイスを扱うことが必須
  • 子供の頃から見たり触れたりするのは実体のあるデバイスであり、プログラミングは実体のあるデバイスを動作させることで興味を持つことができる
  • 組込み系のデバイスのプログラムが書けるのは、おっさんばかり。若い人はこれが出来ると需要がありそう
  • ハンダ付けや簡単な電子回路の知識もついでに身につく

とはいえ、最近のデバイスはそこまでの知識が必要なくてもハードウェアを叩けるようになってきているので、まずはそこから始めるのがいいでしょう。

何から始めるか?

Arduino

Arduino Uno

言わずと知れたプロトタイピング用デバイス。IDEもありC言語ライクに書ける。情報も圧倒的に多くとりあえず始めるならコレ。ただしネットワーク周りはやや貧弱で、イーサネット対応しようとするとコストが高く、別の選択もあり


Raspberry Pi

Raspberry Pi

最近流行りの小型PCボード。拡張性は低いけれどもGPIO周りは多くの情報があり、Linux扱える人ならなら敷居が低い。ネットワークも普通に使える(実際には組み込みボードとは言い難い)


Espruino

Espruino

JavaScriptで書けるデバイス。Web系の人が入るには良さそう。KICKSTARTERで募集中(2013/9/1現在調達達成)。ポチった


TESSEL

TESSEL

こちらもJavaScriptで書ける。WiFIを搭載し、Node.jsも動く。こちらも購入予定


「モノのインターネット」を考えると、今流行のArduinoでは限界が見えている気がします。もう少しリッチなデバイスで、かつArduinoの手軽さでネットワークが扱える。というのが求められているのでしょう。後者の2つはそこを狙っているように思います。ルネサスからSAKURAボードというArduino互換に近いボードが出ているのですが、僕が使った感じではTCPライブラリに問題があるようで(TCPをクローズしてくれない)、ネットワークを扱うのは避けたほうがよさそうです。

ARMマイコンを使えるように

もっと簡単にレゴロボットでプログラムを学習しよう。とかいうのも導入的にはありだと思いますが、やはりゴールはCPUアーキテクチャやメモリマップ、レジスタ制御などをきちんと理解してプログラムが書けるようになっておきたいものです。というわけで、個人的に最近使っているArduinoに限界を感じたためARMマイコンの勉強を始めました。ゴールはCortex-Mシリーズを使えるようになること。昔はSHマイコンでμITRONとかやっていたのですが、すっかり錆びついているため思い出しながら始めます。

おまけ

ThinkITさんで、「Raspberry PiとNode.jsで作る独立稼働モバイルサーバ」という記事を書きました。Raspberry Piを使ってNode.js + ハードウェアでサーバ型カーナビを作る。というものです。

モバイルサーバ

AndroidiPhoneがもたらしたのはスマートフォンだけではなく、32bit組込みマイコンのコストが下がり、LinuxなどのリッチOSが載るようになりました。Arduino, Raspberry Piそしてこれから出るであろう様々なデバイス。インターネットとハードウェアの融合はこれからが楽しい時になりそうです\(^o^)/