[Воскрешение макетной платы из пепла] DIY Allwinner V3s Адаптация экрана портативного терминала, LVGL и руководство по трансплантации различных драйверов периферийных устройств
[Воскрешение макетной платы из пепла] DIY Allwinner V3s Адаптация экрана портативного терминала, LVGL и руководство по трансплантации различных драйверов периферийных устройств

В статье на прошлой неделе мы представили самодельное терминальное устройство V3S-PI, поскольку автор хотел изучить Linux.

《Мечтаю вернуться в 2004 год! Я использовал Allwinner V3s для создания портативного терминала, который стоит 100 юаней и имеет функции, сравнимые с MP4.》:Мечтаю вернуться в 2004 год! Я использовал Allwinner V3s для создания портативного терминала, который стоит 100 юаней и имеет функции, сравнимые с MP4. | Онлайн-форум разработчиков Allwinner

Подробно анализируется часть проекта по проектированию аппаратного обеспечения. В этой статье основное внимание будет уделено части проекта по адаптации программного обеспечения и выбрано несколько периферийных функций с высокой универсальностью для внедрения.

WeChat image_20240108132611.jpg
WeChat image_20240108132611.jpg
WeChat image_20240108132629.jpg
WeChat image_20240108132629.jpg

V3S-PI — это плата разработки, разработанная на базе Allwinner V3s. Чип V3s содержит специальный видеодвижок для предоставления расширенных мультимедийных приложений и услуг. Экран, аудио и другие интерфейсы зарезервированы в начале разработки платы разработки. На этой плате разработки имеется около 10 дополнительных периферийных устройств и функций: получение прогноза погоды, подключение наушников для воспроизведения музыки, интерфейс Ethernet 10M/100M, подключение к Wi-Fi, вставка SD-карты, регулировка яркости экрана, управление кнопками, подключение к другим внешним устройствам, 1 до 4 USB ЦЕНТР......

После адаптации экрана и пересадки LVGL и различных драйверов периферии,Макетная плата превращается в портативное устройство с функциями, сравнимыми с MP4.

640.gif
640.gif
640 (1).gif
640 (1).gif
640 (2).gif
640 (2).gif
640 (3).gif
640 (3).gif

Адаптация цветного ЖК-экрана с диагональю 2,4 дюйма

Цветной ЖК-экран использует интерфейс SPI для подключения к основному элементу управления. Поскольку коды инициализации экрана у каждого производителя разные и основаны на исходном файле st7735r.c, нам нужно только изменить код в функции st7735r_pipe_enable.

  • Программная часть использует TinyDRM, которая больше не является обновлением с фиксированной частотой кадров по сравнению с традиционным fbtft.
  • Используя архитектуру DRM, его можно быстрее интегрировать с программами новой архитектуры.

Модифицированный код см. в файле ниже, а конфигурацию дерева устройств:

Язык кода:javascript
копировать
&spi0 {
       status = "okay";
       pinctrl-names = "default";
       pinctrl-0 = <&spi0_pins>;


       display@0 {
        compatible = "jianda,jd-t18003-t01";
        reg = <0>;
           spi-max-frequency = <95000000>;


        backlight = <&panel_backlight>;
        dc-gpios = <&pio 4 9 0>; // PE9
        reset-gpios = <&pio 4 8 0>; // PE8
        rotation = <0>;
    };
};

Помимо spi необходимо добавить узел подсветки, чтобы подсветкой можно было управлять на уровне пользователя:

Язык кода:javascript
копировать
panel_backlight: panel-backlight {
              compatible = "gpio-backlight";
        gpios = <&pio 4 7 GPIO_ACTIVE_HIGH>; // PE7
              default-on;
              status = "okay";
       };

После успешной адаптации к экрану и трансплантации LVGL вы можете почистить слой FB, чтобы добиться высокой скорости кисти в 700 кадров.

640.gif
640.gif
640 (4).gif
640 (4).gif

Как libcurl получает информацию о погоде

В целях обогащения функций автор также реализовал функцию получения информации о погоде через библиотеку libcurl, обработал полученные данные JSON через функцию обратного вызова и использовал библиотеку lvgl для отображения информации о погоде.

