Appearance
串口模块
获取设备所有接口名称
获取设备所有接口名称
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:整数,串口的波特率,例如115200或9600。
返回值:
sp:userdata,成功打开串口后返回的串口实例变量;如果失败则为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