Sdílejte chiptron.cz na sociálních sítích



RSS feeds

STM32duino IV. - Čteme teplotu a vlhkost z Si7021 (I2C sběrnice)Tisk

Ve čtvrtém díle našeho seriálu o STM32duino se konečně podíváme na slibovanou I2C sběrnici.
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.

Upozornění

Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů.
Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.
Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva.
Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.
10,886,578 návštěv