From 0e9464bb704a57cb7d6db0191c8443cb50446949 Mon Sep 17 00:00:00 2001 From: Xiangao Lu Date: Wed, 22 Apr 2026 16:08:45 +0800 Subject: [PATCH] feat(lua_uart): add uart lua script demo --- .../lua_scripts/basic_uart.lua | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 components/lua_modules/lua_module_uart/lua_scripts/basic_uart.lua diff --git a/components/lua_modules/lua_module_uart/lua_scripts/basic_uart.lua b/components/lua_modules/lua_module_uart/lua_scripts/basic_uart.lua new file mode 100644 index 0000000..58c1859 --- /dev/null +++ b/components/lua_modules/lua_module_uart/lua_scripts/basic_uart.lua @@ -0,0 +1,99 @@ +local uart = require("uart") +local delay = require("delay") + +local PORT = 1 +local TX_GPIO = 14 +local RX_GPIO = 13 +local BAUD_RATE = 115200 + +local function close_uart(u) + if not u then + return + end + + local ok, err = pcall(u.close, u) + if not ok then + print("[basic_uart] WARN: close failed: " .. tostring(err)) + end +end + +local function main() + print(string.format( + "[basic_uart] open UART%d tx=%d rx=%d baud=%d", + PORT, TX_GPIO, RX_GPIO, BAUD_RATE)) + + local ok, u = pcall(uart.new, PORT, TX_GPIO, RX_GPIO, BAUD_RATE) + if not ok then + print("[basic_uart] ERROR: uart.new failed: " .. tostring(u)) + return + end + + local success, err = pcall(u.flush_input, u) + if not success then + print("[basic_uart] ERROR: flush_input failed: " .. tostring(err)) + close_uart(u) + return + end + + local request = "AT\r\n" + success, err = pcall(u.write, u, request) + if not success then + print("[basic_uart] ERROR: write failed: " .. tostring(err)) + close_uart(u) + return + end + print("[basic_uart] sent request: " .. request:gsub("[\r\n]+", "\\r\\n")) + + delay.delay_ms(50) + + local ok_line, reply = pcall(u.read_line, u, 128, 500) + if not ok_line then + print("[basic_uart] ERROR: read_line failed: " .. tostring(reply)) + close_uart(u) + return + end + + if #reply > 0 then + local trimmed = reply:gsub("[\r\n]+$", "") + print("[basic_uart] received line: " .. trimmed) + else + print("[basic_uart] no line received within 500 ms") + end + + print("[basic_uart] polling RX buffer for 2 seconds...") + for _ = 1, 100 do + local ok_avail, available = pcall(u.available, u) + if not ok_avail then + print("[basic_uart] ERROR: available failed: " .. tostring(available)) + close_uart(u) + return + end + + if available > 0 then + local read_len = available + if read_len > 64 then + read_len = 64 + end + + local ok_chunk, chunk = pcall(u.read, u, read_len, 0) + if not ok_chunk then + print("[basic_uart] ERROR: read failed: " .. tostring(chunk)) + close_uart(u) + return + end + + if #chunk > 0 then + print(string.format( + "[basic_uart] rx chunk (%d bytes): %q", + #chunk, chunk)) + end + end + + delay.delay_ms(20) + end + + close_uart(u) + print("[basic_uart] done") +end + +main()