【ATtiny85】TinyWireM.hでのI2C使用方法とWire.hとの違いまとめ

ATtiny85

はじめに

前回の記事でATtiny85の開発環境の準備が整ったと思います(私くろべこはブートローダーの書き込みを誤り1個ダメにしてしまったとは言えないですが。ヒューズビットのリセット回路を作るしかないのか、、、)。

【ATtiny85】Arduino_IDE配下で開発を行う準備
ATtiny85をArduino_IDEで開発を行う準備記事になります。先に言っておきますがブートローダー書き込みのクロックを"enternal"で行わないこと。絶対だぞ!(注)振りではありません。

気を取り直して今回はATtiny85でTinyWireM.hを使用したI2Cの使い方とArduino標準ライブラリであるWire.hとの違いを取り上げていこうと思います。

そもそもなのですがATtiny85ではWire.hを使用することが出来ません。そこで、ATtiny85でも使用できるTinyWireM.hを使用する必要があります。基本的な関数はWire.hと変わらないのでWire.hを使用したことのある方なら抵抗なく使用できると思います。

TinyWireM.hとWire.hの違いについて

Wireライブラリとの使用できる主要関数の違いをまとめてみました。

Wire.h TinyWireM.h 機能
begin(adress) 同左 7bitのスレーブアドレスかブランクの場合はマスターとして接続
requestFrom(address, quantitiy, stop) 同左 スレーブアドレス(7bit)に対してquantitiyで要求したバイト数分データを要求する。読み取りはreadで行う。Stopは省略可。
beginTransmission(address) 同左 スレーブに対する書き込み準備。7bitのスレーブアドレスを指定する。
endTransmission() 同左 スレーブに対する書き込みを完了する。
write(value) send(value) マスタからスレーブに対してデータを書き込むときに使用。
available() 同左 requestFromで要求したデータ量に対してreadで読み取れる量を返す。beginTransmissionとendTransmissionの間で使用。
read() 同左 requestFromで要求に対してデータを読み込むときに使用。

ご覧の通り、ほぼほぼ使用できる関数は同じです。唯一write(value)がsend(value)に変わったくらいですね。

POINTTinyWireM.hを使用するときはWire.hのwriteをsendに書き換えれば他の関数は同じ

動作確認

1.準備

違いも分かったことなので実際に使用してみたいと思います。今回のサンプルコードとして使用するI2CデバイスはBME280(温度・湿度・気圧)です。

このデバイスのチップIDを読み取ってみたいと思います。データシートからBME280のチップIDのレジスタと格納されているIDは以下の通りです。

  • チップIDレジスタ:D0h
  • チップID:60h

チップIDの確認のためのシリアル通信はATtiny13の時に使用したのと同じく【BasicSerial3.h】を使用します。

デバックに便利ATtiny13でシリアル通信をやるよ!【前編】
ATtinyでのシリアル通信方法をアプリダウンロードから外部回路構成、ライブラリ導入、サンプルプログラム導入、デモまでまるっと解説を行っております。参考になれば幸いです。

2.サンプルコード

■結果

出来ましたね、OKです。

という事でATtiny85での開発がまた捗りそうです。

めでたしめでたし。

おわりに

今回はATtiny85でのI2Cを使用するためにTinyWireM.hというライブラリを使用しました。結果的にWire.hと同じような使い方が出来るとわかりましたね。

という事はWire.hを使用しているI2Cデバイスのライブラリをちょちょっと書き換えればTinyWireMでも動くように改造できそうですね。どこかで試してみたいと思います。

では今回はこんなところで失礼します。

ではでは~

参考と購入部品

【参考】

BME280日本語データシート

【購入品】BasicSerial用NPNトランジスタ, I2CタイプBME280

 

 

コメント

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