ExpressLRS开源代码之工程结构
ExpressLRS开源代码之工程结构
- 1. 源由
- 2. 工程
- 3. 开发环境安装
- 4. pio命令
- 5. ExpressLRS配置
- 6. 硬件认证过程
- 7. 参考资料
1. 源由
ExpressLRS开源代码基于Arduino框架设计,在所支持的硬件环境下,提供900/2400发射机和接收机硬件方案。
该设计提供了一个IO配置文件来更好的解耦软硬件设计,使得整个硬件设计工作和软件设计工作更加独立。
虽然系统复杂,工程结构的理解有一定难度,从方法论的角度看,这种解耦的设计本质上是为了更好的简化设计复杂度。
通过对ExpressLRS开源代码的研读,将会就ExpressLRS开源代码工程做一个简单的介绍,以便更好的进行配置和产品硬件IO的定义。
2. 工程
目前,ExpressLRS开源项目提供两种方式管理工程:1) ExpressLRS Configurator;2) PlatformIO。
从实际使用的角度看:
- 获取代码成功率不高
- 编译代码耗时
- ExpressLRS Configurator界面并不友好
- PlatformIO流行,且对开发者相对友好
因此,这里我们主要围绕PlatformIO + vscode来对工程结构进行介绍(包括使用到的截图)。
PlatformIO在嵌入式市场的独特理念为开发人员提供了一个跨平台工作的现代集成开发环境(云和桌面IDE),
支持许多不同的软件开发工具包(SDK)或框架,包括复杂的调试(调试)、单元测试(单元测试)、自动代码分析(静态代码分析),以及远程管理(远程开发)。
它的架构旨在最大限度地提高开发人员的灵活性和选择,开发人员可以使用图形编辑器或命令行编辑器(PlatformIO Core(CLI)),也可以同时使用两者。
PlatformIO是专业嵌入式系统工程师在多个特定平台上开发解决方案的必备工具。
此外,通过拥有去中心化架构,PlatformIO为新的和现有的开发人员提供了一条快速集成的道路,用于开发商业化产品,并缩短了整体上市时间。
PlatformIO可运行在任何一个现代操作系统上(macOS、MS Windows、Linux、FreeBSD)。
3. 开发环境安装
关于vscode + PlatformIO开发环境的安装,这里将不会展开,请参考:Install PlatformIO for VSCode / Get started
注:如果在Windows环境下,希望在命令行随处可以使用pio命令,请参考以下步骤进行配置。
- In Search, search for and then select: System (Control Panel)
- Click the Advanced system settings link.
- Click Environment Variables. …
- In the Edit System Variable (or New System Variable) window, specify the value of the PATH environment variable. …
- Reopen Command prompt window, and run your java code.

