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

相关文章

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP