ESP32で照度センサTSL25721を使ってみた

ESP32で照度センサTSL25721を使ってみた
ESP32で照度センサTSL25721を使ってみた

ESP32で照度センサTSL25721を使ってみました。TSL25721チップ搭載の照度センサは、人間の感覚に近いルクス(Lux)を測定できます。センサはI2C接続となっており、秋月電子通商さんからライブラリが配布されてますのでそれを使えば簡単です。

つかうもの

この記事でつかうものをご紹介いたします。

照度センサ TSL25721

TSL25721を使用した照度センサを、秋月電子通商さんから購入しました。ピンは各自でハンダ付する必要があります。

TSL25721使用 照度センサーモジュール: センサ一般 秋月電子通商-電子部品・ネット通販

スペック・主な仕様

項目
電源電圧2.4-5.0V
ダイナミックレンジ8M:1
最大照度60000Lx
通信方式I2C(スレーブアドレス0x39)
通信速度400kHz(最大)
基板寸法19.0mm×9.5mm

ESP32

WayinTopさんから販売されているESP32を使用しました。技適マークも刻印されてますので、安心して国内で使えます。GPIOの役割図は 商品ページ に詳しく掲載されてます。

▼ WiFiやBluetooth接続が必要なければ、他のArduinoでも構いません。こちらの記事で色々な種類のArduinoをご紹介してます。

その他

また、ブレッドボードやジャンプワイヤもあると便利です。

ライブラリのインストール

秋月電子通商さんの下記ページ「サンプルソース」から、ライブラリとサンプルプログラムをダウンロードできます。 TSL25721使用 照度センサーモジュール: センサ一般 秋月電子通商-電子部品・ネット通販

私はPlatformIOでArduino開発してますので、次のようなディレクトリ構造で配置しました。

.
├── include
│   └── README
├── lib
│   ├── AE_TSL2572
│   │   ├── AE_TSL2572.cpp
│   │   ├── AE_TSL2572.h
│   │   └── examples
│   │       └── demo
│   │           └── demo.ino
│   └── README
├── platformio.ini
├── src
│   └── main.cpp
└── test
    └── README

TSL25721とESP32を使って照度(Lux)を測る

それではTSL25721とESP32を使って、照度(Lux)を測る例をご紹介いたします。

TSL25721とESP32の配線

TSL25721とESP32は下図のように配線しました。Arduinoの場合は、TSL25721のジャンパピン(J1)をハンダ付してショートさせ、5Vにプルアップさせて使うようですが、ESP32ではプルアップの必要はありませんでした。I2Cに使うGPIO21(SDA)、GPIO22(SCL)は通常内蔵でプルアップされます。

TSL25721とESP32の配線図
TSL25721とESP32の配線図

AE-TSL2572ESP32
Vin3V3
GNDGND
3V33V3
SCLIO22
SDAIO21

実際の配線は写真のようになりました。

実際の配線の様子
実際の配線の様子

デモプログラム(ソースコード)

照度(Lux)をシリアルモニタに表示させるプログラムです。サンプルプログラムを元に、ESP32用に少し改変してあります。いとも簡単に照度を取得できてしまいました。

demo.ino
/**
 * @date 2022-11-23
 * @author Toshihiko Arai
 * @copyright https://101010.fun
*/
#include <Arduino.h>
#include <Wire.h>
#include "AE_TSL2572.h"

/**
 * @brief AE-TSL2572 <-> ESP32 配線
 *        Vin    <->    3V3
 *        GND    <->    GND
 *        3V3    <->    3V3
 *        SCL    <->    IO22
 *        SDA    <->    IO21
*/
AE_TSL2572 TSL2572;

/**
 * @brief ゲイン 0~5 (x0.167 , x1.0 , x1.33 , x8 , x16 , x120)
*/
byte gain_step = 1;

/**
 * @brief 積分時間のカウンタ(0xFFから減るごとに+2.73ms)
 *        0xFF:  1サイクル(約 2.73ms)
 *        0xDB: 37サイクル(約  101ms)
 *        0xC0: 64サイクル(約  175ms)
 *        0x00:256サイクル(約  699ms)
*/
byte atime_cnt = 0xC0;

void setup() {
    Serial.begin(115200);

    Wire.begin();
    if (TSL2572.CheckID()) {        
        TSL2572.SetGain(gain_step);
        TSL2572.SetIntegralTime(atime_cnt);
        TSL2572.Reset(); // 計測開始
        delay(100);
    } else {
        Serial.println("Failed TSL2572 connection !");
        while (1) {
        }
    }
}

void loop() {
    int lux = TSL2572.GetLux16();
    Serial.println(lux); // 照度 [lx]

    TSL2572.SetGainAuto(); // 自動ゲイン調整

    delay(500);
}

晴天時の太陽光は100,000[lx]にもなるそうです。室内だと1000[lx]以下でしょうか。ルクスはルーメンとは違い、光源そのものの明るさを測るものではありません。光源から出た光が、直接または壁などに反射して対象物に届いた明るさを数値化したものです。ですから、光源をセンサに近づければルクスの値は高くなります。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

スマート農業(スマートアグリ)で使えるセンサー
水耕栽培はじめよう!
関連記事