NB-IOT通过LWM2M协议发送4个实例到ONENET

2023-12-18 11:32

本文主要是介绍NB-IOT通过LWM2M协议发送4个实例到ONENET,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STM32L BC26初体验-上传多个实例到ONENET
对官方Example(UDP传输与接收数据液晶屏显示)进行的修改,使用LWM2M向平台发送4个实例,temperature instance(5700),Light instance (5850), digit input (5500), Battery Percentage (5700).

main.c
int main(void)
{
BOOL Read_75_Flag = TRUE;
if (SysTick_Config(SystemCoreClock / 1000))//ÉèÖÃ24bit¶¨Ê±Æ÷ 1msÖжÏÒ»´Î
{
/* Capture error */
while (1);
}

GPIO_CONFIGURATION();uart1_init(115200);
uart2_init(115200);
uart3_init(115200);delay_init();while(DHT11_Init());//³õʼ»¯DHT11while(BC26_Init());BC26_PDPACT();BC26_ConLWM2M();// Éϱ¨100%ʱºòµÄµçÁ¿memcpy(sendata,"100",strlen("100"));memset(lenstr,0,BUFLEN);sprintf(lenstr,"%d",strlen((char *)sendata));  BC26_Senddata(3,(u8 *)lenstr,(u8 *)sendata);//·¢ËÍÊý¾Ýwhile(1){

// DHT11_Read_Data(&temp,&humi);//¶ÁÈ¡ÎÂʪ¶ÈÊý¾Ý
// printf(“ζȣº%d C \r\n”,temp);
// printf(“ʪ¶È£º%d RH\r\n”,humi);
// memset(sendata,0,100);
// memset(tempstr,0,100);
// sprintf(tempstr,"%d",temp);
// strcat(sendata,tempstr);
// strcat(sendata,".00");

// memset(lenstr,0,BUFLEN);
// sprintf(lenstr,"%d",strlen((char *)sendata)); //»ñÈ¡·¢Ë͵ij¤¶È

// printf(“sendata = %s len = %s \r\n”, sendata, lenstr);
// BC26_Senddata(0,(u8 *)lenstr,(u8 *)sendata);//·¢ËÍÊý¾Ý
// delay_ms(1000);
if(Read_75_Flag){
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11) == Bit_SET)
{
printf(“75 battery remaining\r\n”);
memcpy(sendata,“75”,strlen(“75”));
memset(lenstr,0,BUFLEN);
sprintf(lenstr,"%d",strlen((char *)sendata));
BC26_Senddata(3,(u8 *)lenstr,(u8 *)sendata);//·¢ËÍÊý¾Ý
Read_75_Flag = FALSE;
}
}

		  if(LED_FLAG == SET){if(led_status == RESET){printf("Open the door\r\n");memcpy(sendata,"1",strlen("1"));}else{printf("Close the door\r\n");memcpy(sendata,"0",strlen("0"));}memset(lenstr,0,BUFLEN);sprintf(lenstr,"%d",strlen((char *)sendata));  BC26_Senddata(1,(u8 *)lenstr,(u8 *)sendata);//·¢ËÍÊý¾ÝLED_FLAG = RESET;}if(AED_FLAG == SET){if(sd_status == SD_PRESENT){printf("insert AED device\r\n");memcpy(sendata,"1",strlen("1"));}else{printf("remove AED device\r\n");memcpy(sendata,"0",strlen("0"));}memset(lenstr,0,BUFLEN);sprintf(lenstr,"%d",strlen((char *)sendata));  BC26_Senddata(2,(u8 *)lenstr,(u8 *)sendata);//·¢ËÍÊý¾ÝAED_FLAG = RESET;}
}

}

