找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4222|回复: 6
收起左侧

51单片机控制esp8266至今没搞明白单片机是要如何才能发送指令给8266

[复制链接]
ID:306545 发表于 2018-4-12 13:20 | 显示全部楼层 |阅读模式
新手小白,初认51单片机,最近研究了有一段时间的单片机与8266之间的通信,至今没搞明白单片机是要如何才能发送指令给8266,8266又是怎么接受指令然后再发送给单片机,单片机再做下一步的动作的,求高手指点,我的邮箱1913185018@qq.com

评分

参与人数 1黑币 +3 收起 理由
a8107777 + 3

查看全部评分

回复

使用道具 举报

ID:123289 发表于 2018-4-12 20:33 | 显示全部楼层
读通两者的手册就知道了。
回复

使用道具 举报

ID:160834 发表于 2018-4-12 20:47 | 显示全部楼层
串口通讯啊。单片机发送AT指令。
根据esp8266内部定义的指令。单片机发送给esp8266就可以执行相应的功能了。
例如:
1、设置wifi模式:AT+CWMODE=2
2、重启生效:AT+RST
3、启动多连接:AT+CIPMUX=1
4、建立server:AT+CIPSERVER=1

评分

参与人数 1黑币 +5 收起 理由
楚园客 + 5 谢谢大神的指导

查看全部评分

回复

使用道具 举报

ID:308141 发表于 2018-4-14 19:00 | 显示全部楼层
跟单片机通过串口通讯,单片机有专门的针脚,51是P30和P31用来进行串口通信的
回复

使用道具 举报

ID:263306 发表于 2018-4-14 22:45 | 显示全部楼层
esp8266是串口WIFI模块,就是把接收到的信号通过串口跟单片机通讯。
回复

使用道具 举报

ID:309970 发表于 2018-6-3 22:29 | 显示全部楼层
就是串口通讯,把要设置的AT指令发送出去
回复

使用道具 举报

ID:227622 发表于 2018-8-17 11:52 | 显示全部楼层
c51单片机,远程命令详解  ******************************************************************************/ #include <AT89X51.H> #include <stdio.h> unsigned int a; int b=1; int c =1; int d =1; int e=1; int f=0;  void main(void)   {         unsigned char ldat;          //PCON |=0X80;                //是否波特率倍增         SCON=0x50;         TMOD=0X20;                                //设置定时器1为模式2,做为波特率发生器         TL1=0xFD;                                //9600波特率的初值,板子使用11.592M晶振,初值=256-12000000/32/12/2400         TH1=0xFD;                                //         TI = 1;         TR1=1;                                        //启动波特率发生                         //设置串口方式2                  do{ for (a=0; a<50000; a++);        //延时几秒,让模块有时间启动 printf ("AT+CIPMUX=1\n"); //发送命令AT+CIPMUX=1,让模块进入多连接模式         if(RI){                                //查询是否有数据接收                         ldat=SBUF;                //数据暂存于变量中                         RI=0;                                 if (ldat=='K')//命令执行成功,就会返回OK,这里就是查询是否有K返回,若有K返回,就说明执行成功,可以执行下一条,否则继续循环                                 {b=0 ;                                 d=0;}                            c++;                         if (c==1000)                         {c=1;                         d=0;}}    }while (d);            }while(b) ; b=1; c =1; d =1;//b、c、d复位,便于执行下一条命令                       do{ for (a=0; a<10000; a++); printf ("AT+CIPSERVER=1,7671\n");          do{         if(RI){                                //查询是否有数据接收                         ldat=SBUF;                //数据暂存于变量中                         RI=0;                                 if (ldat=='K')//同上                                 {b=0 ;                                 d=0;}                            c++;                         if (c==1000)                         {c=1;                         d=0;}}    }while (d);            }while(b) ;          b=1; c =1; d =1;                  do{ for (a=0; a<10000; a++); printf ("AT+CIPSTO=50\n");          do{         if(RI){                                //查询是否有数据接收                         ldat=SBUF;                //数据暂存于变量中                         RI=0;                                 if (ldat=='K')//同上                                 {b=0 ;                                 d=0;}                            c++;                         if (c==1000)                         {c=1;                         d=0;}}    }while (d);            }while(b) ; b=1; c =1; d =1;  //执行上述命令,模块进入服务模式,下面单片机就可以接收远程发来的数据          while(1)         {                           if(RI){                                //查询是否有数据接收                         ldat=SBUF;                //数据暂存于变量中                         RI=0;                        //重新清0等待接收                                                   //命令接收开始                         if (ldat=='}')                                 { char k[50] ;//设置接收数据缓冲                               do{                        if(RI){                                //查询是否有数据接收                         ldat=SBUF;                //数据暂存于变量中                         RI=0;                        //重新清0等待接收                      k[f]=ldat;//一个个字符接收         f++        ;         if(ldat==0x0A){e=0;}        //若有新行字符,则结束接收,则说明命令接收完毕                 }            } while        (e)        ;             printf("%s\n", k);//执行远程发来的命令          f=0;          e=1;                         for (a=0; a<50; a++){                         k[a]=0;                                                  }              } //命令结束                                           if (ldat==']') {P1_4=1;   printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("A"); }                          if (ldat=='-') {P1_4=!P1_4;  }                                  if (ldat=='[') {P1_4=0;   printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("B"); }                          if (ldat=='{') { if(P1_4==0){ printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("B"); }  else{   printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("A"); } }                           }         }           }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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