久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 20017|回復: 33
收起左側

超聲波測距ESP8266 WIFI無線傳輸手機顯示原理圖+app+源碼

  [復制鏈接]
ID:302586 發表于 2018-4-5 23:23 | 顯示全部樓層 |閱讀模式
0.png

手機app:
0.jpg

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


ESP8266可以配置成station 、AP、station+AP三種模式,就是說模塊可以當成一個設備(client)連接局域網內的路由,也可以設置成是一個路由(sever),也可以既作為局域網里面的client同時又是其它client的sever

單片機源程序如下:
  1. /********************************************************************/
  2. /*        超聲波測距 WIFI無線傳輸手機顯示                                                                        */
  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. /*****************相關變量**************/
  14. uchar Receive,i,xm1,xm2,xm3,xm0;                              
  15. uint s,j;  
  16. uchar Recive_table[40];                  //用于接收wifi模塊反饋到MCU上的數據
  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. 名稱:延時函數  作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待.......  
  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延時函數,含有輸入參數 unsigned char t,無返回值
  45. unsigned char 是定義無符號字符變量,其值的范圍是
  46. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  47. 長度如下 T=tx2+5 uS
  48. ------------------------------------------------*/
  49. void DelayUs2x(unsigned char t);
  50. /*------------------------------------------------
  51. mS延時函數,含有輸入參數 unsigned char t,無返回值
  52. unsigned char 是定義無符號字符變量,其值的范圍是
  53. 0~255 這里使用晶振12M,精確延時請使用匯編
  54. ------------------------------------------------*/
  55. void DelayMs(unsigned char t);
  56. /*------------------------------------------------
  57. uS延時函數,含有輸入參數 unsigned char t,無返回值
  58. unsigned char 是定義無符號字符變量,其值的范圍是
  59. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  60. 長度如下 T=tx2+5 uS
  61. ------------------------------------------------*/
  62. void DelayUs2x(unsigned char t)
  63. {   
  64.          while(--t);
  65. }
  66. /*------------------------------------------------
  67. mS延時函數,含有輸入參數 unsigned char t,無返回值
  68. unsigned char 是定義無符號字符變量,其值的范圍是
  69. 0~255 這里使用晶振12M,精確延時請使用匯編
  70. ------------------------------------------------*/
  71. void DelayMs(unsigned char t)
  72. {
  73.           while(t--)                 //大致延時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復位
  86.          DelayUs2x(8);                   //稍做延時
  87.          DQ = 0;                         //單片機將DQ拉低
  88.          DelayUs2x(255);                 //精確延時 大于 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);                         //稍作延時返回
  94.          return dat;
  95. }
  96. /*------------------------------------------------
  97.                     讀取一個字節
  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;                         // 給脈沖信號
  106.                   dat>>=1;
  107.                   DQ = 1;                         // 給脈沖信號
  108.                   if(DQ)
  109.                    dat|=0x80;
  110.                   DelayUs2x(40);
  111.          }
  112.          return(dat);
  113. }
  114. /*------------------------------------------------
  115.                     寫入一個字節
  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());         //檢測初始化是否成功
  140.         WriteOneChar(0xCC);         // 跳過讀序號列號的操作
  141.         WriteOneChar(0x44);         // 啟動溫度轉換
  142.         DelayMs(10);
  143.         Init_DS18B20();
  144.         WriteOneChar(0xCC);         //跳過讀序號列號的操作
  145.         WriteOneChar(0xBE);         //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  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()                                //使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51等均可)
  156. {  
  157.     TMOD = 0x21;
  158.     SCON = 0x50;                                 //設置串行方式
  159.     TH1 = 0xFD;                                         //波特率9600
  160.     TL1 = TH1;
  161.     PCON = 0x00;
  162.     EA = 1;                                                //總中斷打開
  163.     ES = 1;                                                //開串口中斷  
  164.     TR1 = 1;                                        //啟動定時器1
  165. }

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

  180. /********************************************************************
  181. 名稱:WIFI模塊設置函數  作用: 啟動模塊,以便可以實現無線接入和控制  
  182. ********************************************************************/

  183. void ESP8266_Set(uchar *puf)         // 數組指針*puf指向字符串數組               
  184. {   
  185.         while(*puf!='\0')                    //遇到空格跳出循環  
  186.         {   
  187.                 Send_Uart(*puf);                  //向WIFI模塊發送控制指令。   
  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. 名稱:主函數  作用:程序的執行入口  
  198. ********************************************************************/

  199. void main()
  200. {         
  201.         Uart_Init();                                                                                        //波特率發生器
  202.         ms_delay(10);
  203.         ESP8266_Set("AT+CWMODE=2");                                                         //設置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   
  204.         ms_delay(500);
  205. //        ESP8266_Set("AT+RST");                                                                         //重新啟動wifi模塊            
  206. //  ms_delay(1000);
  207.         ESP8266_Set("AT+CWSAP=\"wifi_yuan\",\"123456789\",11,4");          //AT+CWSAP="wifi_yuan","123456789",11,4  設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
  208.         ms_delay(500);
  209.         ESP8266_Set("AT+CIPMUX=1");                                                                //開啟多連接模式,允許多個各客戶端接入
  210.         ms_delay(500);
  211.         ESP8266_Set("AT+CIPSERVER=1,5000");                                          //啟動TCP/IP 實現基于網絡//控制         ESP8266_Set("AT+CIPSERVER=1,5000");  
  212.         ms_delay(500);
  213.         ESP8266_Set("AT+CIPSTO=0");                                                         //永遠不超時
  214.         ms_delay(500);
  215.         Init_DS18B20();         //初始化DS18B20溫度傳感器
  216.         ReadTemperature();
  217.         ES=1;                                                                                           //允許串口中斷                 
  218.         LED0=0;         
  219.         while(1)   
  220.         {
  221.                 temp=ReadTemperature();                //測量溫度
  222.                 if(temp<0)                                  //溫度正負值判斷處理
  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;//顯示個位
  234.                 xm3=temp%10; //小數
  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;                               //啟動一次HC-SR04超聲波測距模塊
  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;        //啟動計數器T0,用以計時
  281.                 TR0=1;
  282.                 EA=1;
  283.                 j=60;        //延時                  
  284.             while(j--)
  285.                 {
  286.                 }
  287.                 ECHO=1;
  288.         j=0;
  289.                    while(ECHO)                        //判斷接收回路是否收到超聲波的回波
  290.                 {
  291.                         j++;
  292.                         if(j>=2500)                        //如果達到一定時間沒有收到回波,則將ECHO置零,退出接收回波處理程序
  293.                         ECHO=0;
  294.                 }
  295.                 TR0=0;
  296.                 s=TH0*256+TL0;                        //讀取時間數據
  297.                 TH0=0;
  298.                 TL0=0;
  299.                 wdz=0.00000607*temp;   //溫度補償計算
  300.                 if(zf==0)
  301.                 {                                                                                                                                                                                       
  302. ……………………

  303. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


評分

參與人數 3黑幣 +69 收起 理由
hbnpmw + 12
zqy181818 + 7
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:311663 發表于 2018-4-19 14:41 | 顯示全部樓層
好東西,我也在研究!
回復

使用道具 舉報

ID:303246 發表于 2018-5-7 11:42 | 顯示全部樓層
樓主,請問一個問題,手機那個超聲波測距的APP怎么連接到ESP8266呀,一直顯示設備未連接,怎么連接上呀
回復

使用道具 舉報

ID:402683 發表于 2018-9-26 14:43 | 顯示全部樓層
非常給力,正在研究
回復

使用道具 舉報

ID:104477 發表于 2018-10-7 21:40 來自手機 | 顯示全部樓層
你們為什么寫那個復雜程序,老師講的同樣的功能程序就那么簡潔
回復

使用道具 舉報

ID:65956 發表于 2018-10-9 16:45 | 顯示全部樓層
這個值得下載學習
回復

使用道具 舉報

ID:3802 發表于 2018-10-15 11:37 | 顯示全部樓層
好東西,我也在研究!
回復

使用道具 舉報

ID:385681 發表于 2018-10-23 14:51 | 顯示全部樓層
好東西,學習下
回復

使用道具 舉報

ID:63317 發表于 2018-10-25 05:28 | 顯示全部樓層
謝謝分享資料
回復

使用道具 舉報

ID:427139 發表于 2018-11-15 16:17 | 顯示全部樓層
以前做過,不過做的不深入,感謝
回復

使用道具 舉報

ID:104477 發表于 2018-11-16 19:58 來自手機 | 顯示全部樓層
編譯錯誤,說是SBUF   TI未定義
回復

使用道具 舉報

ID:430087 發表于 2018-11-25 12:55 | 顯示全部樓層
好東西,我也在研究!
回復

使用道具 舉報

ID:432831 發表于 2018-11-25 14:55 | 顯示全部樓層
好東西啊
回復

使用道具 舉報

ID:399179 發表于 2018-11-25 18:50 來自手機 | 顯示全部樓層
努力學習中!
回復

使用道具 舉報

ID:434246 發表于 2018-11-28 12:35 | 顯示全部樓層
很好,實訓需要
回復

使用道具 舉報

ID:430534 發表于 2018-12-19 16:21 來自手機 | 顯示全部樓層
這需要用那些軟件編寫程序啊
回復

使用道具 舉報

ID:450340 發表于 2018-12-20 23:50 來自手機 | 顯示全部樓層
樓主,請問一個問題,手機那個超聲波測距的APP怎么連接到ESP8266呀,一直顯示設備未連接,怎么連接上呀
回復

使用道具 舉報

ID:450340 發表于 2018-12-20 23:51 來自手機 | 顯示全部樓層
樓主,請問一個問題,手機那個超聲波測距的APP怎么連接到ESP8266呀,一直顯示設備未連接,怎么連接上呀
回復

使用道具 舉報

ID:358930 發表于 2018-12-28 06:27 來自手機 | 顯示全部樓層
31143114sushe 發表于 2018-12-20 23:51
樓主,請問一個問題,手機那個超聲波測距的APP怎么連接到ESP8266呀,一直顯示設備未連接,怎么連接上呀

這個APP有一個固定IP和端口沒辦法直接改,要用E4A進行編程重新生成APP手機軟件,不然就只能把的固件IP和端口燒成他的一樣的。
回復

使用道具 舉報

ID:110875 發表于 2019-1-10 11:19 | 顯示全部樓層
冰冰潔潔 發表于 2018-12-28 06:27
這個APP有一個固定IP和端口沒辦法直接改,要用E4A進行編程重新生成APP手機軟件,不然就只能把的固件IP和 ...

我查看了APP的源碼,這個APP的ip地址是192.168.4.1,端口號5000,一般的ESP8266_01/01s就是這個地址,可以直接連接,但是連接上了好像也沒有數據顯示 。
“事件 按鈕1.被單擊()
        客戶1.連接服務器("192.168.4.1",5000,2000)
結束 事件”
回復

使用道具 舉報

ID:358930 發表于 2019-1-10 13:11 來自手機 | 顯示全部樓層
13118302007 發表于 2019-1-10 11:19
我查看了APP的源碼,這個APP的ip地址是192.168.4.1,端口號5000,一般的ESP8266_01/01s就是這個地址,可 ...

他的內網要改成10.10.10.208你說的那個IP和ESP8266固件版本中的定義不同,另他的編程有小問題,或是有意無意產生的,要改下不能直接編譯用的,但我重做了E4A和下位機基本通過,只是原代碼看來是增加了功能沒調通,少有基礎,仔細看一個晚上就能調通,因這個例程基礎沒有原則問題,只是小問題…………不行改天我上個調通版的,思路告訴大家,就是他程序中的溫度補償好像有問題,我也是迷茫了一陣子。這個程序完善的我沒有發是因為原作者的程序很不錯,不想畫蛇添足了………再說我也沒有時候去深找溫度補償的原因,就只是調通而已。。哈哈哈哈蘇州冰冰潔潔
15470968581030.9181547079634033.jpg
回復

使用道具 舉報

ID:358930 發表于 2019-1-10 13:28 來自手機 | 顯示全部樓層
13118302007 發表于 2019-1-10 11:19
我查看了APP的源碼,這個APP的ip地址是192.168.4.1,端口號5000,一般的ESP8266_01/01s就是這個地址,可 ...

你不會沒有燒寫ESP8266固件吧?要燒的,燒完后改E4A中你看到IP為:10.10.10.208且固件燒好還要先用電腦網頁去聯ESP8266修改IP為10.10.40.208端口5000后保存。
回復

使用道具 舉報

ID:404522 發表于 2019-1-23 23:19 | 顯示全部樓層
好東西,我也在研究!
回復

使用道具 舉報

ID:358930 發表于 2019-1-24 02:11 來自手機 | 顯示全部樓層
13118302007 發表于 2019-1-10 11:19
我查看了APP的源碼,這個APP的ip地址是192.168.4.1,端口號5000,一般的ESP8266_01/01s就是這個地址,可 ...

不要相信一般的,按我說的試試,反正我聯上了,因為ESP8266是要燒固件的,你那一般的怎聯人家這個不一般的呢?
回復

使用道具 舉報

ID:343102 發表于 2019-1-24 08:58 | 顯示全部樓層
努力學習中!
回復

使用道具 舉報

ID:472368 發表于 2019-1-24 09:37 | 顯示全部樓層
好東西,努力研究中
回復

使用道具 舉報

ID:472368 發表于 2019-1-24 09:48 | 顯示全部樓層
關注中
回復

使用道具 舉報

ID:470227 發表于 2019-4-10 12:49 | 顯示全部樓層
謝謝樓主,太贊了!
回復

使用道具 舉報

ID:518027 發表于 2019-4-21 19:41 | 顯示全部樓層
謝謝樓主
回復

使用道具 舉報

ID:531751 發表于 2019-6-7 15:44 | 顯示全部樓層
冰冰潔潔 發表于 2019-1-24 02:11
不要相信一般的,按我說的試試,反正我聯上了,因為ESP8266是要燒固件的,你那一般的怎聯人家這個不一般 ...

燒說明固件呢??能說一下嗎?剛接觸8266
回復

使用道具 舉報

ID:326512 發表于 2019-6-17 13:38 | 顯示全部樓層
不錯,好東西
回復

使用道具 舉報

ID:585455 發表于 2019-7-22 15:28 | 顯示全部樓層
感謝無私分享
回復

使用道具 舉報

ID:837635 發表于 2020-11-10 16:18 來自手機 | 顯示全部樓層
13118302007 發表于 2019-1-10 11:19
我查看了APP的源碼,這個APP的ip地址是192.168.4.1,端口號5000,一般的ESP8266_01/01s就是這個地址,可 ...

最后調試好了嗎,是什么問題呢
回復

使用道具 舉報

ID:626682 發表于 2021-6-28 09:23 | 顯示全部樓層
很棒的案例66
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久天堂 | 日韩一区欧美一区 | 欧美精品久久久久久久久久 | 国产精品久久午夜夜伦鲁鲁 | 在线观看视频中文字幕 | av手机在线免费观看 | 日韩三级| 精品久久久久久亚洲精品 | 91视频久久 | 性高湖久久久久久久久3小时 | 国产高清视频在线 | www.婷婷| 国产真实精品久久二三区 | 毛片一级片 | 国产免费一区二区 | 中文字幕在线视频观看 | 国产日韩欧美中文 | 一区二区三区在线免费看 | 午夜精品一区二区三区在线视频 | 在线黄 | 欧美成人免费电影 | 欧美在线视频一区二区 | 国产精品久久久久久久久久 | 一级大片免费 | 久草网在线视频 | 国产精品国产三级国产aⅴ无密码 | 一级片网站视频 | 久久久久成人精品免费播放动漫 | 国产成人精品一区二区三区 | 欧美在线一区二区三区 | 高清国产一区二区 | 成年男女免费视频网站 | 国产精品一区二区在线 | 91激情视频 | www.日韩| 日本在线中文 | 亚洲a人 | 中文字幕 欧美 日韩 | 国产一区二区a | 亚洲精品乱码久久久久久黑人 | 国产精品综合网 |