STM32duino IV. - Čteme teplotu a vlhkost z Si7021 (I2C sběrnice)
- April 27 2018
- STM32duino
- 2983x Přečteno
Ukážeme si výchozí I2C sběrnici a také připojení SDA,SCL na jiné GPIO.
Upozornění. I2C na STM32 (G071) bylo testováno 12.6.2023 s dalšími senzory jako SHT40 (adafruit knihovna), BMP180 (Adafruit knihovna), SCD41 (Sensirion knihovna) a OLED s SSD1306 (Adafruit knihovna).
Všechny díly seriálu o STM32duino:
STM32duino I. - Jak začít s STM32 jako Arduino
STM32duino II. - Ovládáme GPIO
STM32duino III. - Komunikujeme pomocí Serial (USART)
STM32duino IV. - Čteme teplotu a vlhkost z Si7021 (I2C sběrnice)
Mikrokontroléry STM32 mohou obsahovat více I2C sběrnic.
Velmi důležitým dokumentem bude opět tento soubor popisující zapojení Nucleo vývojových desek.
http://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf
Knihovna pro ovládání čidla Si7021 je tato:
https://github.com/LowPowerLab/SI7021
Zapojení I2C pro vaší Nucleo vývojovou desku s STM32 najdete níže.
Je to výřez ze soubotu PeripheralPins.cpp.
Základní zapojení je následující. SDA je připojeno na PB9 (D14), SCL na PB8 (D15). Alternativní zapojení je pak SCL-PB6 (D10) a SDA-PB7.
I2C1 sběrnice na výchozích pinech:
Celý kód naleznete zde.
#include
#include
SI7021 sensor;
// the setup function runs once when you press reset or power the board
void setup()
{
sensor.begin(); // initialization of Si7021 sensor
Serial.begin(9600); // initialization of Serial (STLink), 9600 Bd
// wait for serial
while (!Serial) {
delay(100);
}
Serial.println("Test of Si7021");
if (!sensor.begin())
{
Serial.println("Si7021 sensor wasn't found");
while (true);
}
}
// the loop function runs over and over again forever
void loop()
{
// send data through onboard USB-UART converter (STLink)
Serial.print("Temperature: ");
Serial.print(String(sensor.getCelsiusHundredths()/100.0, 2*/)); // 2450 = 24.50 °C
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(sensor.getHumidityPercent());
Serial.println(" %");
delay(1000);
}
I2C1 sběrnice na alternativních pinech:
Celý kód naleznete zde.
Důležitou změnou jsou funkce Wire.setSCL(PB6) a Wire.setSDA(PB7) definující změnu zapojení.
#include
#include
SI7021 sensor;
// the setup function runs once when you press reset or power the board
void setup()
{
Wire.setSCL(PB6); // alternative pinout of I2C1_SCL - PB6 (Morpho con) instead of PB8 (D15)
Wire.setSDA(PB7); // alternative pinout of I2C1_SDA - PB7 (D10) instead of PB9 (D14)
sensor.begin(); // initialization of Si7021 sensor
Serial.begin(9600); // initialization of Serial (STLink), 9600 Bd
// wait for serial
while (!Serial)
{
delay(100);
}
Serial.println("Test of Si7021 and STM32duino");
if (!sensor.begin())
{
Serial.println("Si7021 sensor wasn't found");
while (true);
}
}
// the loop function runs over and over again forever
void loop()
{
// send data through onboard USB-UART converter (STLink)
Serial.print("Temperature: ");
Serial.print(String(sensor.getCelsiusHundredths()/100.0, 2)); // 2450 = 24.50 °C
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(sensor.getHumidityPercent());
Serial.println(" %");
delay(1000);
}
I2C2 sběrnice a výchozích pinech
Celý kód naleznete zde.
Stejně jako při použití alternativního zapojení I2C1 sběrnice, důležité jsou funkce setSDA a setSCL.
Správnou volbou GPIO se automaticky nastaví jiná I2C sběrnice.
V tomto případě SCL-PB10 (D6) a SDA-PB3 (D3). Automaticky se tedy vybere I2C2 jako hlavní I2C sběrnice.
#include
#include
SI7021 sensor;
// the setup function runs once when you press reset or power the board
void setup()
{
Wire.setSCL(PB_6); // alternative pinout of I2C1_SCL - PB6 (Morpho con) instead of PB8 (D15)
Wire.setSDA(PB_7); // alternative pinout of I2C1_SDA - PB7 (D10) instead of PB9 (D14)
sensor.begin(); // initialization of Si7021 sensor
Serial.begin(9600); // initialization of Serial (STLink), 9600 Bd
// wait for serial
while (!Serial)
{
delay(100);
}
Serial.println("Test of Si7021 and STM32duino");
if (!sensor.begin())
{
Serial.println("Si7021 sensor wasn't found");
while (true);
}
}
// the loop function runs over and over again forever
void loop()
{
// send data through onboard USB-UART converter (STLink)
Serial.print("Temperature: ");
Serial.print(String(sensor.getCelsiusHundredths()/100.0, 2)); // 2450 = 24.50 °C
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(sensor.getHumidityPercent());
Serial.println(" %");
delay(1000);
}
Pro I2C sběrnice číslo 3 pak platí podobné jako u předchozích příkladech.
A to je v tomto díle o STM32duino vše. Pokud se vám díl líbil, budu rád, když jej budete sdílet s hastagem #STM32duino.