IoTの開発・教育キットを作りました

P1150715

IoTというと、何を教えたらいいかわからない、という人も多いだろうし、最初にどういうものを購入して、プロトタイプをどう作ったらいいか、ということがわからないとか、めんどくさい、という方も多いだろう。そんな人のために、オールインワンのIoT開発・教育向けのキットを作ったんだが、これがことのほか人気が出てきた。これ1つでハードウエアの開発、プロトタイピング、教育などができる。他にPCを接続する、ということも必要ない。ディスプレイもキーボードもマウスも開発環境も買ったそのときにすべて整っている。必要に応じて、ボードコンピュータの部分は様々なものを使うことができるようにしてある。このモデルはpcDuino3を使っているものだ。

【日本国特許出願中】

【現在日本国内販売中】

P1150723 P1150728

人が忘れた「自然」

STAP細胞騒ぎは昨年のエポックの1つだったけど、「あったか、なかったか」という二元論で語られていることが既に大間違い。一般にはプロレスみたいに勝ちとか負けをわかりやすくしたほうが受けるんだろうけどさ。実態はそんなことはありえないわけでね。

要するに、現状では「結論」なんてありえないでしょ?実際にそういう研究の現場にいた自分としては「可能性がある」程度の話で、それをよりたしかにしていくとか、より否定していくのは、今後のこの人だけじゃない、多くの世界中の研究者も一緒になってやっていくことでね。「結論」なんてわかりやすいものなんか、もともとないですよ。そういう科学の分野なんだから。なんでも物事をわかりやすくできると思ってるのって、ばかじゃねぇのか?と思っちゃうわけだ。

結論は数年で出るかもしれないし、数十年かかっても出ないかもしれない。そういう研究だよ、これはね。世間がワァワァ騒いでも、科学の研究ってのはそれとは別のところにあるものだから、騒いだ通りになんかなりませんよ。相手はいくら小さくても、人間社会じゃない。科学という「自然」を扱うものだし、「自然」は人間の思惑なんて考えてくれないからね。関係ないのね。「台風来ないで~」っていくらたくさんの人が思っても台風は勝手に来るわけでね。「地震来ないことにしよう」って思い込んでも、地震は来るわけですよ。「死にたくない」って思っても、死は生物である人間にはやってくるのが当たり前。それが「自然」。人間じゃどうしようもないものなんですよ。だから、昔の人は「神」とかって言って、恐れ、崇めたわけでね。人間の人知の及ばないものだからね。ましてや人間社会のプロレスみたいに勝敗が明確に決まる、なんてことはありえない。

論文の捏造だ、画像の捏造だ、ってのも、そりゃいいことじゃないよね。でも、この分子生物学にかぎらず、けっこう多くの学術分野で実際にあちこち行われてますよ。なにせ「論文」が学者というものを仕事にしている人の生活の糧だからね。そっちは人間社会のビジネスですから、裏も表もできちゃうもの。論文なんて100%信用しろ、ってほうが無理がある。それに、数十年どころか数百年たって、「あれは間違いだった」みたいな話は科学ではいっぱいあるよ。野口英世の研究だって、今から見ればウソばっかだったけど、当時の野口は真剣に真実を突き止めたと思っていたわけでね。ウィルスというものが全く発見・認知されていなかった時代にウィルスを研究対象に知らずにしちゃったから、トンチンカンな解答しか出せなかった、ってのが、今になってわかってきたんだよ。

アインシュタインの「相対性理論」だって、それまでのニュートンの力学や万有引力の法則を否定したわけじゃなく、それは相対性理論から言えば、限られた条件下でのみ正しい、ってことがやっとわかった、ってもんでしょ?時代が進むと、人間の知も自然に近づいていくように思えるよね。でも、ぼくらはまだ葉っぱ一枚作り出せないし、せいぜい宇宙って言っても、ごく近くの月に人間が行った、って程度のもんでしょ?地震の予知だって、全然できなかったわけでね。人間の叡智なんていまはその程度のもんですよ。

ましてや、実際に科学の研究の現場にいない人が科学を語る、ってのには無理があるわけだよ。こういうことについて、「オレは門外漢だからなぁ」っていう謙虚さがみんな自覚せずになくなっちゃって「オレは門外漢だけれども」って、「言い訳」を最初に置いておいて、「オレ様理論」でなんでも一刀両断にシンプルに考えて、書いちゃう。そんなにシンプルにできるんなら、専門家は必要ありませんよ。で、科学を知らない人があれこれと自分の理屈だけで考えると無理が出てくるから「それはきっとこういうことが裏に在るに違いない」って、陰謀論をくっつけて、「これで辻褄があった」とか、そういうバカなことはやめて欲しいね、と思うわけですよ。陰謀論じゃなくても、科学の世界をちゃんと知っていると、どれもこれもみんな辻褄があって、陰謀論なんか挟まなくても納得できるものなんだよ。

科学というのは人間社会に役立つことを前提にした「技術」じゃない。「自然」という、人間がなんともしがたいどころか、理解さえ本当は無理かもしれないものを相手にして、なんとか人間に近いところに持ってこようとしている人間の営みです。その自然と人間界を結ぶ司祭が研究者です。STAP細胞騒ぎってのは、そこに陰謀があったにしろ、なかったにしろ、自然から見れば、人間社会で起きたコップの中の嵐、ってとこだよな。夜郎自大に陥っている人間その本人は自分がそういう状況に陥っていることをわからないもんだよ。

本人が人間であるがゆえに、また、研究者であるがゆえに、人間社会と自然のあいだの軋轢で潰されそうになって、悲鳴を上げているのが、今の科学という分野全体であって、その象徴が小保方晴子なんだね。時代が彼女を選んだんだね。

 


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が流行るのはいいのだが、デバイスそのものよりも、デバイスに関する資料が充実していて、すぐに見つかる、ということや、その資料と実際の動きがちゃんと一致していることなどがいかに大切か、と思う。資料の正確さがちゃんとしていないデバイスは開発現場が混乱するだけで、いいことが全くない。メーカーにはこういったドキュメントをしっかりとすることに力を入れてほしいものだ。

 


パソコン・周辺機器