袁銘
摘 ? 要:文章設計了基于ESP8266的無線溫度采集系統(tǒng),主要針對溫度采集系統(tǒng)的硬件系統(tǒng)和軟件設計進行探討和研究,重點研究了以CC2530單片機為控制芯片,以ESP8266-WiFi為無線通信芯片,把采集的溫度數據進行無線發(fā)送。同時還研究了Android端的Socket通信,用于采集顯示溫度值。此系統(tǒng)具有方便、低功耗、距離遠、設計簡單等特點。
關鍵詞:Android;CC2530;ESP8266;溫度采集
1 ? ?無線溫度采集系統(tǒng)
隨著物聯網短距離無線通信技術發(fā)展,在智能家居領域的應用越來越廣泛,溫度采集作為智能家居領域的重要部分,應用較多。單片機配合ESP8266WiFi芯片就能創(chuàng)建一個無線局域網,在安卓端開發(fā)軟硬件交互APP,通過TCP/IP協議就可以建立一個無線溫度采集系統(tǒng)。
2 ? ?整體方案
本系統(tǒng)通過溫度傳感器DHT11檢測溫度值,由單片機進行數據處理,通過串口與ESP8266-WiFi芯片通信,啟動WiFi芯片和Android終端建立無線局域網[1]。即可把溫度數據通過TCP/IP協議無線發(fā)送到Android端。系統(tǒng)整體框架如圖1所示。
3 ? ?電路設計
3.1 ?溫度傳感電路
電路采用數字溫度傳感器DHT11,在精度要求不高的本系統(tǒng)中適用,采用單線半雙工通信方式與CC2530單片機相連接。電路如圖2所示。
圖1 ?系統(tǒng)整體結構框架
DHT11串行數據傳輸格式為每次傳送5個字節(jié)數據。按照高位在前,低位在后的順序進行傳送[2]。
3.2 ?ESP8266串口電路
ESP8266是基于WiFi協議的無線傳輸模塊,采用串口與單片機進行通信,通過配置將其作為Access Point,提供無線接入服務,在此模式下允許其他無線設備與其進行WiFi通信。
4 ? ?軟件設計
4.1 ?單片機程序
主要完成串口的初始化,通過發(fā)送AT指令設置ESP8266工作方式,同時監(jiān)聽并接收發(fā)送過來的查詢指令,啟動傳感器采集溫度數據并處理,通過ESP8266發(fā)送溫度數據至Android端。主要代碼如下:
void main(void)
{ ?InitUart(); ? //串口初始化
AT_CMD(); ?//發(fā)送AT指令
while(1)
{
Dht11();//啟動DHT11
} }
4.2 ?ESP8266模塊程序
ESP8266采用CC2530單片機控制,ESP8266作為一個收發(fā)器使用,發(fā)送無線數據至Android端,或者接收Android端的數據。下列代碼主要用于配置ESP8266。
void AT_CMD()
{
UartSendString("\r\nAT\r\n",10);
UartSendString("\r\nAT+CIPMUX=1\r\n",19);
UartSendString("\r\nAT+CIPSERVER=1,8080\r\n",27);
}
單片機接收到Android端發(fā)送的指令后,判斷是讀取溫度的指令'T',則調用發(fā)送函數發(fā)送溫度數據,部分代碼如下:
if(Recdata[9]=='T')
{ UartSendString("\r\nAT+CIPSEND=0,2\r\n",22);
UartSendString(temp, 2);}
4.3 ?Android端程序
本系統(tǒng)通信采用Socket,Socket原理就是客戶端與服務端之間溝通的通道,服務端如果要向客戶端發(fā)送數據,從輸出流走專用通道Socket,這個快速通道一直連到客戶端的輸入流,客戶端回復信息時,從客戶端的輸出流走專用通道Socket,回到自己的服務端[3-5]。用線程創(chuàng)建socket連接的部分代碼:
class Connect_Thread extends Thread{
public void run(){
InetAddress ipAddress;
try {
//判斷socket的狀態(tài)防止重復執(zhí)行
if (Socket == null) {
//如果socket為空則執(zhí)行
//獲取輸入的IP地址
ipAddress = InetAddress.
getByName(iptoedit.getText().toString());
//獲取輸入的端口
int port = Integer.
valueOf(porttoedit.getText().toString());
//新建socket
Socket = new Socket(ipAddress, port);
//獲取socket輸入流和輸出流
InputStream = Socket.getInputStream();
OutputStream = Socket.getOutputStream();
//新建一個線程讀數據
ThreadReadData
t1 = new ThreadReadData();
t1.start();}}
catch (Exception e) {
e.printStackTrace();}}}
5 ? ?結語
本文主要闡述了利用ESP8266芯片進行溫度數據無線采集的方案,將CC2530芯片作為主控芯片。在Android端設計簡單的APP程序,和ESP8266進行無線通信,獲取溫度數據并顯示。通過本文能了解系統(tǒng)的整體結構、Socket通信的基本原理以及如何使用ESP8266建立無線局域網的連接。
[參考文獻]
[1]曹流圣,麻紅昭.基于ZigBee和CDMA技術的智能家居系統(tǒng)設計[J].工業(yè)控制計算機,2014(6):80-81.
[2]趙金燕,楊秀娟,郎云雯,等.基于Zigbee技術的溫濕度采集系統(tǒng)設計[J].電子設計工程,2013(6):15-17.
[3]呂紅海.基于Android的智能家居無線控制系統(tǒng)的設計與實現[D].成都:電子科技大學,2012.
[4]鄒麗.基于ZigBee技術的智能家居無線網絡設計與實現[D].武漢:華中師范大學,2011.
[5]吳年京,黃波,張汗聰,等.基于Android手機平臺的遠程溫度查詢系統(tǒng)[J].數字通信,2013(3):94-96,100.
Design of wireless temperature acquisition system based on ESP8266
Yuan Ming
(Suzhou Industrial Park Industrial Park Branch, Jiangsu United Technical Institute,?Suzhou Industrial Park Industrial Technology School, Suzhou 215021, China)
Abstract:A wireless temperature acquisition system based on Esp8266 is designed in this paper, and the hardware system and software design of the temperature acquisition system are discussed and studied. The CC2530 single chip microcomputer is used as the control chip and ESP8266-WiFi is used as the wireless communication chip to transmit the collected temperature data wirelessly. At the same time, the socket communication on the Android side is also studied, which is used to collect and display the temperature value. The system has the characteristics of convenience, low power consumption, long distance, simple design and so on.
Key words:Android; CC2530; ESP8266; temperature acquisition