◆aitendo 2025福箱に入っていた「学習シールド [GK-SLD1]」を「ESP32でいいの」に
載せて使ってみた。
1.aitendo 学習シールド [GK-SLD1]のURL
①ピン配置
(「ESP32でいいの」でIO0に接続されている為、赤〇のピンをカットしないと
書き込みが出来ません。)
書き込みが出来ません。)

②回路図

➂「ESP32でいいの」と「学習シールド」とのピン対応

2.参考サイト
3.(参考)7セグLEDを使った時計/カレンダ-表示スケッチを下記に示します。
①Multi-function Shield用のライブラリは、ESP32に対応していなかったのでライブラリを
参考に独自に表示ルーチンを作成しました。
②スケッチ概要
1.7セグLEDをダイナミック表示させるため別タスクで常時実行
2.時計を6秒、カレンダーの西暦年を2秒、月日を2秒繰り返し表示
3.時計表示時、時分間のドットと4つのLEDを0.5秒間隔で点滅表示
4.時刻は、WiFiを使いNTPに接続して取得
➂実行様子
④スケッチ
//ESP32-clock.ino
//V2025/01/31
//blog URL:https://gijin77.blog.jp/archives/43583194.html
#include <WiFi.h>
#include <time.h>
#define BLED 2 //ESP32でいいの
#define ON 1
#define OFF 0
#define LED_1_PIN 18 //13
#define LED_2_PIN 19 //12
#define LED_3_PIN 23 //11
#define LED_4_PIN 5 //10
#define POT_PIN 3 //0
#define BEEPER_PIN 25 //3
#define LATCH_PIN 17 //4
#define CLK_PIN 14 //7
#define DATA_PIN 12 //8
//***************************************************************************
const char *ssid = "IO_Net_2G"; //put your Wi-Fi SSID
const char *password = "1234567890"; //put your Wi-Fi password
const char *timeZone = "JST-9";
const char *server = "pool.ntp.org"; //"ntp.nc.u-tokyo.ac.jp"
char week[7][4]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
struct tm localTime;
int hour = 0;
int minute = 0;
int second = 0;
int day = 0;
int mon = 0;
int year = 0;
int wday = 0;
int bday = 0;
int colon= 0;
unsigned long ps_Time = 0;
unsigned long co_Time = 0;
byte data7[]={0x7F,0xF8,0xF8,0xF8,0xF8};
const byte LED[] = {LED_1_PIN, LED_2_PIN, LED_3_PIN, LED_4_PIN};
// Segment byte maps for numbers 0 to 9
const byte SEGMENT_MAP_DIGIT[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
// Segment byte maps for alpha a-z
const byte SEGMENT_MAP_ALPHA[] = {136, 131, 167, 161, 134, 142, 144, 139 ,207, 241, 182, 199, 182, 171, 163, 140, 152, 175, 146, 135, 227, 182, 182, 182, 145, 182};
// Byte maps to select digit 1 to 4
const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8};
//7seg4桁ダイナミック表示処理
void Disp7seg_Task(void *parameter) {
while (1) {
for(int seg=0;seg<4;seg++) {
delay(1);
WriteValueToSegment(seg,data7[seg]);
}
}
}
//**********************************************
void setup(){
Serial.begin(115200);
delay(2000);
Serial.println();
Serial.println("<Program Start>");
pinMode(BLED, OUTPUT);
digitalWrite(BLED, HIGH);
initShield();
initialize(); //WiFi接続
xTaskCreatePinnedToCore(Disp7seg_Task, "Disp7seg_Task", 4096, NULL, 1, NULL, 0);
delay(3000);
}
void loop() {
get_time(); //1秒毎に時刻取得
update_clock(); //時計表示の更新
if ((second%10)>6) {
update_calendar();//カレンダー表示の更新
}
}
//**********************************************
void get_time() { //1秒毎に時刻取得
if (millis() - ps_Time > 1000) {
if (getLocalTime(&localTime)) {
hour = localTime.tm_hour;
minute = localTime.tm_min;
second = localTime.tm_sec;
day = localTime.tm_mday;
mon = localTime.tm_mon+1;
year = localTime.tm_year+1900;
wday = localTime.tm_wday;
//Serial.printf("%04d/%02d/%02d(%s) %02d:%02d:%02d \n", year,mon,day,week[wday],hour,minute,second);
} else {
Serial.println("時間を取得できませんでした。");
}
ps_Time = millis();
}
if (millis() - co_Time > 500) {
colon=!colon;
int on;
if (colon) { on=LOW; } else { on=HIGH; }
writeLed(0,on);writeLed(2,on);
writeLed(1,!on);writeLed(3,!on);
co_Time = millis();
}
}
void update_clock() { //時計表示の更新
int h1,h0,m1,m0,s1,s0;
h1=hour/10; h0=hour%10;
m1=minute/10; m0=minute%10;
// s1=second/10; s0=second%10;
data7[0]=SEGMENT_MAP_DIGIT[h1];
if (colon) {data7[1]=SEGMENT_MAP_DIGIT[h0]&0x7F;} //ドット追加
else {data7[1]=SEGMENT_MAP_DIGIT[h0];}
data7[2]=SEGMENT_MAP_DIGIT[m1];
data7[3]=SEGMENT_MAP_DIGIT[m0];
}
void update_calendar() { //カレンダー表示の更新
int y3,y2,y1,y0,m1,m0,d1,d0;
y3=year/1000; y2=(year % 1000) / 100;
y1=(year % 100) / 10; y0=year%10;
m1=mon/10; m0=mon%10;
d1=day/10; d0=day%10;
for(int n=0;n<4;n++) {writeLed(n,HIGH);}
data7[0]=SEGMENT_MAP_DIGIT[y3];
data7[1]=SEGMENT_MAP_DIGIT[y2];
data7[2]=SEGMENT_MAP_DIGIT[y1];
data7[3]=SEGMENT_MAP_DIGIT[y0];
delay(2000);
data7[0]=SEGMENT_MAP_DIGIT[m1];
data7[1]=SEGMENT_MAP_DIGIT[m0]&0x7F; //ドット追加
data7[2]=SEGMENT_MAP_DIGIT[d1];
data7[3]=SEGMENT_MAP_DIGIT[d0];
delay(2000);
}
void initShield() { //各ポートを初期設定
pinMode(LED[0], OUTPUT);digitalWrite(LED[0], HIGH); //LED消灯
pinMode(LED[1], OUTPUT);digitalWrite(LED[1], HIGH);
pinMode(LED[2], OUTPUT);digitalWrite(LED[2], HIGH);
pinMode(LED[3], OUTPUT);digitalWrite(LED[3], HIGH);
pinMode(LATCH_PIN,OUTPUT);digitalWrite(LATCH_PIN, LOW);
pinMode(CLK_PIN ,OUTPUT);digitalWrite(CLK_PIN , LOW);
pinMode(DATA_PIN ,OUTPUT);digitalWrite(DATA_PIN , LOW);
pinMode(BEEPER_PIN,OUTPUT);digitalWrite(BEEPER_PIN, HIGH);
}
byte AsciiToSegmentValue (byte ascii) { //アスキー文字を表示データへ変換
byte segmentValue = 0xB6; //182;
if (ascii >= '0' && ascii <= '9') {
segmentValue = SEGMENT_MAP_DIGIT[ascii - '0'];
} else if (ascii >= 'a' && ascii <='z') {
segmentValue = SEGMENT_MAP_ALPHA[ascii - 'a'];
} else if (ascii >= 'A' && ascii <='Z') {
segmentValue = SEGMENT_MAP_ALPHA[ascii - 'A'];
} else {
switch (ascii) {
case '-':
segmentValue = 0xBF; //191;
break;
case '.':
segmentValue = 0x7F; //127;
break;
case '_':
segmentValue = 0xF7; //247;
break;
case ' ':
segmentValue = 0xFF; //255;
break;
}
}
return segmentValue;
}
void WriteValueToSegment(byte Segment, byte Value) { //各セグメントに表示
digitalWrite(LATCH_PIN, LOW);
for (uint8_t i = 0; i < 8; i++) {
digitalWrite(DATA_PIN , !!(Value & (1 << (7 - i))));
digitalWrite(CLK_PIN , HIGH);
digitalWrite(CLK_PIN , LOW);
}
for (uint8_t i = 0; i < 8; i++) {
digitalWrite(DATA_PIN ,!!(SEGMENT_SELECT[Segment] & (1 << (7 - i))));
digitalWrite(CLK_PIN , HIGH);
digitalWrite(CLK_PIN , LOW);
}
digitalWrite(LATCH_PIN, HIGH);
}
void writeBeeper (byte value) { //ブザーON/OFF
digitalWrite(BEEPER_PIN, value);
}
void writeLed(byte ledIdx, byte value) {//各LEDのON/OFF
if (ledIdx>3) return;
digitalWrite(LED[ledIdx], value);
}
void initialize() { //Wi-Fi接続
WiFi.begin(ssid, password);
Serial.printf("[%s] Wi-Fiに接続中",ssid);
int retryCount = 0;
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
if (retryCount > 30) { //15秒以上接続不良の為リスタート
Serial.println("");
Serial.println("Wi-Fiに接続できませんでした。");
Serial.println("リスタートします。");
ESP.restart();
}
delay(500);
retryCount++;
}
Serial.println("");
Serial.printf("[%s] Wi-Fiに接続しました。\n",ssid);
configTzTime(timeZone, server);//NTPサーバーに接続
}
以上















![[S95461C]_touch_test](https://livedoor.blogimg.jp/gijin2018/imgs/c/8/c858035b-s.jpg)
![[S95461C]_TouchCalibration](https://livedoor.blogimg.jp/gijin2018/imgs/b/a/ba2b94bc-s.jpg)



![[S95461C]](https://livedoor.blogimg.jp/gijin2018/imgs/e/3/e335f3f9-s.jpg)




















