標(biāo)題: 超聲波測(cè)距ESP8266 WIFI無(wú)線傳輸手機(jī)顯示原理圖+app+源碼 [打印本頁(yè)]

作者: locker    時(shí)間: 2018-4-5 23:23
標(biāo)題: 超聲波測(cè)距ESP8266 WIFI無(wú)線傳輸手機(jī)顯示原理圖+app+源碼


手機(jī)app:


全部資料51hei下載地址:
A60_ESP01_超聲波測(cè)距APP.zip (1.79 MB, 下載次數(shù): 501)


ESP8266可以配置成station 、AP、station+AP三種模式,就是說(shuō)模塊可以當(dāng)成一個(gè)設(shè)備(client)連接局域網(wǎng)內(nèi)的路由,也可以設(shè)置成是一個(gè)路由(sever),也可以既作為局域網(wǎng)里面的client同時(shí)又是其它c(diǎn)lient的sever

單片機(jī)源程序如下:
  1. /********************************************************************/
  2. /*        超聲波測(cè)距 WIFI無(wú)線傳輸手機(jī)顯示                                                                        */
  3. /********************************************************************/
  4. #include <REGX51.H>
  5. #include<intrins.h>
  6. #include <stdio.h>
  7. #define uint unsigned int
  8. #define uchar unsigned char
  9. sbit LED0=P3^2;  
  10. sbit TRIG=P2^0;                //TRIG
  11. sbit ECHO=P2^1;            //ECHO
  12. sbit DQ=P2^7;                //ds18b20 端口
  13. /*****************相關(guān)變量**************/
  14. uchar Receive,i,xm1,xm2,xm3,xm0;                              
  15. uint s,j;  
  16. uchar Recive_table[40];                  //用于接收wifi模塊反饋到MCU上的數(shù)據(jù)
  17. uchar code ta[]="0123456789- ";  
  18. uchar table[]="溫度: 25.4℃   距離:2.56m";
  19. float csbc,wdz;
  20. int temp;
  21. bit zf,flag;

  22. unsigned int ReadTemperature(void);
  23. bit Init_DS18B20(void);
  24. unsigned char ReadOneChar(void);
  25. void WriteOneChar(unsigned char dat);
  26. unsigned int ReadTemperature(void);
  27. bit Init_DS18B20(void);
  28. unsigned char ReadOneChar(void);
  29. void WriteOneChar(unsigned char dat);

  30. /*******************************************************************
  31. 名稱:延時(shí)函數(shù)  作用:毫秒級(jí)延時(shí),微妙級(jí)延時(shí)函數(shù),為數(shù)據(jù)收發(fā)完成作等待.......  
  32. ********************************************************************/
  33. void ms_delay(uint t)
  34. {  
  35.         uint i,j;  
  36.         for(i=t;i>0;i--)   
  37.         for(j=110;j>0;j--);
  38. }   

  39. void us_delay(uchar t)
  40. {  
  41.         while(t--);
  42. }         
  43. /*------------------------------------------------
  44. uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
  45. unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
  46. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
  47. 長(zhǎng)度如下 T=tx2+5 uS
  48. ------------------------------------------------*/
  49. void DelayUs2x(unsigned char t);
  50. /*------------------------------------------------
  51. mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
  52. unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
  53. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
  54. ------------------------------------------------*/
  55. void DelayMs(unsigned char t);
  56. /*------------------------------------------------
  57. uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
  58. unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
  59. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
  60. 長(zhǎng)度如下 T=tx2+5 uS
  61. ------------------------------------------------*/
  62. void DelayUs2x(unsigned char t)
  63. {   
  64.          while(--t);
  65. }
  66. /*------------------------------------------------
  67. mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無(wú)返回值
  68. unsigned char 是定義無(wú)符號(hào)字符變量,其值的范圍是
  69. 0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
  70. ------------------------------------------------*/
  71. void DelayMs(unsigned char t)
  72. {
  73.           while(t--)                 //大致延時(shí)1mS
  74.          {
  75.              DelayUs2x(245);
  76.                  DelayUs2x(245);
  77.          }
  78. }


  79. /*------------------------------------------------
  80.                     18b20初始化
  81. ------------------------------------------------*/
  82. bit Init_DS18B20(void)
  83. {
  84.         bit dat=0;
  85.         DQ = 1;                                    //DQ復(fù)位
  86.          DelayUs2x(8);                   //稍做延時(shí)
  87.          DQ = 0;                         //單片機(jī)將DQ拉低
  88.          DelayUs2x(255);                 //精確延時(shí) 大于 480us 小于960us
  89.          DelayUs2x(255);
  90.          DQ = 1;                                //拉高總線
  91.          DelayUs2x(70);                         //15~60us 后 接收60-240us的存在脈沖
  92.          dat=DQ;                                //如果x=0則初始化成功, x=1則初始化失敗
  93.          DelayUs2x(40);                         //稍作延時(shí)返回
  94.          return dat;
  95. }
  96. /*------------------------------------------------
  97.                     讀取一個(gè)字節(jié)
  98. ------------------------------------------------*/
  99. unsigned char ReadOneChar(void)
  100. {
  101.         unsigned char i=0;
  102.         unsigned char dat = 0;
  103.         for (i=8;i>0;i--)
  104.          {
  105.                   DQ = 0;                         // 給脈沖信號(hào)
  106.                   dat>>=1;
  107.                   DQ = 1;                         // 給脈沖信號(hào)
  108.                   if(DQ)
  109.                    dat|=0x80;
  110.                   DelayUs2x(40);
  111.          }
  112.          return(dat);
  113. }
  114. /*------------------------------------------------
  115.                     寫(xiě)入一個(gè)字節(jié)
  116. ------------------------------------------------*/
  117. void WriteOneChar(unsigned char dat)
  118. {
  119.          unsigned char i=0;
  120.          for (i=8; i>0; i--)
  121.          {
  122.                   DQ = 0;
  123.                   DQ = dat&0x01;
  124.                   DelayUs2x(40);
  125.                   DQ = 1;
  126.                   dat>>=1;
  127.          }
  128.         DelayUs2x(40);
  129. }
  130. /*------------------------------------------------
  131.                     讀取溫度
  132. ------------------------------------------------*/
  133. unsigned int ReadTemperature(void)
  134. {
  135.         unsigned char a=0;
  136.         int b=0;
  137.         int t=0;
  138.         float tt=0;
  139.         while(Init_DS18B20());         //檢測(cè)初始化是否成功
  140.         WriteOneChar(0xCC);         // 跳過(guò)讀序號(hào)列號(hào)的操作
  141.         WriteOneChar(0x44);         // 啟動(dòng)溫度轉(zhuǎn)換
  142.         DelayMs(10);
  143.         Init_DS18B20();
  144.         WriteOneChar(0xCC);         //跳過(guò)讀序號(hào)列號(hào)的操作
  145.         WriteOneChar(0xBE);         //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
  146.         a=ReadOneChar();                   //低位
  147.         b=ReadOneChar();                   //高位
  148.         t=b;
  149.          t<<=8;
  150.          t=t|a;
  151.          tt=t*0.0625;
  152.          t= tt*10+0.5;
  153.          return(t);
  154. }
  155. void Uart_Init()                                //使用定時(shí)器1作為波特率發(fā)生器(STC89C52、STC89C51、AT89C51等均可)
  156. {  
  157.     TMOD = 0x21;
  158.     SCON = 0x50;                                 //設(shè)置串行方式
  159.     TH1 = 0xFD;                                         //波特率9600
  160.     TL1 = TH1;
  161.     PCON = 0x00;
  162.     EA = 1;                                                //總中斷打開(kāi)
  163.     ES = 1;                                                //開(kāi)串口中斷  
  164.     TR1 = 1;                                        //啟動(dòng)定時(shí)器1
  165. }

  166. /********************************************************************
  167. 名稱:串口發(fā)送函數(shù)  功能:MCU向無(wú)線WIFI模塊ESP8266發(fā)送數(shù)據(jù)  
  168. ********************************************************************/
  169. void Send_Uart(uchar value)
  170. {  
  171.         ES=0;                                                  //關(guān)閉串口中斷  
  172.         TI=0;                                           //清發(fā)送完畢中斷請(qǐng)求標(biāo)志位   
  173.         SBUF=value;                                 //發(fā)送  
  174.         while(TI==0);                                 //等待發(fā)送完畢   
  175.         TI=0;                                           //清發(fā)送完畢中斷請(qǐng)求標(biāo)志位   
  176.         ES=1;                                                  //允許串口中斷
  177.         TH0=0;
  178.         TL0=0;  
  179. }  

  180. /********************************************************************
  181. 名稱:WIFI模塊設(shè)置函數(shù)  作用: 啟動(dòng)模塊,以便可以實(shí)現(xiàn)無(wú)線接入和控制  
  182. ********************************************************************/

  183. void ESP8266_Set(uchar *puf)         // 數(shù)組指針*puf指向字符串?dāng)?shù)組               
  184. {   
  185.         while(*puf!='\0')                    //遇到空格跳出循環(huán)  
  186.         {   
  187.                 Send_Uart(*puf);                  //向WIFI模塊發(fā)送控制指令。   
  188.                 us_delay(5);   
  189.                 puf++;   
  190.         }  
  191.         us_delay(5);  
  192.         Send_Uart('\r');                         //回車  
  193.         us_delay(5);  
  194.         Send_Uart('\n');                           //換行  
  195. }

  196. /********************************************************************
  197. 名稱:主函數(shù)  作用:程序的執(zhí)行入口  
  198. ********************************************************************/

  199. void main()
  200. {         
  201.         Uart_Init();                                                                                        //波特率發(fā)生器
  202.         ms_delay(10);
  203.         ESP8266_Set("AT+CWMODE=2");                                                         //設(shè)置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   
  204.         ms_delay(500);
  205. //        ESP8266_Set("AT+RST");                                                                         //重新啟動(dòng)wifi模塊            
  206. //  ms_delay(1000);
  207.         ESP8266_Set("AT+CWSAP=\"wifi_yuan\",\"123456789\",11,4");          //AT+CWSAP="wifi_yuan","123456789",11,4  設(shè)置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
  208.         ms_delay(500);
  209.         ESP8266_Set("AT+CIPMUX=1");                                                                //開(kāi)啟多連接模式,允許多個(gè)各客戶端接入
  210.         ms_delay(500);
  211.         ESP8266_Set("AT+CIPSERVER=1,5000");                                          //啟動(dòng)TCP/IP 實(shí)現(xiàn)基于網(wǎng)絡(luò)//控制         ESP8266_Set("AT+CIPSERVER=1,5000");  
  212.         ms_delay(500);
  213.         ESP8266_Set("AT+CIPSTO=0");                                                         //永遠(yuǎn)不超時(shí)
  214.         ms_delay(500);
  215.         Init_DS18B20();         //初始化DS18B20溫度傳感器
  216.         ReadTemperature();
  217.         ES=1;                                                                                           //允許串口中斷                 
  218.         LED0=0;         
  219.         while(1)   
  220.         {
  221.                 temp=ReadTemperature();                //測(cè)量溫度
  222.                 if(temp<0)                                  //溫度正負(fù)值判斷處理
  223.                 {
  224.                            temp=-(temp-1);
  225.                            zf=1;
  226.                 }
  227.                 else
  228.                 {
  229.                         zf=0;
  230.                 }
  231.                 xm0=temp/1000;
  232.                 xm1=temp/100%10;//顯示十位
  233.                 xm2=temp%100/10;//顯示個(gè)位
  234.                 xm3=temp%10; //小數(shù)
  235.         if(zf==0)
  236.             {
  237.                         if(temp<1000)
  238.                         {
  239.                                 xm0=11;
  240.                                 if(temp<100)
  241.                                    {
  242.                                       xm1=11;
  243.                                 }
  244.                         }
  245.                 }
  246.                 else
  247.                 {
  248.                         if(temp<1000)
  249.                         {
  250.                                    xm0=10;
  251.                                    if(temp<100)
  252.                                    {
  253.                                         xm0=11;
  254.                                            xm1=10;
  255.                                 }
  256.                         }
  257.                 }
  258.                 table[6]=ta[xm0];
  259.                   table[7]=ta[xm1];
  260.                   table[8]=ta[xm2];
  261.                 table[10]=ta[xm3];
  262.                   TRIG=1;                               //啟動(dòng)一次HC-SR04超聲波測(cè)距模塊
  263.                   _nop_();
  264.                   _nop_();
  265.                   _nop_();
  266.                   _nop_();
  267.                   _nop_();
  268.                   _nop_();
  269.                   _nop_();
  270.                   _nop_();
  271.                   _nop_();
  272.                   _nop_();
  273.                   _nop_();
  274.                   _nop_();
  275.                   _nop_();
  276.                   _nop_();
  277.                   _nop_();
  278.                   _nop_();
  279.                   TRIG=0;
  280.                 ET0=1;        //啟動(dòng)計(jì)數(shù)器T0,用以計(jì)時(shí)
  281.                 TR0=1;
  282.                 EA=1;
  283.                 j=60;        //延時(shí)                  
  284.             while(j--)
  285.                 {
  286.                 }
  287.                 ECHO=1;
  288.         j=0;
  289.                    while(ECHO)                        //判斷接收回路是否收到超聲波的回波
  290.                 {
  291.                         j++;
  292.                         if(j>=2500)                        //如果達(dá)到一定時(shí)間沒(méi)有收到回波,則將ECHO置零,退出接收回波處理程序
  293.                         ECHO=0;
  294.                 }
  295.                 TR0=0;
  296.                 s=TH0*256+TL0;                        //讀取時(shí)間數(shù)據(jù)
  297.                 TH0=0;
  298.                 TL0=0;
  299.                 wdz=0.00000607*temp;   //溫度補(bǔ)償計(jì)算
  300.                 if(zf==0)
  301.                 {                                                                                                                                                                                       
  302. ……………………

  303. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼



作者: diykj    時(shí)間: 2018-4-19 14:41
好東西,我也在研究!
作者: duweiqiaga    時(shí)間: 2018-5-7 11:42
樓主,請(qǐng)問(wèn)一個(gè)問(wèn)題,手機(jī)那個(gè)超聲波測(cè)距的APP怎么連接到ESP8266呀,一直顯示設(shè)備未連接,怎么連接上呀
作者: 2841467672    時(shí)間: 2018-9-26 14:43
非常給力,正在研究
作者: hs88    時(shí)間: 2018-10-7 21:40
你們?yōu)槭裁磳?xiě)那個(gè)復(fù)雜程序,老師講的同樣的功能程序就那么簡(jiǎn)潔
作者: aking991    時(shí)間: 2018-10-9 16:45
這個(gè)值得下載學(xué)習(xí)
作者: qzyhlf    時(shí)間: 2018-10-15 11:37
好東西,我也在研究!
作者: tyu123582    時(shí)間: 2018-10-23 14:51
好東西,學(xué)習(xí)下

作者: WFX777888    時(shí)間: 2018-10-25 05:28
謝謝分享資料
作者: tp666    時(shí)間: 2018-11-15 16:17
以前做過(guò),不過(guò)做的不深入,感謝

作者: hs88    時(shí)間: 2018-11-16 19:58
編譯錯(cuò)誤,說(shuō)是SBUF   TI未定義
作者: hongaa    時(shí)間: 2018-11-25 12:55
好東西,我也在研究!
作者: Runner9    時(shí)間: 2018-11-25 14:55
好東西啊
作者: 快樂(lè)眼淚    時(shí)間: 2018-11-25 18:50
努力學(xué)習(xí)中!
作者: heyllf    時(shí)間: 2018-11-28 12:35
很好,實(shí)訓(xùn)需要
作者: fyq    時(shí)間: 2018-12-19 16:21
這需要用那些軟件編寫(xiě)程序啊
作者: 31143114sushe    時(shí)間: 2018-12-20 23:50
樓主,請(qǐng)問(wèn)一個(gè)問(wèn)題,手機(jī)那個(gè)超聲波測(cè)距的APP怎么連接到ESP8266呀,一直顯示設(shè)備未連接,怎么連接上呀
作者: 31143114sushe    時(shí)間: 2018-12-20 23:51
樓主,請(qǐng)問(wèn)一個(gè)問(wèn)題,手機(jī)那個(gè)超聲波測(cè)距的APP怎么連接到ESP8266呀,一直顯示設(shè)備未連接,怎么連接上呀
作者: 冰冰潔潔    時(shí)間: 2018-12-28 06:27
31143114sushe 發(fā)表于 2018-12-20 23:51
樓主,請(qǐng)問(wèn)一個(gè)問(wèn)題,手機(jī)那個(gè)超聲波測(cè)距的APP怎么連接到ESP8266呀,一直顯示設(shè)備未連接,怎么連接上呀

這個(gè)APP有一個(gè)固定IP和端口沒(méi)辦法直接改,要用E4A進(jìn)行編程重新生成APP手機(jī)軟件,不然就只能把的固件IP和端口燒成他的一樣的。
作者: 13118302007    時(shí)間: 2019-1-10 11:19
冰冰潔潔 發(fā)表于 2018-12-28 06:27
這個(gè)APP有一個(gè)固定IP和端口沒(méi)辦法直接改,要用E4A進(jìn)行編程重新生成APP手機(jī)軟件,不然就只能把的固件IP和 ...

我查看了APP的源碼,這個(gè)APP的ip地址是192.168.4.1,端口號(hào)5000,一般的ESP8266_01/01s就是這個(gè)地址,可以直接連接,但是連接上了好像也沒(méi)有數(shù)據(jù)顯示 。
“事件 按鈕1.被單擊()
        客戶1.連接服務(wù)器("192.168.4.1",5000,2000)
結(jié)束 事件”
作者: 冰冰潔潔    時(shí)間: 2019-1-10 13:11
13118302007 發(fā)表于 2019-1-10 11:19
我查看了APP的源碼,這個(gè)APP的ip地址是192.168.4.1,端口號(hào)5000,一般的ESP8266_01/01s就是這個(gè)地址,可 ...

他的內(nèi)網(wǎng)要改成10.10.10.208你說(shuō)的那個(gè)IP和ESP8266固件版本中的定義不同,另他的編程有小問(wèn)題,或是有意無(wú)意產(chǎn)生的,要改下不能直接編譯用的,但我重做了E4A和下位機(jī)基本通過(guò),只是原代碼看來(lái)是增加了功能沒(méi)調(diào)通,少有基礎(chǔ),仔細(xì)看一個(gè)晚上就能調(diào)通,因這個(gè)例程基礎(chǔ)沒(méi)有原則問(wèn)題,只是小問(wèn)題…………不行改天我上個(gè)調(diào)通版的,思路告訴大家,就是他程序中的溫度補(bǔ)償好像有問(wèn)題,我也是迷茫了一陣子。這個(gè)程序完善的我沒(méi)有發(fā)是因?yàn)樵髡叩某绦蚝懿诲e(cuò),不想畫(huà)蛇添足了………再說(shuō)我也沒(méi)有時(shí)候去深找溫度補(bǔ)償?shù)脑,就只是調(diào)通而已。。哈哈哈哈蘇州冰冰潔潔

