当前位置: 首页 > news >正文

lv_micropython to download and building

        想要在ESP32-C3使用Micropython开发GUI,所以需要编译lv_micropython,当前github上的版本是9.1.0。

一、开发环境

        因为编译lv_micropython需要在linux系统下,但是我的电脑是windows系统,所以我在windows系统上安装了VMware虚拟机,在VMware虚拟机中安装了ubuntu18系统。

二、下载lv_micropython

github:GitHub - lvgl/lv_micropython: Micropython bindings to LVGL for Embedded devices, Unix and JavaScript

在ubuntu系统中其中命令终端,cd到存放源码的目录。

克隆lv_micropython:

git clone https://github.com/lvgl/lv_micropython.git

 更新其子模块:

cd lv_micropython
git submodule update --init --recursive lib/lv_bindings

三、编译lv_micropython

1、编译mpy-cross:
make -C mpy-cross

mpy-cross 是一个用于将 Python 代码预编译为适用于 MicroPython 设备的 .mpy 文件的工具。 

2、编译Unix (Linux) port(如果需要在PC上开发LVGL需要执行这一步)

更新软件包: 

sudo apt-get update

安装build-essential libreadline-dev libffi-dev:

sudo apt-get install build-essential libreadline-dev libffi-dev

安装libsdl2-2.0-0 libsdl2-dev :

sudo apt-get install libsdl2-2.0-0 libsdl2-dev

libsdl2-2.0-0 是 Simple DirectMedia Layer 2.0 库,用于提供低层次的访问音频、键盘、鼠标、半导体和显示硬件。libsdl2-dev 是开发 SDL 应用程序所需的开发文件。

安装parallel:

sudo apt-get install parallel

parallel 是 GNU 工具的一部分,用于并行执行多个任务。 

安装Python3:

sudo apt-get install python3.8

 也可安装python3的其它版本,如果系统已经安装了python3就不用再安装了,可通过命令:

python3 -V

查询是否已安装python3以及安装的版本。

初始化和更新ports/unix子模块:

make -C ports/unix submodules

编译 ports/unix:

make -C ports/unix

 编译成功后ports/unix/build-standard/路径下会生成一个micropython文件,这个和github上展示的不一样,github展示的是在ports/unix/路径下生成一个micropython文件。

注意:如果编译出错,请看“遇到问题”章节。 

四、运行demo

运行advanced_demo.py示例,在文件末尾添加以下代码,然后保存。

if __name__ == '__main__':import timewhile True:time.sleep(1)

执行命令运行demo:

./ports/unix/build-standard/micropython lib/lv_bindings/examples/advanced_demo.py 

UI效果: 

五、遇到问题

../../lib/lv_bindings/lvgl/src/drivers/sdl/lv_sdl_window.c: In function ‘texture_resize’:
../../lib/lv_bindings/lvgl/src/drivers/sdl/lv_sdl_window.c:375:5: error: unknown type name ‘SDL_PixelFormatEnum’; did you mean ‘SDL_PixelFormat’?SDL_PixelFormatEnum px_format = SDL_PIXELFORMAT_RGB565;^~~~~~~~~~~~~~~~~~~SDL_PixelFormat
See https://github.com/micropython/micropython/wiki/Build-Troubleshooting
../../py/mkrules.mk:83: recipe for target 'build-standard/lib/lv_bindings/lvgl/src/drivers/sdl/lv_sdl_window.o' failed
make: *** [build-standard/lib/lv_bindings/lvgl/src/drivers/sdl/lv_sdl_window.o] Error 1
make: Leaving directory '/home/caiyong/share/lv_micropython/ports/unix'

不知道的SDL_PixelFormatEnum类型,可能是SDL2版本不匹配,打开/usr/include/SDL2/下的一些.h文件,也没有找到SDL_PixelFormatEnum声明。

解决方法:

打开lv_micropython/lib/lv_bindings/lvgl/src/drivers/sdl/lv_sdl_window.c文件,修改代码。

将:

