昨今、小学校でもプログラミングの授業があるとかで、プログラミング技術の需要は高まっていますね。
プログラミングが当たり前になる時代になったとしても、さらに必要とされる技術があります。
それは「プログラムを使って物を動かす技術」です。
学校で学ぶ、自宅で学ぶプログラミングは、画面の中やネットの中で動くものがほとんどでしょう。もちろんこれも大事です。
しかし、世の中の「現物」もプログラムで動いていますよね。
通常のプログラミングができるからと言って、炊飯器や洗濯機のプログラムが作れるわけではありません。
ここには「組み込み系の技術」と呼ばれるものが必要になります。
現物を動かすためには、プログラムだけでなく、その「現物」や「制御技術」の知識が必要になるんです。
ただ、自宅で行うのはハードルが高いのも事実。
実際、世の中にはプログラマはたくさんいるのに、この組み込み系人材は数が非常に少なく(ハードルが高いからですね)、あちこちで求められている状態です。
今後も、この需要は更に伸びていくと予想できます。
そこで、今回は、その第一歩を踏み出すことをやってみましょう。なんでも一歩目が一番大変です。
マイコンモジュールと言語
小さなマイコンモジュールは今ではいろいろなものが入手可能です。
例えば、Arduino、PIC、H8、SH、PSoC、mbedなどなど。
昔を知ってる方なら、Z80とか!?
それぞれの細かい特徴はネットを探していただくとして、今回の選定条件は、こんな感じにしてみました。
入手しやすいこと。
ネットに情報がたくさんあること。
非力でないこと。
将来に渡って使えること。
多くのマイコンモジュールは「C/C++」を使います。もちろん、これはこれでC言語は現在でも多くの人が使っているもので優れているんですが、学習するにはなかなか難易度が高いです。
そこで、今回は今、ユーザーが増えている「Python(パイソン)」を使うものを選定しました。
Pythonの特徴は、たくさんありますが、ざっと書くと・・・
設計時からネットワークを考慮している(Googleが開発)。
わかりやすい文法(学習するには最適)。
使える世界がどんどん広がっている。
今からプログラミングを学習するならPythonがおすすめです。
この本は、Pythonでどんな事ができるのか一通り把握することができます。また、スマホでPythonを学ぶ方法も書かれていてGoodです。
Adafruit Trinket M0
以上から、選定したのは「Adafruit Trinket M0」です。
Adafruit(エイダフルーツ・インダストリーズ)はアメリカの会社で自作マニアが喜ぶいろいろなキットなどを作っています。面白い商品がたくさんあります。
Trinket M0(トリンケット エムゼロ)は、この企業が作っている非常に小さなマイコンモジュールです。
小さくても、CPUと呼ばれる頭脳はARM-M0 48MHz 32bitプロセッサ(ARM社はソフトバンクの孫さんが買収して有名ですね)ですし、RAMは32KB、フラッシュメモリが256KBあります。
パソコンの性能としてみると、ありえませんが、組み込み系のモジュールとしては充分すぎるほどの性能です。
モジュールには、電源やプログラム書き込みのためのマイクロUSBがあり、LEDが3個付いているので、このモジュールだけで最初の一歩はできてしまいます。
その後、センサやモータなどの外部機器を接続することができます。このためのピンも5本あります。
他に必要なものは、パソコンとUSBケーブルだけです。
これだけでPythonを使いプログラムを書き、できあがったプログラムはUSBメモリのようにTrinket M0に書き込めます(昔は、こんな簡単にはいきませんでした)。
あっという間に開発環境ができてしまうのも魅力ですね。
さぁ、材料が揃ったら始めましょう。
アップデート
最初にすべきことは、Trinket M0のアップデートです。
Trinket M0には予め、必要なシステムが入れてありますが、常に進化しているため、購入したらまずはアップデートがおすすめです。
ここでは、アップデートの方法をご紹介します。
ファームウェア、ブートローダのダウンロード
最初に、アップデートのためのファイルをダウンロードします。
以下のページから、ファームウェア、ブートローダをダウンロードします。ファームウェアは一番上に、ブートローダは一番下にあります。
記事執筆時点で、ファームウェアは「CircuitPython 5.2.0(adafruit-circuitpython-trinket_m0-en_US-5.2.0.uf2)」で、ブートローダは「UF2 Bootloader v3.9.0(update-bootloader-trinket_m0-v3.9.0.uf2)」でした。
この2つのファイルをPCのどこかに保存します。
Trinket M0の接続
Trinket M0をPCにUSBケーブルを使って接続します。
USBケーブルはデータ通信可能なものを使いましょう。100均などの安いケーブルは充電専用の可能性があります。
基板むき出しなので、金属に触れたりしないように注意しましょう。
指もできる限り基板のエッジを触り、部品の足や端子に触れないようにするほうが安心です。
接続し、しばらくすると「CIRCUITPY」というドライブが見えますので、中身をPCのどこかに丸ごとコピーしてバックアップとします。
バックアップをしたら、USBコネクタの反対側にある小さなボタン(リセットボタン)を2回押します。
「CIRCUITPY」というドライブが消えて、今度は「TRINKETBOOT」というドライブが見えるはずです。見えない場合は、再度、2回クリックします。
ここに先程ダウンロードしたブートローダ「UF2 Bootloader v3.9.0(update-bootloader-trinket_m0-v3.9.0.uf2)」をコピーします。
すると一旦「TRINKETBOOT」が消えて、しばらくすると再び「TRINKETBOOT」が現れます。
次に、ファームウェア「CircuitPython 5.2.0(adafruit-circuitpython-trinket_m0-en_US-5.2.0.uf2)」を「TRINKETBOOT」にコピーします。
しばらく待つと「CIRCUITPY」が表示されて完了です。これで最新のTrinket M0になりました。
Trinket M0は実はArduino互換機でもあるので、Arduinoとして使うこともできます。その場合は、Pythonで使うときに、この項を実行してください。また、何らかの原因で、Trinket M0の調子が悪くなったときも、この項を実行すれば元に戻ります。
動作確認
いよいよ動作確認です。言語学習をしたことがある方は、一番最初に行うことに「Hello World」があると思います。
これはPCでプログラミングを学ぶ際に第一歩として行うもので、画面に「Hello World」と表示させるものです。
組み込み系の場合は、画面がない場合が多いので、基板上にある「LEDを点滅」させる方法を使います。組み込みの世界のHello Worldは「Lチカ(LEDチカチカ)」と言います。
以下のコードをPCのテキストエディタにコピーしてください。これは、コネクタ横のLEDを1秒間隔で点滅させるプログラムになります。
まずは中身を理解しないでそのままコピーしてください。
# モジュールインポート import board import digitalio import time # ピンの出力設定 led = digitalio.DigitalInOut(board.D13) led.direction = digitalio.Direction.OUTPUT # 点滅の繰り返し while True: led.value = True time.sleep(1.0) led.value = False time.sleep(1.0)
このコードを「main.py」という名前で保存します。
保存したmain.pyを「CIRCUITPY」にコピーします。
コピーが終わったら、USBケーブルを一旦抜いて、10秒待って接続します・・・。
LEDが1秒間隔で点滅すれば成功です!
mail.pyの書き換えは、PC上で行い、できあがったものをTrinket M0にコピーしましょう。
Trinket M0上で書き換えをすると「ファイルが壊れてます」とエラーを出すことがあります。
この場合は、PCの再起動、ダメならブートローダ、ファームウェアの更新をやってみてください。
このLチカは、マイコンモジュールに書き込まれていますので、USBケーブルはPCに接続しなくても動きます。試しに、モバイルバッテリなどに接続してみてください。同じように動くはずです。
一部のモバイルバッテリは消費電力が小さいと出力を切ってしまうことがありますので、その場合は、バッテリを別なものにするか、こういう場合は100均の乾電池を使うような安物モバイルバッテリが活躍します(^^;)
100均の安物は、複雑な機能を持っていないので、小さい電力でも出力を切らずに出し続けてくれます。
これで第一歩を踏み出しましたので、これから、たくさん遊んで学んでいきましょう。
参考文献など
小さくでも充分パワフル!Arduinoで力不足を感じたら、こっちに乗り換えるのもあり。
学習は実際に作りながらがベスト!この本は、楽しく作るネタが中心なのでおすすめです。
Pythonによる制御工学の本。言語は使いながらでないと上手く学べないので、こういう目的があると早く効果が上がります。組み込み系の技術を習得するなら制御技術も同じように重要です。 参考 Overview Adafruit Trinket M0Adafruit Trinket M0について 参考 CircuitPythonCircuitPythonトップページ 参考 Adafruit CircuitPython API Referenceリファレンスマニュアル