#include "arduino_sleep.h" #if defined(ARDUINO_ARCH_ESP32) #include #elif defined(ARDUINO_ARCH_ESP8266) #include extern "C" { #include "user_interface.h" } #endif #if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_ESP8266) void c_sleep_deep(mrb_vm *vm, mrb_value *v, int argc){ if( argc>0 ){ uint8_t slp = GET_INT_ARG(1); #if defined(ARDUINO_ARCH_ESP32) esp_sleep_enable_timer_wakeup(slp*1000000ULL); //us esp_deep_sleep_start(); #elif defined(ARDUINO_ARCH_ESP8266) ESP.deepSleep(slp * 1000000ULL); //connection is required #endif } } void c_sleep_light(mrb_vm *vm, mrb_value *v, int argc){ if( argc>0 ){ uint8_t slp = GET_INT_ARG(1); #if defined(ARDUINO_ARCH_ESP32) esp_sleep_enable_timer_wakeup(slp*1000000ULL); //us esp_light_sleep_start(); #elif defined(ARDUINO_ARCH_ESP8266) uint32_t sleep_ms; sleep_ms=slp*1000; wifi_station_disconnect(); wifi_set_opmode(NULL_MODE); wifi_fpm_set_sleep_type(LIGHT_SLEEP_T); wifi_fpm_open(); wifi_fpm_set_wakeup_cb(NULL); wifi_fpm_do_sleep(sleep_ms * 1000); delay(sleep_ms + 1); wifi_fpm_do_wakeup(); wifi_fpm_close(); wifi_set_opmode(STATION_MODE); wifi_station_connect(); #endif } } void mrbc_init_class_sleep(void){ mrbc_define_method(0, 0, "sleep_deep", c_sleep_deep); mrbc_define_method(0, 0, "sleep_light", c_sleep_light); } #endif