电子说
你是否有这种困惑:需要熟悉可繁琐的环境搭建、关注繁琐的编译选项、关心繁琐的C语言陷阱。。。非常希望不写代码或者用寥寥几行代码,就完成对外设的控制,和服务器的通信!
答案在这里!
使用合宙的物联网解决方案,一步到位,合宙技术人员完成开发、调试和维护工作,不需要客户投入任何技术资源,最快1天完成开发!
本文教你怎么用简单的几个步骤,完成一个温湿度传感器数据采集项目。
让DTU整机Air-D780L1-Y采集温湿度传感器的数据,并且将温湿度数据上传到合宙业务云平台,在小程序上可以查看温湿度数据。
看起来复杂的多组件产品,实现起来会很简单!
来看一下,我是如何使用Air-D780L1-Y+合宙业务云平台,做一个温湿度传感器数据采集项目的。
本次项目的主角是一款合宙DTU整机产品Air-D780L1-Y,
Air-D780L1-Y的功耗低,品质稳定,购买样品也方便,资料全开放。
如下图所示:
编辑
Air-D780L1-Y的产品说明书可以参考:[Air-D780L1-Y 产品说明书] "Air-D780L1-Y 产品说明书") 。
今天我就用手把手的教程,教会你怎样使用Air-D780L1-Y, 开发各种应用项目。
这里,先要告诉你一些前提条件,虽然听着像是废话, 但是如果你不知道的话,可能后面会比较懵逼,所以还是希望你能够认真看完这一节。
这个项目的产品定义是:Air-D780L1-Y每隔5秒钟,将温湿度传感器的数据上传到合宙业务云平台。
要想达到这个目的, 有必要先介绍一下这个项目的系统框架图:
编辑
基本的操作和业务逻辑如下:
在大概了解了业务逻辑之后,接下来我将带你进入正式的动手实操阶段!
编辑
编辑
编辑
编辑
编辑
使用螺丝刀将Air-D780L1-Y整机背面的四个螺丝拆下来,打开外壳;
插入可以上网的SIM卡;
然后找到Air780E模组下方的VB、DM、DP、GND四个焊点,
将USB数据线焊接到这四个焊点上;
如下图所示:
编辑
编辑
编辑
如果你完全按照以上步骤组装,到这里就应该一切妥当了,可以再次对照上面这张图片,看看是否组装正确。
要想烧录代码,先要下载合宙的强大的调试工具:Luatools;
使用方法:[合宙Luatools实战宝典:功能介绍+使用技巧全攻略-CSDN博客] "合宙Luatools实战宝典:功能介绍+使用技巧全攻略-CSDN博客")
如果你已经安装使用过Luatools,可以直接跳过本小节;
Luatools下载地址为:https://doc.openluat.com/wiki/52?wiki_page_id=5071 ,如下图所示:
编辑
Luatools 工具主要有如下几个功能:
(1) 自动从合宙服务器获取最新的合宙LuatOS-iRTU固件和标准模组固件;
(2) 烧录固件和脚本;
(3) 查看和保存模组的USB口或者串口运行日志;
(4) 简单的串口调试;
Luatools 下载之后,无需安装,解压到你的硬盘,点击 Luatools_v2.exe 运行,出现如下界面,就代表 Luatools 安装成功了(注意:运行Luatools后,会自动更新最新资源和版本文件,这时,你可以喝口水,耐心等待它更新完成):
编辑
LuatOS-iRTU固件,是合宙采用LuatOS架构自主研发的DTU嵌入式软件系统,已经被众多DTU厂商采用,经过百万级装机设备的验证,稳定可靠,广泛应用于物联网领域的各行各业;可以通过以下任何一种方式获取这个固件:
编辑
编辑
编辑
DTU管理系统,可以在线绑定你的DTU设备,对设备进行分组,对每个组内的所有设备配置运行参数(例如,连接什么服务器,多久上传一次数据,上传什么格式的数据);
如果你已经使用过DTU管理系统,可以跳过本小节;
访问 dtu.openluat.com ,如果你已经有 dtu.openluat.com 或者 iot.openluat.com 的账号,可以直接使用这两个账号中的任何一个账号登录,
如果没有账号,点击下图中的 立即注册 按钮注册一个账号;
编辑
此时,你已经拥有了一个DTU管理系统的账号,登录 dtu.openluat.com 之后,第一个界面大概是下面这个样子:
编辑
点击左边菜单,设备管理->分组管理,打开如下界面:
编辑
看到这里,你可能会有疑问:这里的分组是做什么用的呢?
其实你可以把分组理解为项目,假设你的DTU管理系统账号下有100个设备,这100个设备中:50个设备是智慧农业灌溉项目,50个设备是气象站项目;
这时你就需要创建两个分组,分别对各自的50个设备进行管理。
在这个演示项目中,我使用的是Air-D780L1-Y整机采集温湿度数据,然后上传到合宙业务云平台,所以我按照下图提示,点击右上方的 添加分组 按钮,新建一个 Air-D780L1-Y_合宙业务云平台_温湿度数据采集 的分组:
编辑
创建好 Air-D780L1-Y_合宙业务云平台_温湿度数据采集 的分组之后,接下来要做的是把你的设备IMEI添加到这个分组中;
在添加IMEI到分组之前,首先要保证这个IMEI在你的账号下;
怎么查询IMEI是否在你自己的账号下呢?
点击左边菜单,设备管理->设备列表,打开如下界面:
编辑
在这个界面中,输入你的设备的IMEI,然后点击搜索按钮进行查询;
如果你不知道你的Air-D780L1-Y的IMEI,参考以下两种方法:
1、Air-D780L1-Y外壳上如果有IMEI号,直接使用;
2、如果已经拆掉外壳,直接使用板子上Air780E模组标签上的IMEI号;
如果设备IMEI不在你的账号下,直接跳过本小节剩余内容,到5.3.4章节继续阅读;
如果设备IMEI在你的账号下,参考下图,将设备划分到你期望的分组中,跳过5.3.4章节,到第六 章节继续阅读;
编辑
我演示使用的Air-D780L1-Y的IMEI是864710071339591,在我的设备列表下,没搜索到这个设备;
不要灰心,接下来教你一种自助绑定并且分组设备到你账号下的方法,点击 设备管理->IMEI与DTU账号绑定,按照下图操作:
编辑
点击 固件生成 按钮之后,耐心等待一会儿,后台在自动生成固件,大概20秒以内,就可以生成好并且下载成功,我这里下载下来是一个压缩包
编辑
解压之后,里面有以下文件
编辑
我们本次演示使用的是Air-D780L1-Y整机,所以要选择后缀是EC618.soc的那个文件,也就是iRTU_1.0.5_LuatOS-SoC_V1108_EC618.soc
(此处注意:你操作时只需要认准EC618.soc的后缀就行,和我这里的文件名不一定完全一致);
准备好iRTU_1.0.5_LuatOS-SoC_V1108_EC618.soc固件后,
接下来请再次打开合宙强大的调试工具Luatools,使用Luatools将这个固件烧录到Air-D780L1-Y中,
此时再来看下之前已经组装好的硬件环境,将已经焊接到Air-D780L1-Y上的USB数据线,插入到电脑的USB口中,直流稳压电源上电(注意此处设置的是12V输出)。
编辑
如果电脑的设备管理器中新增3个端口,表示Air-D780L1-Y已经正常开机,并且USB数据线通信正常
编辑
接下来我们就要使用Luatools将固件烧录到Air-D780L1-Y中,
烧录之前Air-D780L1-Y需要先进入boot模式,先给直流稳压电源断电,
然后一直按下Air-D780L1-Y板子上的BOOT按键,再给直流稳压电源上电,
此时电脑的设备管理器中如果新增了1个端口,而不是之前的3个端口,
则表示已经进入了boot模式。
(注意:boot模式会持续20秒左右,如果20秒内没有发起烧录固件的工作,会自动退出boot模式;此时如果还要烧录固件,重新操作进入boot模式)
编辑
打开Luatools后,按照下图配置并且选择要烧录的固件文件:
编辑
在最后一步点击 下载 按钮时,要确保Air-D780L1-Y仍然处于boot模式,如果开始下载,下载界面如下图所示:
编辑
下载成功后的界面如下图所示:
编辑
下载成功后,Air-D780L1-Y会自动重启运行,部分运行日志和解析见下图所示:
编辑
此时我们再回到DTU管理系统,看看864710071339591的imei是否已经自动绑定并且自动分组
编辑
真香,果然已经成功了,恭喜你!
看完本小节,有老铁可能会问,为什么绑定设备这么麻烦呢?在这里请允许我解释几个问题:
1、为什么不让用户随便输入一个IMEI就能方便地绑定到自己的账号下呢?
这样风险很高,万一你把别人设备的IMEI绑定到你自己的账号下,岂不是乱套了?
2、如果我有批量的设备需要绑定,怎么处理呢?
无论你有多少台设备,都有两种绑定方法:
(1) 参考本小节,采用烧录定制固件的方式自助绑定;这种方法适用于设备数量较少的场景;
(2) 联系合宙的销售人员或者技术人员,告知你需要绑定的设备IMEI,合宙人员会核实这些IMEI是否属于你,如果核实通过,合宙人员在后台帮你绑定到你的账号下;这种方法适用于所有场景,尤其是设备数量很多的场景;
参考5.3.4 章节下的 使用Luatools将专属固件烧录到Air-D780L1-Y中 小结,
将 5.2 LuatOS-iRTU固件 章节中准备的通用LuatOS-iRTU固件
(我这里的固件名是iRTU_1.0.6_LuatOS-SoC_V1110_EC618.soc,你烧录时,使用最新版本的固件就行),烧录到Air-D780L1-Y中。
烧录成功后,Air-D780L1-Y自动运行,Luatools的日志界面如下
编辑
出现这个提示,说明你的设备在DTU管理系统中没有配置任何运行参数,不会连接你期望的业务云平台,也没有和具体项目有关的任何业务逻辑;
这一切都要靠在DTU管理系统中对分组进行配置参数实现。
在DTU管理系统中,点击下图中的参数配置
编辑
参数配置的总体页面如下
编辑
接下来将根据本项目的具体业务逻辑,来配置参数
编辑
编辑
编辑
编辑
GPIO,GPS的参数是默认配置,不用修改
编辑
编辑
发送数据流模板代码
function--数据流固定格式
if not _G.s_report_interval then _G.s_report_interval = 5 end
if not _G.s_485_read_interval then _G.s_485_read_interval = 0 end
_G.s_485_read_interval = _G.s_485_read_interval+5
if _G.s_485_read_interval< _G.s_report_interval then return nil end
--将串口接收的数据赋值给str
local str= ...
local addr = str:sub(1, 1)--地址位
local fun = str:sub(2, 2)--功能码
local byte = str:sub(3, 3)--有效字节数
local humi =str:sub(4,5)--湿度值
local temp = str:sub(6,7)--温度值
local idx, crc = pack.unpack(str:sub(-2, -1), "H")
local tmp = str:sub(1, -3)
--crc校验原理前面所有位合起来校验后的值等于上报的数据的最后校验位
if crc == crypto.crc16("MODBUS", tmp) then
log.info("crc校验成功")
-- _无用,addr地址码,fun功能码,byte返回有效字节数,humi湿度,temp温度
-- pack.unpack 将lua字符串分解为不同的数值
-- " >b3h2"表示在tmp字符串中,从tmp第一个字节开始,取三个字节,取两个短整数
local _,addr,fun,byte,humi,temp = pack.unpack(tmp, " >b3h2")
--如果功能码为0x03,则为读取温湿度值
if fun == 0x03 then
--给表中添加一个叫做humi的元素,并将上文中的humi变量的值赋给该元素
humi = humi/10 --pack.unpack后已经将该数转换成了十进制的整数,需要将其除以10才是真实的湿度百分比数
--给表中添加一个叫做temp的元素,并将上文中的temp变量的值赋给该元素
temp =temp/10 --pack.unpack后已经将该数转换成了十进制的整数,需要将其除以10才是真实的温度值
log.info("温湿度",humi,temp)
end
local la,ln = create.getRealLocation()
if la==nil or la=="" then la = "31.131710" end
if ln==nil or ln=="" then ln = "121.548860" end
log.info("la,ln",la,ln,tonumber(la),tonumber(ln))
if not fake_la then fake_la = 31.131710 end
if not fake_ln then fake_ln = 121.548860 end
local payload =
{
location = {lat=tonumber(la),lng=tonumber(ln)},
--location = {lat=fake_la,lng=fake_ln},
temperature = temp,
humidity = humi,
pm2_5 = 16,
pm10 = 18,
interval = "INTERVAL_".._G.s_report_interval.."S",
switch_state1 = "ON",
switch_state3 = "ON",
brightness1 = 10,
brightness2 = 20,
work_mode = "WARM"
}
_G.s_485_read_interval = 0
fake_la = fake_la+0.0002
fake_ln = fake_ln+0.0002
--将该表转换成json格式的字符串并发送给服务器
return json.encode(payload)
else
--如果crc校验失败则将"crc error"发送给服务器
log.info("crc校验失败")
return nil
end
end--数据流固定格式
接收数据流模板代码
function
local str=...
log.info("recv",str)
if str:sub(1,22)=='{"interval":"INTERVAL_' then
local interval = str:match("(%d+)")
log.info("interval",interval)
_G.s_report_interval = tonumber(interval)
end
if str:sub(1,17)=='{"method":"reset"' then
sys.restart("server control")
end
return str,1 -- 返回值
end
默认配置,不用修改
编辑
任务1代码
function
gpio.setup(22,1)--打开485转TTL电平芯片的供电
end
所有参数配置结束之后,记得点击右下角的确认按钮,否则不会生效!!!
所有参数配置结束之后,记得点击右下角的确认按钮,否则不会生效!!!
所有参数配置结束之后,记得点击右下角的确认按钮,否则不会生效!!!
因合宙业务云平台目前不对外开放,只能由合宙技术人员使用,所以此处省略很多内容:
需要使用合宙业务云平台的用户,可以再仔细看下本文档中心的1.2和1.5章节,联系合宙产品负责人微信18616233557沟通。
此时你可以直流电源断电再上电重启下Air-D780L1-Y;
或者通过Luatools的重启按钮重启下设备
编辑
设备重启后,会自动连接DTU管理系统,下载最新参数,然后安排参数的配置逻辑进行;
Luatools中的运行日志如下
编辑
此时你可以通过手机微信扫描以下二维码,登录后,可以体验小程序
编辑
AppID: 12772998
账号:dtu
密码:dtu
或点此查看原文获取小程序:[ 合宙DTU整机产品线文档中心] " 合宙DTU整机产品线文档中心")
动态演示效果见以下动画:
编辑
更多详细资料详见:[ 合宙DTU整机产品线文档中心] " 合宙DTU整机产品线文档中心")
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !