此示例使用LoRaWAN的传输,第三方客户端使用mqtt协议与LoRaWAN服务器进行交互,下发控制控制协议与下方节点通信,控制模块IO的例程,示例仅作为演示使用,内部握手交互逻辑单一较为简单,下面我们一起来分分析整个案例。
这里的服务器搭建我选择了免费测试的TTN服务器,申请账号——添加网关——添加节点模组即可,步骤如下
搜索ttn,https://www.thethingsnetwork.org/
创建账号
增加节点
节点加入方式是ABP,自动生成密钥,密钥在稍后的的的代码中会用到
上面已经把服务器和网关搭建好了,接下来我们使用官方的SDK修改一份代码,代码内容包括节点密钥的填写,入网方式的更改
源码路径
#define LORAWAN\_APP\_PORT 2
static uint8\_t DevEui[] = LORAWAN_DEVICE_EUI;
static uint8\_t AppEui[] = LORAWAN_APPLICATION_EUI;
static uint8\_t AppKey[] = LORAWAN_APPLICATION_KEY;
#if( OVER\_THE\_AIR\_ACTIVATION == 0 )
static uint8\_t NwkSKey[] = LORAWAN_NWKSKEY;
static uint8\_t AppSKey[] = LORAWAN_APPSKEY;
static uint32\_t DevAddr = LORAWAN_DEVICE_ADDRESS;
上行数据
/\*!
\* \brief Prepares the payload of the frame
\*/
static void PrepareTxFrame( uint8\_t port )
{
AppDataSize = 4;
AppData[0] = 0x00;
AppData[1] = 0x01;
AppData[2] = 0x02;
AppData[3] = 0x03;
}
下行数据
/\*!
\* \brief MCPS-Indication event function
\*
\* \param [IN] mcpsIndication - Pointer to the indication structure,
\* containing indication attributes.
\*/
static void McpsIndication( McpsIndication_t \*mcpsIndication )
{
int i = 0;
if( mcpsIndication->Status != LORAMAC_EVENT_INFO_STATUS_OK )
{
return;
}
printf( "receive data: rssi = %d, snr = %d, datarate = %d\r\n", mcpsIndication->Rssi, (int)mcpsIndication->Snr,
(int)mcpsIndication->RxDatarate);
switch( mcpsIndication->McpsIndication )
{
case MCPS_UNCONFIRMED:
{
break;
}
case MCPS_CONFIRMED:
{
break;
}
case MCPS_PROPRIETARY:
{
break;
}
case MCPS_MULTICAST:
{
break;
}
default:
break;
}
// Check Multicast
// Check Port
// Check Datarate
// Check FramePending
if( mcpsIndication->FramePending == true )
{
// The server signals that it has pending data to be sent.
// We schedule an uplink as soon as possible to flush the server.
OnTxNextPacketTimerEvent( );
}
// Check Buffer
// Check BufferSize
// Check Rssi
// Check Snr
// Check RxSlot
if( mcpsIndication->RxData == true )
{
}
if(mcpsIndication->BufferSize) {
printf("Received: ");
for(i=0; i<mcpsIndication->BufferSize; i++) {
printf("%x ", mcpsIndication->Buffer[i]);
}
}
printf("\r\n");
}
阅读MQTT下行数据规则,
客户端订阅服务器Topic,进行数据交互
本次订阅的发布的top如下
v3/app1@tenant1/devices/dev1/down/push
例如:
v3/zt-smart-light-01@ttn/devices/eui-70b3d57ed005e33f/down/push
//说明:根据规则,我们将app1@tenant1替换成自己的设备名,dev1替换成我们真实的设备EUI,这些信息可以在我们的TTN服务器设备管理内获取到
我们向这个上述Topic下发如下所示数据,通过更换负载payload信息来控制灯的亮灭,数据如下
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**