找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5749|回复: 4
打印 上一主题 下一主题
收起左侧

单片机利用ESP8266无线点亮LED问题求助

[复制链接]
跳转到指定楼层
楼主
60黑币
论坛里的大神们,我想寻求帮助,今天看了官方文件,研究了论坛里很多帖子,大概明白ESP8266如何使用,但是动手做51单片机控制ESP8266wifi模块点亮LED实验时出现了一个问题,一直找不到原因。我先用下载器连接电脑,用串口调试助手设置好了ESP8266为AP模式,多连接,创建Sever服务器,然后连上wifi后,用网络调试助手连接端口,收发正常,于是开始连电路。
我是用的某宝买的单片机最小系统,如下图

ESP的TXD和RXD分别连接单片机的RXD和TXD(P3.0和P3.1),VCC接小系统上的3.3V供电,GND接GND,    CH_PD接板上3.3V(我一学单片机的同学说这个悬空就行,但是我不接后,发现连wifi信号都没有,貌似没工作)


连好后打开,有wifi信号(就是之前设置的,貌似单片机代码不能配置网络名称和密码),用电脑或手机连接成功,但是用网络调试助手连接端口一直失败,确认端口号和IP地址没错,不知道为什么。
代码部分如下
  1. #include<reg52.h>
  2. #include<intrins.h>        
  3. #define uchar unsigned char
  4. #define uint unsigned int   
  5. sbit led=P1^0;
  6. uchar Receive,i;                             
  7. uint n;
  8. uchar Recive_table[15];  
  9. void ms_delay(uint t)
  10. {
  11.       uint i,j;
  12.       for(i=t;i>0;i--)
  13.        for(j=110;j>0;j--);
  14. }

  15. void us_delay(uchar t)
  16. {
  17.       while(t--);
  18. }


  19. void Uart_Init()                //波特率发生器
  20. {
  21.       SCON=0x50;     
  22.       PCON=0x00;     
  23.       TMOD=0x21;   
  24.       TH1=0xfd;
  25.       TL1=0xfd;
  26.       EA=1;                           
  27.       ES=1;                             
  28.       TR1=1;   
  29.       ET1=0;                        
  30. }

  31. void Send_Uart(uchar value)              //串口发送函数
  32. {
  33.       ES=0;         
  34.       TI=0;         
  35.       SBUF=value;     
  36.       while(TI==0);   
  37.       TI=0;         
  38.       ES=1;         
  39. }

  40. void ESP8266_Set(uchar *puf)                    //wifi设置函数
  41. {

  42.       while(*puf!='\0')   
  43.       {
  44.            Send_Uart(*puf);  
  45.            us_delay(5);
  46.            puf++;      
  47.       }
  48.       us_delay(5);
  49.       Send_Uart('\r');
  50.       us_delay(5);
  51.       Send_Uart('\n');   
  52.       
  53. }   

  54. void ESP8266_Sent(uchar *puf)             //发送数据函数
  55. {
  56.       ESP8266_Set("AT+CIPSEND=0,4");
  57.       while(*puf!='\0')   
  58.       {
  59.            Send_Uart(*puf);   
  60.            us_delay(5);
  61.            puf++;      
  62.       }
  63.       us_delay(5);
  64.       Send_Uart('\n');   
  65.       ms_delay(10);
  66. }   


  67. void main()
  68. {        
  69.             Uart_Init();
  70.                   led=1;
  71.                   ESP8266_Set("AT+CWMODE=2");
  72.                         ms_delay(1000);
  73.                         ESP8266_Set("AT+CIOBAUD=9600");
  74.                         ms_delay(1000);
  75.                         ESP8266_Set("AT+CIPMUX=1");
  76.                         ms_delay(1000);
  77.       ESP8266_Set("AT+CIPSERVER=1,8080");
  78.                         ms_delay(1000);
  79.                         ES=1;
  80.          while(1)
  81.          {        
  82.                 if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))
  83.             {
  84.                 if((Recive_table[3]=='D')&&(Recive_table[6]==','))
  85.                      {   
  86.                            if(Recive_table[9]=='0')
  87.                             {
  88.                                                                                                                          led=0;
  89.                                                                                                                         ESP8266_Sent("1رÕ");
  90.                             }

  91.                            else if (Recive_table[9]=='1')
  92.                             {                                
  93.                                                                                                                          led=1;
  94.                                  ESP8266_Sent("¿aÆô");                 
  95.                                                                                                                 }
  96.                      }   
  97.                                          }      
  98.     }         
  99. }

  100. void Uart_Interrupt() interrupt 4                   //串行通讯中断
  101. {   
  102.         static uchar i=0;  
  103.         if(RI==1)  
  104.         {   
  105.                 RI=0;   
  106.                 Receive=SBUF;                                                        
  107.                 Recive_table[i]=Receive;   
  108.                 if((Recive_table[i]=='\n'))
  109.                 {                     
  110.                         i=0;
  111.                 }   
  112.                 else i++;                                                                          
  113.         }   
  114.         else TI=0;   
  115. }  
复制代码

C文件.rar (964 Bytes, 下载次数: 12)





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2018-11-11 10:34 | 只看该作者
网络通信不适合初学者,如果无线远传蓝牙相对简单点,双方都蓝牙透传。
回复

使用道具 举报

板凳
ID:303383 发表于 2018-11-11 12:29 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:408178 发表于 2018-11-11 15:31 | 只看该作者
CHPD和VCC之间,需要接一个100欧的电阻,网络调试助手失败,IP和端口如果没错,肯定是给8266初始化的AT指令没有成功
回复

使用道具 举报

5#
ID:403916 发表于 2018-11-13 19:48 | 只看该作者
可以连上端口了,多加了一条设置ESP波特率的指令,但是默认9600貌似不用加,也可能是小系统板子电压的事,换成了3.3V小系统供电。代码里的指令实现了,不过给端口发数据后,还是控制不了灯,,,,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表