?
目錄
1. 功能介紹
2. 硬件接線介紹
2.1 DS18B20溫度傳感器
2.2 ESP8266 WIFI模塊
3. 案例代碼
3.1 QT設(shè)計(jì)的上位機(jī)
3.2 B節(jié)點(diǎn)DS18B20代碼
3.3 協(xié)調(diào)器-ESP8266代碼
1. 功能介紹
這是基于CC2530設(shè)計(jì)的遠(yuǎn)程溫度報(bào)警器,通過CC2530終端檢測(cè)環(huán)境溫度上傳給手機(jī)APP實(shí)時(shí)顯示。
一共有兩塊CC2530開發(fā)板,這里就分別稱為A板(當(dāng)做協(xié)調(diào)器)、B板(當(dāng)做溫度節(jié)點(diǎn)),A板上接了ESP8266 WIF模塊,用于與手機(jī)APP之間通信。B板上接了DS18B20 溫度傳感器模塊,用于給A板傳遞檢測(cè)的溫度,A板收到DS18B20的溫度之后,發(fā)送給手機(jī)APP顯示。APP上位機(jī)采用Qt框架設(shè)計(jì),支持跨平臺(tái),Android、windows、IOS、Linux都可以編譯運(yùn)行安裝。
?編輯
資料包里包含:
2. 硬件接線介紹
2.1 DS18B20溫度傳感器
作為B節(jié)點(diǎn)的CC2530開發(fā)板上接了DS18B20溫度傳感器,采集溫度傳遞給A節(jié)點(diǎn)。
這是B節(jié)點(diǎn)的程序,在主函數(shù)1秒采集一次DS18B20溫度數(shù)據(jù),然后傳遞給A節(jié)點(diǎn)。
2.2 ESP8266 WIFI模塊
作為A節(jié)點(diǎn)協(xié)調(diào)器的CC2530開發(fā)板用到了2個(gè)串口:
(1)串口0—作為常規(guī)調(diào)試串口,可以向串口調(diào)試助手打印調(diào)試信息。
(2)串口1—連接ESP8266 WIFI,進(jìn)行通信。 P0.4,P0.5用作串口
上面這張圖是代碼的截圖,設(shè)置ESP8266的AP熱點(diǎn)名稱和密碼。 把ESP8266接線接好之后,在把程序下載進(jìn)去。 正常情況下,ESP8266就會(huì)創(chuàng)建一個(gè)名稱為” wbyq_Cortex_M3” 的熱點(diǎn),連接密碼為”12345678”, 這是打開手機(jī)APP搜索這個(gè)WIFI名稱,然后連接即可,連接上了,打開專用的手機(jī)APP,點(diǎn)擊連接服務(wù)器,然后就可以收到ESP8266發(fā)送過來的溫度數(shù)據(jù)了。
下面這個(gè)是代碼主函數(shù)里,1秒的頻率向APP上傳DS18B20的溫度。
3. 案例代碼
3.1 QT設(shè)計(jì)的上位機(jī)
?編輯
3.2 B節(jié)點(diǎn)DS18B20代碼
代碼也可以在這里下載:https://download.csdn.net/download/xiaolong1126626497/75315395
#define Ds18b20IO P0_6 //溫度傳感器引腳
?
void Delay_us(unsigned int k)//us延時(shí)函數(shù)
{
T1CC0L = 0x06;
T1CC0H = 0x00;
T1CTL = 0x02;
while(k)
{
while(!(T1CNTL >= 0x04));
k--;
}
T1CTL = 0x00; //關(guān)閉定時(shí)器
}
?
void Delay_ms(unsigned int k)
{
T1CC0L = 0xe8;
T1CC0H = 0x03;
T1CTL = 0x0a; //模模式 32分頻
while(k)
{
while(!((T1CNTL >= 0xe8)&&(T1CNTH >= 0x03)));
k--;
}
T1CTL = 0x00; //關(guān)閉定時(shí)器
}
?
void Delay_s(unsigned int k)
{
while(k)
{
Delay_ms(1000);
k--;
}
}
?
//時(shí)鐘頻率為32M
void Ds18b20Delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i 8000)Flag_1 = 0;
Status = Ds18b20IO;
}
Ds18b20OutputInitial();
Ds18b20IO = 1;
Ds18b20Delay(100);
return Status; //返回初始化狀態(tài)
}
?
void Ds18b20Write(unsigned char infor)
{
unsigned int i;
Ds18b20OutputInitial();
for(i=0;i<8;i++)
? {
? ? ? ?if((infor & 0x01))
? ? ? {
? ? ? ? ? ?Ds18b20IO = 0;
? ? ? ? ? ?Ds18b20Delay(6);
? ? ? ? ? ?Ds18b20IO = 1;
? ? ? ? ? ?Ds18b20Delay(50);
? ? ? }
? ? ? ?else
? ? ? {
? ? ? ? ? ?Ds18b20IO = 0;
? ? ? ? ? ?Ds18b20Delay(50);
? ? ? ? ? ?Ds18b20IO = 1;
? ? ? ? ? ?Ds18b20Delay(6);
? ? ? }
? ? ? ?infor >>= 1;
}
}
?
unsigned char Ds18b20Read(void)
{
unsigned char Value = 0x00;
unsigned int i;
Ds18b20OutputInitial();
Ds18b20IO = 1;
Ds18b20Delay(10);
for(i=0;i<8;i++)
? {
? ? ? ?Value >>= 1;
Ds18b20OutputInitial();
Ds18b20IO = 0;// 給脈沖信號(hào)
Ds18b20Delay(3);
Ds18b20IO = 1;// 給脈沖信號(hào)
Ds18b20Delay(3);
Ds18b20InputInitial();
if(Ds18b20IO == 1) Value |= 0x80;
Ds18b20Delay(15);
}
return Value;
}
?
?
?
//溫度讀取函數(shù) 帶1位小數(shù)位
float floatReadDs18B20(void)
{
unsigned char V1,V2; //定義高低8位 緩沖
unsigned int temp; //定義溫度緩沖寄存器
float fValue;
Ds18b20Initial();
Ds18b20Write(0xcc); // 跳過讀序號(hào)列號(hào)的操作
Ds18b20Write(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
Ds18b20Initial();
Ds18b20Write(0xcc); //跳過讀序號(hào)列號(hào)的操作
Ds18b20Write(0xbe); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
V1 = Ds18b20Read(); //低位
V2 = Ds18b20Read(); //高位
//temp = ((V1 >> 4)+((V2 & 0x07)*16)); //轉(zhuǎn)換數(shù)據(jù)
temp=V2*0xFF+V1;
fValue = temp*0.0625;
return fValue;
};i++)>
3.3 協(xié)調(diào)器-ESP8266代碼
#include "esp8266.h"
?
uint lenU1 = 0;
uchar tempRXU1;
uchar RecdataU1[MAXCHAR];
//AP+服務(wù)器模式
char *ESP8266_AP_Server[]=
{
"ATrn",
"ATE0rn",
"AT+CWMODE=2rn",
"AT+RSTrn",
"ATE0rn",
"AT+CWSAP="wbyq_Cortex_M3","12345678",1,4rn",
"AT+CIPMUX=1rn",
"AT+CIPSERVER=1,8089rn",
"AT+CIFSRrn"
};
?
?
//"AT+CIPSEND=0,10rn" //長(zhǎng)度10
//返回">" 之后就可以正常發(fā)送數(shù)據(jù)了
//發(fā)送成功返回 "SEND OK"
?
?
//發(fā)送數(shù)據(jù)
void ESP8266_SendData(char *p,int len)
{
char buff[50];
sprintf(buff,"AT+CIPSEND=0,%drn",len);
clearBuffU1();
Uart1_Send_String(buff);
DelayMs(1000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
//發(fā)送數(shù)據(jù)
Uart1_Send_String(p);
//等待發(fā)送完成
DelayMs(1000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
}
?
?
/****************************************************************************
* 名 稱: SetWifi()
* 功 能: 設(shè)置LED燈相應(yīng)的IO口
* 入口參數(shù): 無
* 出口參數(shù): 無
****************************************************************************/
void SetWifi(void)
{
P0DIR |= 0x40; //P0.6定義為輸出
IGT = 0; //高電平復(fù)位
DelayMs(500);
IGT = 1; //低電平工作
}
?
/*
設(shè)置WIFI為AP模式+TCP服務(wù)器
*/
void SetESP8266_AP_TCP_Server()
{
clearBuffU1();
Uart1_Send_String("ATrn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("ATE0rn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("AT+CWMODE=2rn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("AT+RSTrn");
DelayMs(2000);
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("ATE0rn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("AT+CWSAP="wifi_cc2530","12345678",1,4rn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("AT+CIPMUX=1rn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("AT+CIPSERVER=1,8080rn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
clearBuffU1();
Uart1_Send_String("AT+CIFSRrn");
DelayMs(2000);
RecdataU1[lenU1]='?';
UR0SendString(RecdataU1);
}
?
?
unsigned char dataRecv;
unsigned char Flag = 0;
/*===================UR1初始化函數(shù)====================*/
void Init_Uart1()
{
PERCFG = 0x00; //位置1 P0.4/P0.5口
P0SEL |= 0x30; //P0.4,P0.5用作串口(外部設(shè)備功能)
U1CSR |= 0x80; //設(shè)置為UART方式
U1GCR |= 11; //BAUD_E
U1BAUD |= 216; //BAUD_M 波特率設(shè)為115200
UTX1IF = 0; //UART1 TX中斷標(biāo)志初始置位0
U1CSR |= 0X40; //允許接收
IEN0 |= 0x88; // 開總中斷,UART1接收中斷
}
?
?
void clearBuffU1(void)
{
int j;
for(j=0;j;j++)>
?
審核編輯:湯梓紅
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
4896瀏覽量
97058 -
溫度報(bào)警器
+關(guān)注
關(guān)注
3文章
29瀏覽量
11231 -
CC2530
+關(guān)注
關(guān)注
19文章
221瀏覽量
57761
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論