「カード型コンピュータ」の時代になるか?

インテル社のカード型コンピュータが発表されたのは、台湾の台北で行われているCOMPUTEX-TAIPEI2017の会場でのことだ。多くのメディアが取り上げているが、要は、高性能のPCの心臓部がカードの大きさに収まったもの、ということだ。オフィススートなどを使うデスクトップでのコンピューディングであれば、ノート型であろうが、デスクトップ型であろうが、これ一枚を挿して、コンピュータにする、ということになる。このカードには、CPU、メモリ、ストレージなどコンピュータの中心部分が入っているとのことだが、ストレージはおそらく、eMMCなどのフラッシュストレージなのだろう。であれば、簡単に言うと、タブレット型のPCのキーボード、マウス、ディスプレイの無いもの、ということになる。PCの外観は各PCメーカーが作る、ということになる。

自作PCの楽しみがまた減るわけだが、これを交換すると、CPUの性能が上がったりする、というのは重宝するだろう。ストレージは今よりも少ない容量になるとしたら、明らかに、この「カード」で作るのは「Chromebook」とか「Windows10S」のような、クラウドで動く「クラウドブック」になる可能性が高い。

さらに、このカードを使ってサーバーを作れば、小さなスペースに多くのサーバーを入れるのも現在以上に可能になる。自動車用のコンピュータも、コンピュータの中心部分はこれを使えば良い、ということになるだろう。ルーターなども、安価なものであれば、このカードで作る、という選択ももちろんあるだろう。

このインターフェイスはおそらくインテル社が標準とすることになるだろうから、業界規格も出てくるに違いない。そうなると、インターフェイスでコンピュータの中心部分と周辺が分けられるから、CPU側も、周辺側も、いろいろなバリエーションが出てくれば面白い。

大きさも小さく薄いから、スマートフォンにこれを挿せば、いつでも自分の環境を持ち歩き、電車の中ではスマートフォン、家で遊んでいるときはタブレット、仕事ではPC、と使い分け、でも中心になるコンピュータは1枚、という使い方もできるようになるんじゃないだろうか?

今後の課題は、消費電力とかストレージ、なによりも、価格などがどうなるかだが、量産ができるスペックのものは、全IC化をするわけで、かなり安くなる可能性がある。

この世界になると、家電量販店でPCの「外側」は、好きなデザインのものを選んで買ってきて、カードでコンピュータのスペックを決める、という感じになる。

と、ここまで書いて思ったのだが、ネット系のマスコミではけっこういろいろ取り上げられているものの、あまり大きな変化をこのデバイスが作れるのかどうか?ちょっと疑問になった。

 


Intel & Micronが発表した「不揮発性メインメモリ」の衝撃

米国インテル社と米国のメモリメーカーマイクロン・テクノロジーが5月15日-18日に開催されていたSAPのカンファレンスで、「Intel Persistent Memory」という、メインメモリを電源が切っても消えない不揮発性のものとするテクノロジーを発表した、とのことだ。この技術を使えば、PCやサーバーの電源断でもメインメモリーの内容が保存されるから、OSの立ち上げ、などという作業も必要なくなるし、現在のシャットダウンとかそういう機構も必要なくなる。

最初にこの記事を見て真っ先に思ったのは、現代のPCアーキテクチャのままで、そのアキーティチュア向けのOSのままだと、セキュリティ脅威になるって、ことです。電源切っても稼働終了時の記憶がメインメモリにあるわけだから、シャットダウン時にメインメモリクリアをするとか、稼働開始時にメモリをクリアしてからプログラムやデータを再ロードするとかが必要になる。捨てる時はHDD破壊だけではなく、メインメモリの破壊も必要になる。当然、このメモリを使ったPCやスマホは全く違う仕組みを考えないといけない、ってことだね。

