(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭

最终要实现的功能:

1、STM32采集温湿度通过串口1发送至AIR800,然后通过AIR800将温湿度上传至阿里云
2、阿里云物联网云平台下发命令通过AIR800控制STM32的LED亮灭(打开或关闭功能,或者定时 自动打开和自动关闭)
3、通过nrf24l01实现点对点通信,阿里云下发数据至air800,STM32(A)串口2接收数据之后进行判断,如果需要控制另一个STM32的LED灯,则会将数据发送至另外一个STM32(B),STM32(B)通过数据判断执行相应的功能

本部分要实现的功能:
(1)Air800接收STM32发送的温湿度并上传至阿里云物联网云平台
(2)阿里云物联网云平台下发控制LED亮灭的指令,和定时开关LED的指令

一、首先进行云端部署

阿里云云端部署前面已经介绍过,这里不再介绍,在阿里云上创建自己的产品和设备,云端创建物模型进行显示云下设备上传数据,以及Air800如何订阅并解析云端数据等请依次打开下面链接查看

1–云端部署-阿里云上创建属于自己的产品和设备

2–mqtt客户端接入阿里云–云端查看接收到的数据(只看云端创建物模型部分即可)

3–Air800接入阿里云–设备发送静态数据-云端进行显示

4–air800订阅云端数据并进行解析

在自己的设备下创建四个属性,温湿度,开关值,定时时间
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第1张图片

二、修改云下设备代码

1、首先移植串口部分的程序到所编写的程序中
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第2张图片

2、打开上面的程序代码后,仿照串口例程把需要的东西进行赋值粘贴到程序中去
在这里插入图片描述

3、在顶部添加变量
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第3张图片
4、把串口发送函数和接收函数全部复制过来,串口接收函数最后用完注释掉即可

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第4张图片

5、编写向云端发布函数
图中串口部接收部分是串口接收函数中的代码,复制过来后,串口接收函数删掉即可
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第5张图片

整个发布函数如下

--发布一条QOS为1的消息
function publishTest()
if sConnected then
    --注意:在此处自己去控制payload的内容编码,aLiYun库中不会对payload的内容做任何编码转换

    while true do        
    data = uart.read(UART_ID,"*l")
    --这一部分放在前面是为字符串搜索和转化提供点时间
    local hum1=string.match(data,"%d+",8)
    local hum=tonumber(hum1)--这是将字符串转化为数值
    basedata["params"]["hum"]=hum	--这是赋值湿度数值

    if not data or string.len(data) == 0 then break end

    if true then
	local temp1=string.match(data,"%d+ ")
	local temp_data=tonumber(temp1)--这是转化为数值
	print(type(temp_data))--打印转换后的数据类型用于判断是否转化成功
	basedata["params"]["temp"]=temp_data --上传温度数值
	print("temp1",temp1)
	print("---------------")
    end
    jsondata=json.encode(basedata)--进行编码传输
   aLiYun.publish("/sys/"..PRODUCT_KEY.."/"..getDeviceName().."/thing/event/property/post",jsondata,1,publishTestCb,"publishTest_"..publishCnt)
  end  
 
end
end

6、订阅函数,进行数据解析
将解析到的数据发送至串口1(串口1是连接STM32的串口2的—比特率一定要一致)
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第6张图片

数据订阅并解析函数

---数据接收的处理函数
-- @string topic,UTF8编码的消息主题
-- @number qos,消息质量等级
-- @string payload,原始编码的消息负载
local function rcvCbFnc(topic,qos,payload)
log.info("testALiYun.rcvCbFnc",topic,qos,payload)

print("-----------------------------------------")
local tjsondata,result,errinfo = json.decode(payload)
--以下为解析数据
if result then
    local switch_rcv=0
    switch_rcv=tjsondata["params"]["switch"]--把对应的开关属性值取出来
   	local time=0
	time=tjsondata["params"]["set_time"]--把对应的定时信息数值取出来
    print("switch_value",type(switch_rcv),switch_rcv)
	print("set_time",type(time),time)

    if switch_rcv == 1 then
		write("led on")
		basedata["params"]["switch"]=1 --上传开关数值
	elseif switch_rcv == 0 then
		write("ledoff")
		basedata["params"]["switch"]=0 --上传开关数值
	else
		write(time)
		basedata["params"]["set_time"]=time--上传定时时间
		write(time)
	end

else
    print("json.decode error",errinfo)
end
print("--------------------------")
end

7、烧写程序进行调试即可,
STM32通过串口1发送温湿度至AIR800接收端
AIR800通过串口发送至STM32串口2接收端

下为air800订阅云端数据解析结果
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第7张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第8张图片

开关值和定时是通过阿里云产品下的在线调试功能,调试真实设备对设置下达指令后所返回的值,温湿度则是云下设备上传的值
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第9张图片

再次调试设备效果如下
(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第10张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第11张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第12张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第13张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第14张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第15张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第16张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第17张图片

(四)AIR800接收SM32发送的温湿度上传阿里云并远程控制STM32LED亮灭_第18张图片

这样云端和设备就打通了,设备上报数据至阿里云,阿里云下发指令简单的控制STM32的LED

下一步是在设备端添加nrf24l01,和另外一个STM32点对点通信

你可能感兴趣的:(STM32学习)