時計)XIAO ESP32C6、8x8 Puzzle Unit (Unit Puzzle ?)で時計。((S)簡易NTP) ガジェットメイドカフェ展示



いろいろ、注意
----

- 過去ログを見よ!!!
- アンテナ関係を修正した0414
- 書き換える

```c++

const char *ssid = "ご自宅のSSID";
const char *password = "ご自宅のパスワード";

```

- 展示


https://x.com/maruiTTR/status/1911041551868051950



結果
----

![image_original (89).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b9326cf6-13b0-48e2-8395-5dc9d67a3b6c.jpeg)


プログラム
----


```c++



//RGBLED8x8_SNTP_XIAO_ESP32C6_1


//インクルド
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <WiFi.h>
#include <time.h>


//定義
#define MAX_X 8
#define MAX_Y 8
#define NUM_LEDS 64
#define OUT_GPIO_NUM D10 //XIAO-ESP32C6
Adafruit_NeoPixel strip(NUM_LEDS, OUT_GPIO_NUM, NEO_GRB + NEO_KHZ800);
#define JST 3600 * 9

const char *ssid = "ご自宅のSSID";
const char *password = "ご自宅のパスワード";

unsigned char Pixel[8][8][3]; //キャラクターRAM(カラー)

// 'font8x8_0_9', 8x64px
unsigned char font8x8_0_9 [] =
{
  0x81, 0x7c, 0x7a, 0x76, 0x6e, 0x5e, 0x3e, 0x81, //0
  0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, //1
  0x81, 0x7e, 0xfe, 0xfe, 0xc1, 0xbf, 0x7f, 0x00, //2
  0x81, 0x7e, 0xfe, 0xc0, 0xfe, 0xfe, 0x7e, 0x81, //3
  0xe3, 0xdb, 0xbb, 0x7b, 0x00, 0xfb, 0xfb, 0xfb, //4
  0x00, 0x7f, 0x7f, 0x01, 0xfe, 0xfe, 0x7e, 0x81, //5
  0x81, 0x7e, 0x7f, 0x01, 0x7e, 0x7e, 0x7e, 0x81, //6
  0x00, 0x7e, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, //7
  0x81, 0x7e, 0x7e, 0x81, 0x7e, 0x7e, 0x7e, 0x81, //8
  0x81, 0x7e, 0x7e, 0x7e, 0x80, 0xfe, 0x7e, 0x81, //9
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff  //: ' '
};


//ネオピクセルに転送後に表示
void NeoPixe_OUT() {

  int k = 0; //RGB LEDの番号
  for (int y = 0; y < MAX_Y; y++) {
    for (int x = 0; x < MAX_X; x++) {

      strip.setPixelColor(k++, strip.Color(
        Pixel[y][x][0], Pixel[y][x][1], Pixel[y][x][2]));

    } //for j
  } //for i

  strip.show(); //再表示

}  //NeoPixe_OUT


//8x8文字の表示
void ch_8x8(char ch, int c1, int c2, int c3){

  ch = (ch - '0') * 8;
  for (int y = 0; y < MAX_Y; y++) {
    int a = font8x8_0_9[ch++];
    for (int x = 0; x < MAX_X; x++) {

      if ( ((a << x) & 0x80) != 0) {
        Pixel[y][x][0] = 0;
        Pixel[y][x][1] = 0;
        Pixel[y][x][2] = 0;
      } else {
        Pixel[y][x][0] = c1;
        Pixel[y][x][1] = c2;
        Pixel[y][x][2] = c3;
      } //if

    } //for j
  } //for i

  NeoPixe_OUT(); //RBG LEDに出力

} //ch_8x8


void puts_8x8(const char *str1){

  //文字の中身がゼロか
  while (*str1) {

    //一文字出力
    ch_8x8(*str1 ++, 5, 5, 5);
    delay(3000);  //3秒待つ

  }//while

}//ns_puts


//初期化
void setup() {

  //アンテナの設定
  pinMode(WIFI_ENABLE, OUTPUT); // pinMode(3, OUTPUT);
  digitalWrite(WIFI_ENABLE, LOW); // digitalWrite(3, LOW); // Activate RF switch control
  delay(100);
  pinMode(WIFI_ANT_CONFIG, OUTPUT); // pinMode(14, OUTPUT);
  digitalWrite(WIFI_ANT_CONFIG, LOW); // digitalWrite(14, LOW); // Use IN antenna

  //ネオピクセルの設定
  strip.begin();
  strip.show();

  //WiFiの初期化
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  delay(3000);//決め打ちなので、おかしかったら調整してね! wifiの待ち0.5*6
  configTime(JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");

} //main


//メインループ
void loop() {

  //時計の処理 ↓ここから
  time_t t;      //経過秒
  struct tm *tm; //時間の実体とポインター

  t = time(NULL);     //経過秒を取得する
  tm = localtime(&t); //経過秒を時間の構造体に変換する

  //表示変換する パック二進化十進を文字列にする(アンパックする?)
  char cn1[16];  //桁
  cn1[0] = '0' + (tm->tm_hour) / 10; //0 時 上位
  cn1[1] = '0' + (tm->tm_hour) % 10; //1 時 下位
  cn1[2] = ':';
  cn1[3] = '0' + (tm->tm_min) / 10; //2 分 上位
  cn1[4] = '0' + (tm->tm_min) % 10; //3 分 下位
  cn1[5] = ':';
  cn1[6] = ':';
  cn1[7] = 0;

  //時計の処理　↑ここまで

  puts_8x8(cn1); //時刻を表示する

} //loop


```