« ESP8266とmicroSDを接続してみる | トップページ | ESP8266のArduinoのSDWebServerがうまく動かない訳 »

2015年7月 9日 (木)

ESP8266でI2Cを使ってみる

ESP8266でI2Cを使ってみる

ESP8266にはI2Cのインターフェースが付いている。 I2CはSDAとSCLの2つの信号でデータをやり取りすつ仕様となっている。

そこでリアルタイムクロックのDS1307をESP8266につなげてみた。

ESP8266
Pin
ESP8266
PinName
ESP8266
Function
DS1307
Pin
DS1307
Function
7 GPIO2 SDA 5 SDA
3 GPIO14 SCL 6 SCL

スケッチは以下のようになる

#include "Wire.h"
#define DS1307_ADDRESS 0x68

void setup(){
  Wire.begin(2, 14);
  Serial.begin(115200);
}

void loop(){
  char buf[100];
  Wire.beginTransmission(DS1307_ADDRESS);
  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int second   = Wire.read();
  int minute   = Wire.read();
  int hour     = Wire.read() & 0b111111;
  int weekDay  = Wire.read();
  int monthDay = Wire.read();
  int month    = Wire.read();
  int year     = Wire.read();
  sprintf(buf,"20%x/%x/%x %x:%x:%x %x",year,month,monthDay,hour,minute,second,weekDay);
  Serial.println(buf);
  delay(100);
}

SDAとSCLの接続しているPinを知らせるため"Wire.begin(2, 14);"でイニシャライズする。
データはBCDで来るので16進で表示すると10進として表示される。

注:DS1307のVCCは5Vなので3.3VのESP8266やSDカードとは別に5Vの電源が必要になる。

以上で、アナログ入力、SDカード アクセス、リアルタイムクロック アクセスが確認できた。ATMEG328でデータロガーを作っていて、WiFi用にESP8266を追加しようとテストしてきたが、ESP8266単体でデータロガー出来る事が判った。
ATMEGA328いらないじゃん!

*ちゃんとレベル変換しないとSDカードの動作が不安定になります。SDカードの書き込みで不安定になるとSDカードのデータを壊します。しかし、I2Cの信号は双方向なのでレベル変換も双方向にしなければならない。なので今はDS1307を外してあり、別の3.3Vの物を物色中です。(7/17追記)

« ESP8266とmicroSDを接続してみる | トップページ | ESP8266のArduinoのSDWebServerがうまく動かない訳 »

Arduino」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/569662/61859970

この記事へのトラックバック一覧です: ESP8266でI2Cを使ってみる:

« ESP8266とmicroSDを接続してみる | トップページ | ESP8266のArduinoのSDWebServerがうまく動かない訳 »