#if LV_COLOR_DEPTH == 32SDL_PixelFormatEnum px_format = SDL_PIXELFORMAT_RGB888; /*same as SDL_PIXELFORMAT_RGB888, but it's not supported in older versions*/
#elif LV_COLOR_DEPTH == 24SDL_PixelFormatEnum px_format = SDL_PIXELFORMAT_BGR24;
#elif LV_COLOR_DEPTH == 16SDL_PixelFormatEnum px_format = SDL_PIXELFORMAT_RGB565;

改为:

#if LV_COLOR_DEPTH == 32Uint32 px_format = SDL_PIXELFORMAT_RGB888; /*same as SDL_PIXELFORMAT_RGB888, but it's not supported in older versions*/
#elif LV_COLOR_DEPTH == 24Uint32 px_format = SDL_PIXELFORMAT_BGR24;
#elif LV_COLOR_DEPTH == 16Uint32 px_format = SDL_PIXELFORMAT_RGB565;

使用 Uint32代替SDL_PixelFormatEnum定义px_format 变量。

相关文章:

lv_micropython to download and building

想要在ESP32-C3使用Micropython开发GUI,所以需要编译lv_micropython,当前github上的版本是9.1.0。 一、开发环境 因为编译lv_micropython需要在linux系统下,但是我的电脑是windows系统,所以我在windows系统上安装了VMware虚拟机&…...

二叉树练习day.9

669.修剪二叉搜索树 链接:. - 力扣(LeetCode) 题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变…...

2024年第十七届“认证杯”数学中国数学建模网络挑战赛B题思路

B题 神经外科手术的定位与导航 人的大脑结构非常复杂,内部交织密布着神经和血管,所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术,通常需要将颅骨打开一个(或几个)圆形窗口,将病变部位暴露在术野中。但当病变部位较深时,就必…...

【vue】slot 匿名插槽 / 具名插槽

slot父组件向子组件传递数据 匿名插槽–直接写 具名插槽–指定名称 父组件中 子组件中&#xff1a; 代码 App.vue <template><h2>App.vue</h2><!-- 匿名插槽 --><Header><a href"1234567890.com">1234567890</a>&…...

FFmpeg: 自实现ijkplayer播放器-02环境搭建

文章目录 安装环境项目工程配置库文件 安装环境 IDE: Qt5.12 库: ffmpeg-4.2.1-win32SDL 项目工程配置 pro文件 TEMPLATE app TARGET SimpleIJKPlayer DESTDIR bin QT core gui widgets #CONFIG debug #DEFINES _UNICODE WIN64 QT_WIDGETS_LIBwin32 { LIBS -L$$PW…...

Redis从入门到精通(十七)多级缓存(二)Lua语言入门、OpenResty集群的安装与使用

文章目录 前言6.4 Lua语法入门6.4.1 初识Lua6.4.2 Hello World6.4.3 变量6.4.3.1 Lua的数据类型6.4.3.2 声明变量 6.4.4 循环6.4.5 函数6.4.6 条件控制 6.5 实现多级缓存6.5.1 安装和启动OpenResty6.5.2 实现ajax请求反向代理至OpenResty集群6.5.2.1 反向代理配置6.5.2.2 OpenR…...

pytest常用钩子函数

1、什么叫钩子函数 在Pytest框架中&#xff0c;钩子函数是一种允许用户扩展或者自定义测试执行过程的机制。钩子函数允许用户在测试的不同阶段插入自定义的代码&#xff0c;以实现特定的行为&#xff0c;操作或处理。这种插入式的机制使得Pytest具有高度的灵活性和扩展性。 如…...

.Net <% %>

<% %> 语法 : <% import namespace"system.data"%> 用来导入后台命名空间 指令用于指定当页和用户控件编译器处理 ASP.NET Web 窗体页 (.aspx) 和用户控件 (.ascx) 文件时所使用的设置。<% %> 语法 : <% name %> <% getstr() %&g…...

【C语言__编译和链接__复习篇2】

目录 前言 一、翻译环境和运行环境 二、翻译环境 2.1 预处理 2.1 编译 2.1.1 词法分析 2.1.2 语法分析 2.1.3 语义分析 2.2 汇编 2.3 链接 三、运行环境 四、简答主线问题 前言 本篇主要讨论以下问题&#xff1a; 主线问题&#xff1a; 1. 源文件(.c)如何转换成(.exe)文件…...

