@TOC
本篇博文主要记叙合宙air800的json数据解析,语言使用luat,IDE使用VScode。
STM32进行JSON数据解析和打包请移步我的上一篇博文。
# 合宙AIR800部分
合宙官方提供的例程中已经提供了JSON数据的解析代码,但是并未通过串口进行接收,因此本博文的合宙AIR800部分我会从以下两部分介绍:①Air800的串口接收②串口接收的数据进行JSON解析
## Air800的串口接收
首先是进行串口的配置和接收、发送函数的回调。
“`lua
–保持系统处于唤醒状态,此处只是为了测试需要,所以此模块没有地方调用pm.sleep("testUart")休眠,不会进入低功耗休眠状态
–在开发“要求功耗低”的项目时,一定要想办法保证pm.wake("testUart")后,在不需要串口时调用pm.sleep("testUart")
pm.wake("testUart")
–注册串口的数据接收函数,串口收到数据后,会以中断方式,调用read接口读取数据
uart.on(UART_ID,"receive",read)
–注册串口的数据发送通知函数
uart.on(UART_ID,"sent",writeOk)
–配置并且打开串口
uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1)
“`
其次是将串口接收到的数据进行储存
“`lua
–[[
函数名:read
功能 :读取串口接收到的数据
参数 :无
返回值:无
]]
local function read()
local data = ""
–底层core中,串口收到数据时:
–如果接收缓冲区不为空,则会以中断方式通知Lua脚本收到了新数据;
–如果接收缓冲器为空,则不会通知Lua脚本
–所以Lua脚本中收到中断读串口数据时,每次都要把接收缓冲区中的数据全部读出,这样才能保证底层core中的新数据中断上来,此read函数中的while语句中就保证了这一点
while true do –当且仅当允许接收时才接收数据
data = uart.read(UART_ID, "*l")–将串口所有数据取出
if not data or string.len(data) == 0 then –如果没有数据就跳出
break
end
json_analysis(data)–json解析
data = "" –清空字符串
end
end
“`
## 串口接收的数据进行JSON解析
“`lua
–[[
函数名:json_analysis
功能 :JSON格式解析数据
]]
local function json_analysis(data)
local tjsondata, result, errinfo = json.decode(data)
if result and type(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
“`
## STM32进行JSON数据发送
[AIR800代码资源](https://www.bilibili.com/video/BV1PT4y1K7Dg)