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

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.

Sdílejte článek:
Komentáře:
121 komentářů na sociálních sítích
@TomasBajer Já mám páječku z tindie, která používá weller hroty a je skvělá, ale můj styl práce je více opravování než pájení a ta pinzeta se mi hodí více... a dost lituju, že jsem nepřikoupil větší hroty :-D ...více
Číst komentáře
- a -
Přidat svůj názor
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Aby mohl napsat další článek.

Související články

Nedávno jsem zakoupil čidlo CO2 fungující na fotoakustickém principu.

Arduino je velmi populární platforma s rozsáhlou komunitní podporou.

Ve třetím díle si ukážeme použití snad nejpopulárnější sběrnice – USART, v Arduino světě je nazývána jako Serial.

Vytvořil jsem si domů monitor vzduchu, který měří koncentraci CO2 pomocí čidel SCD41 a CozIR-LP a teplotu a vlhkost s SHT40.

Ve druhém díle o STM32duino si ukážeme práci s digitálními vstupy a výstupy.

O zařízení EasyTerm jsem tu už několikrát psal (tady a tady) – jednoduchý a všestranný pomocník při vývoji.