TM1637でLED時計を作る ~ Raspberry Pi版

前回、TM1637を使ったLED時計Atom Liteで作成しました。

そして今回は、Raspberry Piにて作成してみました。

1.TM1637表示機とRaspberry Piの接続

TM1637には4つの端子があります。2つは電源(5V/3.3V)GNDで、残りがCLKDIO端子です。この2つをRaspberry PiGPIO端子に接続します。

CLK:GPIO21 (wiringPi 29)
DIO:GPIO20 (wiringPi 28)

ここで注意なのですが、プログラムではGPIOの番号を指定せずに、wiringPiの番号を指定することに注意してください。

2.TM1637用ライブラリ

TM1637用のライブラリは、以下のものを使わさせて頂きました。

サンプルソースも参考にさせて頂きました。

tm1637.hをプロジェクトのある階層にコピーします。

3.プログラム

Raspberry Pi用のプログラムは、フォームアプリケーションにしました。それは、画面のリスト選択で時刻や日時などを選択できるようにするためです。しかし今回は、時刻固定ですのでご了承ください。

フォームアプリケーションなので、Qtを使います。

プロジェクト

wiringPiを使うので、プロジェクトに指定します。

LIBS += -L/usr/local/lib -lwiringPi
LIBS += -L/usr/local/lib -lwiringPiDev
INCLUDEPATH += /usr/local/include

フォーム

フォームにはリストボックスを配置して、LEDに表示する項目を選択できるようにします。

しかし、今回は時刻のみの表示なので、何もしません。上記のような画面は、みなさんがそれぞれ独自に作成してみてください。

ヘッダーファイル mainwindow.h

#include <QMainWindow>
#include <signal.h>
#include <wiringPi.h>
#include <stdint.h>
#include <stdbool.h>
#include <QtGui> // ※リストボックス処理を入れる場合には必要になります

~
~
private slots:

    void update();

private:
    time_t t;
    struct tm tv;

時刻用のメンバ変数を用意するのと、イベント発生を処理するupdate関数を定義します。

ソースファイル mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QDebug>
#include "tm1637.h"

void signaux(int sigtype)
{
    TMclear();
    exit(0);
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    signal(SIGINT,signaux);
    signal(SIGTERM,signaux);
    TMsetup(29,28);
    TMsetBrightness(6);

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(10000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::update()
{
    t=time(NULL);
    localtime_r (&t,&tv);

    TMshowNumber(tv.tm_hour*100+tv.tm_min,0x40,false,4,0);
}

TM1637用ライブラリのサンプルソースコードを移植した形です。こちらはQtを使ったC++のプログラムなので、適度修正しています。表示の更新イベントをQTimerで発生させています。分単位の表示で良いので、10秒のインターバルにしています。

表示形式ですが、TM1637ライブラリの解説の通りにしてもコロン表示ができませんでした。おそらく私が間違って解釈しているのだと思いますが、Atom Liteの時と同じ0x40を指定するとコロンが表示されました。後ほど、調べてみようと思います。

4.動作結果

Raspberry PiでもTM1637表示機を使ったLED時計ができました。Raspberry Pi Zero 2が出たら、今ある2個のRaspberry Pi Zeroのひとつはお蔵入りになるので、時計にしようかとも考えています。

5.TM1637を使えば本当に簡単です

日付を表示してみました

7セグメントLEDを直接GPIOに接続してLED時計を作った時は、いろいろトラブルが発生して大変でした。それがTM1637を使えば、あっさりとLED時計が出来てしまいました。

TM1637は4桁表示ですが、これを並べて制御もできるそうです。年月日に時刻を表示するような時計を作るのも楽しそうですね。