完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最终要实现的功能:
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、打开上面的程序代码后,仿照串口例程把需要的东西进行赋值粘贴到程序中去 3、在顶部添加变量 4、把串口发送函数和接收函数全部复制过来,串口接收函数最后用完注释掉即可 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的—比特率一定要一致) 数据订阅并解析函数 ---数据接收的处理函数 -- @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订阅云端数据解析结果 开关值和定时是通过阿里云产品下的在线调试功能,调试真实设备对设置下达指令后所返回的值,温湿度则是云下设备上传的值 再次调试设备效果如下 这样云端和设备就打通了,设备上报数据至阿里云,阿里云下发指令简单的控制STM32的LED 下一步是在设备端添加nrf24l01,和另外一个STM32点对点通信。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1069 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 00:43 , Processed in 0.870492 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号