15470968581030.9181547079634033.jpg (222.13 KB, 下載次數(shù): 99)

15470968581030.9181547079634033.jpg

作者: 冰冰潔潔    時(shí)間: 2019-1-10 13:28
13118302007 發(fā)表于 2019-1-10 11:19
我查看了APP的源碼,這個(gè)APP的ip地址是192.168.4.1,端口號(hào)5000,一般的ESP8266_01/01s就是這個(gè)地址,可 ...

你不會(huì)沒(méi)有燒寫(xiě)ESP8266固件吧?要燒的,燒完后改E4A中你看到IP為:10.10.10.208且固件燒好還要先用電腦網(wǎng)頁(yè)去聯(lián)ESP8266修改IP為10.10.40.208端口5000后保存。
作者: 朱小朱    時(shí)間: 2019-1-23 23:19
好東西,我也在研究!
作者: 冰冰潔潔    時(shí)間: 2019-1-24 02:11
13118302007 發(fā)表于 2019-1-10 11:19
我查看了APP的源碼,這個(gè)APP的ip地址是192.168.4.1,端口號(hào)5000,一般的ESP8266_01/01s就是這個(gè)地址,可 ...

不要相信一般的,按我說(shuō)的試試,反正我聯(lián)上了,因?yàn)镋SP8266是要燒固件的,你那一般的怎聯(lián)人家這個(gè)不一般的呢?
作者: 風(fēng)158    時(shí)間: 2019-1-24 08:58
努力學(xué)習(xí)中!
作者: xhkjcb    時(shí)間: 2019-1-24 09:37
好東西,努力研究中
作者: xhkjcb    時(shí)間: 2019-1-24 09:48
關(guān)注中
作者: 魚(yú)缸沒(méi)有魚(yú)    時(shí)間: 2019-4-10 12:49
謝謝樓主,太贊了!
作者: 王正帥    時(shí)間: 2019-4-21 19:41
謝謝樓主

作者: ziziziziz    時(shí)間: 2019-6-7 15:44
冰冰潔潔 發(fā)表于 2019-1-24 02:11
不要相信一般的,按我說(shuō)的試試,反正我聯(lián)上了,因?yàn)镋SP8266是要燒固件的,你那一般的怎聯(lián)人家這個(gè)不一般 ...

燒說(shuō)明固件呢??能說(shuō)一下嗎?剛接觸8266
作者: copter    時(shí)間: 2019-6-17 13:38
不錯(cuò),好東西
作者: jemery1030    時(shí)間: 2019-7-22 15:28
感謝無(wú)私分享
作者: 滄海一聲哈欠    時(shí)間: 2020-11-10 16:18
13118302007 發(fā)表于 2019-1-10 11:19
我查看了APP的源碼,這個(gè)APP的ip地址是192.168.4.1,端口號(hào)5000,一般的ESP8266_01/01s就是這個(gè)地址,可 ...

最后調(diào)試好了嗎,是什么問(wèn)題呢
作者: 琦雯    時(shí)間: 2021-6-28 09:23
很棒的案例66




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1