--[[ 函数名:read 功能 :读取串口接收到的数据 参数 :无 返回值:无 ]] localfunctionread() local data = "" --底层core中,串口收到数据时: --如果接收缓冲区不为空,则会以中断方式通知Lua脚本收到了新数据; --如果接收缓冲器为空,则不会通知Lua脚本 --所以Lua脚本中收到中断读串口数据时,每次都要把接收缓冲区中的数据全部读出,这样才能保证底层core中的新数据中断上来,此read函数中的while语句中就保证了这一点 whiletruedo--当且仅当允许接收时才接收数据 data = uart.read(UART_ID, "*l")--将串口所有数据取出 ifnot data orstring.len(data) == 0then--如果没有数据就跳出 break end json_analysis(data)--json解析 data = ""--清空字符串 end end
串口接收的数据进行JSON解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
--[[ 函数名:json_analysis 功能 :JSON格式解析数据 ]] localfunctionjson_analysis(data) local tjsondata, result, errinfo = json.decode(data) if result andtype(tjsondata) == "table"then--正确解析 --调试输出 log.info("testJson.decode status ", tjsondata["status"]) log.info("status type is ", type(status)) status = tjsondata["status"]--灯的状态 write("{\"status\":" .. string.format("%s", tostring(status)) .. "}")--串口输出Json字符串 else--错误解析 log.info("testJson.decode error", errinfo) end end