ESP8266 NtpClient解析int响应为2位char*



我正在为微处理器NodeMCU编写在特定时间切换插座的时间调度程序。我正面临解析值的问题。我取值(例如:'08:30')从数据库保存为char*。我使用NtpClient获取当前时间,但它是int值。我的想法是建立char*从小时,':'和分钟,并与我的价值从DB比较,但我有2个问题:

  • 我需要创建2位字符*从小时和分钟。
  • 我需要连接这两个字符串

我对c++没有太多的经验,我可以自己做,但我想用最有效的方式来做,因为我至少每50秒运行一次这个脚本。

我对c++的经验很少。另外,Arduino IDE并不是完整的c++。我的解决方案是:

int intLength( int N )
{
if      ( N < 0  ) return 1 + intLength( -N );
else if ( N < 10 ) return 1;
else               return 1 + intLength( N / 10 );
}

void setSocketsState() {
int currentHour = timeClient.getHours();
int currentMinute = timeClient.getMinutes();
char currentHourChar[10];
char currentMinuteChar[10];
itoa(currentHour, currentHourChar, 10);
itoa(currentMinute, currentMinuteChar, 10);

char dest[24] = "";
if (intLength(currentHour) == 1) {
strcat(dest, "0");
}

strcat(dest, currentHourChar);
strcat(dest, ":");
if (intLength(currentMinute) == 1) {
strcat(dest, "0");
}
strcat(dest, currentMinuteChar);

char* dateToCompare = dest;  // result: HH:MM
socket1.handleCurrentTime(dateToCompare);
socket2.handleCurrentTime(dateToCompare);
socket3.handleCurrentTime(dateToCompare);
socket4.handleCurrentTime(dateToCompare);
}

还有很长的路要走。如果你想看我项目的这一部分,这里是链接:https://github.com/wojtaszek171/SmartHome/blob/master/esp8266/ESP1/ESP1.ino

最新更新