PR

MCP23017を複数つなげるときのI2Cアドレスの変え方

mcp23017-i2c-address-eyecatch

 今回は、I2C通信でIO入出力、つまりON/OFFできる接点を増やすことができる、便利なアイテム「MCP23017」を複数つなげたいときのお話です。

 なんだかんだ言っても、IOエキスパンダ【MCP23017】1個で制御できる接点が16点増得るわけですが、「もうちょっと増やしたい…」なんてこともあるかもしれません。

 そんな場合、MCP23017を複数個つなげたくなることもあるでしょう。そんな時ただマイコンボードに複数個のMCP23017をつなげるだけでは正しく認識されません。ポイントとなるのはI2C接続するアドレスを個別に設定してあげることです。

 今回設定方法を完璧に理解できるように徹底解説しています。この記事だけ読んでもらえれば複数接続するのも簡単です。ぜひ最後まで読んでいってください。

この記事を読むことでわかること

MCP23017を複数つなげるときのI2Cアドレスの設定について理解できる。

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

まずはMCP23017のデータシート

MCP23017はMICROCHIP社が販売している、

正式名称 16-Bit I/O Expander with Serial Interface【日本語版:I/Oエクスパンダ】です。

データシートと呼ばれる取り扱い説明書のようなものがこちらにありますので、

MCP23017を使う場合は必ずダウンロードしておきましょう。

※日本語版ですが、注意書きで最新版は英語のほうを見てくださいと書いてありました。

http://ww1.microchip.com/downloads/jp/DeviceDoc/20001952C_JP.pdf

↓英語版

https://ww1.microchip.com/downloads/en/devicedoc/20001952c.pdf

MCP23017のアドレスの決まり方

データシートに記載されている内容を抜粋しました。

↓以下MICROCHIP社のデータシートより

3.3.1 I2Cデ バイス (MCP23017)の アドレス
指定
MCP23017 は 7 ビットのスレーブアドレス指定をサ
ポートするスレーブ I
2C インターフェイス デバイスで
す。読み出し / 書き込みビットは制御バイトに埋め込
まれます。スレーブアドレスには固定ビットが 4 ビッ
トとユーザ定義ハードウェア アドレスビットが3ビッ
ト (A2、A1、A0 の各ピン ) 含まれます。図 3-4 に制御
バイトのフォーマットを示します。

MICROCHIP社MCP23017データシートより

となっています。パット見てわかる人とわからない人がいると思うので、

いったん解説します。

ここでいうA2、A1、A0ピンというのは、ここのことです。

データシートより、ピン配置図

※切り欠きが上の状態でのピン配置です。

お手元のMCP23017をよく見て確認して下さい。

では、このピンをどうすればいいかというと、

3.3V入力=[HIGH:1]

GND=[LOW:0]

となるので、

例えばA0だけ3.3Vを入力、他のA1、A2はGNDに接続すると、

0100001となりますよね。

となると2進数から16進数に変換してあげると、

21となります。

なので、A0だけ3.3V入力するとI2Cのアドレスは21になる。という原理です。

表にしてみるとこんな感じですね。

A0 LOWorHIGHA1 LOWorHIGHA2LOWorHIGHbinhex
000010000020
100010000121
010010001022
:::::
111010011127
MCP23017の接続アドレス対応表

ってな感じなので、20~27つまり

8個MCP23017が別々のアドレスで接続できることがわかります。

実際にアドレスをRaspberryPiで確認してみる

用意したもの

  • ブレッドボード
  • RaspberryPi4B
  • MCP23017 x2
  • ジャンパーワイヤー

どれもネット通販で購入できるものですから、入手性は良好です。

一応念のためすぐに購入できるようにリンクを張っておきます。

ブレッドボード

今回使用するものは秋月のネット通販で購入したものですが、

もちろんAmazonや楽天などでも取り扱いがあります。

ただ注意点として、安すぎるブレッドボードは反りで失敗するので、

失敗したくない方は高品質に定評のあるサンハヤト製にしておきましょう。

↓したわたしが購入して失敗したブレッドボードの紹介を記事にしています。↓↓

RaspberryPi4B

RaspberryPi4Bは、標準的なThe・ラズパイと言える形の最新版です。

※最新版と言ってももう発売日が2019年なのでそこそこ時間が経っていますが…

特に何か特殊な事情がない限りこのモデルで大丈夫です。

ちなみにラズパイを購入した後にオススメするパーツ類などは

こちらの別記事で紹介しています。ぜひご覧ください。↓↓

MCP23017

こちらもブレッドボード同様秋月電子でネット通販で購入しました。

わたしが購入したときは1個140円だったかな…

ペットボトルの飲み物を1本我慢すれば購入できると思えば、

リーズナブルですね。

Amazonでも購入可能ですが、ちょっと値段が高いです。

いちおうAmazonのリンクは張っておきますので、

現在の値段もチェックしてみてください。

ぶっちゃけると秋月のほうが安いと思います…値段はご自身で確認してみてください…

ジャンパーワイヤー

MCP23017とRaspberryPiをつなぐ線がないと実験できませんから、

ジャンパーワイヤーを用意しましょう。そんなに本数はいりませんが、

ブレッドボードとセットであってもこまらない度で行くと上位に食い込むので、

ちょっと本数が少ないかな…と思ったら買い足しておきましょう。

ちなみに、ジャンパーワイヤー自体は自作が可能です。

実際にジャンパーワイヤーを自作してみた記事をこちらに上げているので、

興味があったら是非ご覧くださいね。↓↓↓

MCP23017とRaspberryPiを接続する

配線はこんな感じです。

mcp23017_breadboard
mcp23017_breadboard

注意点は3つありまして、

  • RESETピン(切り欠きを左にして上段右から4番目)にも3.3Vを供給する。
  • VDDには3.3V,VSSにはGND接続。
  • 複数のSCL,SDAはまとめて配線して大丈夫。

という感じですね。

とくにRESETピンへ3.3Vを供給し忘れないように注意です。案外忘れがち。

それから、必須ではないですが、SCLピンとSDAピンはまとめて配線可能です。

配線をスッキリさせたいならブレッドボードの±列を使用しましょう。

RaspberryPiで接続されているI2Cアドレス一覧を取得

配線図通りに配線すれば、このようにRaspberryPi上で認識されます。

一つ上のi2cdetectでアドレスが表示されていないのは、

3.3Vではなく間違えて5Vを入力していたためでした。

mcp23017 raspberrypiで認識

このアドレスの出し方ですが、

まずRaspberryPi側のI2Cを有効にして、再起動。

raspberryPiでI2Cを有効にする。その後再起動必須。

その後、

sudo i2cdetect -y 1

このように打ち込むと20と21が表示されたはずです。

原理がわかってしまえば、同じように3個目、4個目とつなげることもできますよね??

今回のまとめ

今回はMCP23017を複数つなげた時のアドレスについて解説しました。

MCP23017を1個繋げるごとに16点増えますから、

MAXつなげて16×8でGPIOが128点増えることになります。

そんなに使わないというか、使いきれないですよね….笑

ただ2,3個繋げたいことはあるかもしれないので、

アドレス設定の方法は覚えておいて損はないですね。

ちなみに、最後になりますが、今回I2Cアドレスとして紹介しましたが、

兄弟機種のMCP23S17(SPI通信)のアドレスの決め方も

データシート上まったく同じだったので、今回の設定方法がそのまま使えます。

というわけでアドレスの決め方の紹介でした。

コメント

タイトルとURLをコピーしました