STM32+LORA芯片调试

最近接手一个新项目,主要是用stm32做控制芯片,然后利用lora通信,实现相关功能。

  1. 项目概述
  2. 硬件设备
  3. 项目流程
  4. LORA介绍
  5. 理论知识
  6. 调试流程
  7. 调试中的问题
  8. 个人反思

    整个项目由3个同学协作完成,我主要负责通信部分的调试。

1.项目概述:通过单片机控制lora节点,发送数据给“lora数据集中器”,数据集中器将数据上发给指定服务器,进行软件端的开发。

                                                               

名称 作用
WH-L101-L(lora节点) 单片机通过节点发送数据给集中器
LG220(数据集中器) 集中器将数据上传给指定服务器

2.硬件设备:“lora节点”*10, “lora数据集中器”*1,单片机型号为:stm32f103c8t6(自己设计的PCB);

若干USB-TTL模块,lora节点配套底板一块,吸盘天线若干。

3.项目流程:首先确定整个项目所要实现的功能,根据功能背后的硬性要求,寻找对应的硬件设备,制作选型文档,从多维度进行考虑,缩小目标设备的选择范围,先确定几个大概选型,咨询相关技术客服,了解实际的产品型号,最后再下单购买。

4.lora是一种远距离、低功耗通信技术,全称是:Long Range。

找了两个简单的介绍文档,可以留作参考http://www.four-faith.com/2018/industry_0828/683.html  (附有各种通信方式特点对照表)https://blog.csdn.net/Ttian6/article/details/94215277

LORA的通信距离不等,我选择的芯片支持通信距离为2KM左右,且通信距离可调,芯片功耗很低。lora 模块很多,需要慎重选择。

5.理论知识

 介绍一下这套通讯设备之间的关系:单片机控制节点,节点发送数据给数据集中器,集中器将数据上传至服务器。但是,这是在应用时的工作逻辑关系,如何调试这套设备呢?必须先熟悉几个软件以及知识点。

网络调试助手:一共分为串口和网口两个调试端口。一般是将电脑当作本地服务器,通过串口给一端(LORA芯片)发送信息,然后网口一端显示服务器(本地服务器的地址就是电脑的IP地址)接收到的数据(这里的数据是由集中器所上传)。

LORA的通信方式:lora节点与lora数据集中器之间通信,是依靠各自的lora吸盘天线,与网络,基站等等无关;

MQTT协议:https://blog.csdn.net/anxianfeng55555/article/details/80908795

TCP/TP协议:就是简单的通信协议啦,我在前几篇博客中都有过详细介绍。

服务器端口号:每一个服务器都可以设定几个特定的端口号供自己使用

本地端口号:就是当前设备的端口号

服务器端口号:服务器或者网关开启接口给除它之外的IP连接;本地端口:供其他服务器或者设备连接的接口编号。所以在此处,网络调试助手与集中器之间,关系就应该是:网络调试助手,端口号填写集中器的服务器端口号,集中器端口号与之相反。

6.调试流程:

(1)基于配套底板调试LORA节点,进入AT指令,设置一些主要参数。购买配套底板是为了防止自己画的板子出问题,用作对照实验,且可以极大提升开发效率。小编

(2)调试集中器:成功配置集中器之后,就可以进行简单的连接,以及与配套的透传云实现数据收发。

(3)基于自己设计的PCB板调试LORA节点,也就是通过单片机发送指令,实现AT指令的收发。

(4)实际通信有效距离测试。

最后,也是最重要的一点,一定要学会看芯片使用手册!!!!!!!

小编的调试步骤:

(1)查看芯片快速入门手册以及配套底板的硬件说明,将芯片与配套底板焊接,通过USB-TTL模块连接电脑与底板(已知采用串口通信),打开串口助手,发送指令快速进入AT模式,分别看各个参数的作用,并设置参数。

(2)为数据集中器供电(集中器的天线分别安上),并且电脑连接集中器的WIFI,登陆指定网页:192.168.1.1,账号密码都是:root,然后进入集中器设置界面(如下)。服务器设置:指定集中器数据上传的服务器。基本设置:设定与节点连接的相关参数。通道:就是数据传输的通道,彼此间参数各不相同(主要是频率这部分),防止数据冲突。

 

       (3)尝试建立连接(采用本地服务器):此时,焊接有芯片的底板通过USB-TTL连接到电脑串口上,电脑连接集中器的WIFI,并且,将集中器的服务器界面,服务器IP地址设置为电脑IP,服务器端口和本地端口设定好,在专门的配置软件(网络串口调试助手)中,也要保持一一对应的关系(类似串口通信的TX-RX,RX-TX),设定好波特率。通过串口发送数据,就可以在集中器端查看发送的数据。
       (4)将AT指令配置交由单片机完成(通过单片机发送指令,有2种方式,状态机或者直接延时发送),通过阅读芯片手册,可以知道指令发送的起始信号和退出信号。
       (5)测试自己设计的PCB板子,先确定最小系统没问题,然后将外围电路及芯片焊接上,测试LORA芯片是否对单片机发送的指令做出预期回应(单片机串口1发送数据,然后将串口1接受的数据进行存储,通过串口2发送给电脑显示)
        (6)通过以上步骤,就能够确定硬件大体的功能达到预期要求。传输距离,依靠天线电路。这部分电路设计很重要,我将单独列一章作为介绍(兼顾PCB天线设计以及天线型号选择)。
         (7)单独测试传输距离:分别采用改装的吸盘天线以及PCB天线。发现传输速率越低(波长越长),传输距离越远。
