LoginSignup
10
9

More than 1 year has passed since last update.

ESP8266 (ESP-WROOM-02) で7セグメントLEDを制御する

Last updated at Posted at 2016-01-02

概要

ESP8266(ESP-WROOM-02 以下 WROOM02) を使って、7セグメント 4ディジット のLEDを制御する。

はじめに

WROOM02 は Wi-Fi 通信機能が内蔵された Arduino (として使える IC) です。

※センサーを使うには、以下参照。
http://qiita.com/exabugs/items/9ca4093813db71278b39

今回は、7セグメント 4ディジット (5461AS カソード・コモン) の LED を制御します。

回路図

Eagle プロジェクト全体はこちらの Github にアップしています。
https://github.com/exabugs/eagle7seg4digits

実際の回路図は以下。

7seg.png

1 LED あたり 20mA 程度なので、アノード側はソースドライバを使わなくてもいけると思います。
なので、カソード側だけ、シンクドライバ(TD62083APG)を使っています。

[注意]
- WROOM02 は 3.3V 駆動です。電源回路は別途足してください。
- USB-シリアル変換 のインタフェースは、回路図から外していますので、TXD/RXD, GND に適切に接続してください。

スケッチ

スケッチは以下になります。
- 10000 からカウントダウンします。
- 1ディジットを 4msec でダイナミック点灯しています。これより長いとちらつきました。

#include "Ticker.h"

Ticker ticker;
Ticker ticker2;

#define SCK 14                // CLK       クロック信号出力ピン
#define RCK 12                // LOAD      ラッチ動作出力ピン
#define SI  13                // MOSI - DI データ信号出力ピン
#define CLR 15                // クリア

const int segments[] = {
//  HGFEDCBA
  0b00111111, // 0
  0b00000110, // 1
  0b01011011, // 2
  0b01001111, // 3
  0b01100110, // 4
  0b01101101, // 5
  0b01111101, // 6
  0b00100111, // 7
  0b01111111, // 8
  0b01101111, // 9
};

const int digits[] = {
//  HGFEDCBA
  0b00000001, // 0
  0b00000010, // 1
  0b00000100, // 2
  0b00001000, // 3
};

void out1(int x, int d) {
  digitalWrite(CLR, LOW) ; // Clear
  digitalWrite(CLR, HIGH) ;

  digitalWrite(RCK, LOW) ;
  shiftOut(SI, SCK, MSBFIRST, digits[d]);
  shiftOut(SI, SCK, MSBFIRST, segments[x]);
  digitalWrite(RCK, HIGH) ;        // ラッチ信号を出す
}

void out4(int val) {
  static int p = 0;
  p = ++p % 4;
  int x[4];
  for (int i = 0; i < 4; i++) {
    x[i] = val % 10;
    val = val / 10;
  }
  out1(x[p], p);
}

void setup() {
  Serial.begin(115200);
  Serial.print("\n");

  pinMode(SCK, OUTPUT) ;
  pinMode(RCK, OUTPUT) ;
  pinMode(SI,  OUTPUT) ;
  pinMode(CLR, OUTPUT) ;

  delay(3000) ;            // 3S後開始

  Serial.print("Start\n");

  ticker.attach_ms(1000, timer);
  ticker2.attach_ms(4, loop2);
}

int cnt = 10000;

void loop() {
}

void loop2() {
  out4(cnt);
}

void timer() {
  cnt--;
  Serial.print(cnt);
  Serial.print("\n");
}

Arduino スケッチ 全体はこちらの Github から。
https://github.com/exabugs/sketch7seg4digits

制作

実際に作ってみると、こんな感じです。

IMG_0256.JPG

まとめ

ESP8266(ESP-WROOM-02 以下 WROOM02) を使って、7セグメント 4ディジット のLEDを制御しました。
ダイナミック点灯の周期を、ちらつかせずに長くするには、何か手法がありますかね?

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9