ESP-13を使ってみる

i2cを使う


WeMosの時にも試したLM35DZ+PCF8591を使って、ESP-13(ESP-WROOM-02)でi2cを試してみます。

回路は以下のようになります。
ESP-13のパーツ図が無かったので、同じピン数の別のパーツを流用しています。


スケッチはWeMosで使ったのと全く同じで動きました。
もともとESP-12/ESP-13にはi2cのデフォルトピンが無いので、好きなピンを使うことができます。
逆に言うと、ライブラリ内部でSDAとSCLのピンを固定しているライブラリは使えないことになります。
/*
 * LM35DZ Temperature sensor using PCF8591
 * http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/pcf8591-adda-converter-arduino-tutorial-1-a-simple-analog-measurement/
 *
 * PCF8591    LM35ZD      ESP-13
 * VCC               ---- 3.3V
 * SCL               ---- IO_5
 * SDA               ---- IO_4
 * A0                ---- GND
 * A1                ---- GND
 * A2                ---- GND
 * VSS               ---- GND
 * VDD               ---- 3.3V
 * Vref              ---- 3.3V
 * AINT0  --- OUT
 *            VCC    ---- 3.3V
 *            GND    ---- GND
 */
#include "Wire.h"
#define PCF8591 (0x48) // I2C bus address

#define AIn0 0x00
#define RefV  3.28

int RawValue0 = 0;
float Voltage = 0.0;
float temp_c = 0;  // 摂氏値( ℃ )

void setup()
{
  Wire.begin(4,5); // sda=4, scl=5
  Serial.begin(9600);
}
void loop()
{
  Wire.beginTransmission(PCF8591); // Start your PCF8591
  Wire.write(AIn0); // Tell it to make an Analog Measurement
  Wire.endTransmission(); //  
  Wire.requestFrom(PCF8591, 1); // Get the Measured Data

  RawValue0=Wire.read(); // read PCF8591
//  Serial.print(" RawValue0[PCF8591] = ");
//  Serial.print(RawValue0);
  Voltage = (RawValue0 * RefV )/ 255.0;
  temp_c = Voltage * 100;
  Serial.print(" Voltage[PCF8591] = ");
  Serial.print(Voltage);
  Serial.print(" temp_c[PCF8591] = ");
  Serial.println(temp_c);
  delay(500);

次回はDeepSleepタイマーの精度を紹介します。