Здесь нужна функция обратного вызова для анализа полученной информации о погоде в формате JSON. Сначала он использует библиотеку cJSON для анализа полученных данных и поиска соответствующего поля с информацией о погоде.

Язык кода:javascript
копировать
// Анализ данных JSON
    cJSON * json = cJSON_ParseWithLength(ptr, size * nmemb);
    if(!json) {
        goto end;
    }
    json = cJSON_GetObjectItem(json, "now");
    if(!json) {
        goto end;
    }
    cJSON * temp     = cJSON_GetObjectItem(json, "temp");
    cJSON * humidity = cJSON_GetObjectItem(json, "humidity");
    cJSON * text     = cJSON_GetObjectItem(json, "text");
    cJSON * pressure = cJSON_GetObjectItem(json, "pressure");

Затем используйте другие функции для блокировки потоков во избежание многопоточных конфликтов, а затем используйте соответствующие функции библиотеки LVGL, чтобы установить информацию о погоде на соответствующие метки.

Язык кода:javascript
копировать
pthread_mutex_lock(&mutex);
    if(cJSON_IsString(text)) {
        lv_label_set_text_fmt(label1, "Текущая погода\n%s", text->valuestring);
    }
    if(cJSON_IsString(pressure)) {
        lv_label_set_text_fmt(label2, "Атмосферное давление\n%s hPa", pressure->valuestring);
    }
    if(cJSON_IsString(temp)) {
        lv_label_set_text_fmt(label3, "Наружная температура\n%s ℃", temp->valuestring);
    }
    if(cJSON_IsString(humidity)) {
        lv_label_set_text_fmt(label4, "Влажность\n%s %%", humidity->valuestring);
    }
    pthread_mutex_unlock(&mutex);

    cJSON_Delete(json);

end:
    return size * nmemb;
WeChat image_20240108132625.jpg
WeChat image_20240108132625.jpg

Функция get_now_weather сначала определяет строку URL, которая содержит адрес и параметры, необходимые для получения информации о погоде. Затем создайте объект CURL через curl_easy_init и настройте соответствующие параметры, такие как установка URL-адреса, отключение информации о ходе выполнения, игнорирование проверки сертификата SSL, настройка функций обратного вызова и т. д. Затем используйте curl_easy_perform для выполнения запроса и проверки возвращаемых результатов. Наконец, используйте Curl_easy_cleanup для очистки объекта CURL.

Язык кода:javascript
копировать
char * url =
        "https://devapi.qweather.com/v7/weather/now?location=" LOCATION "&key=xxx";
    CURL * curl = curl_easy_init();

    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
    //    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, now_weather_cb);
    curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip");

Необходимо изменить в соответствии с реальной ситуациейURLв строкеLOCATIONиxxx,И выполнить необходимые операции, такие как настройка параметров и авторизация в соответствии с требованиями API погоды.

воспроизведение звука

Alsa интегрирована в Buildroot. Звук звуковой карты по умолчанию отключен. Откройте терминал, введите alsamixer и сначала включите его.

В текущем интерфейсе выберите «Наушники», затем нажмите клавишу M, чтобы включить звук, затем с помощью клавиатуры ↑ отрегулируйте громкость до нужного размера. Информацию об интерфейсе см. в разделе:

WeChat image_20240108133147.png
WeChat image_20240108133147.png

После завершения настройки введите имя файла mpv --no-video, подключите наушники и можно будет воспроизводить музыку:

Язык кода:javascript
копировать
[root@buildroot ~]# mpv 2.flac --no-video
     Video --vid=1 [P] (mjpeg 500x500 1.000fps)
 (+) Audio --aid=1 (flac 2ch 48000Hz)
File tags:
 Album: Ищем его в западной камере.
 Title: Ищем его в западной камере.
 Track: 1
AO: [alsa] 48000Hz stereo 2ch s32
A: 00:00:04 / 00:03:43 (2%)


Exiting... (Quit)

В командной строке отображается текущий каталог, отредактируйте файл /etc/profile, добавьте строку, а затем экспортируйте /etc/profile, чтобы перезагрузить конфигурацию:

Язык кода:javascript
копировать
export PS1='[\u@\h \w]\$ '
640 (1).gif
640 (1).gif
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose