如何使用 ELRS 遥测将有效负载从 EdgeTX Lua 脚本发送到 Betaflight

Payload

掌握 EdgeTX 和 Betaflight 之间的有效负载通信

您是否曾经盯着飞行中的 FPV 无人机,想知道数据如何在发射器和飞行控制器之间无缝流动?对于那些探索 EdgeTX Lua 脚本 的人来说,通过 ExpressLRS (ELRS) 遥测 将有效负载发送到 Betaflight 驱动的飞行控制器一开始可能会感到不知所措。 📡

当我第一次开始时, crossfireTelemetryPush 功能似乎很神秘。当然,有一些例子,但理解字节级通信才是真正的挑战。一个简单的脚本如何向无人机的大脑发送命令?我也在同一条船上,寻找清晰度。

想象一下:您拿着收音机,按下按钮,看着飞行控制器几乎立即做出响应。无论您是控制 LED、请求遥测数据还是调整 MSP 参数,当您掌握有效负载创建时,EdgeTX 脚本的强大功能都会发挥作用。 🚀

在本文中,我们将逐步分解用于 FPV 遥测的 Lua 脚本,重点关注使用 ELRS 遥测构建和发送有效负载。没有复杂的术语——只有简单易懂的示例来帮助您入门。最后,您将自信地编写与 Betaflight 对话的脚本,解锁对无人机的新控制层。让我们深入了解一下!

命令 描述
crossfireTelemetryPush 将遥测有效负载从无线电发送到接收器。该函数接受帧类型和结构化数据数组。
CONST table 存储地址(例如 Betaflight)和帧类型等常量值。保持脚本模块化且易于维护。
buildPayload 通过将地址、命令字节和可选数据组合到数组中来构造遥测帧。
debugPayload 以十六进制格式打印有效负载,以调试和验证字节级通信。
table.insert 构建有效负载结构时,将数据字节动态添加到 Lua 数组。
if data ~= nil 在将附加数据附加到有效负载之前检查是否存在附加数据。避免通讯中的零错误。
print() 输出用于调试的状态消息,例如遥测传输成功或失败。
string.format 将有效负载数据格式化为可读的十六进制字符串以用于调试目的。

使用 ELRS 遥测将有效负载从 EdgeTX Lua 脚本发送到 Betaflight

此示例演示了如何创建有效负载并使用 EdgeTX Lua 脚本发送用于 FPV 无人机遥测,特别是通过 ExpressLRS 与 Betaflight 飞行控制器进行通信。该脚本是模块化的、带注释的,并遵循优化的实践。

--[[    Lua Script for EdgeTX to send payloads via ELRS telemetry to Betaflight    Communication is established using the 'crossfireTelemetryPush' function    Example 1: Basic payload structure with error handling and modular functions ]]
local CONST = {
   address = { betaflight = 0xEE, transmitter = 0xDF },
   frameType = { displayPort = 0x2D }
}

-- Function to prepare and send the payload to Betaflight
local function sendPayloadToBetaflight(cmd, data)
    local payloadOut = { CONST.address.betaflight, CONST.address.transmitter, cmd }
    -- Add additional data to the payload if provided
    if data ~= nil then
        for i = 1, #data do
            payloadOut[3 + i] = data[i]
        end
    end
    -- Send the telemetry frame
    local success = crossfireTelemetryPush(CONST.frameType.displayPort, payloadOut)
    if success then
        print("Payload successfully sent to Betaflight!")
    else
        print("Error: Payload failed to send.")
    end
end

-- Example usage
local command = 0x05 -- Example command
local data = { 0x01, 0x02, 0x03, 0x04 } -- Example payload data
sendPayloadToBetaflight(command, data)
--[[    Notes:   - The CONST table defines addresses and frame types to keep the script modular.   - Error handling ensures feedback on successful or failed transmissions.]]

使用模块化命令和调试进行高级有效负载发送

此方法包括调试日志和动态有效负载生成,以使用 EdgeTX Lua 脚本增强遥测通信。

--[[    Advanced Example: Modular functions, dynamic payload generation, and debugging output    for sending data via ELRS telemetry.]]
local CONST = {
    betaflightAddress = 0xEE,
    txAddress = 0xDF,
    frameType = 0x2D
}

-- Debug function to print payloads in hex format
local function debugPayload(payload)
    local debugString = "Payload: "
    for i = 1, #payload do
        debugString = debugString .. string.format("0x%02X ", payload[i])
    end
    print(debugString)
end

-- Function to dynamically build payloads
local function buildPayload(command, data)
    local payload = { CONST.betaflightAddress, CONST.txAddress, command }
    if data then
        for i, value in ipairs(data) do
            table.insert(payload, value)
        end
    end
    return payload
end

-- Function to send telemetry payload
local function sendTelemetry(command, data)
    local payload = buildPayload(command, data)
    debugPayload(payload) -- Print the payload for debugging
    local success = crossfireTelemetryPush(CONST.frameType, payload)
    if success then
        print("Telemetry sent successfully.")
    else
        print("Telemetry failed to send.")
    end
end

-- Example usage
local testCommand = 0x10 -- Example command ID
local testData = { 0x0A, 0x0B, 0x0C }
sendTelemetry(testCommand, testData)
--[[    Debugging output will print the exact bytes being sent,    making it easier to verify payload structure and troubleshoot issues.]]

