👻

Pro MicroでI2Cを動かす (1) - Pro Microのセットアップ

2024/05/25に公開

自作キーボードやセンサーモジュールなどではI2Cを使って複数のICを接続し、処理をさせることがよくあるようです。このシリーズでは、Pro Microに搭載されているI2Cポートを使ってIOエキスパンダーを動かしてみます。
第1回のこの記事では、まずPro Microをブレッドボード上で動かせるようにします。I2Cはまだ関係ないですが、今後のために重要なステップです。
なお、実験なのでブレットボード上に実装をします。

用意するパーツ

第1回で使うもののみ掲載します。まとめ買いしたい場合は他の記事も参照してください。

  • ブレッドボード(BB-801 など)x1
    • ハーフサイズを組み合わせて使う予定
  • Pro Micro + ピンヘッダ x1
    • Type-C版はもげにくいので、高いが安心。グルーガンで固定できる人や、他のPro Microが余っていればそれでもOK
    • 後述しますが、Pro Microには色々あるので注意が必要
  • リセット用スイッチx1
  • ジャンパーワイヤ x沢山
    • 何かと使うので沢山欲しい
  • Pro MicroとPCを繋ぐケーブル
    • 充電専用ケーブルだとちゃんと認識されないこともあるらしい

動作確認をするだけなので、これだけです。

ざっくりした用語 / 引用情報

  • Pro Microの種類: とにかく互換機が沢山ある。自分のPro Microがどれなのかを把握し、チップやピンアサインを知ることが大事

  • Pro Microのピン配置(ピンアサイン): Pro Microから生えているピンが何かという情報。チップ(ATmega32U4)のどの足がどこから生えているかを確認できる。これも種類によって違うので、基盤の印字などを見て同じものを探す。今回は一般的な下図のものとして進める


引用: https://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/ProMicro16MHzv1.pdf

用意するソフト

  • Arduino IDE
    • Pro Microのファームウェアを焼くための環境。これは便利

実装

1. Pro Microとピンヘッダをはんだ付けする

Pro Microをブレッドボードに挿すため、ピンヘッダをくっつけます。

どちらの面を上にするか、ピンヘッダの高さは十分か(ケーブルが挿せるか)を考える必要があります。私はとにかくもげにくくするため、ケーブル差込口を下にして固定しようとしています。しかし一般には逆っぽく、回路図では左右反転するので要注意です。


多分逆

はんだ付けは、とりあえず今回使うピンだけ行えば良いです。対象はGNDx3, 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がチカチカして分かりやすいので良いです。

Pro Micro & Fio V3 Hookup Guide - SparkFun Learn - learn.sparkfun.com

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 Leonardの場合、IDEから焼くとUSBファームウェアも一緒に焼かれるようで、これによりPCと良好なコミュニケーションが取れるようになります。もし見つからない場合、適切なボードを選んで焼いていない可能性があります。前述の記事を見つつ、Arduino Leonard以外も試してみましょう。

上手く繋がっていそうな場合、"Tools" -> "Serial Monitor" を開き、 "Hello world!" 的な文言が確認できたらOKです。プログラム中に Serial.println(…); という記述がありますが、これはArduino IDEから確認できます。つまりprintデバッグができるということです。

シリアルモニターに繋がらない、的なメッセージが出ている場合、違うPortを選んでいないか確認し、抜き差ししたりして様子見します。

この状態であれば、ブートローダーに入らなくても、アップロードボタンを押すだけでプログラムが更新できるようになります。これは便利。

まとめ

最初のセットアップ部分は詰みやすいので、ここまで無事に動いたら祝杯モノです。私もArduino Leonardのボードを選ぶことに気づかず一日溶けました。

次回は本題のI2Cに入ります。

Discussion