#include #include #include "badge/config.h" #include "badge/display.h" #include "badge/gpio.h" #if defined(BADGE_SSID_NAME) && defined(BADGE_SSID_PASS) #include #define BADGE_USE_WIFI 1 #else #define BADGE_USE_WIFI 0 #endif NimBLEServer *server; #define PRESS_TIME_DRAW 1000 #define PRESS_TIME_BLE_ADV 3000 #define SLEEP_TIME 10000 NimBLEAdvertising *pAdvertising; void setup() { Serial.begin(115200); Serial.println("Yes, it works!"); NimBLEDevice::init("Espadge"); server = NimBLEDevice::createServer(); NimBLEService *service = new NimBLEService("ca260000-b4bb-46b2-bd06-b7b7a61ea990"); auto c = service->createCharacteristic("ca260001-b4bb-46b2-bd06-b7b7a61ea990"); service->start(); c->setValue("1"); server->addService(service); pAdvertising = NimBLEDevice::getAdvertising(); pAdvertising->setName("NimBLE"); de::uvok::badge::display_init(); #if BADGE_USE_WIFI WiFi.begin(BADGE_SSID_NAME, BADGE_SSID_PASS); while (WiFi.status() != WL_CONNECTED) delay(500); Serial.printf("> My IP is %s\n", WiFi.localIP().toString()); #endif // doesn't work as expected? // gpio_wakeup_enable(GPIO_NUM_0, GPIO_INTR_LOW_LEVEL); // esp_sleep_enable_gpio_wakeup(); // esp_light_sleep_start(); de::uvok::badge::gpio_init(); } void loop() { uint16_t pressDuration = de::uvok::badge::gpio_poll(); if (pressDuration < 64) { if (pressDuration == NEXT_KEY) de::uvok::badge::display_next(); if (pressDuration == PRV_KEY) de::uvok::badge::display_prev(); if (pressDuration == OK_KEY) de::uvok::badge::display_refresh(); } else if (pressDuration > PRESS_TIME_BLE_ADV) { if (!pAdvertising->isAdvertising()) { Serial.println("Long press detected. Starting advertising..."); pAdvertising->start(10000); } } else if (pressDuration > PRESS_TIME_DRAW) { Serial.println("Drawing..."); de::uvok::badge::display_demo(); } // if (millis() - releasedTime > SLEEP_TIME && !pAdvertising->isAdvertising()) // { // Serial.println("Go to sleep..."); // esp_light_sleep_start(); // } }