LifeLink Logo LifeLink
English 🇬🇧 Početna

Tehnička Dokumentacija - LifeLink [ESP32-S3]

Ovaj dokument je fokusiran na opis unutrašnjeg funkcionisanja LifeLink pametne narukvice. Uključuje strukturu senzora, mrežnih stack-ova i komunikacije putem I2C sabirnice, kao i asinhrono upravljanje zadacima u FreeRTOS.
Izvorni kod firmware-a: GitHub: LifeLink_ESP32App

Arhitektura Sistema i Menadžment Resursa (FreeRTOS)

Srce LifeLinka je moćan dvojezgarni ESP32-S3 kontroler, gde se operacije dele koristeći ugrađeni FreeRTOS kako bi se održao interfejs na ekranima fluidno pri visokom frejmrejtu dok pozadinski zadaci obavljaju kritične akcije skeniranja tela najugroženijih pacijenata i starijih korisnika.

Raspodela Core/Taskova:

app_main: Glavna ulazna tačka, inicijalizacija hardvera i pokretanje svih podsistema.

void app_main(void) {
    i2c_init();             // Inicijalizacija sabirnice
    ble_spp_server_init();  // Startup Bluetooth-a
    ui_init();              // Inicijalizacija LVGL GUI-ja
    xTaskCreate(read_sensor_data, "sensor_read_task", 4096, NULL, 10, NULL);
}

sensor_read_task: Sinhronizacija sa QMI8658 senzorom i obrada pada u realnom vremenu.

void read_sensor_data(void *arg) {
    while (1) {
        if (qmi.getDataReady()) {
            qmi.getAccelerometer(acc.x, acc.y, acc.z);
            // State-machine detekcija pada...
        }
        vTaskDelay(pdMS_TO_TICKS(10));
    }
}

MAX30102: Asinhrona obrada vitalnih parametara (Puls i SpO2) korišćenjem FIFO bafera i FFT algoritma.

while (max30102.available()) {
    redBuffer[i] = max30102.getRed();
    irBuffer[i] = max30102.getIR();
    if (full) fft_process(red, ir, 100, &hr, &spo2);
}

gsm_task: Nadzor mreže i auto-recovery mehanizam za SIM800L modul.

void gsm_status_task(void *arg) {
    while (1) {
        if (gsm_check_network() != ESP_OK) {
            gsm_a6_init(); // Re-inicijalizacija u slučaju gubitka mreže
        }
        vTaskDelay(pdMS_TO_TICKS(10000));
    }
}

ble_spp_server_task: Bluetooth Low Energy stack za komunikaciju sa mobilnom aplikacijom.

void ble_spp_server_host_task(void *param) {
    nimble_port_run();             // Glavna petlja NimBLE stack-a
    nimble_port_freertos_deinit(); // Deinicijalizacija pri gašenju
}

Hardverski Interrapti i I2C (Poznati Problemi)

Moguće je doći do poznatog "Interrupt Watchdog (WDT)" padanja modula zbog ISR preklapanja. Problem se rešava korišćenjem driver/i2c_master.h i uvođenjem Mutex/Semafora za deljenje resursa.

Analiza i Otkrivanje Pada (QMI8658 Napredna Logika)

Detekcija padova je podeljena na 3 state-machine faze:

  1. FREE_FALL: Detekcija gubitka gravitacije (0 - 0.6G).
  2. IMPACT_DETECTED: G-force prevazilazi threshold (> 3.5G).
  3. STILLNESS & ANGLE CHECK: Mirovanje 5 sekundi + promena ugla preko 60 stepeni.

Komunikacija i SOS Prijavljivanje (SIM800L & GPS LC76G)

Nakon verifikovanog pada, sistem ispaljuje asinhroni task koji preko SIM800L modula šalje SMS sa Google Maps linkom i vitalnim parametrima.

Hardver

Električna Šema

LifeLink Šema

Upravljanje Napajanjem i Displejom (AXP2101 & AMOLED)

