Arduino ESP32SmartConfig配网+NTP时间获取

该博客介绍了如何在Arduino ESP32上利用SmartConfig进行无线网络配置,并通过NTP协议获取准确时间。示例代码展示了从阿里云NTP服务器同步时间的过程,以及如何设置更新频率和使用板载LED灯显示时间更新状态。
摘要由CSDN通过智能技术生成

Arduino ESP32SmartConfig配网+NTP时间获取


本篇的内容是在SmartConfig配网篇的基础上新增的获取NTP时间。

示例代码

#include <WiFi.h>
#include <esp_wifi.h>     //用于esp_wifi_restore() 删除保存的wifi信息

#define LED_BUILTIN  (2)    //板载led灯
#define NTP1  "ntp1.aliyun.com"
#define NTP2  "ntp2.aliyun.com"
#define NTP3  "ntp3.aliyun.com"
const unsigned long interval = 6000UL;//设置更新频率
unsigned long previousMillis = 0;
bool ledState = false;

void SmartConfig()
{ 
  // WiFi.mode(WIFI_AP_STA);
   WiFi.mode(WIFI_STA);
   Serial.println("\r\n wait for smartconfig....");
   WiFi.beginSmartConfig();
     while(1)
   {
    Serial.print(".");
    delay(500);
    if ( WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n",WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n",WiFi.psk().c_str());    
      break;      
    }
   } 
}
bool AutoConfig()
{
  WiFi.begin();
  for (int i=0; i<20; i++)
  {
    int wstatus = WiFi.status();
    if (wstatus == WL_CONNECTED )  
       {  
          Serial.println("wifi smartConfig success");
          Serial.printf("SSID:%s",WiFi.SSID().c_str());
          Serial.printf(",PWS:%s\r\n",WiFi.psk().c_str());
          Serial.print("localIP:");
          Serial.println(WiFi.localIP());
          Serial.print(",GateIP:");
          Serial.println(WiFi.gatewayIP()); 
          esp_wifi_set_storage(WIFI_STORAGE_RAM);//自动保存wifi信息
          WiFi.setAutoConnect(true);  // 设置自动连接      
          return true;
       }
       else
       {
          Serial.print("WIFI AutoConfig Waiting ....");
          Serial.println(wstatus);
          delay(1000);
       }   
  }
  Serial.println("Wifi autoconfig faild!");
  return false;
  }
void setup() {
  Serial.begin(115200);
 pinMode(LED_BUILTIN, OUTPUT);//板载led灯作为指示
 delay(100);
   if (!AutoConfig())
  {
   SmartConfig();
  }  
 configTime(8 * 3600, 0, NTP1, NTP2,NTP3);
 // esp_wifi_restore();  //删除保存的wifi信息
  
}
 
void loop() {  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
     ledState = !ledState;//状态翻转
     digitalWrite(LED_BUILTIN, ledState);
     struct tm timeInfo; //声明一个结构体
  if (!getLocalTime(&timeInfo))
  { //一定要加这个条件判断,否则内存溢出
    Serial.println("Failed to obtain time");
  }
   Serial.println(&timeInfo, "%F %T %A"); 
        previousMillis = currentMillis;
}
 
}


  • 串口打印信息
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值