4. pio命令
PlatoformIO(pio)可以认为是一个命令行工具,该命令行工具整合了软件开发工具包(SDK)或框架,详见:PlatformIO Getting Started
开发者在这个开发工具的帮助下,通过其支持的开发板(硬件),将可以快速实现业务逻辑,帮助项目快速业务软件原型。
5. ExpressLRS配置
当然,虽然pio可以帮助快速业务软件原型,但是ExpressLRS开源接收机、发射机基于各种目标硬件,可以形成各种硬件产品配置。
显然,这块内容相对来说是比较复杂的,但是基于pio开发的代码天生具备软硬件通过配置解耦的特性,接下来,就对这个配置工程结构进行分析:
platformio.ini├──> hardware/targets.json│ ├──> hardware/RX/<layout_file>.json│ └──> hardware/RX/<layout_file>.json├──> targets/common.ini│ ├──> python/build_flags.py│ ├──> python/build_env_setup.py│ └──> python/build_html.py //esp series MCU├──> targets/unified.ini├──> targets/betafpv_900.ini //instance of betafpv 900└──> targets/<bandname_frequency>.ini
- 总入口:platformio.ini
- 通用环境变量:targets/common.ini
- 额外特定脚本:
build_flags.py、build_env_setup.py、build_html.py- 硬件目标:
<bandname_frequency>.ini- 目标管脚配置:
hardware/RX/<layout_file>.json、hardware/RX/<layout_file>.json- 所支持厂家产品清单:
hardware/targets.json
6. 硬件认证过程
通常来说,硬件厂商,都希望被开源组织认证,以下便是ELRS官方的认证流程:
Step 1: prototype discussion
Step 2: schematic design (following ExpressLRS_Manufacturer_Design_Guidelines_v1.7.pdf) // checklist
Step 3: schematic review
Step 4: layout design (following ExpressLRS_Manufacturer_Design_Guidelines_v1.7.pdf) // checklist
Step 5: layout review
Step 6: send a few sample out for testing (as ELRS dev requested)
Step 7: If test passed, ELRS dev team will add target for long term support // checklist and ExpressLRS开源之RC链路性能测试
Step 8: the manufacturer sends the production unit (=the same unit which your customers will get) samples to the requested ELRS devs (~10 units). The samples will be reserved in the devs’ hands for future technical support
注:目前最新的硬件设计指南是:ExpressLRS_Manufacturer_Design_Guidelines_v1.7.pdf
7. 参考资料
【1】[ExpressLRS开源之接收机固件编译烧录步骤](https://blog.csdn.net/lida2003/article/details/132518813)
【2】ExpressLRS开源之RC链路性能测试
【3】ExpressLRS开源之基本调试数据含义
【4】ExpressLRS开源代码之框架结构
【5】PlatformIO Getting Started
【6】High-performance Open Source Radio Control Link
相关文章:
ExpressLRS开源代码之工程结构
ExpressLRS开源代码之工程结构 1. 源由2. 工程3. 开发环境安装4. pio命令5. ExpressLRS配置6. 硬件认证过程7. 参考资料 1. 源由 ExpressLRS开源代码基于Arduino框架设计,在所支持的硬件环境下,提供900/2400发射机和接收机硬件方案。 该设计提供了一个…...
fastjson 1.2.24 反序列化导致任意命令执行漏洞复现
拉取docker容器 访问并抓包 修改为POST 方式,文件类型改为json格式,发送json数据包,发送成功 这里安装一个bp的插件 使用安装的插件 可以看到,插件告诉我们这里有漏洞,并且提供了POC 既然我们发现有 rmi ,…...
探秘MySQL三个神秘隐藏列(mysql三个隐藏列) rownum、rowid、oid
探秘MySQL三个神秘隐藏列 MySQL是一款流行的关系型数据库管理系统,被广泛应用于Web应用程序开发和数据存储。然而,MySQL也有一些神秘的隐藏列,这些隐藏列可以帮助我们更好地管理和查询数据。 接下来,我们将探秘MySQL三个神秘隐藏…...
leetcode刷题--数组类
文章目录 1. 485 最大连续1的个数2. 495 提莫攻击3. 414 第三大的数4. 628 三个数的最大乘积5. 645 错误的集合6. 697 数组的度7. 448 找到所有数组中消失的数字9. 41 缺失的第一个正数10. 274 H指数11. 453 最小操作次数使得数组元素相等12. 665 非递减数列13. 283 移动零14. …...
Vue3---uni-app--高德地图引用BUG
先给报错信息:module libs/map//libs/map_min.js is not defined, require args is /libs/map_min.js 查看我引用方法: 本人查阅资料发现 是 require 使用的是 commonJS方式引用说这个适配Vue2可我项目是Vue3应该使用ES6语法糖 然后我有跑了项目发现BU…...
Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录
Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录 目录 Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录 一、简单介绍 二、注意事项 三、环境搭建 git 下载和安装 python 下载和安装 stable-diffusion-webui 下载和安装 测试 stable diffuse w…...
护航数字政府建设,美创科技成为“数字政府建设赋能计划”成员单位
近日,“2023软博会-软件驱动数字政府创新发展论坛”顺利召开,本次论坛由中国信息通信研究院、中国通信标准化协会承办,中国通信标准化协会云计算标准和开源推进委员会、数字政府建设赋能计划支持。 天津市工业和信息化局总经济师杨冬梅、中国…...
Kafka3.0.0版本——消费者(消费者组原理)
目录 一、消费者组原理1.1、消费者组概述1.2、消费者组图解示例1.3、消费者组注意事项 一、消费者组原理 1.1、消费者组概述 Consumer Group(CG):消费者组,由多个consumer组成。形成一个消费者组的条件,是所有消费者…...
天津web前端培训班 前端是否适合零基础学?
随着HTML 5和ECMAScript 6的正式发布,大量的前端业务逻辑,极大地增加了前端的代码量,前端代码的模块化、按需加载和依赖管理势在必行,因此Web前端越来越被人们重视。 Web前端的就业前景 Web前端开发工程师薪资持续走高ÿ…...
Paimon+StarRocks 湖仓一体数据分析方案
本文整理自阿里云高级开发工程师曾庆栋(曦乐)在 Streaming Lakehouse Meetup 分享的内容,深入探讨了传统数据仓库分析、PaimonStarRocks湖仓一体数据分析、StarRocks 与 Paimon 的协同使用方法与实现原理,以及StarRocks 社区湖仓分…...
界面控件DevExtreme(v23.2)下半年发展路线图
在这篇文章中,我们将介绍DevExtreme在v23.2中发布的一些主要特性,这些特性既适用于DevExtreme JavaScript (Angular、React、Vue、jQuery),也适用于基于DevExtreme的ASP. NET MVC/Core控件。 DevExtreme包含全面的高性能和响应式UI小部件集合…...
docker镜像配置mysql、redis
mysql 拉取mysql镜像 docker pull mysql:5.7创建并运行mysql容器 docker run -p 3306:3306 --name mysql\-v /mydata/mysql/log:/var/log/mysql\-v /mydata/mysql/data:/var/lib/mysql\-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD123456\-d mysql:5.7-e 设置…...
CentOS7无法连接网络 右上角网络图标消失
在使用 linux 的过程中,有时会出现网络图标消失的问题,这时系统会没有网络。 有些 linux 的网络连接由 NetworkManager 管理, 问题应由它解决。 先执行一下 systemctl restart NetworkManager 看有没有效果。 原因一 :NetworkMan…...
为什么创建 Redis 集群时会自动错开主从节点?
哈喽大家好,我是咸鱼 在《一台服务器上部署 Redis 伪集群》这篇文章中,咸鱼在创建 Redis 集群时并没有明确指定哪个 Redis 实例将担任 master,哪个将担任 slave /usr/local/redis-4.0.9/src/redis-trib.rb create --replicas 1 192.168.149…...
分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay
文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求ÿ…...
【动手学深度学习】--语言模型
文章目录 语言模型1.学习语言模型2.马尔可夫模型与N元语法3.自然语言统计4.读取长序列数据4.1随机采样4.2顺序分区 语言模型 学习视频:语言模型【动手学深度学习v2】 官方笔记:语言模型和数据集 在【文本预处理】中了解了如何将文本数据映射为词元&…...
uni-app 之 目录结构
目录结构: 工程简介 | uni-app官网 (dcloud.net.cn) pages/index/index.vue 页面元素等 static 静态文件,图片 字体文件等 App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 index.html 项目运行最终生成的文件 main.js 引用的…...
批量上传图片添加水印
思路: 1、循环图片列表,批量添加水印。 2、与之对应的html页面也要魂环并添加水印。 代码实现: <view style"width: 0;height: 0;overflow: hidden;position:fixed;left: 200%;"><canvas v-for"(item,index) in …...
CPU和GPU性能优化
在Unity游戏开发中,优化CPU和GPU的性能是非常重要的,可以提高游戏的运行效率、降低功耗和延迟,并提高用户体验。以下是一些优化CPU和GPU性能的方法: 1.优化游戏逻辑和算法 减少不必要的计算和内存操作,例如避免频繁的…...
虚拟机(三)VMware Workstation 桥接模式下无法上网
目录 一、背景二、解决方式方式一:关闭防火墙方式二:查看桥接模式下的物理网卡是否对应正确方式三:查看物理主机的网络属性 一、背景 今天在使用 VMware Workstation 里面安装的 Windows 虚拟机的时候,发现虽然在 NAT 模式下可以…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
