張楠森,武永華,陳凌凡,吳明旭,林進鑫
(福建江夏學院 電子信息科學學院,福建 福州 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單片機的物聯網智能電表。該電表具有獲取數據和無線通信功能,應用前景廣闊。