ネコマ製作所
受付
ネコリンピック
ネコリンピックの実行環境
Nekolympic(en)
micro:bit鉄道
micro:bitオルゴール
micro:bit光線銃
micro:bit用USBキーボード
micro:bit電波時計
micro:bit光るスピーカー
micro:bit4連装オーディオミキサー
mega:bitプロジェクト
M5 Stamp pico カー
ワンウェイクラッチで時計を作る
TinyBASICプロジェクト
micro:bitレゴカー
「さ〜ボード」プロジェクト
さ〜ボードの仕組
さ〜ボード2
さ〜ボード6
応用事例
ブログ
サポートページ
プロフィール
micro:bit用USBキーボード
micro:bit用USBキーボードプロジェクト
↑画像のクリックで動画が見られます
(2022/12/11)
◆micro:bitの弱点?文字入力
micro:bitはセンサー、ディスプレイ、GPIO、無線が完備していて非常にコストパフォーマンスが高いデバイスなのですが、折角文字列の表示機能があるのに、文字入力ができないという弱点?を抱えています。
文字入力ができると、コマンドで動作を変えたり、無線で文字通信ができたり、バーコードが使えたり、応用が拡がりそうな気がします。
既存の製品では
M5Stack用のI2Cのキーボード
が使えるのですが、金属製のタクトスイッチを使った簡易的なものなので、文字列を打ち込むのは少々つらいところです。
普通に売られているUSBキーボードが接続できると便利なのですが、ブレッドボードで使えるスイッチサイエンス委託の製品
「
かんたんUSBホスト」
があるくらいで、簡単にmicro:bitに接続できるものがありません。ないものは作ってみることにしました。
◆USB HIDーシリアル変換チップCH9350L
USBキーボード、マウス等はUSB HIDクラスのプロトコルでデータを転送します。これを汎用プロセッサだけで実現するにはUSBホスト、HIDプロトコルの実装などかなりのレイヤーの開発が必要になります。
上記の「かんたんUSBホスト」はWCHのCH559というUSBホスト内蔵のチップを使っているのですが、8051という馴染みのないコアでファームウェアを実装するので敷居が高そうです。
格安USBホストマイコン CH559をいじってみた(大盛)
調べたところ、同じWCHからCH9350Lという、HIDプロトコルのデータを非同期シリアルに変換するという、おあつらえ向きのチップが出ているのがわかりました。
USBマウス・キーボード用シリアル通信制御IC CH9350L
本来の用途は2個をペアにして一方をUSBデバイス、一方をホストに接続し、2つの間をシリアル通信で結んでキーボード・マウス等を延長するためのもののようです。そのためシリアルは独自のプロトコルになっていて、
USB HID Usage ID
で転送されます。
この文字情報をmicro:bitのシリアル入力用にASCIIコードに変換するため、二度手間になりますが変換用に別のチップを挟むことにしました。
大した処理ではないので、当初は手軽なATtiny85で試したのですが、ATtinyはハードウェアシリアルがなく、CH9350Lからの入力、micro:bitへの出力を同時に処理するのが困難で、少々オーバースペックですがATmega328Pを使うことにしました。
◆実装と基板化
回路はCH9350LとATmega328Pをシリアルで繋ぐだけですが、これらが5V系でmicro:bitが3.3V系のため、micro:bitへの電源供給用にレギュレーターを入れています。ATmega328からmicro:bitへ出力するシリアルのラインは抵抗分圧で電圧を合わせてあります。
まずバラック組でテスト。対象がmicro:bitだけだとつまらないので、汎用のUART出力とGroveコネクタもつけました。
基板化でパーツを表面実装にしたので、オンボードでATmega328PUにArduinoブートローダを書き込むためにICSPのピンヘッダをつけてあります。
◆ファームウェア
CH9350Lのデータシート
にあるプロトコルに従って、余計なヘッダ情報を無視して、文字情報部分をUsageIDに対応するASCIIコードに変換するだけです。変換は配列usage_idに定義しています。
現状はアルファベット大文字と数字、スペースのみ対応しています。
◆応用例
・キーボード入力した文字列を無線でもう一台のmicro:bitに送信し、受信したmicro:bitでプリンタに印刷するテレタイプ
・バーコードスキャナでバーコードを読み取って印刷します
↑画像をクリックすると動画が見られます
◆イベントでの公開例
2023年4月29,30日 Maker Faire Kyoto 2023