Arduino 中的 Cron 作业

arduinohardwaresoftware & coding更新于 2026/1/12 7:37:17

Arduino 中的 CronAlarms 库可帮助您在 Arduino 中设置 cron 作业。如果您不了解 cron 作业,它们是按固定时间间隔执行的计划任务。例如,每天午夜向服务器发送健康包。

要安装此库,请在库管理器中搜索 CronAlarms,然后安装由 Martin Laclaustra 编写的库。

安装完成后,转到 -文件 → 示例 → CronAlarms。

打开 CronAlarms_example。如果您仔细阅读示例,就会发现它们正在执行以下操作 −

  • 使用 tm 结构体(时间库)将时间设置为 2011 年 1 月 1 日星期六上午 8:29:00

  • 设置 6 个 Cron 闹钟,每日、每周、间隔几秒,甚至设置一次性触发的非重复闹钟。

  • 一次性触发的非重复闹钟实际上会禁用 2 秒的 cron。

  • 在循环中,每秒打印一次当前时间。

cron 创建语法为 -

CronID_t create(const char * cronstring, OnTick_t onTickHandler, bool是一次性的);

其中

  • cronstring 提供 cron 间隔时间,

  • onTickHandler 是触发闹钟时调用的函数,

  • isOneShot 确定闹钟是重复执行还是一次性执行。

此函数返回一个 cron ID,该 ID 可用于在代码中的其他位置引用闹钟,就像在 10 秒闹钟中所做的那样,使用 Cron.free() 禁用 2 秒闹钟。

//创建 2 秒重复闹钟和 10 秒单次闹钟

// 每 2 秒触发一次
id = Cron.create("*/2 * * * * *", Repeats2, false);

// 10 秒后调用一次
Cron.create("*/10 * * * * *", OnceOnly, true);

// 2 秒闹钟函数
void Repeats2() {
   Serial.println("2 second timer");
}

//在 10 秒闹钟内禁用 2 秒闹钟
void OnceOnly() {
   Serial.println("此定时器仅触发一次,停止 2 秒定时器");
   // 使用 Cron.free(id) 禁用定时器并回收其内存。
   Cron.free(id);
   // 可选,但最安全的做法是在内存回收后"忘记" ID
   id = dtINVALID_ALARM_ID;
   // 您也可以使用 Cron.disable() 关闭定时器,但请保留
   // 它在内存中,以便稍后使用 Alarm.enable() 重新打开。
}

创建 CronAlarm 最重要​​的部分是 cron 字符串。其语法为 −

"seconds minutes hours days_of_month month days_of_week"

以上任意一个 * 表示"所有值"。因此,

  • "0 30 8 * * *→ 表示每天 8:30:00 触发。

  • "30 30 8 * * 6→表示每周六 8:30:30 (day_of_week = 6) 触发。

  • 表达式中的 / 表示间隔。

  • "*/15 * * * * *→ 表示每 15 秒触发一次。

如果您在 Arduino 上运行此示例,串行监视器输出将为 −

如您所见,警报按预期触发。


相关文章