使用 EdgeTX Lua 构建 ELRS 通信的有效负载

在这些示例中,脚本侧重于创建 有效负载 并通过 ELRS 遥测 将其发送,以与 Betaflight 飞行控制器 进行通信。这是使用特定的 Lua 函数完成的,例如 ,它允许无线电发射器发送结构化遥测帧。最简单形式的有效负载由格式化为数组的特定地址和命令组成。该脚本的每个部分都旨在优化 EdgeTX 无线电和 Betaflight 之间建立通信的方式。 🛠️

首先, 表通过存储飞行控制器和发射器的地址以及用于通信的帧类型发挥着至关重要的作用。例如,Betaflight 地址可能设置为 0xEE,代表无人机的飞行控制器。使用常量表可确保模块化,因此可以轻松更新地址,而无需重写大部分代码。这 函数通过将地址、命令和数据字段附加到 Lua 数组中来动态构造遥测帧。这种模块化方法使代码保持干净,并且可以在不同的命令或遥测功能中重用。

这里最关键的组件之一是 功能。该命令充当将有效负载从无线电发送到接收器的桥梁,Betaflight 飞行控制器可以在接收器上处理它。例如,该函数可以使用特定命令(例如启用 LED 或查询遥测数据)推送“0x2D”等帧类型。为了确保可靠性,实施错误处理来确认有效负载是否成功发送。如果不是,脚本会输出一条错误消息以进行调试,这在实际飞行场景中测试脚本时很有帮助。 🚁

最后, 函数提供了一种可视化正在发送的遥测数据的方法。它将有效负载的每个字节转换为十六进制格式,以便于调试。在处理字节级通信时,此步骤至关重要,因为您可以直接验证有效负载的结构。通过组合这些组件(模块化功能、调试实用程序和动态有效负载生成),这些脚本为高级遥测通信提供了坚实的基础。通过一些练习,您可以扩展此方法来控制 LED、触发警报,甚至向无人机的飞行控制器发送自定义命令。

使用 EdgeTX Lua 解锁高级遥测通信

在 EdgeTX 中通过 ELRS 遥测发送有效负载的一个经常被忽视但至关重要的方面是数据格式影响通信可靠性的方式。当您发送有效负载时,仅仅打包命令和数据是不够的;了解字节结构、帧头和错误检查机制可确保通信顺利进行。每个遥测帧都有特定的顺序:发送者地址、接收者地址、命令 ID 和可选数据。正确地构建它可以显着改善飞行控制器处理您的指令的方式。 ✈️

另一个重要因素是为读取传感器数据、更改飞行参数甚至触发 LED 等任务选择正确的命令 ID。例如,Betaflight 的 MSP(MultiWii 串行协议)定义了与这些任务一致的某些命令。要使用 EdgeTX Lua 脚本 实现此功能,您可以组合以下函数 和表构建逻辑来发送确切的字节序列。通过参考 Betaflight MSP 文档,您可以将每个遥测命令映射到 Lua 脚本中的特定函数以进行精确控制。

此外,在现实环境中测试这些脚本有助于弥合理论与实践之间的差距。例如,在调试时,您可能会遇到数据未对齐或传输延迟的情况。使用“print()”等记录功能,甚至构建一个简单的 LED 响应测试,都可以验证您的有效负载是否已正确格式化并被无人机接收。随着时间的推移,您将开发的脚本不仅可以发送命令,还可以优雅地处理错误,确保更顺畅的飞行体验。 🚀

  1. 如何 功能工作?
  2. 这 功能将遥测帧从发射器发送到飞行控制器。它接受帧类型和表示有效负载数据的数组。
  3. 遥测有效负载的关键组件是什么?
  4. 遥测有效负载由发送器地址、接收器地址、命令 ID 和可选数据字节组成。它们被组合成一个数组并通过遥测发送。
  5. 为什么是 在 EdgeTX Lua 脚本中使用?
  6. 这 存储固定值,例如地址和帧类型。它使代码模块化、更清晰并且在发生更改时更易于维护。
  7. 如何在遥测通信期间调试有效负载问题?
  8. 使用 显示有效负载数据以进行调试。您还可以使用以下命令将字节转换为十六进制格式 为了清楚起见。
  9. 我可以使用单个 Lua 脚本发送多个命令吗?
  10. 是的,您可以通过使用以下函数动态构建不同的有效负载来发送多个命令 并按顺序发送它们。

了解如何在 EdgeTX 中使用 Lua 发送有效负载可以解锁 FPV 无人机的新控制级别。通过利用 ELRS 遥测,您可以与 Betaflight 高效通信,从而实现实时调整和自定义功能。 🚁

无论是查询数据还是触发无人机命令,此处提供的模块化脚本都为您进一步探索和创新奠定了坚实的基础。通过练习,您将有信心为任何遥测用例定制脚本,从而增强您的整体飞行体验。 ✈️

  1. EdgeTX Lua 脚本的文档可以在以下位置浏览: EdgeTX 官方文档
  2. 有关 Betaflight MSP 通信的详细信息,请访问 Betaflight MSP 维基
  3. Lua 脚本中使用的 Crossfire Telemetry 函数的参考可以在 ExpressLRS 维基
  4. FPV 无人机的 Lua 遥测脚本示例在 ExpressLRS GitHub 存储库
  5. 有关更多示例和社区讨论,请访问 RC团体论坛