Pro MicroでI2Cを動かす (1) - Pro Microのセットアップ
お知らせ: この記事の内容を大幅に加筆修正してまとめた書籍ができました。まとまった情報が欲しい場合はぜひ確認してみてください。
自作キーボードやセンサーモジュールなどではI2Cを使って複数のICを接続し、処理をさせることがよくあります。このシリーズでは、Pro Microに搭載されているI2Cポートを使ってIOエキスパンダーを動かしてみます。
第1回のこの記事では、まずPro Microをブレッドボード上で動かせるようにします。I2Cはまだ関係ないですが、今後のために重要なステップです。
なお、実験なのでブレッドボード上に実装します。
用意するパーツ
第1回で使うもののみ掲載します。まとめ買いしたい場合は他の記事も参照してください。
- ブレッドボード(BB-801 など)x1
- ハーフサイズのブレッドボード x1(組み合わせて使用予定)
- Pro Micro + ピンヘッダ x1
- Type-C版はもげにくいので、高価ですが安心です。グルーガンで固定できる人や、他のPro Microが余っていればそれでもOKです。
- 後述しますが、Pro Microには色々あるので注意が必要
- リセット用スイッチx1
- 遊舎工房の2pinタクタイルスイッチが安いし便利ですが、ブレッドボードに挿せれば何でもOKです。
- ジャンパーワイヤ x たくさん
- 何かと使うのでたくさん欲しい
- Pro MicroとPCを繋ぐケーブル
- 充電専用ケーブルだとちゃんと認識されないこともあるらしい
動作確認をするだけなので、これだけです。
ざっくりした用語 / 引用情報
- Pro Microの種類: とにかく互換機がたくさんある。自分のPro Microがどれなのかを把握し、チップやピンアサインを知ることが大事です。
- 次の記事が参考になる: Pro Microとそのバリエーション - zenn.dev
- Pro Microのピン配置(ピンアサイン): Pro Microから出ているピンが何かという情報。チップ(ATmega32U4)のどの足がどこに接続されているかを確認できる。これも種類によって違うので、基板の印字などを見て同じものを探す。今回は一般的な下図のものとして進める
引用: https://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/ProMicro16MHzv1.pdf
用意するソフト
- Arduino IDE
- Pro Microのファームウェアを焼くための環境。これは便利
実装
1. Pro Microとピンヘッダをはんだ付けする
Pro Microをブレッドボードに挿すため、ピンヘッダをくっつけます。
どちらの面を上にするか、ピンヘッダの高さは十分か(ケーブルが挿せるか)を考える必要があります。私はとにかくもげにくくするため、ケーブル差込口を下にして固定しようとしています。しかし、一般的には逆で、回路図では左右反転するので要注意です。
多分逆
はんだ付けは、とりあえず今回使うピンだけ行えば良いです。対象はGND x3, RST, VCCです。使うピンが増えたら、必要に応じてはんだ付けします。次回以降は2(SDA)と3(SCL)も使うので、一度に付けたい場合は追加ではんだ付けします。
2. ブレッドボードで配線する
Pro Microを一番上に置いて、必要なピンを配線します。下図の通り、ブレッドボード左右の+レーンと−レーンを繋ぎ、GNDとVCCを接続し、#RST(RSTに上線)とGNDにスイッチを繋ぐと完了です。Pro Microの2,3ピンがある方を広くすると後々楽です。
Pro Microとリセットスイッチ
Resetによくある挙動ですが、#RSTピンは何もしなければhighに、リセットする際はlowにします。そのため、GNDとスイッチで繋いでリセット処理が走るようにしています。次のHookup Guideに書かれています。
Pro Micro & Fio V3 Hookup Guide - SparkFun Learn - learn.sparkfun.com
ちなみに、#RSTは内部的にプルアップされているので、放っといてもhighになります。内部プルアップは今後も頻出する便利なやつです。
引用: Figure 8-1: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf
3. Arduino IDEでプログラムを焼く
Arduino IDEを起動し、次のリンクにあるサンプルコードをコピペしてコンパイルします。LEDがチカチカして分かりやすいので良いです。
Arduino IDEではどのボードを対象にするかを選ぶ必要があります。「Pro Microが無いぞ?」と絶望するのですが、前掲の記事にある通りArduino Leonardo互換なのでそれを選びます。物によってはうまく動かないこともあるらしいので、こちらの記事などを参考に、別のボードを選んで焼きます。
焼き方は、リセットスイッチをダブルクリック(Pro Microの種類によってはシングルクリック)し、750msだけブートローダーが起動するのでその間に焼きます。事前にArduino IDEでアップロードボタン(Cmd+U)を押し、ブートローダーを起動すると自動的に認識して焼いてくれます。
焼く対象(Port)も選ぶ必要があります。まだ一度もプログラムを焼いていないと、何も認識されていないことがあります。ブートローダーは認識するはずなので、リセットしてPort一覧に項目が増えるかを見てみましょう。見つかったら、急いで選び焼いてもらいます。
上手く行かない場合、まずはブートローダーが認識されているか確認します。Macの場合、Pro Microを接続していない状態で ls /dev/tty.\*
を叩きます。Macbookだと /dev/tty.Bluetooth-Incoming-Port
が元々いたりします。Windowsだとデバイスマネージャー的なものから見える可能性があります(未検証)。次に、接続してリセットをダブルクリックし、同じコマンドで表示が増えるか確認します。自分の場合は /dev/tty.usbmodem12101
という名前で出てきました(USBハブ経由)。これで出てこない場合は、Pro Micro自体の不良か、リセットボタンがちゃんと機能していないかが疑わしいです。後者の場合は、ピンセットでPro Microの#RSTとGNDをショート(x2回)して起動するかも試してみましょう。
4. Arduino IDEで出力を見る
無事に書き込みができ、Pro Microがピカピカしだしたらあと少しです。
まずは、ブートローダーではない状態でも /dev/tty
などに表示されるかを確認します。通常状態でPCから正しく認識できているかの確認です。Arduino Leonardoの場合、IDEから焼くとUSBファームウェアも一緒に焼かれるようで、これによりPCと良好なコミュニケーションが取れるようになります。もし見つからない場合、適切なボードを選んで焼いていない可能性があります。前述の記事を見つつ、Arduino Leonardo以外も試してみましょう。
上手く繋がっていそうな場合、"Tools" -> "Serial Monitor" を開き、"Hello world!" 的な文言が確認できたらOKです。プログラム中に Serial.println(…)
という記述がありますが、これはArduino IDEから確認できます。つまり、printデバッグができるということです。
シリアルモニターに繋がらない、的なメッセージが出ている場合、違うPortを選んでいないか確認し、抜き差ししたりして様子見します。
この状態であれば、ブートローダーに入らなくても、アップロードボタンを押すだけでプログラムが更新できるようになります。これは便利。
まとめ
最初のセットアップ部分は詰まりやすいので、ここまで無事に動いたら祝杯ものです。私もArduino Leonardoのボードを選ぶことに気づかず、一日が溶けました。
次回は本題のI2Cに入ります。