注意传输协议,包头包围,发送数据时,注意十进制和十六进制之间的转换,发送字母S,就要通过串口发送S对应的ASCLL码,而且是10进制的。单片机判断数据,也就是判断接收的ASCLL码十进制的值。
         (8)软硬件对接,通过网络串口调试助手,可以查看数据。实际场景中,需要将集中器的服务器地址改为指定云服务器的地址,然后由软件后台进行判断。

7.调试中的问题:

(1)始终无法进入AT指令:WH-L101-L-C型号的lora芯片,进入AT指令,需要严格遵循时序要求。此处,就以最简单的延时函数调试单片机进入AT指令模式:(状态机涉及信息众多,延时,简单粗暴,可靠)

		if(USART_RX_STA&0x8000)//接受到中断,就执行保存
		{			
			USART_RX_STA=0;//对数组清零,方便下一次接收
			len=USART_RX_STA&0x3fff;//取出u16中的低16 位,得到此次接收到的数据长度
			for(t=0;t<len;t++)
			{
				USART1->DR=USART_RX_BUF[t];//把每一个数据都在串口打印出来
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			USART_RX_STA=0;//对数组清零,方便下一次接收
			if(keys==1)
			{
				printf("%c",j);
				delay_ms(200);
				printf("%c",j);
				delay_ms(100);
				printf("%c",j);
				delay_ms(100);
			}
			    delay_ms(400);
			    printf("%c",M);
			    delay_ms(500);
			    printf("AT+AID=00000001\r\n");
			    delay_ms(400);
			    printf("AT+NID=00013c2d\r\n");
			    delay_ms(400);
			    printf("AT+SPD=1\r\n");
			    delay_ms(400);
			    printf("AT+CH=72\r\n");
			    delay_ms(400);
		     	    printf("AT+ENTM\r\n");
			    delay_ms(400);
		            printf("AT+ENTM\r\n");
                            LED=!LED;
		            delay_ms(1000);
			    delay_ms(1000);
			    delay_ms(1000);
			    LED=!LED;
                  //        printf("AT+AID\r\n");//可以查询设置的数据
		}

自己调试快一周,几在崩溃边缘徘徊,被同伴一语点破,甚幸甚幸呀。(以前用的通信模块,进入AT指令没有严格要求时序问题,更重要的,是暴露了自己的问题,几次怀疑时序,但却没有付诸行动,导致调试耗时巨大)。使用手册,重要部分,一定要精度。

(2)很短时间就调试成功了数据集中器,但是,如何测试“有人公司”产品的实际传输距离呢?这里就涉及到了网络调试助手,以前一直认为网络调试助手只能在一台电脑上实现“串发网收”。因此在此处困惑许久,直至配置服务器连接**公司透传云,都没能进行数据传输测试。老师花了一分钟,小编就明白了如何测试及原理:一台电脑连接"底板+lora芯片",打开网络调试助手的串口部分,另一台电脑打开网络调试助手的网口部分(同时在集中器上设置好服务器地址位本机IP地址,服务器端口及本地端口),一台电脑移动,发送数据,在数据集中器端的电脑即可在网络端口查看数据。

(3)敢于质疑,在利用AD画图的时候,发现芯片手册上存在问题,前后对照之后,果断问了技术支持,更新了原理图的版本。

(4)自己设计的PCB天线电路(外置天线),但是传输距离只有10~20M远,购买的底板+芯片+吸盘天线,在学校内 传输距离达到了1000+(楼层越多,越密集,传输效果越不稳定,信号越弱),正在改进电路,希望下一版,自己设计的天线可以传输更远的距离。

8.个人反思:接手了比较多的通信、物联网相关项目,但是本次还是遇到了问题,足见自己功底不踏实。正如老师所说:想要快起来,必须先让自己慢下来。并且,对于各种协议的理解,远远未达到清晰明了,依旧停留在了解的阶段。

 

9.项目拓展,如果有n多个lora芯片需要接入同一个集中器,需要将修改集中器的接入节点数量,并且,在每一个单片机中烧录指定程序(每个单片机对应一个芯片,程序中需要修改单片机AT指令中LORA节点的ID),如果已知产品数量,那么,依旧可以采用状态机来解决重复烧录这个问题。

暂时先总结出这么多,希望对读者能有一定帮助。

我曾许下十年,只为最美的遇见。

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章