#include #include #include #include #include #include #define TFT_DC D7 #define TFT_RST D9 unsigned long SEC=40; unsigned long MIN=0; unsigned long HOUR=0; unsigned long DAY=0; unsigned long MONT=0; unsigned long YEAR=2026; unsigned long preMil = 0; const long interval = 1000; Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, -1); Arduino_GFX *gfx = new Arduino_ST7789(bus, TFT_RST, 0, true, 240, 240, 0, 0); #define SERVICE_UUID "791cadd7-de87-49f9-8986-94b7ae11940b" #define CHAR_TEST_UUID "3e4eac5b-eaa2-4e0c-a705-dcac4f606e01" #define CHAR_TIME_UUID "3e4eac5b-eaa2-4e0c-a705-dcac4f606e02" #define deviceName "ESP32-Watch" class CharacteristicCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) override { String value = pCharacteristic->getValue(); if (value.length() == 0) return; //Time characteristic check if (pCharacteristic->getUUID().equals(BLEUUID(CHAR_TIME_UUID))) { Serial.print("Uhrzeit empfangen: "); Serial.println(value); } } }; void setup() { Serial.begin(115200); gfx->begin(); gfx->setFont(NULL); gfx->fillScreen(ST77XX_BLACK); gfx->setTextColor(ST77XX_GREEN, ST77XX_BLACK); initDevice(); } void loop() { drawText(10,10, 2, "{"); drawText(30,30,2,"Time: {"); gfx->setCursor(50, 50); gfx->printf("Hour: %d%c\n", HOUR, ','); gfx->setCursor(50, 70); gfx->printf("Min: %d%c\n", MIN, ','); gfx->setCursor(50, 90); gfx->printf("Sec: %d%c\n", SEC); drawText(30,110,2,"},"); drawText(30,130,2,"Date: {"); gfx->setCursor(50, 150); gfx->printf("Day: %d%c\n", DAY, ','); gfx->setCursor(50, 170); gfx->printf("Mont: %d%c\n", MONT, ','); gfx->setCursor(50, 190); gfx->printf("Year: %d%c\n", YEAR); drawText(10,210,2,"}"); updateClock(); } void initDevice(){ BLEDevice::init(deviceName); BLEServer *pServer = BLEDevice::createServer(); BLEService *pService = pServer->createService(SERVICE_UUID); //Test characteristic BLECharacteristic *pCharacteristic = pService->createCharacteristic( CHAR_TEST_UUID, BLECharacteristic::PROPERTY_READ); pCharacteristic->setValue("Hello World"); //Time BLECharacteristic *pCharacteristicTime = pService->createCharacteristic(CHAR_TIME_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE); pCharacteristicTime->setCallbacks(new CharacteristicCallbacks()); pCharacteristicTime->setValue("TIME"); pService->start(); // BLEAdvertising *pAdvertising = pServer->getAdvertising(); // this still is working for backward compatibility BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->setScanResponse(true); pAdvertising->setMinPreferred(0x12); BLEDevice::startAdvertising(); Serial.println("Characteristic defined! Now you can read it in your phone!"); } void updateClock(){ unsigned long curMil = millis(); if (curMil - preMil >= interval) { preMil = curMil; SEC++; } if (SEC >= 60) {SEC = 0; MIN++;} if (MIN >= 60) {MIN = 0; HOUR++;} if (HOUR >= 24) {HOUR = 0; DAY++;} } void drawText(int width, int hight,int size, const char* text) { gfx->setCursor(width, hight); gfx->setTextSize(size); gfx->println(text); }