zoukankan      html  css  js  c++  java
  • (5)air202读取串口数据并上传到阿里云显示

    一、首先进行云端设置

    根据串口助手显示的信息,以及模块文档说明我们可以知道
    在这里插入图片描述
    其中red和ir是红光LED的原始数据, HR表示心率值, HRvalid是心率是否有效标识, SP02是血氧数值,,SPO2valid是血氧是否有效标识。
    在产品中添加需要的自定义功能
    在这里插入图片描述

    二、修改云下设备代码

    找到air202串口demo
    在这里插入图片描述
    仿照串口程序修改你的air202阿里云连接程序
    下图中为uart demo main.lua加载的测试模块
    在这里插入图片描述
    其他都和aliyun中main相同,又因我们只需要使用一个串口因此将testUart.lua整合到testAliYun.lua中即可

    testAliYun.lua代码顶部添加调用文件

    require"utils"
    

    在顶部添加变量

    --串口ID,1对应uart1
    --如果要修改为uart2,把UART_ID赋值为2即可
    local UART_ID = 1
    --串口读到的数据缓冲区
    local rdbuf = ""
    
    

    将串口demo中最后的串口发送数据的函数全部复制到testALiYun.lua底部

    --[[
    函数名:write
    功能  :通过串口发送数据
    参数  :
            s:要发送的数据
    返回值:无
    ]]
    function write(s)
        log.info("testUart.write",s)
        uart.write(UART_ID,s.."
    ")
    end
    
    local function writeOk()
        log.info("testUart.writeOk")
    end
    
    
    --保持系统处于唤醒状态,此处只是为了测试需要,所以此模块没有地方调用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)
    --如果需要打开“串口发送数据完成后,通过异步消息通知”的功能,则使用下面的这行setup,注释掉上面的一行setup
    --uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1,nil,1)
    

    注释掉原来的发布函数,重写发布函数

    --发布一条QOS为1的消息
    function publishTest()
    	local jsondata
    	if sConnected then
    		--注意:在此处自己去控制payload的内容编码,aLiYun库中不会对payload的内容做任何编码转换
    		while true do        
    			data = uart.read(UART_ID,"*l")
    			--这一部分放在前面是为字符串搜索和转化提供点时间
    			local HR=string.match(data,"HR=(%-?%d+)",1)
    			local HRV=string.match(data,"HRvalid=(%d+)",1)
    			local SPO2=string.match(data,"SpO2=(%-?%d+)",1)
    			local SPO2V=string.match(data,"SPO2Valid=(%d+)",1)
    			local HR=tonumber(HR)--这是将字符串转化为数值
    			local HRV=tonumber(HRV)--这是将字符串转化为数值
    			local SPO2=tonumber(SPO2)--这是将字符串转化为数值
    			local SPO2V=tonumber(SPO2V)--这是将字符串转化为数值
    			basedata["params"]["HR"]=HR	--这是赋值湿度数值
    			basedata["params"]["HRV"]=HRV	--这是赋值湿度数值
    			basedata["params"]["SPO2"]=SPO2	--这是赋值湿度数值
    			basedata["params"]["SPO2V"]=SPO2V	--这是赋值湿度数值
    			local vbat = misc.getVbatt()
    			basedata["params"]["LightVolt"] = vbat/1000
    			if not data or string.len(data) == 0 then break end
    
    			
    			jsondata=json.encode(basedata)--进行编码传输
    			aLiYun.publish("/sys/" .. PRODUCT_KEY .. "/" .. getDeviceName() .. "/thing/event/property/post", jsondata, 1,publishTestCb,"publishTest_"..publishCnt)
    		end  
    	 
    	end
    end
    

    最后烧写修改好的程序即可

    END

  • 相关阅读:
    迭代模型
    螺旋模型
    瀑布模型
    V模型
    codeforces411div.2
    专题1:记忆化搜索/DAG问题/基础动态规划
    Python
    字符串的相关操作方法
    Python基本数据类型
    编码
  • 原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232526.html
Copyright © 2011-2022 走看看