STM2F407ZGT6和NBIOT模块链接华为云

作为一名物联网大三的学生,NBIOT还是因为项目的缘故自学的,在使用过sim868和NBIOT模块后,才开始真正的了解了NBIOT为什么是物联网专门使用的模块了,NBIOT模块具有很低的功耗,而且它的信号在室内非常的理想,甚至比GPRS的信号还要强一些,其次是他的的协议非常的简单,采用的是专门的物联网的协议——LWM2M。NBIOT在一次链接成功后,他在再次上电的时候会自动链接到上次的IP地址。

下面我想说一下我这次利用华为云链接的过程。
(1)首先利用AT指令测试模块的功能是否正常。
利用CH340连接NBIOT模块,注意NBIOT需要供电稳定,这里推荐利用VCC这个引脚,而不是3V3和5V,因为供电稳定的含义并不是说电压的高低,而是电压的值尽量没有波动,如果供电不稳定就会出现模块一直重启的现象。
注意串口在发送AT指令时需要发送新行,来给模快提供一个指令结束的标志。

对于AT指令的解释:AT指令是厂家生产该模块时就有的,主要是用来测试功能和设置一些可能用到的功能。
这个可以根据所用的模快的芯片来进行选择,例如我用的是BC35,会有文档是专门来介绍BC35的AT指令集。
下面介绍几个在连接时候可能用到的AT指令。

<mark>AT</mark> 表示模快是否可以接受AT指令,正常回复OK。
<mark>AT+CSQ</mark> 表示查询此时模快的信号强度。0-30时正常,99代表着无信号。
<mark>AT+CGATT</mark> 表示查询模快此时有没有联网。如果回复1表示连接上网。
<mark>AT+NCDP=目标IP</mark> 连接目标IP的操作,必须联网才可以,正常返回OK。
<mark>AT+NRB</mark> 重启模块,一般在第一次连接时需要重启模快。
<mark>AT+NCDP?</mark> 表示查询此时连接到的IP地址。
<mark>AT+NMGS=5,0000000034</mark> 表示发送的信息是十六进制的0x34。5表示发送的字节的长度。00是字节头。

(2)创建华为云服务器
下面介绍华为云服务器的操作流程:

账号注册后,手机会收到自己的服务器的密码。用这个密码登陆后可以到开发者平台。(OceanConnect平台)

然后创建新的产品:

<mark>只要是按照着上面红色标记的流程走,就可以创建一个物联网的服务器。</mark>

(3)利用单片机的串口进行单片机程序的编写。
单片机程序关键的地方在于字符串的处理和判断,可以考虑使用C语言库里面的一些函数,例如strlen等等。

#include "stdio.h"
#include "string.h"
#include "stdarg.h"
//USART2用来发送AT指令
void SendCmd(int8_t* cmd ,int8_t* result ,int32_t timeout)
{
	while(1)
	{
		memset(USART2_RX_BUF,0,strlen((const char *)USART2_RX_BUF));
		usart2_rcv_len = 0;
		
		USART2_Write(USART2,(uint8_t*)cmd,strlen((const char *)cmd));
		mDelay(timeout);
		printf("%s %d \r\nCOM:%s \r\nRSP:%s\r\n",__func__,__LINE__,cmd,USART2_RX_BUF);
		if((NULL!=strstr((const char *)USART2_RX_BUF,(const char *)result)))
		{
			break;
		}
		else
		{
			mDelay(100);
		}
	}
}

该段代码可以实现发送cmd,并且检查模快回复中有没有result,因此还需要写一些串口中断的接受服务程序,这段代码就不粘贴了。

(4)总结:
作为一名物联网的学生,对于物联网的认识从开始的它和计算机专业差不多起,到现在渐渐能够了解它能够给人们带来的意义,现在才能明白这门学科的出现的必要性,但是却也深深的感受到自己的知识的匮乏,就像是刚刚触摸到了这个边界,眼前是一片海洋,全新知识领域的海洋。真是革命尚未成功,同志仍须努力!

<mark>第一次写博客,有什么不好的地方希望大家可以多多批评指正</mark>