はじめに
前回の記事でATtiny85の開発環境の準備が整ったと思います(私くろべこはブートローダーの書き込みを誤り1個ダメにしてしまったとは言えないですが。ヒューズビットのリセット回路を作るしかないのか、、、)。
気を取り直して今回は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)に変わったくらいですね。
動作確認
1.準備
違いも分かったことなので実際に使用してみたいと思います。今回のサンプルコードとして使用するI2CデバイスはBME280(温度・湿度・気圧)です。
このデバイスのチップIDを読み取ってみたいと思います。データシートからBME280のチップIDのレジスタと格納されているIDは以下の通りです。
- チップIDレジスタ:D0h
- チップID:60h
チップIDの確認のためのシリアル通信はATtiny13の時に使用したのと同じく【BasicSerial3.h】を使用します。
2.サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <BasicSerial3.h> #include <TinyWireM.h> #include <USI_TWI_Master.h> #define ADDRESS 0x76 //BME280アドレスGND接続 uint8_t BME280ID; void setup() { TinyWireM.begin(); TinyWireM.beginTransmission(ADDRESS); TinyWireM.send(0xD0); TinyWireM.endTransmission(); TinyWireM.requestFrom(ADDRESS,1); BME280ID = TinyWireM.read(); serOutHex(BME280ID); } // 整数を16進数で出力 void serOutHex(uint16_t h) { uint8_t c; for (int8_t i=12; i>=0; i-=4) { c = h>>i & 0xf; c = c >9 ? c+'A'-10: c+'0'; TxByte ((uint8_t)c); } } void loop() { } |
■結果
出来ましたね、OKです。
という事でATtiny85での開発がまた捗りそうです。
めでたしめでたし。
おわりに
今回はATtiny85でのI2Cを使用するためにTinyWireM.hというライブラリを使用しました。結果的にWire.hと同じような使い方が出来るとわかりましたね。
という事はWire.hを使用しているI2Cデバイスのライブラリをちょちょっと書き換えればTinyWireMでも動くように改造できそうですね。どこかで試してみたいと思います。
では今回はこんなところで失礼します。
ではでは~
参考と購入部品
【参考】
【購入品】BasicSerial用NPNトランジスタ, I2CタイプBME280
コメント