《电子技术应用》

基于ESP8266的充电桩数据采集器设计

2017年微型机与应用第9期 作者:朱浩翔1,郭为民2,杨宁1
2017/6/9 22:32:00

  朱浩翔1,郭为民2,杨宁1

  (1.上海电力学院 自动化工程学院,上海 200090;2.国网河南省电力公司电力科学研究院,河南 郑州 450052)

  摘要充电桩通常采用工业总线与后台通信。针对工业总线布网复杂、扩展性差、易受干扰等缺点,通过无线模块设计了一个充电桩数据采集器,以ESP8266作为核心通信模块,将充电桩的数据进行采集并上传到上位机。首先介绍了ESP8266硬件电路及其开发环境。接着根据采集数据的不同,提出了一种更高效率的采集方案。最后经过实际应用验证了该采集器的可行性。所设计的采集器具有一定的通用性,通过简单修改配置,可以将此采集器应用于不同设备的数据采集。

  关键词:充电桩;无线通信;ESP8266;采集方案

  中图分类号:TP23文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.09.027

  引用格式:朱浩翔,郭为民,杨宁.基于ESP8266的充电桩数据采集器设计[J].微型机与应用,2017,36(9):92-94,99.

  0引言

  据国家发改委公布的数据,截止到2016年,我国充电桩的数量不到 5 万个,远远不能满足国内电动汽车发展的需要,明显制约了电动汽车的普及。在“十三五”的规划指导下,越来越多的汽车制造商和电力企业投入了大量的资源开展充电桩等电动汽车基础设施的研究。但在积极推动电动汽车基础设施建设的情况下,仍存在认识不统一、配套政策不完善、协调推进难度大、标准规范不健全等问题。其中充电桩后台检测是充电桩快速推广发展的关键,要在充电站实现通信系统,通常需要布置各类工业总线(RS485、RS232、CAN总线),其优点是数据传输可靠、设计简单[1];缺点是布网复杂、扩展性差、施工成本高、灵活性差、通信容量低,并且在一般的电力环境中都会存在很大的电磁干扰[2],普通线缆布置的总线网络常常会出现问题,另外对于早期投入建设但无良好通信功能的充电桩来说,在现场地下重新布置工业总线既不经济也不现实。因此,本文基于无线通信模块设计了一个充电桩数据采集器,该采集器的工作是将充电桩的数据上传到上位机,具有成本低、扩展性好、灵活性好等优点。

  工业常用的无线通信模块有NRF905、CC1101、CC3200、SIM900、ESP8266等,前两者通常需要额外的单片机对其进行控制和数据处理;ESP8266模块自带GPIO与SPI等接口,可以独立作为产品不需要额外的单片机;而CC3200和SIM900模块功能强大且包含了MCU,但其价格昂贵、功耗较大[36]。ESP8266不仅价格低廉,还有如下优点:同类产品一般不带Flash,ESP826612F的Flash为4 MB、内存为80 KB;其兼容性非常好,支持AT指令、C、Python、Lua、Javascript、Arduino等开发语言。因此ESP8266是业界一款里程碑式的WiFi芯片。

1原理设计

  选择ESP8266作为无线通信模块,通过RS485串口与充电桩连接,将ESP8266连接到WiFi与上位机处在同一局域网,实现局域网内通信。上位机通过下发查询报文采集充电桩的数据。充电桩只需转发报文采集电能表数据。

  1.1通信协议选择

  系统总体框图如图1所示。

001.jpg

  ESP8266内置了完整的TCP/IP协议栈,可以作为TCP的客户端。固件提供了接口函数,用户可以不管TCP/IP底层代码的实现。为了确保数据传输的可靠和安全,选择MODBUSTCP协议与上位机通信。其中上位机作为TCP服务器。

  由于充电桩的数据由电能表提供,因此选择电能表协议DLT6452007与ESP8266通信。

  1.2硬件设计

  由于ESP8266集成了射频电路,内置32位MCU,使得外围电路设计十分容易。其硬件电路图如图2所示。

  

002.jpg

  由图2可以看出ESP8266的外围电路非常简单,ESP8266对电源稳定性要求非常高,因此只需几个电容用于电源滤波。3.3 V的电压可以直接用LiPo电池供电。本采集器使用的型号是ESP826612E,该型号是ESP8266系列中最稳定、最成熟的模块。

  充电桩的核心控制板M287是飞思卡尔的一块工控核心板,M287通过RS485串口与ESP8266连接。

  1.3软件设计

  1.3.1ESP8266 SDK与ESP8266 IDEEclipse IDE:它是由安可信发布的一款用于ESP8266二次开发的软件平台,由Eclipse集成了相关插件,相对于官方开发环境配置。Eclipse IDE简易、方便,最重要的是可以在Windows下直接运行[7],编译过后能够直接生成bin文件,通过烧写工具ESP8266Flasher将bin文件烧入ESP8266即可。

  ESP8266 SDK(Software Development Kit):用户根据自己的ESP8266型号在乐鑫官网上下载需要的SDK。SDK包含了所有驱动,为用户提供了一个非常简单易用的平台,虽然其底层代码对用户不透明,但都提供了接口函数,用户根据编程手册可以直接调用[3]。

  1.3.2采集程序设计

  用户应用的初始化功能在user_init()实现,user_init()是程序的入口函数, ESP8266开机从该函数开始执行。ESP8266主程序流程框图如图3所示。

003.jpg

  主程序user_init()部分代码如下:

  void user_init()

  {

  uart_init(BIT_RATE_115200,BIT_RATE_115200);

  //串口初始化

  user_set_station_config();

  //esp8266 WiFi信息配置

  }

  void user_set_station_config()

  {

  struct station_config stationconfig;

  os_memset(&stationconfig.ssid, 0, 32);

  os_memset(&stationconfig.password, 0, 64);

  os_memcpy(&stationconfig.ssid, "WIFINAME", 8); //设定连接的WiFi

  os_memcpy(&stationconfig.password, "passward.", 8); //WiFi密码

  stationconfig.bssid_set=0;

  wifi_station_set_config(&stationconfig);

  os_timer_disarm(&test_timer);

  os_timer_setfn(&test_timer,(os_timer_func_t*)user_check_ip, NULL);

  os_timer_arm(&test_timer, 2000, 1);

  }

  最后配置TCP客户端信息,这里需要注意连接TCP服务器时必须确保WiFi已成功连接,因此设定了一个定时器test_timer,该定时器的作用是通过WiFi状态接口函数wifi_station_get_connect_status()循环检测WiFi是否连接成功,当WiFi连接成功后配置TCP客户端信息。下面为建立TCP连接的程序:

  user_check_ip()

  {

  tcpclient.type=ESPCONN_TCP;//tcp连接方式

  tcpclient.state = ESPCONN_NONE;

  tcp_server_ip.addr = 0;

  const char esp_server_ip[4] = {x,x,x,x};

  os_memcpy(tcpclient.proto.tcp->remote_ip, esp_server_ip, 4);//远程IP设定

  tcpclient.proto.tcp->remote_port = 8888; // 远程端口设定

  tcpclient.proto.tcp->local_port = espconn_port(); //本地端口设定

  espconn_connect(&tcpclient);//连接tcp 服务器

  }

  remote_ip可以选择自动分配或固定IP,远程端口remote_port根据上位机选择,通常选择比较大的,小的端口通常被上位机一些系统服务占据。

2数据采集方案

  根据充电桩电能表协议,需要采集的数据有变量数据、电能量数据、最大需量及发生时间数据、时间记录数据。

  根据采集频率和是否需要实时显示,将数据分为两类,分别采用不同的方案采集。

  第一类数据:电能量数据、最大需量及发生时间数据、时间记录数据,比如:A相电压失压总次数和时间。此类数据非常多,并且是不需要实时显示的,采集频率很低,采用方案A。

  第二类数据:变量数据,比如:A、B、C三相电压、电流、功率等,此类数据是需要实时显示的,其采集频率很高。采用方案B。

  2.1采集方案A

  针对非实时更新数据:比如事件记录数据中的某条报文:A相失压总次数和时间。上位机下发该条查询报文,ESP8266解析该报文并下发给电能表,电能表响应该报文并回复报文给ESP8266,ESP8266解析回复报文再上传给上位机。采集方案A如图4所示。具体程序流程图如图5所示。

004.jpg

005.jpg

  2.2采集方案B

  针对实时更新数据:比如瞬时电压、电流、功率。由ESP8266向电能表循环发送N条报文,电能表响应每一条报文,ESP8066解析N条报文,得到数据存入自身内存。上位机向ESP8266循环下发N条查询报文,ESP8266取出内存中的数据回复上位机。采集方案B如图6所示。

006.jpg

  具体程序流程图如图7所示。

  2.3采集方案比较

  对比分析方案A和方案B,由于方案B中的ESP8266与上位机和充电桩的通信是相互独立的,因此在程序上更容易实现。并且由于方案B相互间的通信是同时进行的,需要实时更新的数据已经被采集并存放在ESP8266内

  存中,上位机在下发查询报文时,ESP8266只需取出内存中的数据直接回复即可,无需将MODBUSTCP报文格式转化为DLT6452007报文格式,再下发到充电桩,最后才将充电桩回复的数据上传到上位机。综上所述,方案B的采集效率更高,因此数据的实时性也得到了提高。

  两套流程交替运行,如果上位机准备查询的是非实时数据,此时ESP8266通过判断上位机下发的查询报文,停止A方案,开始B方案。由于非实时数据采集频率通常非常低,所以待一条非实时数据的报文得到正常响应后,重新开始A方案,停止B方案。

3结论

  本文基于ESP8266设计的无线数据采集器,成功地实现了充电桩的数据采集,针对不同数据类型使用不同采集方案提高了充电桩的数据采集效率。与传统的充电桩有线数据采集器相比,该采集器具有方便安装、易于维护、灵活扩展等特点。该采集器具有一定的通用性,通过修改配置文件并增加所需通信协议,即可以作为通用的数据采集产品。

  参考文献

  [1] 周春喜.电动汽车充电站远程监管网络系统研究[D].杭州:浙江大学, 2012.

  [2] 刘嘉慧.我国可插电式电动汽车充电设备行业研究报告[D].成都:西南财经大学, 2014.

  [3]  霍涛, 贾振堂. 基于STM32和SIM900A的无线通信模块设计与实现[J]. 电子设计工程, 2014, 22(17):106-110.

  [4] 李美莲. 基于SIM900B家用电器远程监控系统的研究[J]. 微型机与应用, 2013,32(24):31-33.

  [5] 齐华, 王秋娟, 刘军. 基于CC2430的无线条码数据采集器的设计[J]. 电子技术应用, 2011, 37(2):120-122.

  [6] 李春杰,刘瑞霞.基于一种新型嵌入式系统级芯片的无线数据采集系统的设计[J].现代电子技术, 2006, 29(3):36-38.

  [7] 范兴隆. ESP8266在智能家居监控系统中的应用[J]. 单片机与嵌入式系统应用, 2016, 16(9):52-56.


继续阅读>>