STM32控制NB-IOT将数据上传至微信与网站显示

利用nb-iot的Modbus协议将获取的数据发至服务器,通过微信与网站显示

前段时间给同学做了一个小项目。基于stm32103获取空气质量数据,温湿度等信息,然后利用nb-iot上传。之前一直听过这个nb模块,但一直没用过,借此机会来试一试,关于温湿度,pm2.5信息就不说了,这里主要介绍一下利用nb-iot怎么上传数据的。

我用的是 有人物联网的WH-NB75-B5,大家用的时候最好还是买根天线吧,一开始没有天线,都查找不到设备。
在这里插入图片描述
https://console.usr.cn/#/cloudV2/homePage/ViewHomePage
然后进入有人官网的透传云,注册一下账号。
有人官网教程已经给的很详细了,就如下图步骤一样
http://www.usr.cn/Down/NB-IoT_al_t_V1.0.5.pdf
这个是官方文档可以看一下,里面已经讲得非常详细了,这里我就不多说了

这里是我设置的数据模板
在这里插入图片描述
接下来就直接看代码了,也非常的简单。

nbiot.c

#include "nbiot.h"
#include "sys.h"
#include "DHT11.h"
#include "usart.h"	
#include "delay.h"
#include "crc.h"
#include "string.h"

/* 在串口文件中定义的全局变量 */
extern u8 REC_BUF_NBIOT[50];
extern u8 flag;

u8 send_buf[50];
/* 数据的初始值 */
u8 data[] = {0x01, 0x46, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

/* 发送数据至服务器 */
void send(u8 humi, u8 temp, u8 pm_25, u8 pm_10)
{
	u8 high, low;

	data[8]  = humi;
	data[10] = temp;
		 		
	data[12] = pm_25;
	data[14] = pm_10;
	
	/* CRC16校验码 */
	high = usMBCRC16(data, sizeof(data)) & 0xff;
	low = (usMBCRC16(data, sizeof(data))>>8) & 0xff;
	
	sprintf(send_buf,"AT+NMGS=17,0146000000040800%02x00%02x00%02x00%02x%02x%02x\r\n",humi, temp, pm_25, pm_10, high, low);
	send_str(send_buf);
	delay_ms(1000);
}

/* 等待NBIOT初始,返回connect时表示与服务器连接成功*/
unsigned int NBIOT_init(void)
{
	if (flag == 1)
	{
		if (!strncmp("Connected", REC_BUF_NBIOT, 9))
		{
			flag = 0;
			return 0;
		}
		
		else
		{
			flag = 0;
			return 1;
		}
	}
	flag = 0;
	return 1;
}

/*设置NBIOT为AT指令模式 */
void AT_MODEL(void)
{
	u8 buf[10];
	sprintf(buf,"+++");
	send_str(buf);
	delay_ms(500);
	sprintf(buf,"a");
	send_str(buf);
	delay_ms(500);
}

usart.c

u8 rec_buf[50];
u8 flag;

void USART1_IRQHandler(void) 
{
	static int i = 0;
	if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
	{
		USART_ClearITPendingBit(USART1, USART_IT_RXNE)
		rec_buf[i++] = USART_ReceiveData(USART1);
	}

	if (USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
	{																									
		USART_ClearITPendingBit(USART1, USART_IT_RXNE); 
		USART1->DR;
		USART1->SR;
		i = 0;
		flag = 1;
	}
}
 
void send_str(unsigned char *buf1)		
{
	u8 i=0;
	
	while(1)
	{
		if(buf1[i] != 0)
		{
			USART_SendData(USART1,buf1[i]); 
			while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};
			i++;
		}

		else
		{		 
			return ;
		}
	}
}

main.c

#include "delay.h"
#include "sys.h"
#include "usart.h"	 
#include "DHT11.h"
#include "crc.h"
#include "nbiot.h"
#include "string.h"

 int main(void)
 {	 
	u8 temp, humi;
	float pm_25, pm_10;
	delay_init();	     
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	uart_init(9600);	 	
 	uart2_init(9600);
	while(NBIOT_init());				
	AT_MODEL();
	while(DHT11_Init());			
	while(1)
	{	
		pm_25 = PM_25();
		pm_10 = PM_10();

		DHT11_Read_Data(&temp, &humi);

		send(humi, temp, pm_25, pm_10);
		
		HMI(humi, temp, pm_25, pm_10);	
	}
 }

首先我等待nbiot初始化,由于之前我用了nbiot的透传,所以现在默认状态不是AT指令状态,所以接下来还要设置为AT模式。
然后就是将数据上传了,最好循环上传,然后在网页的调试界面查看数据进来了没,如果进来了,代表至少发送上去了,但如果格式不正确,数据模板里并不能正常显示。下面是我收到的数据。

数据的网页显示

在这里插入图片描述

微信上的数据显示

在这里插入图片描述
是不是非常简单!他还有报警功能,需要的可以自己添加进去,包括根据自己的需要也可以自行二次开发。
才疏学浅,有什么不对的地方欢迎大神指点,也欢迎讨论,接下来还会玩一下esp8266的sdk与ZigBee二次开发,有兴趣的后续可以关注一下哦。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值