VEML7700 조도센서를 구매해 보았다.
알리에서 하나에 390엔 정도 한다.
I2C통신으로 센서값을 불러 낼 수 있다.
ESP32에서는 I2C핀 값이 정해져 있어 문제없이 사용 가능한데,
(GPIO 22 (SCL), GPIO 21 (SDA) )
ESP32-S3에서는 I2C용 핀 값이 정해져 있지 않으므로 따로 핀 값을 설정해 주어야 한다.
일단 SDA는 18번 핀에, SCL은 17번 핀에 연결했다.
ESP자체가 3.3v을 사용하므로 3.3v에 연결했다.
일단 라이브러리는 [Adafruit_VEML7700]을 사용하였다.
https://github.com/adafruit/Adafruit_VEML7700
GitHub - adafruit/Adafruit_VEML7700: Arduino library driver for Adafruit VEML7700 Lux Sensor
Arduino library driver for Adafruit VEML7700 Lux Sensor - adafruit/Adafruit_VEML7700
github.com
소스코드는 아두이노 전용이므로
이번에 사용할 보드에 맞게 I2C 핀 번호를 설정 해 주어야 한다.
측정에 사용한 샘플을 그대로 올려 놓는다.
#include <Wire.h>
#include "Adafruit_VEML7700.h"
Adafruit_VEML7700 veml = Adafruit_VEML7700();
#define SDA 18
#define SCL 17
void setup() {
Wire.setPins(SDA, SCL);
Wire.begin();
Wire.setClock(400000); // use 400 kHz I2C
Serial.begin(115200);
while (!Serial) { delay(10); }
Serial.println("Adafruit VEML7700 Test");
if (!veml.begin()) {
Serial.println("Sensor not found");
while (1);
}
Serial.println("Sensor found");
// == OPTIONAL =====
// Can set non-default gain and integration time to
// adjust for different lighting conditions.
// =================
// veml.setGain(VEML7700_GAIN_1_8);
// veml.setIntegrationTime(VEML7700_IT_100MS);
Serial.print(F("Gain: "));
switch (veml.getGain()) {
case VEML7700_GAIN_1: Serial.println("1"); break;
case VEML7700_GAIN_2: Serial.println("2"); break;
case VEML7700_GAIN_1_4: Serial.println("1/4"); break;
case VEML7700_GAIN_1_8: Serial.println("1/8"); break;
}
Serial.print(F("Integration Time (ms): "));
switch (veml.getIntegrationTime()) {
case VEML7700_IT_25MS: Serial.println("25"); break;
case VEML7700_IT_50MS: Serial.println("50"); break;
case VEML7700_IT_100MS: Serial.println("100"); break;
case VEML7700_IT_200MS: Serial.println("200"); break;
case VEML7700_IT_400MS: Serial.println("400"); break;
case VEML7700_IT_800MS: Serial.println("800"); break;
}
veml.setLowThreshold(10000);
veml.setHighThreshold(20000);
veml.interruptEnable(true);
}
void loop() {
Serial.print("raw ALS: "); Serial.println(veml.readALS());
Serial.print("raw white: "); Serial.println(veml.readWhite());
Serial.print("lux: "); Serial.println(veml.readLux());
uint16_t irq = veml.interruptStatus();
if (irq & VEML7700_INTERRUPT_LOW) {
Serial.println("** Low threshold");
}
if (irq & VEML7700_INTERRUPT_HIGH) {
Serial.println("** High threshold");
}
delay(500);
}
<추가된 부분>
소스코드 안에는 아래의 내용만 더 추가해 준 것이다.
#include <Wire.h>
#define SDA 18
#define SCL 17
Wire.setPins(SDA, SCL);
Wire.begin();
Wire.setClock(400000); // use 400 kHz I2C
위와 같이 해 주면 ESP32-S3에서도 측정값을 얻을 수 있다.
CDS센서보다는 더 정확하게 조도값을 측정할 수 있다.