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:
- FREE_FALL: Detekcija gubitka gravitacije (0 - 0.6G).
- IMPACT_DETECTED: G-force prevazilazi threshold (> 3.5G).
- 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
- Mikrokontroler: ESP32-S3
- Mreža / Komunikacija: SIM800L GSM (AT Komande, 3.7V)
- IMU Senzori: QMI8658 (Pokret i nagib)
- Senzori Zdravlja: MAX30102 (Puls i SpO2)
- Upravljanje napajanjem: AXP2101
Električna Š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
0x10bit 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
- ESP-IDF Programming Guide - Službena dokumentacija za ESP32-S3.
- FreeRTOS API Reference - Dokumentacija za Mutex/Semaphore.
- LVGL Documentation - Grafička biblioteka i thread-safe interakcija.
- QMI8658 & MAX30102 Datasheets - Specifikacije senzora.
- SIM800L AT Commands - Upravljanje modemom.
- Power Management: AXP2101