6桁の7セグLEDを買ってESP32で制御した。
子供のころTK-85を買って最初のやったのは、8255Aをつけて7セグLEDの制御だった。LEDがコロコロわかるだけで満足していた。これも衝動買いしてしまったけど、4桁の7セグのが一般的に利用されているようで6桁はあまり使われていないようだ。6桁に対応したライブラリーを使わないと正常に表示できなくて、時計を作ってみたけどちょっとハマった。
7セグLEDが変わっていく様は、やはりレトロ感があって風情があるねえ。今どき、7セグLEDの時計なんてないからねえ。ライブラリはーTM1637TinyDisplayを使った。TM1637_RTを最初選んだけど、時計表示の関数があったけど、4桁表示でなんかバグがありそうな感じで、TM1637TinyDisplayがちゃんと動いてくれた。
今回のスケッチは、下記の通りだ。GPIOの22にDIO,GPIO21にCLKを接続した。
#include <Arduino.h>
#include <TM1637TinyDisplay6.h>
#include <WiFi.h>
#include <time.h>
#define SSID "XXXXXXXX" // 無線LANアクセスポイントのSSID
#define PASS "XXXXXXXXXXXXXXXX" // 無線LANアクセスポイントのパスワード
// Module connection pins (Digital Pins)
#define CLK 21
#define DIO 22
TM1637TinyDisplay6 display(CLK, DIO); // 6-Digit Display Class
// time
struct tm timeInfo;
void setup() {
Serial.begin(115200);
while (!Serial);
display.begin();
display.clear();
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 * 10000 + timeInfo.tm_min*100+timeInfo.tm_sec;
if ( cFLG == true ) display.showNumberDec(ntime, 0x50, true);
if ( cFLG == false ) display.showNumberDec(ntime, 0x50, 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");
}
(Visited 1 times, 1 visits today)
最近のコメント