张楠森,武永华,陈凌凡,吴明旭,林进鑫
(福建江夏学院 电子信息科学学院,福建 福州 350108)
利用移动设备远程查看电能的使用状况已成为当前生活的迫切需要。20世纪70年代,国外开始对远程抄表进行摸索和研究,使远程抄表系统短时间内得到了突飞猛进的发展[1]。它在电、水、气、热等领域做出了巨大贡献,但是很难在现实生活中应用推广[2]。20世纪80年代初,瑞士Iandis/GYR公司独立研发了SCTM技术,推动了瑞典远程抄表技术的发展,与此同时,英国THORNEMI公司正在通过公用电话网络研发远程自动抄表技术[3]。1985年,日本九州电力公司通过电力载波技术对远程抄表进行实验[4]。此后数年里,美国、德国、澳大利亚等国家逐渐研制出新的技术,并将远程自动抄表系统大规模投入到实际工作中[5]。1990年后,美国、加拿大等国在大多数电表节点配备了远程自动抄表芯片[6]。1998年,美国正式投入使用其研制的最大电能远程自动无线抄表系统[7]。2006年,东欧采用研制于法国Coronis公司的Wavenis无线抄表技术,建成了第一个大规模远距离全自动抄表系统网络[8]。中国从20世纪80年代开始对远距离抄表系统进行研究,但研究成果在实际应用中的表现却不尽如人意[9]。中国疆域辽阔,电能信息采集系统覆盖范围相对较小,很多地区仍然依靠人工采集数据,在进行数据分析时无法体现全局性。近年来,抄表系统发展迅速,远程抄表系统已被逐渐应用于国内住宅小区,给居民带来了极大便利[10]。本文基于物联网技术设计了一种基于ESP-32单片机的智能电表系统,具有实时监控、远程通信、本地通信、显示等功能,成本低、功耗低、效率高、稳定性强,便于供电部门实时监测用户用电量,推动社会的智能化发展。
本装置主要由电能数据采集功能模块、数据通信功能模块和数据监控功能模块组成。图1所示为系统结构。数据监控模块由HMI屏、阿里云服务器、BLE APP组成,用于查看用户用电量。数据通信功能模块由UART串口、WiFi模块、BLE蓝牙模块构成,串口UART0用于下载和调试程序,UART2用于向HMI屏传输数据,WiFi模块和BLE蓝牙模块均使用TCP/IP协议传输数据。使用WiFi模块时,ESP-32芯片作为客户端连接阿里云服务器传输数据,使用BLE蓝牙模块时,ESP-32芯片作为Server端向手机APP发送数据。霍尔效应传感器ACS712采集电流数据,ESP-32芯片将采集的电压数据经ADC模拟通道滤波后得出最终电压数据,然后使用公式得出用电量。
图1 系统结构
本设计采用ACS712电流传感器将得到的AC电流转换成模拟电压信号,通过GPIO32端口发送给ESP-32芯片,数据经过采样处理后由UART2串口的GPIO16、GPIO17端发送给HMI串口屏,同时通过蓝牙和WiFi模块进行无线通信。系统电路如图2所示。
图2 系统电路
ESP-32-WROOM-32是一款用途广泛的芯片,其MCU模组由WiFi模块、BT模块和BLE模块构成,适用于可携带电子产品及移动物联网器材等小功率设备。此模组的核心为ESP-32-D0WFQ6芯片。ESP-32带有2组32 bit LX6 CPU,采取7级流水线结构,主频达240 MHz。ESP-32完全符合WiFi 802.11n和蓝牙4.2的标准,集成了WiFi、蓝牙、BLE射频、低功耗基带,以及丰富的模拟传感和数字接口[12]。
WiFi模块是ESP-32的内置模块,它支持802.11B/G/N/E/I协议,最大数据传输速率为150 Mb/s,最大发射功率为19.5 dBm,内置TCP/IP协议,可传送TCP数据,其WiFi接收器灵敏度可达-98 dBm,UDP持续吞吐量达135 Mb/s。ESP-32中的WiFi模块有3种运行模式,分别为Station模式、AP模式和Station+AP模式。
ESP-32蓝牙模块同样为内置模块,其采用的是大部分设备通用的蓝牙v4.2标准,支持传统蓝牙和低功耗蓝牙(BLE)双模controller。蓝牙模块使用基于SDIO/SPI/UART接口的标准HCI,其高速UART HCI数据传输速率可达4 Mb/s。它还支持同时广播和扫描,方便用户设备连接芯片实现数据交互。
ACS712是一种基于霍尔效应开环模式的芯片级线性电流传感器[13],使用时通常串联在电流回路中。其输入与输出的线性系数根据量程的不同分别为185 mV/A、100 mV/A、66 mV/A。ACS712的典型应用如图3所示,需要监测的电流从1、2端口进入传感器内部,从3、4端口流出,此时ACS712会根据产生的磁场感应生成线性电压,经过传感器内的放大电路、滤波电路和斩波电路后输出模拟电压,该电压在量程范围内与交流电流IP的关系:VIOUT=0.5×Vcc+IP×线性系数,滤波电容CF用于提高输出精度,数值越大,噪声越小。
图3 ACS712典型应用
HMI智能串口屏自带GUI界面[14],用户可通过触摸屏控制编辑界面,操作简单,使用方便。串口屏通过USART HMI软件绘制界面,人机交互借助ESP-32的UART串口与HMI屏实现,2个设备的TX、RX互连实现数据收发。ESP-32与HMI屏的硬件连接如图4所示。HMI在进行串口通信时一般使用RS 232/422接口连接PC端,或者连接其他硬件设备实现人机交互,而使用RS 485接口时通常用于控制PLC设备的运行。
图4 ESP-32与HMI屏的硬件连接
系统通过Arduino开发平台调用软件中ESP-32开发板库对应的API函数实现远程通信功能和数据获取。系统上电复位后借助setup初始化函数启动BLE蓝牙和WiFi通信模块,然后在主程序loop函数中无限循环,同时对ACS712采集的数据进行处理运算。只有在系统断电或者程序干扰停止时才会跳出循环。主程序流程如图5所示。
图5 系统主程序流程
ESP-32集成了双12位SARADC,ADC1有8个通道,ADC2有10个通道。但由于ADC2与WiFi一同使用时会发生冲突,无法共存,所以本系统采用ADC1的GPIO32接口作为ADC采样通道。在进行ADC采样时,先通过readVref函数读取模拟引脚的电压最大值Vref,然后调用analogRead函数获取GPIO32接口输入的电压数据Value,最后通过计算得出模拟电压。ADC采样流程如图6所示。
图6 ADC采样流程
由于交流电呈周期性变化,所以本系统在使用ACS712时将其数据转换成电压后计算其有效值电压,利用ESP-32的ADC采样电压峰值减去谷值,峰峰值除以后得到电压有效值,除以ACS712的线性系数得到电流值。但若未经滤波,则最终结果的误差较大。本系统采用的软件滤波中位值平均滤波算法具有良好的数值稳定性,可以使结果更加平滑。在ADC采样程序中,本系统采样了18组数据,每组数据的峰值和谷值均经过1 000次读取GPIO32引脚数据比较得来,接着采用冒泡排序法对18组数据进行排序,去除最大、最小两组数据后求平均值。滤波算法流程如图7所示。
图7 滤波算法流程
由于ESP-32 WiFi模块的驱动代码不开源,所以本文使用Arduino作为开发工具。本系统默认选用Station模式,先连接路由器或手机热点连入公网,然后判断是否连入,连入后作为TCP Client端通过端口号8080向服务器发出连接请求,服务器通过8080端口监听连接请求,如果连接成功便能基于TCP/IP协议向公网的TCP Server端服务器发送TCP数据。ESP-32使用WiFi流程如图8所示。
图8 ESP-32使用WiFi流程
GATT是蓝牙连接的通用规范。在进行蓝牙通信时,通过2个名为service和characteristic的设备实现数据交互。一个service即一项服务,characteristic实现了BLE主机与从机间的数据通信。UUID是通用唯一识别码,在进行BLE蓝牙连接时每个service和characteristic拥有独一无二的UUID。本系统使用ESP-32作为BLE蓝牙的Server端,创建Server的service后,在service中建立characteristic,最后手机APP在ESP-32进行广播时连接ESP-32从而获得数据。ESP-32使用BLE蓝牙流程如图9所示。
图9 ESP-32使用BLE蓝牙流程
ESP-32芯片提供3个UART串口,分为UART0、UART1、UART2, 分 别 占 用 GPIO1、GPIO3、GPIO9、GPIO10、GPIO16、GPIO17引脚。本系统使用UART0和UART2实现串口通信,其中UART0通过USB-UART连接到计算机,用于烧写程序和打印调试信息。UART2作为主要的串口实现与HMI屏的数据交互。在Arduino平台中发送串口信息时,需先匹配UART2和HMI屏的参数,然后ESP-32通过Serial库中的print函数将并行数据传入UART2,UART2通过杜邦线从TXD端口将串行数据发送给HMI屏。接收串口信息时,UART2通过Serial库中的read函数检测另一根线上的信号,串行收集后置于缓冲区。ESP-32能够通过读取read函数的返回值获取这些信息。
本文根据智能电表系统发展现状,结合WiFi和蓝牙通信技术,设计了基于ESP-32单片机的物联网智能电表。该电表具有获取数据和无线通信功能,应用前景广阔。