【LoRaWAN】展厅的 LoRaWAN灯控项目部署及开发分享

[复制链接]
查看471 | 回复8 | 2024-3-8 14:22:20 | 显示全部楼层 |阅读模式
原理
此示例使用LoRaWAN的传输,第三方客户端使用mqtt协议与LoRaWAN服务器进行交互,下发控制控制协议与下方节点通信,控制模块IO的例程,示例仅作为演示使用,内部握手交互逻辑单一较为简单,下面我们一起来分分析整个案例。
准备工作
服务器搭建
这里的服务器搭建我选择了免费测试的TTN服务器,申请账号——添加网关——添加节点模组即可,步骤如下
搜索ttn,https://www.thethingsnetwork.org/
创建账号
1.gif

加入网关
记住这里的网关eui,请填写网关真正的eui参数
2.gif

增加节点
节点加入方式是ABP,自动生成密钥,密钥在稍后的的的代码中会用到
3.gif

至此我们的服务器搭建工作已经完成,我们添加了网关的必要参数eui,并且成功添加了一个使用ABP入网的设备,下一步我们配置网关参数,让网关连接我们的服务器
网关配置连接路由
这里我们使用RG-02网关,网关的参数连接如下:RG-02网关
(1)连接网关热点,热点为AiThinker开头,密码为12345678
(2)访问网关后台,浏览器直接输入10.130.1.1:8000
(3)进入AP页面修改网关连接的热点,把它连接到公网路由上,之后就不需要连接热点访问了,访问地址可以改为路由分配给网关的地址了(局域网内)
(4)记得点击勾选和保存
4.gif

配置网关连接服务器
(1)登入网关后台,进入lorawan配置界面
(2)lorawan界面可以查看网关的真实EUI,这个参数是我们服务器加入网关必填的真实参数
(3)更改网关的服务器接口,接口在TTN服务器内获取
(4)检查一遍lora的频段参数,一定设置未ttn的470段
如下图
5.gif

源码分析
上面已经把服务器和网关搭建好了,接下来我们使用官方的SDK修改一份代码,代码内容包括节点密钥的填写,入网方式的更改
源码路径
6.png


入网配网参数修改
这里我们使用的ABP入网参数,参数需要与服务器节点设备设置的参数一致
  1. #define LORAWAN_APP_PORT                            2
  2.    
  3. static uint8_t DevEui[] = LORAWAN_DEVICE_EUI;
  4. static uint8_t AppEui[] = LORAWAN_APPLICATION_EUI;
  5. static uint8_t AppKey[] = LORAWAN_APPLICATION_KEY;

  6. #if( OVER_THE_AIR_ACTIVATION == 0 )

  7. static uint8_t NwkSKey[] = LORAWAN_NWKSKEY;
  8. static uint8_t AppSKey[] = LORAWAN_APPSKEY;
  9. static uint32_t DevAddr = LORAWAN_DEVICE_ADDRESS;
复制代码

上行数据
  1. /*!
  2. * \brief   Prepares the payload of the frame
  3. */
  4. static void PrepareTxFrame( uint8_t port )
  5. {
  6.     AppDataSize = 4;
  7.     AppData[0] = 0x00;
  8.     AppData[1] = 0x01;
  9.     AppData[2] = 0x02;
  10.     AppData[3] = 0x03;
  11. }

复制代码
下行数据
  1. /*!
  2. * \brief   MCPS-Indication event function
  3. *
  4. * \param   [IN] mcpsIndication - Pointer to the indication structure,
  5. *               containing indication attributes.
  6. */
  7. static void McpsIndication( McpsIndication_t *mcpsIndication )
  8. {
  9.     int i = 0;
  10.     if( mcpsIndication->Status != LORAMAC_EVENT_INFO_STATUS_OK )
  11.     {
  12.         return;
  13.     }

  14.     printf( "receive data: rssi = %d, snr = %d, datarate = %d\r\n", mcpsIndication->Rssi, (int)mcpsIndication->Snr,
  15.                  (int)mcpsIndication->RxDatarate);
  16.     switch( mcpsIndication->McpsIndication )
  17.     {
  18.         case MCPS_UNCONFIRMED:
  19.         {
  20.             break;
  21.         }
  22.         case MCPS_CONFIRMED:
  23.         {
  24.             break;
  25.         }
  26.         case MCPS_PROPRIETARY:
  27.         {
  28.             break;
  29.         }
  30.         case MCPS_MULTICAST:
  31.         {
  32.             break;
  33.         }
  34.         default:
  35.             break;
  36.     }

  37.     // Check Multicast
  38.     // Check Port
  39.     // Check Datarate
  40.     // Check FramePending
  41.     if( mcpsIndication->FramePending == true )
  42.     {
  43.         // The server signals that it has pending data to be sent.
  44.         // We schedule an uplink as soon as possible to flush the server.
  45.         OnTxNextPacketTimerEvent( );
  46.     }
  47.     // Check Buffer
  48.     // Check BufferSize
  49.     // Check Rssi
  50.     // Check Snr
  51.     // Check RxSlot
  52.     if( mcpsIndication->RxData == true )
  53.     {
  54.     }
  55.    
  56.     if(mcpsIndication->BufferSize) {
  57.         printf("Received: ");
  58.         for(i=0; i<mcpsIndication->BufferSize; i++) {
  59.             printf("%x ", mcpsIndication->Buffer[i]);
  60.         }
  61.     }
  62.     printf("\r\n");
  63. }
复制代码
发布MQTT下行数据
阅读MQTT下行数据规则,TTN服务器mqtt规则链接

Topic说明
客户端订阅服务器Topic,进行数据交互
本次订阅的发布的top如下
  1. v3/app1@tenant1/devices/dev1/down/push
  2. 例如:
  3. v3/zt-smart-light-01@ttn/devices/eui-70b3d57ed005e33f/down/push
  4. //说明:根据规则,我们将app1@tenant1替换成自己的设备名,dev1替换成我们真实的设备EUI,这些信息可以在我们的TTN服务器设备管理内获取到
复制代码
消息负载说明
我们向这个上述Topic下发如下所示数据,通过更换负载payload信息来控制灯的亮灭,数据如下
  1. {
  2.   "downlinks": [{
  3.     "frm_payload": "AA==", //负载信息,base格式的AA==表示关灯,AQ==则表示关灯
  4.     "f_port": 15,          //端口
  5.     "priority": "NORMAL",
  6.     "class_b_c": {
  7.       "gateways": [
  8.         {
  9.           "gateway_ids": {
  10.             "gateway_id": "eui-94c9604857123456" //这里根据自己的设备填写真实的网关EUI参数,可以在网关或者服务器上获取
  11.           }
  12.         }
  13.       ]
  14.     }
  15.   }]
  16. }
复制代码
MQTT客户端
MQTT客户端使用手机app,IOT MQTT面板链接
【软件名称】iot MQTT面板
【软件大小】19.04MB
【软件介绍】
基于MQTT协议的智能家居物联网遥控。
该应用程序允许您基于MQTT协议管理和可视化物联网项目。
有了这个应用程序,您可以在一分钟内制作DIY智能家居项目。配置非常简单。应用信息页面提供了详细记录的FAQ和用户指南。
1.支持MQTT(TCP)和Websocket(有用的特殊防火墙限制网络)协议。
2.用于安全通信的SSL。
3. JSON支持订阅和发布消息。
4.面板自动订阅和/或发布主题,因此实时更新。
5.旨在有效地与公共经纪人合作(使用设备前缀)。
6.来自经纪人的已发送和已接收时间戳。
7.材料设计。
8.灵活的面板宽度,合并任何面板
9.超过250个图标可自定义特定面板。
10.黑暗主题,适合在低光照条件下使用。
11.克隆连接,设备或面板,轻松配置
12.导入/导出应用程序配置,以便与多个设备轻松共享。
13.在后台运行并自动重新连接。
7.jpeg
总结
以上就是我们提供的一个mqtt控制LoRa的交互例程,涉及到
· 网络服务器的配置(节点和网关的录入);
· 网关后台信息的配置;
· 节点源码例程的基础修改应用;
· 以及MQTT控制协议的使用说明(推荐移动的mqtt客户端);
如果想要自定义数据解析,握手交互控制等逻辑内容的话,还需要大家逐步完善开发适合自己的工程。
资料下载地址
IOT MQTT面板APP的下载链接:https://pan.baidu.com/s/1yfza8N96ZZ5eB_ZM0JrYFA
提取码:eky6
工程源码获取地址:https://github.com/Ai-Thinker-Open/Ai-Thinker-LoRaWAN-Ra-08.git
立创灯板硬件设计资料链接:https://oshwhub.com/aithinker/ra-08led
2.png

演示视频链接地址:https://www.bilibili.com/video/B ... 7af4363c7e0e18dfaa1

1.jpeg
7.jpeg
用心做好保姆工作
回复

使用道具 举报

知行合一 | 2024-3-8 15:04:59 | 显示全部楼层
回复

使用道具 举报

1084504793 | 2024-3-8 15:13:43 | 显示全部楼层
回复

使用道具 举报

7788 | 2024-3-8 18:59:25 | 显示全部楼层
回复

使用道具 举报

楚华 | 2024-3-8 20:10:32 | 显示全部楼层
回复

使用道具 举报

wurong | 2024-3-8 20:59:03 | 显示全部楼层
回复

使用道具 举报

lazy | 2024-3-9 16:33:21 | 显示全部楼层
回复

使用道具 举报

干簧管 | 2024-3-9 19:07:32 | 显示全部楼层
👍
回复

使用道具 举报

WenshengZhu | 2024-4-19 09:47:29 | 显示全部楼层
牛逼
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则