BC26.C
void BC26_ConLWM2M(void)
{
int errcount = 0;
int i=0,j=0;
Uart2_SendStr(“AT+MIPLCREATE\r\n”); //+MIPLCREATE: 0
Delay(500);
Delay(500);
strx=strstr((const char*)buf_uart2.buf,(const char*)“OK”);
if(strx==NULL)
{
printf(“Æô¶¯LWM2MЭÒéʧ°Ü\r\n”);
Clear_Buffer();
Uart2_SendStr(“AT+MIPLCREATE\r\n”); //+MIPLCREATE: 0
Delay(500);
Delay(500);
strx=strstr((const char*)buf_uart2.buf,(const char*)“OK”);
if(strx)
{
printf(“Æô¶¯LWM2MЭÒé³É¹¦\r\n”);
}
else
{
strx=strstr((const char*)buf_uart2.buf,(const char*)“ERROR: 653”);
if(strx)
{
GPIO_SetBits(GPIOC,GPIO_Pin_7); //Ä£¿éÖØÆô
Delay(500);
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
Delay(300);
NVIC_SystemReset(); //ûÓд´½¨TCP SOCKET¾ÍÖØÆôϵͳµÈµ½·þÎñÆ÷¾ÍÐ÷
}
}
Clear_Buffer();
}
Clear_Buffer();

Uart2_SendStr("AT+MIPLADDOBJ=0,3303,1,1,1,0\r\n");  // Temputure instance 5700
Delay(300);
Clear_Buffer();
Delay(300);Uart2_SendStr("AT+MIPLADDOBJ=0,3311,1,1,1,0\r\n"); // Light instance  5850
Delay(300);
Clear_Buffer();
Delay(300);Uart2_SendStr("AT+MIPLADDOBJ=0,3200,1,1,1,0\r\n"); // Aed device presence 5500
Delay(300);
Clear_Buffer();
Delay(300);Uart2_SendStr("AT+MIPLADDOBJ=0,3320,1,1,1,0\r\n"); // Battery Percentage  5700
Delay(300);
Clear_Buffer();
Delay(300);Uart2_SendStr("AT+MIPLOPEN=0,86400\r\n");//´ò¿ª
Delay(300);while(j<INSTANCE_CNT)	{strx=strstr((const char*)buf_uart2.buf,(const char*)"+MIPLOBSERVE");//·´À¡¹Û²ìºÅmemset(atbuf,0,BUFLEN);memset(objtnum,0,BUFLEN);while(1){Delay(30);if(strlen((const char *)buf_uart2.buf) > 0){strx=strstr((const char*)buf_uart2.buf,(const char*)"+MIPLOBSERVE");//¼ì²âµ½¹Û²ìºÅ½áÊøif(strx){sprintf(atbuf,"%s",buf_uart2.buf);strx=strstr((const char*)strx+1,(const char*)",");for(i=0;;i++)   //²éѯ¹Û²ìºÅ{if(strx[i+1]==',')break;objtnum[i]=strx[i+1];}printf("µÃµ½ATÃüÁî:atbuf = %s \r\n",atbuf);printf("µÃµ½¹Û²ìºÅ:objtnum = %s \r\n",objtnum);break;}else    //Èç¹ûûÓÐÕÒµ½Ä¿±ê¾ÍÇå¿Õ·´À¡µÄÊý×飬ÕÒµ½Á˾ÍÌø³öÀ´{printf("Á¬½Ó·´À¡:%s\r\n",buf_uart2.buf);Clear_Buffer();}}}Clear_Buffer();printf("object number = %s\r\n",objtnum);memset(atstr,0,BUFLEN);sprintf(atstr,"AT+MIPLOBSERVERSP=0,%s,1\r\n",objtnum);Uart2_SendStr(atstr);//·¢Ë͹۲ìÃüÁîDelay(300);Clear_Buffer();if(strstr((const char*)atbuf,(const char*)"3303"))memcpy(objtnum1,objtnum,BUFLEN);        // Temputureelse if(strstr((const char*)atbuf,(const char*)"3311"))memcpy(objtnum2,objtnum,BUFLEN);   // Light Statuselse if(strstr((const char*)atbuf,(const char*)"3200"))memcpy(objtnum3,objtnum,BUFLEN);   // AED device presenceelse if(strstr((const char*)atbuf,(const char*)"3320"))memcpy(objtnum4,objtnum,BUFLEN);   // Battery j++;}j=0;	while(j<INSTANCE_CNT){strx=strstr((const char*)buf_uart2.buf,(const char*)"+MIPLDISCOVER");//·µ»ØOKmemset(atbuf,0,BUFLEN);memset(distnum,0,BUFLEN);while(1){Delay(30);if(strlen((const char *)buf_uart2.buf) > 0){strx=strstr((const char*)buf_uart2.buf,(const char*)"+MIPLDISCOVER");//¼ì²âµ½¹Û²ìºÅ½áÊøif(strx){sprintf(atbuf,"%s",buf_uart2.buf);strx=strstr((const char*)strx+1,(const char*)",");for(i=0;;i++)   //²éѯ¹Û²ìºÅ{if(strx[i+1]==',')break;distnum[i]=strx[i+1];}printf("µÃµ½ATÃüÁî:atbuf = %s \r\n",atbuf);printf("µÃµ½×ÊÔ´ºÅ:distnum = %s \r\n",distnum);break;}else    //Èç¹ûûÓÐÕÒµ½Ä¿±ê¾ÍÇå¿Õ·´À¡µÄÊý×飬ÕÒµ½Á˾ÍÌø³öÀ´{Clear_Buffer();}}}Clear_Buffer();   printf("discover number = %s\r\n",distnum);memset(atstr,0,BUFLEN);if(strstr((const char*)atbuf,(const char*)"3303")) {sprintf(atstr,"AT+MIPLDISCOVERRSP=0,%s,1,4,\"5700\"\r\n",distnum);        // Temputurememcpy(distnum1,distnum,BUFLEN);}else if(strstr((const char*)atbuf,(const char*)"3311")){sprintf(atstr,"AT+MIPLDISCOVERRSP=0,%s,1,4,\"5850\"\r\n",distnum);    // Light Statusmemcpy(distnum2,distnum,BUFLEN);}else if(strstr((const char*)atbuf,(const char*)"3200")){sprintf(atstr,"AT+MIPLDISCOVERRSP=0,%s,1,4,\"5500\"\r\n",distnum);   // AED device presencememcpy(distnum3,objtnum,BUFLEN);}else if(strstr((const char*)atbuf,(const char*)"3320")){sprintf(atstr,"AT+MIPLDISCOVERRSP=0,%s,1,4,\"5700\"\r\n",distnum);   // Battery memcpy(distnum4,objtnum,BUFLEN);}Uart2_SendStr(atstr);//·¢ËÍ×ÊÔ´ÃüÁîDelay(300);strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//·µ»ØOKwhile(strx==NULL){errcount++;strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//·µ»ØOKif(errcount>100)     //·ÀÖ¹ËÀÑ­»·{errcount = 0;break;}}	Clear_Buffer();j++;		}

}
完整工程:https://download.csdn.net/download/sinat_16873757/14950707

这篇关于NB-IOT通过LWM2M协议发送4个实例到ONENET的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508225

相关文章

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入