Jmeter —— 自动录制脚本

1、Jmeter配置 1.1新增一个线程组 1.2Jmeter中添加HTTP代理 1.3配置HTTP代理服务器 修改端口 修改Target Cintroller(目标控制器) 修改Grouping(分组) 编辑录制中的包含和排除 在“URL Patterns to include包含模式”中填入.*(123456).*用以过滤请求地址中不包含123456的请求…...

使用python互相转换AVI、MP4、GIF格式视频文件

一、AVI文件转MP4文件 要将AVI格式的视频转换为 MP4&#xff0c;你可以使用 Python的 moviepy 库。以下是一个示例代码&#xff0c;用于将 AVI 文件转换为 MP4 文件&#xff1a; from moviepy.editor import VideoFileClip# 读取 AVI 文件 clip VideoFileClip("input.a…...

11 Php学习:函数

PHP 内建函数Array 函数 PHP Array 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。 创建 PHP 函数 当您需要在 PHP 中封装一段可重复使用的代码块时&#xff0c;可以使用函数。下面详细解释如何创建 PHP 函数并举例说明。 创建 PHP 函数的语法 PHP 函数的基…...

查询电脑用户名和组信息

在命令行里查看电脑名&#xff1a; c:\>hostname 在命令行里&#xff0c;查看组信息&#xff1a; # 显示本地所有的用户组 c:\>net localgroup #显示administrators组包含的用户信息 c:\>net localgroup administrators # 比如我的显示信息&#xff1a; C:\>ne…...

【Godot4.2】CanvasItem绘图函数全解析 - 9.绘制表格

概述 之前介绍TextLine和TextParagraph的时候&#xff0c;提到了用制表符和设定列宽形式来绘制简易表格&#xff0c;但是很明显&#xff0c;单纯使用此种方式很难获得对表格的精确控制。 所以对于表格绘制问题&#xff0c;我决定单独开坑&#xff0c;单独深入研究。 目前比较…...

部署HDFS集群(完全分布式模式、hadoop用户控制集群、hadoop-3.3.4+安装包)

目录 前置 一、上传&解压 &#xff08;一 &#xff09;上传 &#xff08;二&#xff09;解压 二、修改配置文件 &#xff08;一&#xff09;配置workers文件 &#xff08;二&#xff09;配置hadoop-env.sh文件 &#xff08;三&#xff09;配置core-site.xml文件 &…...

TCP协议简单总结

TCP&#xff1a;传输控制协议 特点&#xff1a;面向连接、可靠通信 TCP的最终目的&#xff1a;要保证在不可靠的信道上实现可靠的传输 TCP主要有三个步骤实现可靠传输&#xff1a;三次握手建立连接&#xff0c;传输数据进行确认&#xff0c;四次挥手断开连接 三次握手建立可靠…...

【Qt 实现录音】

Qt 实现录音源代码: #include <QAudioInput> #include <QAudioDeviceInfo> #include <QAudioRecorder> #include <QFile> #include...

python:算法竞赛入门之一

计算 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;不受长整型位数限制。 编写 fibonacci.py 如下 # -*- coding: utf-8 -*- """ 计算 斐波那契数列&#xff08;Fibonacci sequence&#xff09;""" import sys from …...

【大数据与云计算】虚拟机安装Linux

前言&#xff1a;使用Linux系统对大数据学习必不可少&#xff0c;本文主要介绍虚拟机安装linux的流程 文章目录 一、 下载VMware二、下载Linux三、安装Linux 一、 下载VMware 官网链接 下载VMware-player&#xff0c;一直下一步安装即可。 二、下载Linux 点击链接直接下载&…...

从零开始编写一个cmake构建脚本

简介 本文档介绍cmake构建脚本编写&#xff0c;包含的一些主要元素和命名规范。 cmake构建脚本编写步骤 cmake构建工具版本要明确 # 命令名字要小写&#xff0c;这条语句要求构建工具至少需要版本为3.12或以上 cmake_minimum_required (VERSION 3.12)工程名及库的版本号明确…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...