无人售货的无线通信关键技术研究与实现
2019-05-27
(黄冈师范学院,湖北 黄冈 438000)
0 引言
随着科学技术的不断发展, 人力成本越来越高, 传统的经营模式和生产方式越来越不适应中国的发展,回顾历史, 世界最终进步是依靠技术的进步,中国近四十年发展的经验告诉我们, 科学技术才是第一生产力, 只有促进社会的生产效率的不断提高,人民的生活水平才会不断提高, 人类社会才是真正的进步。针对销售行业,如何的提高服务水平, 提高服务质量, 人们也做了更多的探索,也取得很多进步, 如从柜台销售的百货方式, 到自由选购的超市模式.现在自动售货机也逐渐进入了现代人们的生活之中.当前由于移动支付的现实及普及,基于移动支付方式的的自动售货系统比起传统的售货系统具有更大的便利性和安全保障, 也更加能被消费者接受。着眼于未来我们认为这种无人售货机一定是无现金交易, 因此完全可以从成本的角度出发,省略投币等现金交易方式, 充分利用手机交易方式(支付宝、财付通,微信等),通过手机支付快捷完成交易, 提供及时服务。
目前,由于无线支付方式才刚刚兴起,从文献资料来看。尚未看到基于无线支付方式的无人售货系统的相关论文。而原先的无人售货系统通信方式大多是基于有线通信或者GSM短信方式,可靠性差。而当前无线通讯技术已经进入到物联网时代,各种无线通讯技术已经成熟。通过实验对比找到无人售货最适合的无线通讯方式成为实现无人售货的关键之一。
实现无人售货的关键通讯技术实际上就是端到端的接入技术, 端到端的接和技术又分为无线的接入技术和有线的接入技术。有线接入实现通讯的成本比较高,而且不容易实现,工程量太大, 移动性,灵活性太差,所以说有线的网络对我们智能售货系统的应用场合并不是很匹配,而无线的接入技术能够做到广覆盖和无缝覆盖。只要终端能够发射电波,就能够通过基站和平台建立通讯连接,所以我们认为无人售货的最佳通讯技术是无线通讯技术。
1 无人售货的通信技术的选取
无人售货系统的无线接入技术, 根据信号的覆盖泛围,我们分为无线个域网, 无线局域网,无线广域网,无线广域网又分为低功耗广域网,宽带广域网,宽带广域网一般是高速率的,低功耗广域网又分为授权频段和非授权频段,授权频网在我国要由工信部颁发授权才能使用。由运营商支配使用的通讯频段,无线通讯根据无线信号覆盖的大小不同分为多种不同的无线域网,比如蓝牙通讯。通读RFID,如果RFID是有源的,通讯距离可以达到250米。校园网的校园一卡通里面的芯片是有源射频识别,学生进入校园可以和基站通讯,如果是无源如智慧仓储的物品识别码就是无源的,距离25米,无线局域网主要通读是wIFI, ZIGBEE, ZWave,DECT数字增强无绳电话系统。通过上述近距离通信技术的了解我们发现采用这类技术实现无人售货系统的信息通讯比较困难,要实现我们的无人售货系统我们重点关注还是无线广域网。
图1 无线接入技术分类
首先可以采用的就是低功耗的广域网技术,这类通讯可以实现就是广覆盖,低功耗,大连接,低成本。低功耗的广域网技术又可分为授权频谱和非授权频谱,目前的NB-lot包括MTC和EMTC都是工作在授权频谱这个泛围。EC-GSM是广展覆盖GSM,也就是在2G网络的传输范围的扩展。LTE-M是物联网的早期技术,一个是cat.0 一个是cat.1。未来的无线通讯技术主要是4G,5G通讯。非授权频谱主要有LORA SIGFOX两种。这种方式也可实现我们终端与平台的连接,但布网点少, 只有少数区域应用。
根据传输速率的不同。低速率, 技术分类有不同分从需求上来说,窄带广域网,虽然能够实现广覆盖,大连接,成本低。LORA SIGFOX具体来说只是城域网,也就是在某一个地区小范围内使用,无法实现全国布局,NB-LOT可以实现全国一张网。EC-GSM网络是在运营商在原有的网络上升级,但与无人售货机这种技术需求还是相差甚远。而且与现有的GSM冲突,在低功耗的远距传输中NB-LOT可以实现,但目前通过实测效果并未达到预期。也就是说通讯效果不好,不能够稳定连接。
基于此,在无人售货机通讯方式上目前只能放在广域网方式。从性能上来说当然是3G、4G、5G效果更好,但考虑到价格因素,选择GPRS网络通信方式也是一个可行的方式。不选用3G网络,因为一方面是因为3G网络通常可以传1M数据,而在多数情况下,我们只需传输十几个字节,如果选用3G网络技术实现就会造成通讯资源的巨大浪费。因此我们选用GPRS网络来实现信息传输。综上所述我们选用GPRS技术。
2 硬件设计
2.1 结构设计到电路设计,阐述设计思路,解决的技术难点
GPRS通讯硬件电路主要包括控制电路和GPRS电路两大核心模块。当有远程通讯需求时,由主控模块发送控制命令给通讯模块建立通讯。通讯通道建立后,数据信息通过通讯模块接收信息传回主控制模块进行处理。主控制模块采用ST公司的STM32F107芯片。GPRS通信采用SIM800芯片。
2.1.1 结构设计
系统终端硬件采用以CORTEX-M4微处理器作为控制器核心, STM32F42103 微处理器是硬件的核心处理器,控制着整个系统的工作状态。 系统基本模块内容主要描述STM32F42103 的系统实现,包括复位电路,时钟电路 继电器电路 。STM32F42103系统如图2所示。
图2 系统框图
2.1.2 SIM卡电路
SIM卡就是一个带微处理机的芯片卡,由微处理机、内存模块RAM、程序存储器ROM、数据存储器EEPRoM和串行通信单元五部分组成,SIM卡上存储能够识别的所有属于本用户的信息。符合GSM技术规范的“智能”卡,其中内部包含了与用户有关的信息主要包括: 国际移动用户识别号(IMSI)、鉴权密钥(KI)、鉴权和加密算法。暂存的有关网络的数据,SIM卡又称为用户信息识别卡[3]。SIM800想要想通过无线通讯系统的服务必需先要购买SIM卡,并插入SIM卡,才能使用GPRS通讯服务。SIM卡通过读卡器端口与sim800联系。
SIM卡电路设计注意事项:
SIM 卡电路比较容易受到干扰,引起不识卡或掉卡等情况,所以在设计时请遵循以下原则:
在 PCB 布局阶段一定要将 SIM 卡座远离 GSM 天线;
SIM卡的走线要尽量远离 RF 线、VBAT 和高速信号线,同时 SIM 卡的走线不要太长。SIM 卡座的 GND 要和模块的 GND 保持良好的联通性,使二者 GND 等电位;
为防止SIM卡时钟对其他信号干扰,需要作保护处理。
为了防止干扰应在信号线上靠近 SIM 卡座放置一个 1 μF 电容;
在靠近 SIM 卡座的地方放置 TVS,该 TVS 的寄生电容不应大于 50 PF 的,和模块之间串联 22 欧姆电阻可以增强 ESD 防护。
图3 SIM 卡接口电路
2.2 技术难点
由于STM32F42103 微处理器与SIM800芯片的电平不匹配。需要通过一个电压转换芯片,否则系统信号无法工作, 一般来说应该选取国外质量好的品牌, 能够可靠传输转换信号芯片, 故笔者选用SP3232EEN来实现电平转换功能。具体电路如下。
图4 SP3232驱动电路
3 软件设计
要实现无人售货机的控制及通讯功能,光有硬件的支撑是远远不够的, 同时要完成基于STM32系统终端软件设计。
3.1 设计软件平台简介
针对STM32F429开发,本次软件设计采用ARM公司的Keil 5 MDK 作为开发套件进行程序开发。相对于其它开发方式,该集成开发套件具有下面几方面的优势。
1)KEIL MDK提供芯片启动代码,开发者不需要编写相应的启动代码,节约了开发时间,提高了编程效率。
2)由于ST公司提供了对应的库函数,开发者不需要花太多时间纠结在芯片的寄存器上。可以通过导入相应芯片的库函数,利用所提供的库函数功能完成开发。使整个编程工作更加方便快速。
3)KEIL开发界面简洁,学习容易。
4)芯片公司提供大量的例程,数据手册,参考手册,能够极大的方便用户使用。同时提供各种技术支持,并不断的举行技术推广讲座,方便开发人员掌握开发方法。
3.2 实现数据传输
无人售货机的数据通讯是采用中断响应方式来实现数据传输。为保证数据的准确性和安全性, 在GPRS数据传输的基础上,在终端采用基于MODBUS的CRC对数据进行校验。本项目软件的实现可以采用基于库函数的直接驱动硬件方式实现。
图5 通讯流程图
1)系统初始化:系统时钟初始化、中断初始化、GPIO口初始化、串口初始化等。
2)建立 GPRS通信:通过串口传输AT指令启动GPRS,建立GPRS传输,成功,进行数据传输,不成功进行断点续传。
3)在GPRS通信的基础上进行数据校验与处理。
远程终端主控芯片通过USART串口通讯与GPRS芯片SIM800进行通讯。通过串口传输AT指令给SIM800从而启动GPRS传输,从而实现与服务器端的数据交互,从而实现服务器与终端节点的信息交换。
终端机与远程监控中心的远程数据传输的实现包括 GPRS 通信模块的初始化、GPRS 网络登录、链路维护和数据传输过程。终端机在启动时初始化时,由微处理器向通信模块发送一系列AT 指令,配置通信模块的工作模式,上下文激活,依据PPP 协议请求登录到GPRS 网络,经过LCP 协商和NCP 协商,建立起通信连路,成功登录到GPRS 网络,就可与监控中心进行远程数据传输;链路维护指终端机每隔一个固定时间发送一条链路维护指令,检查通信链路是否断开,如果通信连路出现故障,就重新登录到GPRS 网络;数据传输是指数据以IP 报文的形式在终端机与监控中心间的双向传输。
1)定义AT指令
//REG
#define ATE0_CMD "ATE0 " /// 禁止回显
#define CREG_CMD "AT+CREG?\00Dx00A" /// 查询网络注册情况
#define CGMM_CMD "AT+CGMMx00Dx00A"
#define SIMCARD_CMD "AT+CPIN?x00Dx00A"
//LD GPRS
#define GPRS_QD "AT+CSTTx00Dx00A" /// GPRS启动
#define GPRS_JH "AT+CIICRx00Dx00A" /// 移动场景开启,激活
#define GPRS_DEF_PDP "AT+CGDCONT=1,”IP”,”CMNET”x00Dx00A" /// 接入点
#define GPRS_ACT_PDP "AT+CGATT=1x00Dx00A" /// GPRS激活PDP
#define GPRS_CMNET_APN"AT+CIPCSGP=1,”CMNET”x00Dx00A"//设置GPRS模式
#define GPRS_BJ_ADDR "AT+CIFSRx00Dx00A" /// 获取本地IP
#define GPRS_TCP1 "AT+CIPSTART=" /// 建立一个IP连接
#define GPRS_TCP2 PROTOTOCOL //定义传输协议
#define GPRS_TCP3 IPADDR //定义IP地址
#define GPRS_TCP4 PORTNUM //定义端口号
启动GPRS
三只松鼠通过创业营销战略的机会导向、超前行动、创新性、风险管理和资源整合几个维度,利用探索性创新和利用性创新将产品、服务和内容传递给顾客,与顾客、合作伙伴、员工等价值链中成员共创价值,实现企业目标(见图1)。
void start_gprs_mode(void)
{ GPIO_ResetBits(GPIOB,GPIO_Pin_0);
delay_GSM(100);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
delay_GSM(10000);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
2)建立一个IP连接
void __GPRS_TCPIP()
{//AT+CMGR=1
send_string_uart3(GPRS_TCP1); //uart3口发送"AT+CIPSTART=",即建立一个IP连接
send_data_uart3(0x22); //
send_string_uart3(g_config_data.protocoltype); // uart3口发送协议类型
send_data_uart3(0x22);
send_data_uart3(',');
send_data_uart3(0x22);
send_string_uart3(g_config_data.ipaddr); / // 从uart3口发送IP地址
send_data_uart3(0x22);
send_data_uart3(',');
send_data_uart3(0x22);
send_string_uart3(g_config_data.portnum); //// //从 uart3口发送端口号
send_data_uart3(0x22);
send_data_uart3(0x0D);
send_data_uart3(0x0A);
PUT("destination address:");
PUT(g_config_data.ipaddr);
LCD_write_english_string((LCD_WIDTH_PIXELS - strlen(g_config_data.ipaddr)*6)/2,3,LCD_BANK_LINE);
if(0)
{ LCD_write_english_string((LCD_WIDTH_PIXELS - strlen(g_config_data.ipaddr)*6)/2,3,g_config_data.ipaddr);
} else
{ LCD_write_english_string(0,3,g_config_data.ipaddr);
LCD_write_english_string((LCD_WIDTH_PIXELS - strlen(PM)*6)/2,1,PM);}
delay_GSM(3000);
}
(3)发送数据
void send_gprs_data(char * buf , unsigned int count)
{
unsigned int i ,j;
if (current_status != TCP_IP_OK) // 如果协议没有连接成功直接返回
return ;
ibusy = 1;
LCD_write_english_string((LCD_WIDTH_PIXELS - strlen(LCD_BANK_LINE)*6)/2,5,LCD_BANK_LINE);
LCD_write_english_string((LCD_WIDTH_PIXELS - strlen(SIM_SEND_GPRS_DATA_TEST)*6)/2,5,SIM_SEND_GPRS_DATA_TEST);
send_string_uart3(GPRS_SEND_DATA); //发送数据命令
delay_GSM(2000);
for( j = 0 ;j < count ; j ++)
{ for ( i = 0 ; i < strlen((const char*)buf) ; i ++)
{ send_data_uart3(buf[i]); } }
send_data_uart3(0x1A); //LF //没长度限制一定要用1A表示结束
endif
ibusy = 0;}
3.3 掉线重拨技术实现
为解决系统掉线重拨问题,本文在单片机主程序的基础上,嵌入“心跳”检测程序,实现数据的稳定传输。所谓“心跳”程序,就是模拟心跳过程,定时发送检查数据,根据返回信息判断是否重登录网络。图6为“心跳”检测程序流程图。
图6 心跳包检测程序流程图
心跳检测程序:
if(is_enable_send_gprs_position()&&!ibusy) //定时发送心跳数据
{
icount++;
gprs_heart(wendu_gprs,icount); //发送心跳数据,定时器里面实现
if(icount > 32000)
icount = 0;
4 实验测试
要实现远程控制,一定需要利用现有的无线传输网络, 离不开现有的运营商网络的支持,首先使用一个市面上常用的手机卡,插入SIM卡中。通过STM32的USART3对SIM800进行指令控制, 在实验中通过AT指令,能够完成网络的远程连接, 但不能有效保持连接状态, 在无法确定原因的情况下,购买了专用流量卡做测试, 同样信号也没有多少改善。 只能进行短时间有效传输, 每一次要传输信号时,都需要重新做连接操作, 充分怀疑是运营商的踢网操作造成的,通过实验提醒笔者, 在实际应用过程中, 当要传输信号时,一定要多做检测动作, 查看通信的连接状态, 保证信号的正常传输,当然也有可能是因为远离基站,信号不好造成的断线。不管是什么原因。保持信号通过长连接是在程序实现过程中要充分考虑的重要问题。
5 结束语
详细分析了GPRS 通信技术,根据基于GPRS 网络平台的远程通信技术的发展情况,确定了系统的设计方案远程控制系统的功能设计,完成硬件设计的基础上,研究了用于GPRS 模块通信的PPP 协议,设计了终端的应用程序,进行了远程终端与监控中心的数据传输实验,实现了远程终端的硬件设计。该系统运行稳定,具有广泛的应用价值和前景。