0

所以我有一个连接到 2 个 LED 的 espressif 芯片,mongoose os 在上面运行

我想从互联网/计算机上获取时间,并在特定时间打开 LED。

例如。在 10:00 打开/关闭连接到引脚 2 的 LED 1,并在 16:00 打开/关闭连接到 C 中引脚 3 的 LED 2。

4

2 回答 2

1

第 1 步:将 wifi 设置添加到您的mos.yml,以便它可以连接到您的无线 AP:

config_schema:
  - ["wifi.sta.enable", true]
  - ["wifi.sta.ssid", "MyAP"]
  - ["wifi.sta.pass", "Passwd"]

第 2 步:将这些添加到您的mos.yml. rpc-uart如果您不打算通过 UART 进行 rpc 调用,请不要这样做。

libs:
  - origin: https://github.com/mongoose-os-libs/sntp
  - origin: https://github.com/mongoose-os-libs/crontab
  - origin: https://github.com/mongoose-os-libs/rpc-service-cron
  - origin: https://github.com/mongoose-os-libs/rpc-service-config
  - origin: https://github.com/mongoose-os-libs/wifi
  - origin: https://github.com/mongoose-os-libs/rpc-uart

第 3 步:为 LED 开启和 LED 关闭添加 crontab 处理程序:

enum mgos_app_init_result mgos_app_init(void) {
  /* Set LED GPIOs as outputs */
  mgos_gpio_set_mode(YOUR_LED_GPIO, MGOS_GPIO_MODE_OUTPUT);

  /* Register crontab handler - LED OFF */
  mgos_crontab_register_handler(mg_mk_str("ledoff"), ledoff, NULL);

  /* Register crontab handler - LED ON */
  mgos_crontab_register_handler(mg_mk_str("ledon"), ledon, NULL);

  return MGOS_APP_INIT_SUCCESS;
}

第 4 步:添加回调:

void ledoff(struct mg_str action, struct mg_str payload, void *userdata) {
  mgos_gpio_write(YOUR_LED_GPIO, 0);
  (void) payload;
  (void) userdata;
  (void) action;
}

void ledon(struct mg_str action, struct mg_str payload, void *userdata) {
  mgos_gpio_write(YOUR_LED_GPIO, 1);
  (void) payload;
  (void) userdata;
  (void) action;
}

第 5 步:从 Web UI 或 UART:

call Cron.Add '{"at":"0 0 10 00 * *", "action":"ledon"}'
call Cron.Add '{"at":"0 0 16 00 * *", "action":"ledoff"}'

请参阅https://github.com/mongoose-os-libs/cron作为 mgos 上 cron 表达式语法的参考。

于 2018-06-28T12:05:27.967 回答
0

缺少解决方案:

步骤 2a:在 main.c 中添加:

#include "mgos_crontab.h"
于 2020-05-21T04:12:35.667 回答