Skip to content
On this page

串口模块

获取设备所有接口名称

获取设备所有接口名称

lua
local ts = listDevNodes([filter_string])

功能:获取系统中所有设备接口的名称列表,可选择性地通过字符串进行过滤。

参数

  • filter_string:字符串 (可选),用于过滤设备名称的字符串。如果提供,只返回名称中包含此字符串的设备。

返回值table,一个包含所有设备接口名称的列表。

示例

lua
-- 获取所有设备节点
local all_nodes = listDevNodes()
if all_nodes then
    print("所有设备节点:")
    for _, name in ipairs(all_nodes) do
        print("- " .. name)
    end
end

-- 只获取与 tty 相关的设备节点
local tty_nodes = listDevNodes("tty")
if tty_nodes then
    print("TTY设备节点:")
    for _, name in ipairs(tty_nodes) do
        print("- " .. name)
    end
end

打开串口

打开串口

lua
local sp, err = openSerial(port_name, baud_rate)

功能:打开指定的串口设备并设置波特率,返回一个串口操作对象。

参数

  • port_name:字符串,串口号的名称,例如 "/dev/ttyACM0""/dev/ttyUSB0"
  • baud_rate:整数,串口的波特率,例如 1152009600

返回值

  • spuserdata,成功打开串口后返回的串口实例变量;如果失败则为 nil
  • err:字符串,如果打开失败,返回错误信息;否则为 nil

示例

lua
local port_name = "/dev/ttyACM0" -- 假设使用 /dev/ttyACM0
local baud_rate = 115200

local sp, err = openSerial(port_name, baud_rate)
if not sp then
    print("打开串口失败:", err)
    return
else
    print("串口 " .. port_name .. " 已成功打开,波特率 " .. baud_rate)
    -- 可以在这里进行读写操作
    -- sp:close() -- 记得在不需要时关闭串口
end

写入数据

向串口写入数据

lua
sp:write(data_string)

功能:向已打开的串口写入字符串数据。

参数

  • data_string:字符串,要写入串口的数据。

返回值boolean,写入成功返回 true,失败返回 false

示例

lua
local sp, err = openSerial("/dev/ttyACM0", 115200)
if sp then
    local success = sp:write("hello from Lua!\r\n")
    if success then
        print("数据写入成功")
    else
        print("数据写入失败")
    end
    -- sp:close() -- 在不再使用串口时关闭
end

读一行

读一行数据

lua
local data = sp:read(size, timeout_ms)

功能:从串口读取指定最大长度的数据,并设置超时时间。

参数

  • size:整数,最大读取字节数。
  • timeout_ms:整数,读取操作的超时时间,单位为毫秒。

返回值string,读取到的数据字符串;如果在超时时间内没有数据或发生错误,返回 nil

示例

lua
local sp, err = openSerial("/dev/ttyACM0", 115200)
if sp then
    print("等待接收数据 (最多128字节,超时200ms)...")
    local received_data = sp:read(128, 200)
    if received_data then
        print("收到数据: " .. received_data)
    else
        print("未收到数据或读取超时")
    end
    -- sp:close() -- 在不再使用串口时关闭
end

关闭串口

关闭串口

lua
sp:flush()

功能:刷新串口的输出缓冲区。注意:尽管文档标题为“关闭串口”,但 flush() 函数的常规作用是确保所有待发送数据都已从内部缓冲区写入物理端口。一个完整的串口操作对象通常会提供一个 close() 方法来显式关闭串口连接并释放资源。请检查您的API是否提供了 sp:close() 方法来完全关闭串口。

参数:无。

返回值:无。

示例

lua
local sp, err = openSerial("/dev/ttyACM0", 115200)
if sp then
    sp:write("Final data to send\r\n")
    sp:flush() -- 确保所有数据都已发送
    print("串口缓冲区已刷新。")

    -- 如果API提供了 sp:close() 方法,建议在此处调用以关闭串口
    -- sp:close()
    -- print("串口已关闭。")
else
    print("打开串口失败:", err)
end