智慧农业接入复合式树莓派网关

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

树莓派使用apt-get安装配置Nginx+PHP7+MySQL(MariaDB)附带详细部分

阿里云物联网平台体验(树莓派+Python篇)

阿里云物联网平台体验(树莓派+Python篇)

借助5G智能网关实现无人化智慧农业应用

借助5G智能网关实现无人化智慧农业应用