云天 发表于 2022-6-3 09:38:26

【Beetle ESP32-C3试用(二)】摩斯码报时

本帖最后由 云天 于 2022-6-3 09:38 编辑


【获取时间】
从网络时间服务器获取时间,并使用ESP32自带的RTC时钟保持时间更新

#include <WiFi.h>

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

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

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

void setup()
{
    Serial.begin(115200);
    Serial.println();

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
      delay(500);
      Serial.print(".");
    }
    Serial.println("WiFi connected!");

    // 从网络时间服务器上获取并设置时间
    // 获取成功后芯片会使用RTC时钟保持时间的更新
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    printLocalTime();

    WiFi.disconnect(true);
    WiFi.mode(WIFI_OFF);
    Serial.println("WiFi disconnected!");
}

void loop()
{
    delay(1000);
    printLocalTime();
}

【时间转摩斯密码】
摩尔斯电码(又译为摩斯密码,Morse code)则是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种: 点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之间中等的停顿以及句子之间长的停顿。这样的好处是,使用简单的两种状态,就能来传递所有的字母和数字,非常的简便!


#include <WiFi.h>

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

const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;
String T={"-----",".----","..---","...--","....-",".....","-....","--...","---..","----."};
void printLocalTime()
{
    struct tm timeinfo;
    if (!getLocalTime(&timeinfo))
    {
      Serial.println("Failed to obtain time");
      return;
    }
   
   
    if(timeinfo.tm_sec==0){
       if(timeinfo.tm_hour>9){
         Serial.println(T);
         Serial.println(T);
       }
       else{
         Serial.println(T);
      }
    }
    //Serial.println(&timeinfo, "%F %T %A"); // 格式化输出
}

void setup()
{
    Serial.begin(115200);
    Serial.println();

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
      delay(500);
      Serial.print(".");
    }
    Serial.println("WiFi connected!");

    // 从网络时间服务器上获取并设置时间
    // 获取成功后芯片会使用RTC时钟保持时间的更新
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    printLocalTime();

    WiFi.disconnect(true);
    WiFi.mode(WIFI_OFF);
    Serial.println("WiFi disconnected!");
}

void loop()
{
    delay(1000);
    printLocalTime();
}


【显示时间】
为演示方便,利用摩斯密码每分钟显示一次小时+分钟时间。





#include <WiFi.h>

const char *ssid = "******";    //WIFI名称
const char *password = "******"; //WIFI密码
【演示视频】

https://www.bilibili.com/video/BV1xt4y1W71J?share_source=copy_web
页: [1]
查看完整版本: 【Beetle ESP32-C3试用(二)】摩斯码报时