回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

月球·时光 简单

头像 MRX 2023.05.22 939 8

项目背景

月球灯,是一种以月亮为主题的装饰灯。它采用独特的设计风格,将月亮的神秘与浪漫完美地融合在一起,营造出一种温馨、舒适的氛围。很多短视频平台上有各种各样的月球灯造型,都非常的漂亮。 

image.png

 

由于作者一直很喜欢用ws2812做一些时钟相关的项目,借这次的ESP32-C3的活动,就想做一个既能显示时间,又能增加氛围感的月球灯。

image.png

 

步骤1 材料清单

材料清单

  • ws2812灯带 X60颗
  • esp32-c3 X1pcs
  • 直径33cm茶盘 X1pcs
  • 超轻黏土 X若干
  • 石英砂 X若干
  • 颜料 X若干

步骤2 电路连接

该电路接线比较简单,只需要将灯带的信号端连接至ESP32的2号脚,然后电源接入3.3V,GND接到GND就可以了。

步骤3 程序设计

导入库文件并进行配网,使用NTP获取实时时间。

代码
#include <WiFi.h>
#include <Adafruit_NeoPixel.h>
#include "time.h"
#include "SPI.h"

const char *ssid = "yourssid";    //WIFI名称
const char *password = "yourpassword"; //WIFI密码

const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;

定义灯带连接引脚,接到P2引脚。

代码
int j,k = 0;

#define PIN        2
#define NUMPIXELS 60 // Popular NeoPixel ring size

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

struct tm timeinfo;

获取网络时间,并将时间通过换算,对应到相关的LED灯带的灯号,从而控制灯的亮灭。

代码
while (j <= 60){
    pixels.setBrightness(255);
    pixels.clear(); // Set all pixel colors to 'off'
    if (!getLocalTime(&timeinfo))
        {
            Serial.println("Failed to obtain time");
            return;
        }
    int hour = timeinfo.tm_hour;
    int min = timeinfo.tm_min;
    int sec = timeinfo.tm_sec;
    int day = timeinfo.tm_mday;
    int mon = timeinfo.tm_mon + 1;
    delay(500);
    printLocalTime();
    int hour_d = hour%12*5;
    int min_d = min%60;
    int min_r = min%5;
    int sec_d = sec%60;
    //if(sec_d>11)  sec_d = 0; 
    Serial.println(timeinfo.tm_hour);
    pixels.setPixelColor(hour_d, pixels.Color(0, 7, 0));
    pixels.setPixelColor(min_d, pixels.Color(min_r*5+1, 0, (5-min_r)*5));
    pixels.setPixelColor(sec_d, pixels.Color(sec_d*5+1, 0, (5-sec_d)*5));
    pixels.show();
    delay(500);
    j += 1;
  }
  k = 0;

串口打印当前时间

代码
void printLocalTime()
{
    
    if (!getLocalTime(&timeinfo))
    {
        Serial.println("Failed to obtain time");
        return;
    }
    Serial.println(&timeinfo, "%F %T %A"); // 格式化输出
}

屏幕截图 2023-05-22 221203.png

每运行一段时间后,进行氛围和时间显示功能的切换。

代码
void loop()
{
  while (j <= 60){
    pixels.setBrightness(255);
    pixels.clear(); // Set all pixel colors to 'off'
    if (!getLocalTime(&timeinfo))
        {
            Serial.println("Failed to obtain time");
            return;
        }
    int hour = timeinfo.tm_hour;
    int min = timeinfo.tm_min;
    int sec = timeinfo.tm_sec;
    int day = timeinfo.tm_mday;
    int mon = timeinfo.tm_mon + 1;
    delay(500);
    printLocalTime();
    int hour_d = hour%12*5;
    int min_d = min%60;
    int min_r = min%5;
    int sec_d = sec%60;
    //if(sec_d>11)  sec_d = 0; 
    Serial.println(timeinfo.tm_hour);
    pixels.setPixelColor(hour_d, pixels.Color(0, 7, 0));
    pixels.setPixelColor(min_d, pixels.Color(min_r*5+1, 0, (5-min_r)*5));
    pixels.setPixelColor(sec_d, pixels.Color(sec_d*5+1, 0, (5-sec_d)*5));
    pixels.show();
    delay(500);
    j += 1;
  }
  k = 0;
  
  while (k <= 60){
    if (timeinfo.tm_hour >= 20){
      pixels.setBrightness(155);
      for(int i = 0; i <= NUMPIXELS; i++){
        pixels.setPixelColor(i, pixels.Color(255, 255, 255));
        pixels.show();
      }
    delay(1000);
    }
    else{
      pixels.setBrightness(255);
      for(int i = 0; i <= NUMPIXELS; i++){
        pixels.setPixelColor(i, pixels.Color(255, 255, 255));
        pixels.show();
      }
    delay(1000);
    }
    k += 1;
  }
  j = 0;
  
  
}

步骤4 作品展示

时间功能:

微信图片_20230522213618.jpg
微信图片_20230522213631.jpg

氛围效果展示:

微信图片_20230522213636.jpg

附件

评论

user-avatar
  • 许培享

    许培享2023.12.10

    漂亮

    0
    • 花生编程

      花生编程2023.07.23

      赞赞赞赞赞

      0
      • 花生编程

        花生编程2023.07.23

        厉害厉害

        0
        • 三春牛-创客

          三春牛-创客2023.07.20

          赞赞赞赞

          0
          • 三春牛-创客

            三春牛-创客2023.07.20

            厉害

            0
            • 腿毛利小五郎

              腿毛利小五郎2023.07.04

              666

              0
              • hacker_

                hacker_2023.05.26

                赞!!!

                0
                • hacker_

                  hacker_2023.05.24

                  非常的好

                  0