在特定时间打开2个LED

时间:2018-06-28 11:14:56

标签: c timer esp8266 led mongoose-os

所以我有一个espressif芯片连接到2个LED,并且在其上运行了猫鼬操作系统

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

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

2 个答案:

答案 0 :(得分:0)

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

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

第2步:将它们添加到您的mos.yml中。如果您无意通过UART进行rpc调用,请不要使用rpc-uart

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步:添加crontab处理程序以使LED点亮和LED熄灭:

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表达式语法的参考。

答案 1 :(得分:0)

缺少解决方案:

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

{{1}}