一方で、すごいメリットがある。これがあるとHDDやSSDなしでストレージもメインメモリに配置できる。HDDのSATAとかのインターフェイスも必要ない。メインメモリ数TBの中に全てを入れておける。OSのファイルシステムも変更してプログラムはメインメモリ上に常に置いておき、プログラムのロードの時間をゼロにできる。ポインタ移動だけでプログラムを起動できるからね。メカニカルな部分がコネクタを含めて完全になくなれば、自動車や宇宙船などの振動が激しいもののコンピュータとして最適であることはいうまでもない。

実は、1990年代にぼくはこういうメモリを使ったPCのOSについて研究して、一定の結論を得た。そのときは誰も見向きもしてくれなかったけどね。英文で書いたのがどっかにあるなぁ。

コンピュータのリソースの全てがメインメモリ上に配置されると、ノイマン型のコンピュータはこれで最後にして最強。そうなるよ。

 


Raspberry Pi 2を使ってみた

RaspberryPi2

ということで、巷で話題のRaspberry Pi 2を秋葉原で買ってきて、使ってみた。microSDのメモリカードにUbuntu-Linuxを入れると、それなりに使える環境ができあがり、GUIもそれなりに速く動く。小さなPCという感じだし、さすがにQuadCoreは伊達ではない。とは言うものの、IntelのEdisonと同じく、外部のハードウエアを接続するところには、基本的にGPIO、I2C、SPIのインターフェイスがあるだけで、ここにアナログの入出力が欲しいときは、どうしてもI2Cなどで接続できるA/Dコンバーターなどを外部に付ける必要が出てくる。温度計測なども、最初からI2C接続のものであれば、そのまま付くが、アナログ値で温度が出てくるタイプだと、A/Dコンバーターを間に付ける必要がでてきて、部品点数が増える。

それでも、プロ用のハードウエアとソフトウエアの組み合わせなら、Edisonがボードサイズも小さくていい感じなのだが、A/DやD/Aを伴う教育用ということになると、やはりpcDuino3が最初からこれらのものがボード上にあるため、非常に便利だ。当然、OSのカーネルもそのハードウエアをサポートしている。

Raspberry Pi 2は小さなパソコンを作るためのボード、という位置付けになるだろう。I/Oが限定的で、あまりそれを利用しない、ということが前提だ。従ってIoT向けのノード用コンピュータとしては、今ひとつ、という感じでもある。pcDuino3はデュアルコアでCPUスピードはRaspberry Pi 2に劣るものの、A/DなどのI/OがArduino互換で揃っており、教育用に向いている、という感じがする。実際の機器への実装を前提とした開発には、Edisonはそのボードの小ささでIoT向けデバイスらしいコンピュータであるのだが、いかんせんI2CやSPIでバス接続される他のハードウエアの制約がある。これはRaspberry Pi 2でも同じことではあるのだが。

ということで、現実的な使い方としては、IoTの教育用にpcDuino3、小さくて安いPC作成にRaspberry Pi 2、IoTの実際の機器への適用システムの開発には、Intel Edisonがいい、という感じがするが、Edisonは周辺回路を多く必要とする、ということになるだろう。そういう意味では、まだIoTのノード向けのスモールボードコンピュータの決定版というのは、まだ出ていない、ということになる。

しかし、最初から小型化のためも考えたWi-Fi搭載、というEdisonの先見性はこれから評価が高くなることだろう。

 

EdisonでI2C温度計測

Edison with ADT7410

Edison with ADT7410

Intel EdisonのBreakout boardを昨年買ってきたのだが、なかなか手につかなかった。この正月休みに、他の仕事の合間に、とりあえず、説明書を読み、動かしてみた。秋月電子通商で売っている、I2C温度計測デバイス「ADT7410」を使って、インターネットの向こう側から部屋の温度がわかるようにしてみた。Edisonはアナログ値の入力や出力などもあるので、温度計測の場合はそこにつなげることもできるが、Edisonの作りを見ると、どうやらI2Cデバイスを標準で使うようになっていて、これからのIoTではI2Cバスの理解が非常に大切であることがわかってきたので、今回は特にアナログ入力を使わず、I2Cバス経由でI2Cのバスへのデータ出力を持った温度計測ICを使うことにした。

