본문 바로가기

[ST_MICRO]/STM32H7

[STM32H7 EVM] Arduino I2C - PCF8574, 거리 측정 센서 VL53L01 테스트

[STM32H7 EVM] 보드에는 SSM 모듈 연결용 커넥터가 있고 다양한 형태의 SSM 모듈을 연결해서 인터페이스 테스트가 가능하다.

 

Arduino 에서  I2C는 PB8(SCL), PB9(SDA)에 할당되어 있다.

// I2C Definitions
#define PIN_WIRE_SDA            PB9
#define PIN_WIRE_SCL            PB8

 


I2C 출력 테스트

I2C를 가장간단히 테스트 해볼수 있는 I2C 장치로 PCF8574 SSM 모듈을 사용해서 기본 출력 테스트를 해 보았다.

#include <Wire.h>


#define PCF_8574_ADDR      0x20
void write8(uint8_t Address, uint8_t Value)
{
   Wire.beginTransmission(Address);
   Wire.write(Value);
   Wire.endTransmission();
}

 

 

 

void setup() 
{
  Serial.begin(115200);
  Serial.println(F("PF8574 test"));
  
  Wire.begin();

  write8(PCF_8574_ADDR, 0xff);
}


int cnt = 0;
void loop()
{
  if(cnt>8)cnt = 0;
  write8(PCF_8574_ADDR, ~(1<<cnt++));
  delay(100);
}

 

 


STM32H7에서 Arduino의 I2C 기본 인터페이스 출력 테스트가 동작 하였으니 I2C로 입력 테스틀 해 보자

간단히 테스트 해볼 수 있는 I2C 거리 측정 센서 모듈 VL53L01 모듈을 이용하여 거리정보를 측정해 보자

 

 
 
VL53L01 용 라이브러리는 STM32duino VL53L01 를 설치 하여 테스트 했다.

 

 

VL53L01 기본 예제 코드를 수정해서 시리얼 포트로 출력하도록 했다.

#include <Wire.h>
#include <VL53L1X.h>

VL53L1X sensor;

void setup()
{
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(400000); // use 400 kHz I2C

  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1);
  }
  
  // Use long distance mode and allow up to 50000 us (50 ms) for a measurement.
  // You can change these settings to adjust the performance of the sensor, but
  // the minimum timing budget is 20 ms for short distance mode and 33 ms for
  // medium and long distance modes. See the VL53L1X datasheet for more
  // information on range and timing limits.
  sensor.setDistanceMode(VL53L1X::Long);
  sensor.setMeasurementTimingBudget(50000);

  // Start continuous readings at a rate of one measurement every 50 ms (the
  // inter-measurement period). This period should be at least as long as the
  // timing budget.
  sensor.startContinuous(50);
}

void loop()
{
  Serial.print(sensor.read());
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
}
 
 
Arduino의 시리얼 그래프로 출력해보니 VL53L01 거리값이 정상적으로 출력되는것을 확인할 수 있다.

 

반응형