找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 805|回复: 9
收起左侧

ESP8266程序只能通过发送AT,后续指令会卡住

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:907263 发表于 2023-6-6 14:01 | 显示全部楼层 |阅读模式
运行到红线再向下就不动了,之前为了检查是哪一条开始卡住,在每条指令间插入了小灯亮灭,也就是观察到了亮、灭
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit LED = P1^3;u8 dat;
sbit LED1 = P1^2;
void Init(void);//串口初始化函数
void Delay_ms(u16 n);//延时子函数
void Sent_ZF(u8 dat);//发送一个字节
void AT_Send_String(u8 *string);//发送字符串
void ESP8266_Init();//ESP8266初始化
void Init(void)                //串口初始化函数
{
        TMOD = 0x20;        //定时器工作方式2,8位自动重载(0010 0000)
        TL1 = 0xfd;                //装入初值
        TH1 = 0xfd;               
        TR1 = 1;        //启动定时器1
        REN=1;    //允许串行口接收数据
        SM0=0;    //工作方式1,10位异步收发
        SM1=1;   
        EA = 1;   //打开全局中断控制
        ES=1;     //打开串行口中断
}

void main()
{
    Init();
    ESP8266_Init();
    while(1);
}

void Sent_ZF(u8 dat)  //发送一个字节
{
        ES = 0;
        TI=0;
        SBUF = dat;
        while(!TI);
        TI = 0;
        ES = 1;
}
void Delay_ms(u16 n)
{
        unsigned int i,j;
        for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}

void AT_Send_String(u8 *string)  //发送字符串
{
  while(*string)
  {
    Sent_ZF(*string++);
                Delay_ms(5);
  }

}
void ESP8266_Init()   //esp82663?ê??ˉ
{        LED1=1;
  Delay_ms(1000);
        Delay_ms(1000);
        AT_Send_String("AT\r\n"); //测试AT指令
        Delay_ms(1000);
        Delay_ms(1000);
  LED1=0;
        AT_Send_String("AT+CWSAP=xhwang2019,12345678\r\n"); //  
        Delay_ms(1000);
        Delay_ms(1000);
        LED1=1;


}
void InterruptUART() interrupt 4   
{
        RI = 0;        //清零
        dat = SBUF;    //收到的数据占存到SBUF中
          {
         if(dat=='o')
                                 {
                                         LED =0;   
                                 }
                                 if(dat=='f')  
                                 {                                                 
                                    LED =1;
                                 }                                         
          }
}


Snipaste_2023-06-06_13-59-25.jpg
回复

使用道具 举报

ID:752974 发表于 2023-6-6 14:27 | 显示全部楼层
ESP8266进入AT模式后只接收AT格式的指令。
回复

使用道具 举报

ID:123289 发表于 2023-6-6 15:25 | 显示全部楼层
看看通讯协议手册上怎么说。
回复

使用道具 举报

ID:907263 发表于 2023-6-6 16:21 | 显示全部楼层
munuc_w 发表于 2023-6-6 14:27
ESP8266进入AT模式后只接收AT格式的指令。

程序中确实是发送的at指令字符串,并且找了很多例程也没用
回复

使用道具 举报

ID:688692 发表于 2023-6-6 18:52 | 显示全部楼层
目测串口初始化的问题,直接用STC的ISP软件生成一个串口初始化程序试试
应该是Send_ZF函数卡住了
回复

使用道具 举报

ID:1080331 发表于 2023-6-6 22:09 | 显示全部楼层
根据您提供的代码,我注意到您的主程序中只初始化了串口和 ESP8266 模块,并在循环中实现了空操作。而在串口中断处理函数中,根据输入的字符 'o' 和 'f' 分别控制了 LED 灯的亮灭。

由于没有详细的说明和注释,我无法判断代码在运行时是否存在问题,调试代码建议您使用单步跟踪和调试工具来分析问题的根本原因。

另外需要注意的是,在 ESP8266 模块初始化代码中,您发送了 AT 指令和设置了 ESP8266 的无线热点名称和密码。如果想要正常连接无线网络,还需要进一步配置相应的参数,例如 IP 地址、网关、子网掩码等。
回复

使用道具 举报

ID:744809 发表于 2023-6-7 08:46 | 显示全部楼层
597329015 发表于 2023-6-6 22:09
根据您提供的代码,我注意到您的主程序中只初始化了串口和 ESP8266 模块,并在循环中实现了空操作。而在串 ...

8266只需要发送无线名和密码就可以了,其他的路由器自动分配的。不过他的void AT_Send_String(u8 *string)  //发送字符串
{
  while(*string)
  {
    Sent_ZF(*string++);
                Delay_ms(5);
  }

}函数,发一个字节就延时5ms,会导致8266将一字节当作一帧数据,从而导致无法正确处理AT指令吧。
还有就是8266要配置成单连接模式,client模式等,AT指令好像有所缺失
回复

使用道具 举报

ID:744809 发表于 2023-6-7 08:48 | 显示全部楼层
597329015 发表于 2023-6-6 22:09
根据您提供的代码,我注意到您的主程序中只初始化了串口和 ESP8266 模块,并在循环中实现了空操作。而在串 ...

我又看了一下,他应该是要配成ap模式,那就缺了这条AT指令,以及缺失TCP侦听端口信息。
回复

使用道具 举报

ID:648281 发表于 2023-6-7 13:20 | 显示全部楼层
建议你采用透传模式下的ESP8266,避免繁琐的AT指令设置,透传方式更稳定切方便快捷
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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