Piを組み込んだノートPCであるpi-topの新しいバージョンが2017年10月に発売されたのですが、なかなか買う気になれずにスルーしてきました。pi-topに関しては2015年10月頃に発売された旧バージョンを入手し、いくつかブログ記事を書いてきました。OSを試してみたこの旧バージョンを使った上で、ちょっとひどいなと思ったのは下記の二点です。キーボードのクオリティが低すぎる。反応しないキーがありノートPCとしては使い物にならない。外付けでUSBキーボードをつなぎたくなるレベルなんらかの原因でバッテリーが突然使用不能になる。私の場合、使用時にはACアダプタの接続が必須となってしまいましたキーボードのクオリティの低さについては過去にブログに記しました。バッテリーが使用不能になる件については今回初めて記しますが、ネットで検索すると、同じ問題に当たった人がかなりいらっしゃるようです。Li-Poバッテリーのように過放電すると以後バッテリーが使えなくなる、という症状に似ているように思えます。旧バージョンでそんな体験をしていますので、決して安くはない価格でまた似たようなクオリティの製品だったら嫌だなあと思い、なかなか手を出しにくかったのです。発売後しばらくたってもこの新バージョンが旧バージョンと比べて進化しているのかどうかなど、私が知りたい情報があまり入ってこないので、諦めて購入して自分で確かめてみることにしました。旧バージョンに比べると、マウスのタッチパッドの位置が一般的なノートPCと同じ位置になり、洗練された印象を与えます。サイズは一般的なノートPCと比べるとかなり大きく持ち運びには向かないのですが、これは旧バージョンからそうですので割り切るしかないでしょう(ちなみにサイズは34.5x22x4cm、重さは1.5kg)。OSは公式サイトからStretch系列のpi-topOSをダウンロードして用いました。系列のpi-topOSが入っていたためです。8GBでしたが、このSDカードは動作中に瞬間的に動作が固まる現象(プチフリ)が多いように思われますので、別のSDカードを用意した方が良いと思います。Stretch系列でもいつも通り、起動時にスプラッシュスクリーン動画が流れ、Dashboardというアプリケーションが自動起動するのですが、これを無効にするには、下記の2コマンドをターミナルで実行すればOKです。PiをノートPC化するPi-Topにユーザーpiでログインしてみた」の設定を参考に.config/openbox/lxde-pi-rc.xmlを編集してください。Piを組み込むだけですので、旧バージョンより組み立ての難易度は低めです。はめ込みのかみ合わせが合いにくかったり、ねじ穴の位置が微妙にずれていてねじが締めにくかったりなどの問題があり、慎重な作業が必要になりますので、小さな子供に任せられる作業ではないと思います。キーボードさて、問題のキーボードですが、結論から言えば旧バージョンのpi-topのものに比べると、大幅にクオリティアップしています。v2内蔵のキーボードとマウスだけで作業をしても、まったく苦にならないレベルです。何を当たり前のことを、と思うかもしれませんが、旧バージョンは普通の作業を内蔵キーボードとマウスで行うだけでもストレスを感じる作業だったのです。左Shiftキーが小さく、その右隣に<、>キーがあるEnterキーの右隣にHome、Endキーなどがあるなどの問題が挙げられます。これらは慣れないと何度もミスタイプします。v2の目玉の一つはキーボードをスライドさせてGPIOにアクセスできることでしょう。緑色のプラスチックに触って下図のようにスライドさせると、素材のおもちゃっぽさを感じずにはいられないものの、仕組み自体はなかなかよくできていることがわかります。PiおよびHUB2.0というメイン基板が露出されます。その横にさらにブレッドボードが見えますが、これはpi-topPROTO+という電子工作用のモジュールで、今回これが標準搭載されています。旧バージョンのときはpi-topPROTOは別売りで、さらにpi-top本体の発売後しばらく入手可能にならないという問題がありましたので、今回これが標準搭載されたのは良い点だと思います。Piの全てのGPIOにアクセスできるのですが、今回そのピンがArduinoなどと同じメスピンになっているのですね。Pi本体と同じくオスピンの方が混乱が少なくて良いと思うのですが、メスピンの方がショートのリスクが小さい、などと配慮した結果なのかもしれません。そもそもHUB2.0のすぐ隣で電子工作をするというのはかなりリスクが高いですよね。手がすべってHUBを壊してしまったらそれでpi-topが使えなくなってしまいますから。Pi本体に取り付けたSDカードが見えるようになりますが、これを手で取り外すのは困難です。そのため、SDカード取り外し用の器具が添付されており、下図のようにSDカードをひっかけて引き抜けるようになっています。Pi本体からSDカードを取り出すことを全く考慮していない商品もありますので(例えば公式のディスプレイケース)、このような対処法が用意されているのは好ましいことだと思います(必ずしもスマートな方法ではないとは言え)。各種端子へのアクセスUSB端子2つ、LAN端子、およびイヤフォンジャックへは下図のように背面からアクセスできるようになっています。USB端子2つ、LAN端子、およびイヤフォンジャック旧バージョンでは、これらの端子へのアクセスが悪く、下記のようにUSBハブやヘッドフォン用の延長ケーブルを用いるなどの工夫が必要でした。LAN端子に至っては本体に固定するためのねじを取り外せばなんとか使えるかも?というレベルでした。旧バージョンのpi-topでのUSB端子とイヤフォンジャックの利用このように、これらの端子へのアクセスは旧バージョンから比べるとかなり進歩したところです。下図のように公式カメラモジュールを接続する端子が銀色のカバーに塞がれており、実質公式カメラモジュールが使えなくなっているのです。銀色のカバーは、GPIOとHUB2.0との接続や、CPUのヒートシンクの役割をしているものです。銀色のカバーを取り付ける前にあらかじめ公式カメラモジュールを取り付けておけば恐らく使えるでしょうが、銀色のカバーは頻繁に取り外すものではないので、公式カメラモジュールの使用を諦める方が多いのではないでしょうか。これは、非常に詰めが甘いと感じた点です。バッテリーバッテリーについては、今後使用していく上でどうなるか検証していきたいと思います(個人的にはあまり期待していませんが...)。しないよう気をつける」という方針で使うことになりますので、すぐ利用不能になることはないのではないでしょうか。v2で解消されていることに驚くのではないかと思います。2015年当時からこのクオリティで出ていれば...と思いますが、ものづくりはそんなに甘くないということなのでしょう。この出来の良さだけに、公式カメラモジュールが使えないという詰めの甘さは残念なところです。v2について比較的高めの評価を与えてきましたが、これはあくまで旧バージョンのpi-topと比較してのことです。PCの代替にしようとか、子供にはじめて与えるPCにしようとか、という用途に用いるのは慎重になった方が良いと思います。大手メーカーの製品のように「正常動作し、なおかつ保証があって当然」というものではありませんので。Piではじめる機械学習」を執筆しました。はじめに小中学生へのプログラミング教育用教材について興味があり、これまで下記のエントリを書いてきました。用いて物の制御を行う、という内容になっています。この方法では以下の問題があり、やや敷居が高いのが難点です。プログラミング教材として用いた場合に何が可能かを試してみました。小学生の教育用に開発したマイコンボードです。用いたのは以下のものです。mini)下図が完成状態です。micro:bitを2つ持っていなかったので、コントローラー用の1台は、スイッチサイエンスにより開発されたmicro:bitの互換機であるchibi:bitを用いました。chibi:bitでなくmicro:bitを用いても同じです。chibi:bitには、スマートフォン用のモバイルバッテリーを電源として用いてます。今回作成したのはタイトルにもあるように無線コントロールカーです。完成品の動画が下記になります。2台のmicro:bitがBLEで通信して、バギーカー上のmicro:bitが車体を動かしています。プログラムプログラムはmicro:bitの公式サイトでプログラミング用のブロックを組み合わせることで作成します。受信側(機体側)のプログラムです。(静止)、1(前進)、2(左折)、3(右折)に対応する数値が送られてきますので、それに応じて2つの連続回転サーボを動かしています。90)を出力すると静止です。180)は全速で右回転です。95)と設定しています。これらは好みやモーターの特性によると思いますので、お好みで調整します。次に、送信側のプログラムです。こちらはあまり美しいプログラムにはなっていません。micro:bitには「ボタンが押されたら」というイベントハンドラはあるのですが、「ボタンから指を離したら」というイベントハンドラがありません。そのため、そのままでは「ボタンAを押したら」、「ボタンBを押したら」、「ボタンAとBを同時押したら」という3パターンしか動作を作れません。4つの動作を作りたかったので、上記のプログラムではイベントハンドラを用いず、200msごとにボタンの状態をチェックすることにしています。そのままでは最悪200msごとに通信が行われてしまいます。それを避けるために、現在のボタンの状態を表すstateという変数を導入し、stateの値が変化した場合のみ通信を行う、ということをしています。上記を実現するため、「もし~なら~でなければ」の分岐命令を4重に組み合わせることになり、プログラミングの講義ではあまり教えたくないようなプログラムになってしましました。まとめ最後に、この題材の良いところと悪いところを列挙します。miniの機体の組み立てが、見た目ほどフレンドリーではない「ボタンを離したら」というイベントハンドラがないので表現できる状態が少ないそんなところでしょうか。どんな環境を用いる場合も当てはまりますが、後は用意する題材の工夫次第で十分面白い講義ができるのではないかと思いました。Piではじめる機械学習」を執筆しました。