找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6112|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)智能家居組網(wǎng) 提出一個(gè)結(jié)構(gòu)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:371965 發(fā)表于 2019-9-3 10:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
前幾天逛那個(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è)語音識(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ī)源程序如下:
  1. #include"stdio.h"  //c語言 自帶函數(shù) (printf  函數(shù))
  2. #include"DS18b20.h" //溫度檢測(cè)函數(shù)頭文件
  3. #include"uart.h" //串口頭文件
  4. #include"mode.h" //運(yùn)算符函數(shù)
  5. #include"new.h"                //eeerom頭文件/
  6. #include"adc.h"
  7. #include"pwm.h"
  8. #include<intrins.h> //左移右移函數(shù)
  9. #include<string.h> //字符操作函數(shù)
  10. #define u8 unsigned char
  11.         //串口接收數(shù)據(jù)緩存數(shù)組
  12. extern xdata u8 uart1_shou[uatr];//串口1 接收的數(shù)據(jù)
  13. extern xdata u8 uart2_shou[uatr];//串口2  接受的數(shù)據(jù)
  14. extern xdata u8 uart3_shou[uatr];//串口1 接收的數(shù)據(jù)
  15. extern xdata u8 uart4_shou[uatr];//串口2  接受的數(shù)據(jù)
  16. extern int mode1;
  17. extern int mode2;
  18. extern int mode3;
  19. extern int mode4;
  20. //溫度讀取  變量
  21. uint temp1=0;             // 18b202溫度數(shù)據(jù)
  22. bit run_18b20=1;//溫度報(bào)警啟動(dòng)標(biāo)志位  1啟動(dòng)報(bào)警
  23. bit shou_18b20=1;//測(cè)試  只發(fā)送一次報(bào)警
  24. unsigned char ds_18b20num[]={"D00.0"};                //用來保存溫度
  25. unsigned char ds_18b20H[]={"D30.5"};                //語音報(bào)警上限
  26. unsigned char ds_18b20L[]={"D20.5"};                //語音報(bào)警下限


  27. extern unsigned char ADC_nume[7];//光敏數(shù)據(jù)保存
  28. bit ET0_run=0;


  29. bit cbs=0;//超聲波檢測(cè)   檢測(cè)人體
  30. //函數(shù)聲明
  31. void key();//按鍵控制函數(shù)
  32. void ds18b20_num();///溫度讀取轉(zhuǎn)換成字符函數(shù)
  33. void eerom();//eerom上電初始化函數(shù)

  34. void main(void)
  35. {                  
  36.                 //串口初始化
  37.        
  38.   io_init();//io引腳初始化
  39.         Uart1Init();//串口1  初始化
  40.         Uart2Init();//串口2  初始化
  41.         Uart3Init();//串口3  初始化
  42.         Uart4Init();//串口4  初始化
  43.         Timer0Init();
  44.         eerom();//EEROM操作函數(shù)

  45.         pwminit();//pwm控制rgb彩燈初始化
  46.         PWM_NUM(0,0,0);//RGB彩燈關(guān)閉
  47.         delay_ms(2000);//延時(shí)1秒鐘   防止電腦上位機(jī)反應(yīng)不過來
  48.         while(1)
  49.         {  
  50.                  UART_1();//藍(lán)牙接口 以及上位機(jī)通訊使用
  51.                  UART_2();//語音模塊播報(bào)使用
  52.                  UART_3();//備用  可以外接串口
  53.                  UART_4();
  54.                  ds18b20_num();//溫度讀取轉(zhuǎn)換成字符數(shù)據(jù)
  55.                  ADC_shou();//檢測(cè)光敏數(shù)據(jù)
  56.                  key();//板載按鈕控制
  57.         }
  58. }

  59. void ds18b20_num()
  60. {
  61.         int wendu_h;//標(biāo)志位  檢測(cè)溫度是否超過上限
  62.         int wendu_l;//標(biāo)志位  檢測(cè)溫度是否低于下限       
  63.           ET0 = 0;           
  64.                 tmpchange();          //讀取溫度
  65.           temp1=ds_tmp();          //溫度賦值
  66.                 ET0 = ET0_run;              
  67.           ds_18b20num[0]='D';
  68.                 ds_18b20num[1]=(temp1/100)+48;         //將溫度轉(zhuǎn)換成字符型
  69.                 ds_18b20num[2]=(temp1/10%10)+48;
  70.           ds_18b20num[4]=(temp1%10)+48;
  71. //檢測(cè)溫度值是否大于低于設(shè)定的上限下限
  72.         wendu_h=strcmp(ds_18b20num,ds_18b20H);
  73.         wendu_l=strcmp(ds_18b20num,ds_18b20L);
  74.         if(wendu_h>0&&run_18b20&&shou_18b20)//溫度大于報(bào)警值
  75.         {
  76.                 shou_18b20=0;
  77.                 UART(2,"play,245,$");//溫度上限報(bào)警
  78.                 UART(1,"溫度上限報(bào)警,當(dāng)前溫度為  ");
  79.                 shou_18b20=0;
  80.                 UART(1,ds_18b20num);
  81.                 UART1_SendLR() ;
  82.                 UART(1,"溫度上限為   ");
  83.                 UART(1,ds_18b20H);
  84.                 UART1_SendLR() ;
  85.                 UART(1,"溫度下限為  ");
  86.                 UART(1,ds_18b20L);
  87.                 UART1_SendLR() ;
  88.                 UART(2,"play,070,$");//語音播報(bào)  溫度上限報(bào)警
  89.         }
  90.         else if(wendu_l<0&&run_18b20&&shou_18b20)//溫度低于下限
  91.         {
  92.                 shou_18b20=0;
  93.                 UART(2,"play,246,$");//溫度下限報(bào)警
  94.                 UART(1,"溫度下限報(bào)警,當(dāng)前溫度為  ");
  95.                 UART(1,ds_18b20num);
  96.                 UART1_SendLR() ;
  97.                 UART(1,"溫度上限為   ");
  98.                 UART(1,ds_18b20H);
  99.                 UART1_SendLR() ;
  100.                 UART(1,"溫度下限為  ");
  101.                 UART(1,ds_18b20L);
  102.                 UART1_SendLR() ;
  103.     UART(2,"play,069,$");//語音播報(bào)  溫度下限報(bào)警
  104.         }
  105.                 if(wendu_l>0&&wendu_h<0)//溫度在中間  未發(fā)生報(bào)警值
  106.         {
  107.                 shou_18b20=1;
  108.         }
  109.        
  110. }
  111. void key()//板載按鍵操作函數(shù)
  112. {
  113.                 if(P24==0)//設(shè)置是否為語音喚醒模式
  114.                 {       
  115.                         if(P55)
  116.                         {
  117.                                 UART_shouq(2,"PasswordTrigger,1,$","設(shè)置成功",2000);
  118.                                 UART(1,"已設(shè)置為口令觸發(fā)\r\n");
  119.                         }
  120.                                 else
  121.                         {
  122.                                 UART_shouq(2,"PasswordTrigger,0,$","設(shè)置成功",2000);
  123.                                                         UART(1,"已取消口令觸發(fā)\r\n");
  124.                         }               
  125.                                 P55=~P55;
  126.                 }
  127.                 if(P25==0)//按鍵測(cè)試程序  按下按鍵   返回串口接收的數(shù)據(jù)  并且取反led指示燈
  128.                 {               
  129.                         UART(1,"A");
  130.                         UART(1,ADC_nume);
  131.                         UART1_SendLR();
  132.                         while(!P25);
  133.                 }
  134.                
  135.                 if(P26==0)//按鍵測(cè)試程序  按下按鍵   返回串口接收的數(shù)據(jù)  并且取反led指示燈
  136.                 {       
  137.                         MOR_DS18B20(0,1);
  138.                         while(!P26);
  139.                 }
  140.                
  141.                 if(P50==0)
  142.                 {
  143.                                 LED=~LED;
  144.                         while(!P50);
  145.                 }
  146. }

  147. void eerom()
  148. {
  149. unsigned char eerom_shou;                //
  150. eerom_shou =        IapReadByte(IAP_ADDRESS);//讀取一個(gè)字節(jié)   判斷是否為D  
  151.        
  152.                 if(eerom_shou!='D')        //不是D說明 第一次上電  進(jìn)行數(shù)據(jù)的初始化
  153.                 {
  154.                 IapEraseSector(IAP_ADDRESS);//刪除扇區(qū)數(shù)據(jù)  將數(shù)據(jù)全部寫為ff
  155.                 IapWrite_n(IAP_ADDRESS,ds_18b20H,5);
  156.                 IapWrite_n(IAP_ADDRESS1,ds_18b20L,5);
  157.                 }
  158.                 else//不為D說明不是第一次上電  則讀取eerom的數(shù)據(jù)   進(jìn)行覆蓋
  159.                 {
  160.                 IapRead_n(IAP_ADDRESS,ds_18b20H,5);       
  161.                 IapRead_n(IAP_ADDRESS1,ds_18b20L,5);       
  162.                 }
  163. }
復(fù)制代碼

所有資料51hei提供下載:
斷電保存版本.rar (296.85 KB, 下載次數(shù): 26)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:849805 發(fā)表于 2020-12-27 22:04 | 只看該作者
支持共享!點(diǎn)贊
回復(fù)

使用道具 舉報(bào)

板凳
ID:864602 發(fā)表于 2021-1-18 21:59 | 只看該作者
感興趣 ,資源一起來探討
回復(fù)

使用道具 舉報(bào)

地板
ID:476415 發(fā)表于 2021-7-27 12:30 來自手機(jī) | 只看該作者
藍(lán)牙加WIFI應(yīng)該就能解決所有問題了吧,手機(jī)端可以方便鏈接不需要其它硬件。433感覺又復(fù)雜了。
回復(fù)

使用道具 舉報(bào)

5#
ID:577622 發(fā)表于 2022-11-8 08:13 | 只看該作者
433可以像藍(lán)牙一樣通訊傳輸數(shù)據(jù)嗎,沒接觸過433的模塊,只知道一些遙控用。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表