智慧农业接入复合式树莓派网关
Posted 三明治开发社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智慧农业接入复合式树莓派网关相关的知识,希望对你有一定的参考价值。
五、产品创建
需要在涂鸦 IoT 开发平台创建产品,获取授权信息,然后将产品和授权相关信息写入到代码中,实现接入涂鸦云,详细步骤如下:
1、网关设备的创建
-
登录涂鸦 IoT 工作台后,单击 创建产品 并选择 行业解决方案>智慧工业>工业网关品类。
-
选择TuyaLink自定义方案,输入产品名称,设备类型选择网关设备,数据协议选择涂鸦标准协议,通讯协议选择以太网,点击创建产品。
-
在 功能定义 界面,单击 添加功能 并填写相关参数,完成产品功能定义。(根据要实现的设备功能,创建好DP功能点)
-
在 设备开发 界面,选择并下载 SDK 方案,单击 下一步 进入激活信息获取页面。
-
涂鸦提供免费的授权码供测试使用,您可以免费领取 2 个激活码,领取成功后,点击注册设备,即完成设备注册,设备相应信息会显示在下方
-
将注册的设备信息,填写到
examples/data_model_basic_demo/data_model_basic_demo.c
文件中,编译并运行 Demo 即可连接涂鸦云,关于编译的具体流程,请参考下文 编译执行 章节内容。改之前: const char productId[] = "3jbcpefnn1jxxxxx"; const char deviceId[] = "6ced2aa564727c01xxxxx"; const char deviceSecret[] = "ac5d367db39xxxxx"; 改之后: const char productId[] = "t1tlm6p13aouheta"; const char deviceId[] = "6cf918e90b12f7b1ffwiuz"; const char deviceSecret[] = "a5f23a3fb341edbd"; 注意:根据自己创建的网关产品PID,设备ID,设备密钥进行更改。
2、485子设备的创建
-
子设备的创建同上,只有操作到如下图的步骤时,按照下图圈出来的更改即可。
3、LORA子设备的创建
-
子设备创建完成后如下图,在网关设备创建的时候,DP点已经创建,这里不需要再创建。
LORA子设备:
485子设备:
六、程序设计
1、程序设计简单概述
(1)485子设备通信
树莓派和485子设备通信采用python语言来编写的。demo下载地址 ,参考文档树莓派如何与物联网平台交互。
(2)LORA通信(发送部分)
LORA通信发送部分采用的是WPG公司的LLCC68的芯片。该芯片和SX1268管脚兼容。此次设计没有使用开关芯片来进行发送与接收模式的切换,直接使用双天线,采用半双工的通信方式。demo下载地址,文档参考Lora智慧农业系统。
(3)LORA通信(接收部分)
LORA通信接收部分采用的是WPG公司的SX1268模块。树莓派通过SPI和此模块进行交互 。demo下载地址。
2、程序设计逻辑分析
在平台上创建网关设备时,下载“C TuyaLink SDK”开发包,在此demo上移植自己想要实现的功能。
在data_model_basic_demo.c实现整个控制逻辑。sx126x_v01.c为LORA模块的驱动。
3、程序函数功能解析
data_model_basic_demo.c文件:
- 下面是在平台上创建网关设备时候的参数,填入对应的位置即可。
- 在main函数里面实例化和初始化一个设备对象 tuya_mqtt_context_t,用来初始化产品 ID 和授权信息等配置参数以及循环接收数据包,并处理客户端保持连接。
启动 TuyaOS SDK 服务。
ret = tuya_mqtt_connect(client);
//TuyaOS SDK 服务任务,数据接收处理,设备在线保活等任务处理:
循环调用将当前线程产生给底层的 Link SDK 客户端。
tuya_mqtt_loop(client);
- 定义应用层事件回调,on_messages回调函数用于应用层接收 SDK 事件通知,如数据功能点(DP)下发,云端连接状态通知。平台下发指令在此函数中实现。
- THING_TYPE_ACTION_EXECUTE主题中,树莓派网关从平台上获取的指令(json格式)存入文件中,供python端调用(python端处理后控制继电器动作)。树莓派网关同时从相应文件中读取设备数据值(python端获取设备值,处理成json格式存入文件中供c端调用),C端处理成json格式的字符串上报到云端。
- 网关发现子设备,请求云端激活子设备并建立topo关系。适用于设备无法预先在云端注册,也无法烧录,网关发现子设备后,请求云端注册并绑定到当前网关下。在mqtt连接成功回调函数里面绑定了三个子设备,子设备的productId从平台上获取;nodeId是设备的节点id(至少保证网关下唯一,可以是子设备的地址);clientId是设备端唯一id(子设备硬件的唯一标示,可以是设备的 uuid、mac、sn等,至少保证产品下唯一)。
注意:当在平台上创建新的子设备的时候,绑定之后要上线一下,不然会显示离线。可以参考上面注释的语句。
- 在mqtt连接成功回调函数中创建了两个子线程。一个线程用来上报和处理485子设备的数据,另外一个线程用来和LORA设备通信以及处理接收到的数据。
线程1函数具体实现功能:用于不断获取温湿度的数据以及门磁状态的数据,同时上报到云端。
线程2函数具体实现功能:用于不断获取LORA模块接收到的数据。
- 与LORA模块连接的IO口初始化:
- 在中断函数里面接收数据以及调用OnRxDone函数来处理数据以及上报到云端。
- 下面是读文件函数,主要用于读取python端获取子设备的数据值,然后放于数组 return_data中。read_file函数传入了两个参数,一个是num,用于区分读取的文件(三个文件分别存入三个不同设备的数据值);另外一个是数组return_data,用于存储读取文件的数据(供c端调用)。
- 下面是写文件函数,主要存储从云端获取的指令,然后供python端调用。
sx126x_v01.c文件:
- 写数据到缓存区。
- 从缓存区读取数据。
- 写命令函数。
- 读命令函数。
- 向寄存器写入数值。
- 读取寄存器里面的数据。
4、调试过程中注意点
- 如果调试过程中报段错误,首先应该想到段错误的定义,从它出发考虑引发错误的原因。
a.在使用指针时,定义了指针后记得初始化指针,在使用的时候记得判断是否为NULL。
b.在使用数组时,注意数组是否被初始化,数组下标是否越界,数组元素是否存在等。
c.在访问变量时,注意变量所占地址空间是否已经被程序释放掉。
d.在处理变量时,注意变量的格式控制是否合理等。
- 在调试的过程中由于没有对打开文件为空时进行处理,导致出现了段错误,如下图修改解决了此问题。
七、编译执行(linux)
1、安装 make
等相关环境依赖。
sudo apt-get install make cmake
2、新建一个文件夹开始编译。
mkdir build && cd build
cmake ..
make
3、运行 Demo。
./bin/data_model_basic_demo
4、在设备端查看运行接口。
以下日志显示设备与 Tuya 云连接成功。
5、设备成功连接到涂鸦云平台后,单击进行刷新,设备状态会显示为在线。
八、在线调试
1、在平台上查看上报的消息及对设备下发相应指令
2、温湿度值上报云端(属性)(485子设备获取的温湿度值)
温湿度值上报云端(属性)(LORA子设备设备获取的温湿度值)
数据有没有上报成功,看code值:
3、门磁设备上报数据到云端(事件)
数据有没有上报成功,看code值:
5、云端下发指令,继电器动作(动作)
以上是关于智慧农业接入复合式树莓派网关的主要内容,如果未能解决你的问题,请参考以下文章
智慧家庭 - HA(1) - 在树莓派上架设 Home Assistant