●ハードウエア
まず、ハードウエアだが、難しいことはない。普通のI2Cバスに、普通にADT7410を接続する。もちろん、接続する線はVdd、GNDの他、SCL、SDAである。バスの引き回しがほとんど無いくらい短いので、SDAのプルアップ抵抗は10kΩにして、ADT7410側につけた。ADT7410側のバス線はこの4本だけだが、Edison breakout boardの同じ名前の線は、それぞれ、VddがV_3P30(J20-2)、GND(J19-3)、I2C_1_SCL(J18-6)、I2C_1_SDA(J17-8)、となる。これらのピンアサインのデータはすべてIntel Edisonのホムページから取ってこれる。これらの同じ名前の線のEdison側とADT7410側をそれぞれ接続し、プルアップ抵抗も忘れないようにつける。同じ秋月電子のADT7410のボードを使うと、これらの細かい部品をハンダ付けする手間もなく、簡単だ。私はそれを使った。また、ADT7410はバスアドレス0x49-0x4Cが使えるが、私はボードのジャンパの設定で、0x4Aに設定した。

上記写真がそのハードウエアの様子だが、さすがにこれだけの接続だとかなり簡単になる。今回はブレッドボードは使わず、適当にハンダ付けして作った。

●ソフトウエア
ハードウエアの接続ができたら、今度はソフトウエアだが、Intelはmraaというライブラリを用意してくれていて、これを使うとプログラムが非常に簡単になる。以下の手順でmraaライブラリをインストールする。この作業はrootになって行う。ただし、Edisonの発売時期によってだが、既にインストールしてあるものもある。

●ソフトウエア開発前の環境作り

—-

# echo “src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic” > /etc/opkg/mraa-upm.conf
# opkg update
# opkg install libmraa0
# opkg upgrade

—-

これで、I2CによるIoT開発環境ができあがる。次に、mraaライブラリの関数を使ったプログラムを書く。今回のプログラムは実験用なので、非常に簡単なものにした。しかし、自分で見ても悲しいくらい簡単すぎるプログラム。

●プログラムを組む

以下のプログラムリストは、WordPressが勝手にインデントのTABやスペースを無用に消してくれてしまっているので、読みにくいが、C言語をわかっている方は、コピーして自分なりにインデントなど復活させて、読みやすいようにすると良いだろう。

—-

#include <stdio.h>
#include <unistd.h>
#include <mraa.h>                 /* Edison mraa library */

#define ADT7410 (0x4A)       /* I2C ADT7410 ddress */
#define I2CCH (1)                   /* Use Edison’s I2C channel is 1 */
#define SLEEPTIME (2)       /* Loop interval time is 2secs. */
void main(int argc, char **argv)
{
mraa_i2c_context i2c;            /* For mraa lib. valiables */
uint8_t data[2];                        /* Input buffer */
int i;
int lasttemp;

mraa_init();                               /* Initial mraa library */
i2c = mraa_i2c_init(I2CCH);   /* Initial i2c bus */
mraa_i2c_address(i2c,ADT7410);  /* Set i2c address */

printf(“Bus initialized.\n”);

for(i = 0,lasttemp = 0 ;; ++i)
{
int tmpl,tmph,tmp,th,tl;
int tmh,tml;

if(0 > mraa_i2c_read(i2c,data,2))
{
printf(“Read Word Failed.\n”);
exit(1);
}

tmph = ((int)(data[0])); /* First is MSB */
tmpl = ((int)(data[1])); /* 2nd is LSB */
tmp = tmph * 256 + tmpl; /* tmp is real value */

if(tmp == lasttemp)
{
sleep(SLEEPTIME);
continue;
}

lasttemp = tmp;

tmh = tmp / 128; /* Get left of the floating point */

tml = tmp % 128; /* Get right of the floating point */
tml *= 100;
tml /= 128;

printf(“I2C read[%05d][%03d.%02d]\n”,i,tmh,tml); /* Display */

sleep(SLEEPTIME); /* Sleep */
}
}

—-

mraaライブラリを使うことによって、実に簡単にI2Cのプログラムが書けるのはすばらしい。

で、このプログラムは以下の行でコンパイルする。プログラム名は長いが「gettemp.c」、できるbinaryファイルは「gettemp」となっていて、途中でmraaのライブラリをロード時にくっつける。

●コンパイルをする

—-
# cc gettemp.c -lmraa -o gettemp
—-

で、実行すると、

—-
# ./gettemp
Bus initialized.
I2C read[00000][020.50]
I2C read[00004][020.56]
I2C read[00005][020.50] ….
—-

となる。このプログラムでは、2秒ごとに温度を計測し、温度変化があると、変化した温度を表示するが、温度変化が無いとループするだけで表示をしない。行の表示の最初の4桁はループ回数、次の小数点を伴った表示が℃の温度表示である。実に簡単なプログラムだ。このプログラムは簡単すぎて、0度以下の温度表示に対応していないので、0度以下の温度表示をさせるときは、違うプログラムを組む必要があるが、それはADT7410のデータシートを参照してプログラムを組む。

●さいごに

この手のIoTのプログラムを組むとき、一番問題なのが、ハードウエアなどの資料探しだ。どのピンになにを接続すればいいのか、などの情報、ソフトウエアでハードウエアをアクセスするときのデバイスやポートへのアクセス方法など、非常にクリティカルな情報はやはりメーカーのホームページなどで探すしかない。これらの情報が揃えば、あとはプログラム作りなんてのは簡単にできる。IoTが流行るのはいいのだが、デバイスそのものよりも、デバイスに関する資料が充実していて、すぐに見つかる、ということや、その資料と実際の動きがちゃんと一致していることなどがいかに大切か、と思う。資料の正確さがちゃんとしていないデバイスは開発現場が混乱するだけで、いいことが全くない。メーカーにはこういったドキュメントをしっかりとすることに力を入れてほしいものだ。

 


パソコン・周辺機器

Intel Edisonに電源を入れるとわかること

Edison

Edison

Intel Edisonに電源を入れてみた。やっと使える環境を手に入れたからだ。

最初になにをするか、ということはここに日本語での情報があるので、これを参考にした。

とにかく、動いているのはLinux、CPUはIntelのx86系、というのが売り物だが、もうWindowsの世界ではない、ということはよく覚えておいたほうがいい。既に、IoTでもBigDataでもWindowsを使うところはないに等しい。私にとっては、願ってもない自分の得意分野だし、ハードウエアも自分の得意分野だから、動かしてその先を考えるのもなんということはないが、これまでWindowsがPCだと思って生きてきた技術者には新しいことばかりで戸惑うことだろう。現在、AndroidもLinuxカーネルベースだし、IoTではARMをCPUとした多くのハードウエアもLinuxが中心だ。さらに、主要な開発言語はC言語になるだろう。なんだか自分のほうに時代が寄ってきた感じがある。

また、Windowsといえば最近はWindows8.1などのWindows Updateによってシステムがブート時にフリーズして動かなくなる、というトラブルが頻発しており、Microsoftへの信頼は大きく崩れた。結局、MicrosoftはWindowsXPの時代が最盛期だったな、という感じが非常にする。何事も基本がしっかりしているかどうかで、すべてが決まってくる。

そういう意味でIoTの主要OSがLinux、そしてツール類はLinux上で動くOSSのコマンドなどになるのは、時間の問題だったのだが、多くの人にはそれは見えていなかっただろうと思う。今やMicrosoftもOSSに擦り寄る時代になってきた。このEdisonが教えてくれるのは、つまりそういうことだった。

Edisonをしばらく触ってわかってきたこと。Windowsの時代はもう終わった、ということだ。