標(biāo)題:
關(guān)于單片機(jī)智能家居組網(wǎng) 提出一個(gè)結(jié)構(gòu)
[打印本頁(yè)]
作者:
濤濤啊
時(shí)間:
2019-9-3 10:30
標(biāo)題:
關(guān)于單片機(jī)智能家居組網(wǎng) 提出一個(gè)結(jié)構(gòu)
前幾天逛那個(gè)寶看到一個(gè)433模塊,就買回來研究,經(jīng)過測(cè)試,范圍在200米以內(nèi)(測(cè)試地點(diǎn)在公司宿舍 ,附近有很多干擾源),數(shù)據(jù)傳輸沒有問題,然后之前閑著的時(shí)候做了一個(gè)小玩意,手機(jī)app通過手機(jī)藍(lán)牙(可以用8266做wiif,公司宿舍沒有WiFi就用了藍(lán)牙),控制rgb彩燈,讀取溫度(18b20),光敏,電路中增加了人體檢測(cè),紅外開關(guān)(類似循跡小車那種 ),還有一個(gè)語(yǔ)音識(shí)別,播報(bào)的模塊,用來進(jìn)行控制交互。
單片機(jī)使用15單片機(jī),使用eerom保存溫度上下限,實(shí)現(xiàn)rgb彩燈的呼吸燈,打算在此基礎(chǔ)增加433模塊,然后進(jìn)行一個(gè)范圍組網(wǎng),上面說的這個(gè)為主機(jī),可以放在有WiFi的地方,然后從機(jī)使用433模塊與主機(jī)進(jìn)行通訊,手機(jī)app通過藍(lán)牙/wiif控制主機(jī),主機(jī)在進(jìn)行從機(jī)的控制,有興趣的可以聊下,現(xiàn)在主機(jī)程序已經(jīng)完成,從機(jī)程序簡(jiǎn)單,打算過幾天去打幾個(gè)板子,有興趣的可以找我qq150-61-75-1-15
另外附上主機(jī)的程序電路下次附上
單片機(jī)源程序如下:
#include"stdio.h" //c語(yǔ)言 自帶函數(shù) (printf 函數(shù))
#include"DS18b20.h" //溫度檢測(cè)函數(shù)頭文件
#include"uart.h" //串口頭文件
#include"mode.h" //運(yùn)算符函數(shù)
#include"new.h" //eeerom頭文件/
#include"adc.h"
#include"pwm.h"
#include<intrins.h> //左移右移函數(shù)
#include<string.h> //字符操作函數(shù)
#define u8 unsigned char
//串口接收數(shù)據(jù)緩存數(shù)組
extern xdata u8 uart1_shou[uatr];//串口1 接收的數(shù)據(jù)
extern xdata u8 uart2_shou[uatr];//串口2 接受的數(shù)據(jù)
extern xdata u8 uart3_shou[uatr];//串口1 接收的數(shù)據(jù)
extern xdata u8 uart4_shou[uatr];//串口2 接受的數(shù)據(jù)
extern int mode1;
extern int mode2;
extern int mode3;
extern int mode4;
//溫度讀取 變量
uint temp1=0; // 18b202溫度數(shù)據(jù)
bit run_18b20=1;//溫度報(bào)警啟動(dòng)標(biāo)志位 1啟動(dòng)報(bào)警
bit shou_18b20=1;//測(cè)試 只發(fā)送一次報(bào)警
unsigned char ds_18b20num[]={"D00.0"}; //用來保存溫度
unsigned char ds_18b20H[]={"D30.5"}; //語(yǔ)音報(bào)警上限
unsigned char ds_18b20L[]={"D20.5"}; //語(yǔ)音報(bào)警下限
extern unsigned char ADC_nume[7];//光敏數(shù)據(jù)保存
bit ET0_run=0;
bit cbs=0;//超聲波檢測(cè) 檢測(cè)人體
//函數(shù)聲明
void key();//按鍵控制函數(shù)
void ds18b20_num();///溫度讀取轉(zhuǎn)換成字符函數(shù)
void eerom();//eerom上電初始化函數(shù)
void main(void)
{
//串口初始化
io_init();//io引腳初始化
Uart1Init();//串口1 初始化
Uart2Init();//串口2 初始化
Uart3Init();//串口3 初始化
Uart4Init();//串口4 初始化
Timer0Init();
eerom();//EEROM操作函數(shù)
pwminit();//pwm控制rgb彩燈初始化
PWM_NUM(0,0,0);//RGB彩燈關(guān)閉
delay_ms(2000);//延時(shí)1秒鐘 防止電腦上位機(jī)反應(yīng)不過來
while(1)
{
UART_1();//藍(lán)牙接口 以及上位機(jī)通訊使用
UART_2();//語(yǔ)音模塊播報(bào)使用
UART_3();//備用 可以外接串口
UART_4();
ds18b20_num();//溫度讀取轉(zhuǎn)換成字符數(shù)據(jù)
ADC_shou();//檢測(cè)光敏數(shù)據(jù)
key();//板載按鈕控制
}
}
void ds18b20_num()
{
int wendu_h;//標(biāo)志位 檢測(cè)溫度是否超過上限
int wendu_l;//標(biāo)志位 檢測(cè)溫度是否低于下限
ET0 = 0;
tmpchange(); //讀取溫度
temp1=ds_tmp(); //溫度賦值
ET0 = ET0_run;
ds_18b20num[0]='D';
ds_18b20num[1]=(temp1/100)+48; //將溫度轉(zhuǎn)換成字符型
ds_18b20num[2]=(temp1/10%10)+48;
ds_18b20num[4]=(temp1%10)+48;
//檢測(cè)溫度值是否大于低于設(shè)定的上限下限
wendu_h=strcmp(ds_18b20num,ds_18b20H);
wendu_l=strcmp(ds_18b20num,ds_18b20L);
if(wendu_h>0&&run_18b20&&shou_18b20)//溫度大于報(bào)警值
{
shou_18b20=0;
UART(2,"play,245,$");//溫度上限報(bào)警
UART(1,"溫度上限報(bào)警,當(dāng)前溫度為 ");
shou_18b20=0;
UART(1,ds_18b20num);
UART1_SendLR() ;
UART(1,"溫度上限為 ");
UART(1,ds_18b20H);
UART1_SendLR() ;
UART(1,"溫度下限為 ");
UART(1,ds_18b20L);
UART1_SendLR() ;
UART(2,"play,070,$");//語(yǔ)音播報(bào) 溫度上限報(bào)警
}
else if(wendu_l<0&&run_18b20&&shou_18b20)//溫度低于下限
{
shou_18b20=0;
UART(2,"play,246,$");//溫度下限報(bào)警
UART(1,"溫度下限報(bào)警,當(dāng)前溫度為 ");
UART(1,ds_18b20num);
UART1_SendLR() ;
UART(1,"溫度上限為 ");
UART(1,ds_18b20H);
UART1_SendLR() ;
UART(1,"溫度下限為 ");
UART(1,ds_18b20L);
UART1_SendLR() ;
UART(2,"play,069,$");//語(yǔ)音播報(bào) 溫度下限報(bào)警
}
if(wendu_l>0&&wendu_h<0)//溫度在中間 未發(fā)生報(bào)警值
{
shou_18b20=1;
}
}
void key()//板載按鍵操作函數(shù)
{
if(P24==0)//設(shè)置是否為語(yǔ)音喚醒模式
{
if(P55)
{
UART_shouq(2,"PasswordTrigger,1,$","設(shè)置成功",2000);
UART(1,"已設(shè)置為口令觸發(fā)\r\n");
}
else
{
UART_shouq(2,"PasswordTrigger,0,$","設(shè)置成功",2000);
UART(1,"已取消口令觸發(fā)\r\n");
}
P55=~P55;
}
if(P25==0)//按鍵測(cè)試程序 按下按鍵 返回串口接收的數(shù)據(jù) 并且取反led指示燈
{
UART(1,"A");
UART(1,ADC_nume);
UART1_SendLR();
while(!P25);
}
if(P26==0)//按鍵測(cè)試程序 按下按鍵 返回串口接收的數(shù)據(jù) 并且取反led指示燈
{
MOR_DS18B20(0,1);
while(!P26);
}
if(P50==0)
{
LED=~LED;
while(!P50);
}
}
void eerom()
{
unsigned char eerom_shou; //
eerom_shou = IapReadByte(IAP_ADDRESS);//讀取一個(gè)字節(jié) 判斷是否為D
if(eerom_shou!='D') //不是D說明 第一次上電 進(jìn)行數(shù)據(jù)的初始化
{
IapEraseSector(IAP_ADDRESS);//刪除扇區(qū)數(shù)據(jù) 將數(shù)據(jù)全部寫為ff
IapWrite_n(IAP_ADDRESS,ds_18b20H,5);
IapWrite_n(IAP_ADDRESS1,ds_18b20L,5);
}
else//不為D說明不是第一次上電 則讀取eerom的數(shù)據(jù) 進(jìn)行覆蓋
{
IapRead_n(IAP_ADDRESS,ds_18b20H,5);
IapRead_n(IAP_ADDRESS1,ds_18b20L,5);
}
}
復(fù)制代碼
所有資料51hei提供下載:
斷電保存版本.rar
(296.85 KB, 下載次數(shù): 26)
2019-9-3 10:30 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
張先生mrlzw
時(shí)間:
2020-12-27 22:04
支持共享!點(diǎn)贊
作者:
嘉雨加
時(shí)間:
2021-1-18 21:59
感興趣 ,資源一起來探討
作者:
isyido
時(shí)間:
2021-7-27 12:30
藍(lán)牙加WIFI應(yīng)該就能解決所有問題了吧,手機(jī)端可以方便鏈接不需要其它硬件。433感覺又復(fù)雜了。
作者:
Martinku
時(shí)間:
2022-11-8 08:13
433可以像藍(lán)牙一樣通訊傳輸數(shù)據(jù)嗎,沒接觸過433的模塊,只知道一些遙控用。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1