找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ESP8266无法接收单片机的指令

[复制链接]
ID:808611 发表于 2021-3-28 23:37 | 显示全部楼层 |阅读模式
想问一下,单片机可以与电脑串口通信,ESP8266也能与电脑串口通信并发送AT指令控制,但ESP8266接收不到来自单片机的AT指令是什么原因我用的是51开发板,WIFI模块是ESP-01S,因为开发板电源接口不够所以用开发板给电源模块供电再用ESP8266连接电源模块
ESP8266的VCC和EN接电源模块的3V3,GND接电源模块的GND
ESP8266的TX、RX分别连接了单片机的P31(RX)、P30(TX)
不知道怎么上传图片,我就直接复制串口助手的信息了

(省略乱码)

Ai-Thinker Technology Co. Ltd.

ready
AT+CWMODE=2
AT+CIPMUX=1
AT+CIPSERVER=1,8080

发送AT+CIPMUX?后显示
AT+CIPMUX?

+CIPMUX:0

OK


下面是我找的例程
  1. #include<reg52.h>                                //51单片机常用的头文件
  2. #define uchar unsigned char                //宏定义一个无符号的char类型
  3. #define uint unsigned int                //宏定义一个无符号的int类型

  4. //发送一字节
  5. void sendByte(uchar b)
  6. {
  7.   SBUF = b;
  8.   while(!TI);
  9.   TI=0;
  10. }

  11. //发送字符串
  12. void sendString(uchar *s)
  13. {
  14.   while(*s != '\0')        //字符串默认结尾'\0',以此来判断字符串的结束
  15.   {
  16.     sendByte(*s);
  17.     s++;
  18.   }
  19. }

  20. //初始化ESP8266WiFi模块
  21. void initEsp()
  22. {
  23.   uint a;
  24.   SCON = 0x50;    //8位数据,可变波特率
  25.   TMOD = 0x20;    //设置定时器1位16位自动重装模式
  26.   TL1 = 0xfd;     //设置定时器初值,波特率为9600
  27.   TH1 = 0xfd;
  28.   ET1 = 0;        //禁止定时器1中断
  29.   TR1 = 1;        //启动定时器1
  30.   EA = 1;

  31.   for (a=0; a<50000; a++);                //延时几秒,让模块有时间启动
  32.   sendString("AT+CWMODE=2\r\n");        //设置为softAP和station共存模式

  33.   //WiFi热点不能通过代码设置,可使用串口助手进行设置,该设置断电不丢失
  34.   /*
  35.   for (a=0; a<20000; a++);
  36.   sendString("AT+CWSAP='TEST','12345678',1,3\n"); //建立WiFi热点
  37.   */

  38.   for (a=0; a<50000; a++);   
  39.   sendString("AT+CIPMUX=1\r\n"); //启动多连接

  40.   for (a=0; a<20000; a++);
  41.   sendString("AT+CIPSERVER=1,8080\r\n");//建立server,端口为333



  42.   RI=0;
  43.   ES=1;   //初始化完成,串行口中断打开
  44. }

  45. //主函数  
  46. void  main()  
  47. {  
  48.   initEsp();
  49. }  
复制代码
回复

使用道具 举报

ID:342911 发表于 2021-3-29 12:23 来自手机 | 显示全部楼层
个人建议,可以把串口调试助手16进制查看选上去分别对比单片机发出的AT和助手发的AT有何不同可能会发现新世界,之前记得做时每句结尾是\r\r\n

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:808611 发表于 2021-3-29 22:59 | 显示全部楼层
muzhi 发表于 2021-3-29 12:23
个人建议,可以把串口调试助手16进制查看选上去分别对比单片机发出的AT和助手发的AT有何不同可能会发现新世 ...

谢谢大佬的建议,试了一下确实稍有不同,但是多次尝试更改程序后还是无法解决问题。。
回复

使用道具 举报

ID:808611 发表于 2021-3-29 23:04 | 显示全部楼层
muzhi 发表于 2021-3-29 12:23
个人建议,可以把串口调试助手16进制查看选上去分别对比单片机发出的AT和助手发的AT有何不同可能会发现新世 ...

主要问题是ESP8266完全接收不到单片机的信息,例如串口不加换行直接发送的话8266会回复原句,用单片机不加任何\n或\r直接发送,8266也没有回复

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:808611 发表于 2021-3-30 20:10 | 显示全部楼层
我悟了,解决了
回复

使用道具 举报

ID:342911 发表于 2021-3-30 21:39 来自手机 | 显示全部楼层
153152837 发表于 2021-3-30 20:10
我悟了,解决了

是换行回车的问题吗?建议把解决方案总结写出来,方便后来人
回复

使用道具 举报

ID:808611 发表于 2021-3-30 21:47 | 显示全部楼层
本帖最后由 153152837 于 2021-3-30 22:21 编辑

总结
1、检查接线是否正确
2、单片机和ESP8266分别连接电脑,用串口助手调试
3、检查波特率
4、使用开发板的师兄千万千万要注意!!!部分开发板由于自带USB转TTL模块,P30口和P31(也就是RX和TX)在设计上会默认反接,或者在标注上会反过来,一定要看开发板原理图去确认!!!(这个就是我遇到的问题)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:808611 发表于 2021-3-30 21:50 | 显示全部楼层
muzhi 发表于 2021-3-30 21:39
是换行回车的问题吗?建议把解决方案总结写出来,方便后来人

网上给的代码一般都是没有问题的,AT指令后面加\r\n没啥问题,要注意检查接线
回复

使用道具 举报

ID:207421 发表于 2021-3-30 23:31 | 显示全部楼层
ESP8266模块的波特率一般都是 115200
你不改成 9600 没发通讯,如下:
AT+CIOBAUD=9600
AT+RST
回复

使用道具 举报

ID:569384 发表于 2021-3-31 16:43 | 显示全部楼层
ESP-01S模块默认波特率是115200,单片机也要用115200波特率来发指令。可以用单片机改波特率,但是模块每次掉电后再上电波特率又会默认115200。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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