GROVE 4桁7セグメント赤色LEDモジュール

Arduino

seeed社のGrove 7セグメント4桁ディスプレイを、ESP32で動かしてみました。このモジュールは、電源を含め4本のラインで動作できるので、簡単に使うことができると思います。
Arduinoでも同様に使えます。
参考になれば幸いです。

Grove 7セグメント4桁ディスプレイは、Amazon、秋月電子通商、スイッチサイエンスなどで購入できます。
Amazon:https://amzn.to/3kjcG81
秋月電子通商:https://akizukidenshi.com/catalog/g/gM-09162/
スイッチサイエンス:https://www.switch-science.com/products/1175

7セグメント4桁の表示部(横:30mm、縦:14mmくらい)をTM1637で駆動しています。中央にコロンがあるので、時計表示などに向いているかと思います。小数点の表示はありませんが、温度、湿度、気圧などのセンサーから得られる値を表示しても良いと思います。

ここでは、ESP32のWiFi機能を使い、ネット経由で時刻を合わせ、表示するプログラムを紹介します。

まず、ドライバにTM1637を使っているので、これを扱うためのライブラリをインストールします。
ArduinoIDEの「スケッチ」-「ライブラリをインクルード」-「ライブラリを管理…」を選択し、ライブラリマネージャを開きます。

TM1637用のライブラリはいくつかありますが、今回は「Avishay Orpaz」のTM1637を使いました。

ESP32との接続は、以下のとおりです。ESP32の機能に適さないピン以外は、どのピンに接続しても良いみたいです。プログラム中、10行目、11行目でCLKとDIOの接続ピンを宣言し、12行目で設定しています。

#define CLK 18
#define DIO 19
TM1637Display display(CLK, DIO);
ESP32 pin4桁7セグLED
3V3VCC
GNDGND
18CLK
19DIO

6行目、7行目のSSID、PASSは、ご使用のWiFiルーターのものを設定してください。

37行目の「setBrightness(0x0f)」の値は、LEDの明るさを指定します。0x01、0x03、0x07、0x0fなどで明るさの変化を確認しました。数値が小さくなると暗くなります。お好みで設定してください。

40行目、41行目の「showNumberDecEx(ntime, 0x40, true)」は、LEDに値を表示する関数です。1番目の引数ntimeは表示したい値(10進)を指定します。2番目の引数は小数点の位置を指定しますが、このモジュールはコロンが中央にあるだけなので、表示する場合は「0x40」を、表示しない場合は「0x00」を指定します。プログラムでは変数「cFLG」を使って、1秒毎に点滅するようにしています。3番目の引数は、上位桁に”0″を表示するか否かの指定です。「true」で表示、「false」で非表示です。

#include <Arduino.h>
#include <TM1637Display.h>
#include <WiFi.h>
#include <time.h>

#define SSID "*************"   // 無線LANアクセスポイントのSSID
#define PASS "*************"   // 無線LANアクセスポイントのパスワード

// Module connection pins (Digital Pins)
#define CLK 18
#define DIO 19
TM1637Display display(CLK, DIO);

// time
struct tm timeInfo;

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

  wifi_connect();
  configTime(9 * 3600L, 0, "ntp.nict.jp", "time.google.com", "ntp.jst.mfeed.ad.jp");
  delay(1000);
  getLocalTime(&timeInfo);
  delay(1000);
}

void loop() {
  unsigned int ntime;
  unsigned long wtime;
  bool FLG;
  bool cFLG;

  wtime = millis();
  cFLG = true;
  display.setBrightness(0x0f);
  while (1) {
    getLocalTime(&timeInfo);
    ntime = timeInfo.tm_hour * 100 + timeInfo.tm_min;
    if ( cFLG == true ) display.showNumberDecEx(ntime, 0x40, true);
    if ( cFLG == false ) display.showNumberDecEx(ntime, 0x0, true);
    FLG = true;
    if ( cFLG == true ) cFLG = false;
    else cFLG = true;
    while (FLG) {
      if ( millis() - wtime >= 1000 ) {
        wtime = millis();
        FLG = false;
      }
    }
  }
}

// WiFi接続
void wifi_connect() {
  int icount;
  bool  FLG;

  icount = 0;
  FLG = true;

  WiFi.mode(WIFI_STA);                       // 無線LANをSTAモードに設定
  WiFi.begin(SSID, PASS);                    // 無線LANアクセスポイント(SSID)へ接続
  Serial.print(SSID);
  Serial.print(" ");
  while (WiFi.status() != WL_CONNECTED) {    // 接続に成功するまで待つ
    Serial.print(".");
    delay(500);                               // 待ち時間処理
    icount++;
    if ( icount > 20 ) {                      // 20回トライしても接続できなかった場合タイムアウト(500ms×50)とします
      ESP.restart();
      break;
    }
  }
  Serial.println(" ");
  Serial.print("Connect Internet. IP Address:");
  Serial.println(WiFi.localIP());             // 本機のIPアドレスをシリアル表示
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

簡単なコードで4桁の7セグメントLEDを操作することが出来ました。時計表示、センサー値の表示など、色々使えると思います。

ご不明な点などありましたら、メールフォームからお問い合わせください。

コメント

PAGE TOP