Se trata de una pequeña placa que trae el sensor de Bosch y los pines para conexion I2C y SPI. Por comodidad, y uso de pines he probado el protocolo I2C montado en una placa MiniD1. Una de las cosas poco claras es el tema del pinout, a que pins debe conectarse en la MiniD1 la señal de reloj (SCL) y la de datos (SDA), urgando un poco en la documentación del código hardware/esp8266com/esp8266/ vemos las declaraciones de pines del chip ESP8266 a la placa MiniD1:
#########################################################################
# variants/d1_mini/pins_arduino.h
#########################################################################
#define PIN_WIRE_SDA (4) // D2
#define PIN_WIRE_SCL (5) // D1
static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
static const uint8_t LED_BUILTIN = 2;
static const uint8_t BUILTIN_LED = 2;
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t RX = 3;
static const uint8_t TX = 1;
Por defecto la librería Wire de Arduino se reemplaza con la TwoWire que define begin con los pines SDA y SCL:
#########################################################################
# ~/Arduino/hardware/esp8266com/esp8266/libraries/Wire/Wire.cpp
#########################################################################
static int default_sda_pin = SDA;
static int default_scl_pin = SCL;
// Constructors ////////////////////////////////////////////////////////////////
TwoWire::TwoWire(){}
// Public Methods //////////////////////////////////////////////////////////////
void TwoWire::begin(int sda, int scl){
default_sda_pin = sda;
default_scl_pin = scl;
twi_init(sda, scl);
flush();
}
Estos por defecto están mapeados a D1 y D2 (4, 5) según la tabla de traducción anterior, en la documentación se explica más o menos:
#########################################################################
~/Arduino/hardware/esp8266com/esp8266$ vi doc/libraries.md
## I2C (Wire library)
Wire library currently supports master mode up to approximately 450KHz.
Before using I2C, pins for SDA and SCL need to be set by calling
`Wire.begin(int sda, int scl)`, i.e. `Wire.begin(0, 2)` on ESP-01,
else they default to pins 4(SDA) and 5(SCL).
#########################################################################
Para testear los dispositivos i2c hay una libreria muy interesante, que scanea las direcciones en las que se pueden encontrar https://github.com/mcauser/i2cdetect . Con un poco de código el BMP280 aparece en la posición 0x76.
#########################################################################
#include
#include
void setup() {
Wire.begin(0, 2); -> D3,D4
//Wire.begin();
Serial.begin(9600);
Serial.println("i2cdetect example\n");
Serial.print("Scanning address range 0x03-0x77\n\n");
}
void loop() {
i2cdetect(); // default range from 0x03 to 0x77
delay(2000);
}
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
############################################################################
Trás esto debemos hacer un par de cambios al código de prueba de Adafruit_BMP280:
- Antes de nada definimos los pines en los que tenemos el I2C: Wire.begin(D3,D4);
- Indicamos la dirección del I2C:
Adafruit_BMP280 bme; // I2C
bme.begin(0x76)
Ya deberíamos poder ver los resultados del sensor por el puerto serie:
Temperature = 21.09 *C
Pressure = 100162.88 Pa
Approx altitude = 97.21 m
Si queremos un ejemplo completo en: http://lazyzero.de/en/elektronik/esp8266/diy_weather/start podemos ver un sensor de humedad, temperatura y este mismo de presión con su código completo.
comentarios:
Publicar un comentario