mbed対応マイコンモジュールを使用したサンプルプログラムを紹介します。
基本的にmbed.comのコンパイラ画面のmain.cppに貼り付けてもらえれば動作します。
mbedの豊富なライブラリを利用してサクっとプログラムを作ってみましょう。
リンクをクリックするとそれぞれのサンプルプログラムにジャンプします。
まずは「Lチカ」
マイコンを使ったプログラムの基本中の基本、「LEDチカチカ」を略して「Lチカ」です。
マイコンの動作確認をする上でも軽視できないステップです。まずはこれからマスターしていきましょう。
本品にはLED(マイコンのPB3端子に接続されています、mbed上ではLED1でも指定可能です)が実装されています。これを点滅(チカチカ)させましょう。
コンパイラの新規作成メニューでLED Blinky testを選択すると雛形が作られます。今回は雛形そのままで使いましょう。
コンパイルして出力されたbinファイルをdfuファイルに変換して書き込みます。ちゃんとLチカしましたか?(書き込み手順はコチラを確認して下さい)
main.cpp
キー入力
Lチカで動作確認が出来たところで、今度は簡単なUSBデバイスの作成をしてみましょう。まずはキーボードを模したデバイスを作ってみます。
本品だけではキーボードに相当するキーが無いため、実装されているBOOTスイッチ(PB8、プログラム中ではPB_8と表記)をキーに見立てて、定型文(マクロ)を入力する簡易的なキーボードデバイスを作ってみます。
本品(STM32F042K6使用)でキーボード等のUSBデバイスを作るためのプログラム(ライブラリ)が公開されているので下記の手順で取り込んで下さい。(この手順は本品でUSBデバイスを作るときの共通作業となります)
ココにアクセスして「IMPORT INTO COMPILER」ボタンを押して下さい。
コンパイラ画面にダイアログが表示されますので、「Program」を選択して、自分のプログラム用に名称を変更して下さい。(ここではF042K6_hello_worldとします)
プログラムがインポートされたらサンプルソースプログラム(*.cpp)を削除して、main.cppを追加して下さい。(main.cppには下記のプログラムを貼り付けて下さい)
コンパイルしたら本品に書き込んで下さい。環境にもよりますが、USBポートに差し込んでから数秒程度でキーボードとして認識されます。
テキストエディタなどを立ち上げた状態で、スイッチを押すたびに画面に「Hello, world!(改行)」と入力されます。自作キーボードの第一歩と言うところでしょうか?
main.cpp
マウス操作
キーボードの次はマウスに相当するデバイスを作ってみます。自作キーボードって流行ってますが、自作マウスってのはどうでしょうか?
先ほどのキーボードの時と同様の手順でプログラムをインポートして、空白のmain.cppを準備して下さい。
プログラムの構成はキーボードの時とだいたい同じです。マウスカーソルが勝手に動かないようにスイッチを押している間だけマウスカーソルが動くようにします。
main.cppに貼り付けてコンパイルして書き込んだら動作させてみて下さい。スイッチを押している間だけマウスカーソルがグルグルと回転します。(パソコンにもともと接続しているマウスと併用可能です)
アイディア次第で面白いキーボードが作れそうですね!
Twitterに投稿した作例その②です。
スイッチの都合で内部プルアップ抵抗を取り外しています。
Twitterに投稿した作例その①です。
main.cpp
シリアル通信
USBデバイスの一種としてシリアル通信デバイスを作ってみます。単に通信するだけでは面白くないので、I2Cデバイス(センサー)からの信号を取り込んでみましょう。
I2CデバイスはSeeed Technology社の三軸加速度センサ(GROVE)(写真左)を使います。名前は難しそうですが、要するに傾きを検出するセンサです。秋月電子(ADXL345)(写真右)で販売しているブレークアウト基板でも同様に実験が出来ます。
mbedの標準I2Cを使うときはデバイスアドレスを自分で1ビットシフトする必要があるので注意して下さい。(Arduinoとは指定方法が異なります)
前回同様、空白のmain.cppを準備したらプログラムを貼り付けて下さい。
プログラムはココを参考に作ってみました。重力方向に対してのX,Y,Z軸の傾きを0,1,2で表示しています。1秒おきにセンサから新しい情報を読み取ります。センサが水平のとき、X,Y軸は凡そ0を、Z軸は1を示します。(上下ひっくり返すとZ軸は-1になります)
プログラムを動作させたとき、Windowsからドライバを要求されると思います。mbedシリアルドライバがココからダウンロード出来ますので、手動でドライバをインストールして下さい。(私の環境ではmbed標準シリアルドライバがインストール出来なかったので少し古い情報ですがコチラを参照しました)
ドライバがインストールできたら新たにCOMポートが追加されていると思いますので、Tera Termなどの通信ソフトを立ち上げて追加されたCOMポートに接続すれば、センサからの値が表示されます。
main.cpp
ボリュームコントローラ
ここではWindowsの音量調整(画面右下のスピーカのアイコンのやつ)を操作するデバイスを作ってみましょう。市販品もあるようですので、一定の需要があるのですかね?
mbedのキーボードライブラリでは単なる文字キー以外に特殊キーを送信する機能があります。この中のメディアコントロール(音量のボリューム操作)を使ってみましょう。
音量操作するためにロータリーエンコーダを使い、それっぽく作ってみました。本体のスイッチを押すとミュート(トグル操作)になります。
いつも通りUSBデバイスを作成する環境を作ったら、mbedからロータリーエンコーダのライブラリを取り込みましょう。このページからインポートします。ロータリーエンコーダから回転信号(相対)を取り込んで音量UP/DOWNを判断します。操作しなければ0になりますので、何もしません。詳しい動作はライブラリの中身を見てみて下さい。
ロータリーエンコーダは秋月電子で購入したEC12E2420801を使用しました。インクリメンタル式ロータリーエンコーダであれば同様に使えます。製品ごとに端子の並び順が決まっていますので、データシートを確認してから配線して下さい。
今回の配線はA端子→PB6(コネクタ1番ピン)、B端子→PB7(コネクタ2番ピン)、C端子→GND(コネクタ4番ピン)に接続します。A/B端子のプルアップ抵抗は本体側に内蔵していますので追加不要です。
main.cpp
スクリーンセーバーキラー
一部の界隈で人気(?)のスクリーンセーバーキラーです。要するにパソコンを操作していなくても定期的にマウスなどを動かしてスクリーンセーバー(画面ロック)になるのを防止するジョークアイテムです。(自己責任でお願いします)
外付けのハードウェアは不要ですので、最初の方に説明したマウス操作と同様の手順で作成できます。動作は至って簡単で一定間隔でマウスをちょっと動かします。wait(60);の部分が間隔となる時間です。単位は秒なので60秒(1分)でマウスを動かします。
パソコン側のスクリーンセーバー起動するまでの時間が3分とすると、1分おきにマウスが動くのでスクリーンセーバーの起動を防止できます。
Twitterに動作している様子の動画を投稿しました。
main.cpp