LifeLink koristi sofisticiran sistem upravljanja energijom kako bi osigurao dugotrajnost baterije i stabilnost sistema.

AXP2101 PMIC: Pametni kontroler napajanja koji upravlja naponima za ESP32 i periferije.

  • ALDO1 (3.3V): Napajanje za glavne senzore i logiku.
  • ALDO2 (1.8V): Napajanje za AMOLED digitalni interfejs.
  • Zastita od Boot-Loopa: Registrovan 0x10 bit 1 (PWROFF) se automatski čisti pri startu kako bi se sprečilo gašenje sistema nakon 1 sekunde (kritičan fix za Waveshare ploče).
  • Punjenje: Konfigurisano na 500mA sa ciljnim naponom od 4.2V za Li-Po baterije.

AMOLED Power Optimization: AMOLED ekrani troše struju samo za aktivne piksele.

// Funkcija za uštedu energije
void reset_screen_timer() {
    if (!screen_is_on) {
        esp_lcd_panel_disp_on_off(panel_handle, true); // Wake up
        ESP_LOGI("PWR", "Screen WAKE");
    }
    last_touch_time = esp_timer_get_time() / 1000;
}

Softverski Timeout: Nakon 15 sekundi bez dodira, sistem poziva esp_lcd_panel_disp_on_off(panel_handle, false), što gasi sve piksele i minimizuje potrošnju dok pozadinski taskovi nastavljaju rad.

TCA9554 IO Expander: Dodatni čip na 0x20 adresi koji fizički kontroliše EN (Enable) pinove ekrana.

// P2 pin na TCA9554 kontroliše LCD_VCC_EN
uint8_t tca_val[] = {0x01, 0x27}; // P0, P1, P2 High
i2c_master_write_to_device(I2C_NUM, TCA9554_ADDR, tca_val, 2, timeout);

Prateća Mobilna Aplikacija (Flutter Companion)

LifeLink sistem uključuje namensku cross-platform aplikaciju razvijenu u **Flutter** framework-u, koja služi kao primarni interfejs za staratelje i medicinsko osoblje. Izborni kod aplikacije je dostupan na: GitHub: LifeLink_MobileApp

BLE Komunikacioni Protokol: Aplikacija koristi flutter_blue_plus biblioteku za niskoenergetsku Bluetooth komunikaciju.

  • Service UUID: 4fafc201-1fb5-459e-8fcc-c5c9c331914b
  • Characteristic UUID: beb5483e-36e1-4688-b7f5-ea07361b26a8
  • Subscription: Aplikacija se pretplaćuje (subscribe) na notifikacije karaktristike, omogućavajući real-time striming podataka bez konstantnog polling-a.

Arhitektura BleService koda: Implementiran je Singleton obrazac za upravljanje konekcijom.

// BleService (Flutter) logika pretplate
await targetCharacteristic.setNotifyValue(true);
targetCharacteristic.onValueReceived.listen((value) {
    // Parsiranje bajtova u vitalne parametre
    _dataController.add(value); 
});

Glavne Funkcionalnosti:

  • Live Dashboard: Vizuelni prikaz Pulsa i SpO2 mernih vrednosti koje pristižu direktno sa narukvice.
  • Mirroring Alarma: Kada narukvica detektuje pad, telefon momentalno aktivira zvučni alarm i prikazuje lokaciju korisnika na mapi.
  • Upravljanje Kontaktima: Mogućnost daljinskog podešavanja SOS brojeva putem BLE kanala.

Reference i Literatura

  1. ESP-IDF Programming Guide - Službena dokumentacija za ESP32-S3.
  2. FreeRTOS API Reference - Dokumentacija za Mutex/Semaphore.
  3. LVGL Documentation - Grafička biblioteka i thread-safe interakcija.
  4. QMI8658 & MAX30102 Datasheets - Specifikacije senzora.
  5. SIM800L AT Commands - Upravljanje modemom.
  6. Power Management: AXP2101