UR5FFR писав: ↑Сер червня 05, 2024 11:29 am
А наскільки у софті продвинулися? Бо залізо це гарно, але без софта то таке
Вирішив дещо переробити свою графічну бібліотеку: адаптувати для ESP32 і інших мікроконтролерів, що не мають DMA2D. Почав роботу, а потім з'явилася нова ідея. Зробити такий собі графічний фреймворк, що складався б з набору деяких меню. Оскільки функції SDR трансиверів в основному майже всі однакові, то меню можуть бути теж більш менш однакові, але при натисканні кнопок, тачскрину чи поворот енкодеру має викликатися код користувача. Користувач же може нівчому себе не обмежувати і написати свою обробку таких подій.
Моя спроба зробити такий фреймворк знаходиться
тут в директорії esp32-gui-project
Для збірки потрібно Visual Studio Code з розширенням ESP-IDF при налаштуваннях вибрати ESP-IDF v5.3.0, я використовую дисплей 320х240 GMT020-02 (ST7789), але думаю, підійде любий з таким контролером і такою ж роздільною здатністю (можливі нюанси з кольорами бо для мого дисплею використовуються інвертовані значення), також потрібен енкодер звичайний на 15 імпульсів чи біля того (з резисторами підтяжками) ну і ESP32-WROOM (на інших поки ще не перевіряв).
Як підключати?
GPIO23 (VSPI-MOSI) -> LCD SDA
GPIO19 (VSPI-MISO) -> LCD DC - використовується як GPIO
GPIO5 (VSPI-CS) -> LCD CS
GPIO18 (VSPI-CLK) -> LCD SCL
GPIO17 -> LCD RST
GPIO34 -> Encoder A
GPIO35 -> Encoder B
GPIO32 -> Encoder Key
Що вміє робити?
Реалізовано таке собі демо яке вміє при поворі енкодера переміщати фокус з одного елемента на інший, а при натискання на енкодер заходити у вибранне меню. На разі реалізовано меню для налаштувань радіо і аудіо обладнання (виставляти рівні підсилення і еквалайзери). З тачскрином поки ще не працю.
Користувач матиме змогу додавати свій функціонал в файли що знаходять тут esp32-gui-project\gui\
Наприклад, в файлі AudioView\InputSettingViews\AudioInputAGCSettingsView.cpp є метод який буде викликатися кожний раз коли користувач буде змінювати в меню значення рівня шуму для АРУ мікрофонну - void AudioInputAGCSettingsView::OnNoiseThreshouldChanged(int value)
Якщо проект зацікавив звертайтеся, можливо, зроблю окрему тему на форумі і якесь відео викладу.