前言
NXP 提供了基于 LVGL 图形库快速开发用户界面的开发工具 Gui Guider,可以通过拖放编辑小部件、动画修改样式的方式创建 GUI,并且自动生成代码,在上位机仿真或移植到 MCU 里,实现界面的快速开发。
本文讲述了使用 GUI Guider 生成界面并应用在 ESP32S3R8,目前 GUI Guider 只支持到 LVGL8,所以本文会以 ESP-IDF + LVGL8 的形式说明。
环境如下:
123456MCU: ESP32S3R8开发框架: ESP-IDF v5.3.1LVGL: V8.3.10系统: Ubuntu(windows 一样,两种环境都验证过)LCD: CT77916TP: CST816
工程的创建、LCD、TP 等这些驱动的设置可以参考上一篇文章:ESP32S3R8+LVGL9+ST77916+CST816S | nixgnauhcuy
需要说明的是,因为上一篇用的 LVGL9,这一篇更改为 LVGL8,所以略微会有不同,不过基本相似,更改如下:
1234idf.py add-dependency "lvgl/lvgl^8.3.10&q ...
前言
最近购入了一个主控是 ESP32S3R8,屏幕是 1.8 寸圆屏,分辨率 360x360 的小玩具,屏幕驱动芯片是 CT77916,触摸是 CST816。由于没有提供源码,所以想用 ESP-IDF+LVGL 驱动起来玩一下。
实现
工程创建
ESP-IDF 开发环境搭建我就不赘述了,感兴趣可以看看我之前用 ESP32-C3 搭建的流程,ESP32-C3 开发环境搭建。
首先,创建一个基础工程,这里我选用了 sample_project ,操作如下,
保存好工程的位置后,先不着急编译,导入需要的组件,组件仓库可以访问 ESP Component Registry 。
搜索 LVGL,
复制对应的命令,
其他的组件我就不一一列出来了,具体需要的组件如下:
1234idf.py add-dependency "lvgl/lvgl^9.2.2"idf.py add-dependency "espressif/esp_lvgl_port^2.4.3"idf.py add-dependency "espressif/esp_lcd_st ...
前言
记录制作 .axf 文件转换为 .bin 文件的 python 脚本过程遇到的难题和思考,脚本地址是nixgnauhcuy/python_script (github.com)。
之前写过一篇 《关于嵌入式的bin、hex、axf、map》的文章,讲述了 .bin、.hex、.axf、.map 文件的概念和用途,那个时候对 .axf 文件的理解过于片面,在制作脚本的过程中,发现了自己的不足,所以这次就来详细记录一下。
之前都是依赖于 fromelf.exe 工具来转换 .axf 文件为 .bin 文件,但是不知道具体的实现过程,就想自己体验一下这个流程,所以尝试用 python 实现。
准备工作
在制作脚本之前,我用 Keil 实现了某款芯片的程序,生成了 .axf 文件,然后使用 fromelf.exe 工具转换为 .bin 文件,这里生成的 .axf 文件和 .bin 文件就作为我后面验证脚本的输入文件和验证是否正确的输出文件。
初步实现
先分析 .axf 文件,打开后,第一反应,“WTF,这怎么看!”,
第一眼,一脸懵逼,无从下手,所以我用对比工具对比下,与 .bin 文 ...
完整代码我已经上传到 Github 上了,可前往 https://github.com/nixgnauhcuy/QCustomPlot_Pyqt_Study 获取。
完整文章路径:
Pyqt QCustomPlot 简介、安装与实用代码示例(一) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(二) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(三) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(四) | nixgnauhcuy
前言
继上文,继续补充官方示例 demo 实现~
实用代码示例
Interaction Example
The interaction example showing the user selection of graphs
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555 ...
完整代码我已经上传到 Github 上了,可前往 https://github.com/nixgnauhcuy/QCustomPlot_Pyqt_Study 获取。
完整文章路径:
Pyqt QCustomPlot 简介、安装与实用代码示例(一) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(二) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(三) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(四) | nixgnauhcuy
前言
继上文,继续补充官方示例 demo 实现~
实用代码示例
Line Style Demo
A demonstration of several line styles
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import sys, mathfrom PyQt5.QtWidgets ...
完整代码我已经上传到 Github 上了,可前往 https://github.com/nixgnauhcuy/QCustomPlot_Pyqt_Study 获取。
完整文章路径:
Pyqt QCustomPlot 简介、安装与实用代码示例(一) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(二) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(三) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(四) | nixgnauhcuy
前言
继上文,继续补充官方示例 demo 实现~
实用代码示例
彩色图演示
A 2D color map with color scale. Color scales can be dragged and zoomed just like axes
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495 ...
完整代码我已经上传到 Github 上了,可前往 https://github.com/nixgnauhcuy/QCustomPlot_Pyqt_Study 获取。
完整文章路径:
Pyqt QCustomPlot 简介、安装与实用代码示例(一) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(二) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(三) | nixgnauhcuy
Pyqt QCustomPlot 简介、安装与实用代码示例(四) | nixgnauhcuy
简介
QCustomPlot 是一个用于绘图和数据可视化的 Qt C++ 小部件。它没有其他依赖项,并且有详细的文档说明。这个绘图库专注于制作高质量的、适合发表的二维图表和图形,同时在实时可视化应用中提供高性能。
QCustomPlot 可以导出为多种格式,例如矢量化的 PDF 文件和光栅化图像(如 PNG、JPG 和 BMP)。QCustomPlot 是在应用程序内部显示实时数据以及为其他媒体制作高质量图表的解决方案。
QCu ...
前言
这一篇与上一篇介绍 Keil MDK IDE 基本一致,所以直接引用上一篇的前言。
Keil MDK 是嵌入式开发中高频使用的 IDE 工具,许多芯片的 SDK 都包含 keil 对应的开发工程。
最近在使用过程中,同事提出了一个需求,希望将编译的输出文件(如 bin、hex、axf、map)统一输出到整个项目的根目录,便于统一管理,这样就不用每次进入项目里,一层一层的查找输出的文件。这些文件还可能分布在不同的地方,例如 ./Listings 目录中存放 .bin 和 .map 文件,而 ./Objects 目录中存放 .axf 和 .hex 文件。这对不了解项目结构的工程师非常不友好。
对于他的考虑,我完全赞同,因为在一个项目中,后续接手的人可能不需要了解代码的具体实现和工程结构,他们只需要找到对应的输出文件,拿来对芯片进行烧录。
既然需求有了,那么就需要考虑怎样实现了,原先我想的是在根目录里,写一个 python 脚本,直接运行定位到具体文件路径并拷贝出来,但是这样还需要多一个步骤,就是手动运行脚本,所以不是特别的自动化,那么有没有办法直接在运行的过程中,就将文件处理好呢? ...
前言
Keil MDK 是嵌入式开发中高频使用的 IDE 工具,许多芯片的 SDK 都包含 keil 对应的开发工程。
最近在使用过程中,同事提出了一个需求,希望将编译的输出文件(如 bin、hex、axf、map)统一输出到整个项目的根目录,便于统一管理,这样就不用每次进入项目里,一层一层的查找输出的文件。这些文件还可能分布在不同的地方,例如 ./Listings 目录中存放 .bin 和 .map 文件,而 ./Objects 目录中存放 .axf 和 .hex 文件。这对不了解项目结构的工程师非常不友好。
对于他的考虑,我完全赞同,因为在一个项目中,后续接手的人可能不需要了解代码的具体实现和工程结构,他们只需要找到对应的输出文件,拿来对芯片进行烧录。
既然需求有了,那么就需要考虑怎样实现了,原先我想的是在根目录里,写一个 python 脚本,直接运行定位到具体文件路径并拷贝出来,但是这样还需要多一个步骤,就是手动运行脚本,所以不是特别的自动化,那么有没有办法直接在运行的过程中,就将文件处理好呢?
当然是有的,不然就没有这篇文章了,Keil 提供的 Command Items,可以 ...
最近在学习蓝牙多点测距的内容,故此记录一下。
基于 RSSI 的距离计算方法
在蓝牙定位技术中,最常用的方法是基于信号强度 RSSI 值,测距方法的本质是通过计算当前环境下信号强度与距离的关系,从信号强度的 RSSI 值计算出两个设备之间的距离。
首先 RSSI 信号的衰减和距离的对数成正比,在最简单的情况下,RSSI 的计算方式可以表示为:
RSSI=TxPower−10∗n∗log(d)RSSI = TxPower - 10 * n * log(d)
RSSI=TxPower−10∗n∗log(d)
转换为距离公式为:
d=10(TxPower−RSSI10∗n)d = 10 ^{(\frac{TxPower - RSSI}{10 * n})}
d=10(10∗nTxPower−RSSI)
其中,
TxPower - 发射和接收相隔 1 米时的信号强度
d - 距离
n - 环境衰减因子
RSSI - 接收信号强度
使用 C 代码实现:
1234#define ALG_LOG_10_VALUE 2.3026#define ALG_TXPOWER_1M 50#define A ...