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

相关文章

【机器学习】高斯过程的基本概念和应用领域以及在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

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行