LoLin NodeMCUを使ってみる

GPIO機能


ここからはNodeMCUのGPIO機能を紹介します。
まず、入手して初めて分かったのですが、ブレッドボード上で組むときはボードが2つ必要になります。
WeMosは以下のようにぎりぎり上下に1ピンの隙間ができますが、LoLinのNodeMCUは基盤の幅が広いので、
上下に隙間ができません。


このように2枚のブレッドボードが必要になります。これ、結構イタイです。


結局ブレッドボードを3枚も使ってしまいました。→こちらで専用のBaseを紹介してい ます。


気になっていたSPI専用のピンが使えるのかどうか試してみました。
MCP3002+PCF8591+LM35DZの組み合わせでアナログ温度を読んでみます。
スケッチはこちらで紹介しているものをそのまま使います。
テスターで3.3V出力ピンを測ったら3.257Vだったので、これをリファレンスとしています。

/*
 * LM35DZ Temperature sensor using PCF8591/MCP3002
 * http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/pcf8591-adda-converter-arduino-tutorial-1-a-simple-analog-measurement/
 *
 * MPC3002     LM35ZD     NodeMCU
 * VCC               ---- 3.3V
 * CLK               ---- D5(SCK)
 * Dout              ---- D6(MISO)
 * Din               ---- D7(MOSI)
 * CS                ---- D8(CS)
 * CH0    --- OUT
 *            VCC    ---- 3.3V
 *            GND    ---- GND
 *           
 * PCF8591     LM35ZD     NodeMCU
 * VCC               ---- 3.3V
 * SCL               ---- D1(SCL)
 * SDA               ---- D2(SDA)
 * A0                ---- GND
 * A1                ---- GND
 * A2                ---- GND
 * VSS               ---- GND
 * VDD               ---- 3.3V
 * Vref              ---- 3.3V
 * AINT0  --- OUT
 *            VCC    ---- 3,3V
 *            GND    ---- GND
 */
#include <Ticker.h>
#include <MCP3002.h>
#include <SPI.h>
#include "Wire.h"

#define PCF8591 (0x48) // I2C bus address
#define AIn0 0x00
#define RefV  3.257

MCP3002 adc(15); // CS=15

Ticker ticker1;
Ticker ticker2;

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

void pcf8591() {
//  Serial.print("pcd8591 : ");
//  Serial.println(millis());
  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(); // PCF8591
  Voltage = (RawValue0 * RefV )/ 255.0;
  temp_c_pcf = Voltage * 100;
}

void mcp3002() {
//  Serial.print("mcp3002 : ");
//  Serial.println(millis());
  RawValue0=adc.analogRead(0); // MCP3002
  Voltage = (RawValue0 * RefV )/ 1023.0;
  temp_c_mcp = Voltage * 100;
}


void setup()
{
  Wire.begin(4,5); // sda=4, scl=5
  adc.begin();
  Serial.begin(9600);

  ticker1.attach_ms(1000, mcp3002);
  ticker2.attach_ms(1000, pcf8591);

}
void loop()
{
  Serial.print(" temp_c[PCF8591] = ");
  Serial.print(temp_c_pcf);

  Serial.print(" temp_c[MCP3002] = ");
  Serial.println(temp_c_mcp);

  delay(500);
 
}

最初は確認のためにWeMosと同じ、以下のピン配置で試してみました。



正しく温度が取れています。


次にSPIピンをSDD1 SDCMD SDD0 SDCLKに変更します。


ダメですね....


その後、いろいろ調べてみました。
ESP-12E/ESP-12Fで追加されたSDD3 SDD2 SDD1 SDCMD SDD0 SDCLK の6ピンはSDIOピンと呼ぶそうです。
SDIOピンはESP8266とSPI FlashのIOに使われ、普通のGPIOとしては使えません。

こちらに ESP-12のSDIOピンとRaspberryのGPIOをつなげて、ESP-12をRaspberryのWifiモジュールとして使 う方法が紹介されています。
こちらで紹介しています。

次回はAmicaのNodeMcuを紹介します。