赞
踩
个人买的正点原子的ATK-esp8266,其他版本,不太清楚。
目的:esp8266配置成STA模式,实现手机控制C51的蜂鸣器或者LED
1、通过正点原子的教程 “3、模块作为客户端 STA”
https://blog.csdn.net/weixin_53944340/article/details/125719320
实现通过手机端和esp8266的收发。
2、基于该教程:https://blog.csdn.net/River_and_lake/article/details/121431164
把里面的流程换成,正点原子的 “3、模块作为客户端 STA” 指令。
3、补充资料
https://blog.csdn.net/qq_39470634/article/details/120524207
欢迎 | 安信可科技 (ai-thinker.com) //安信可的串口助手和安卓端的apk,下载链接。
还有一个:ESP8266_AT指令集V2.1.0.pdf 个人是通过正点原子下载的,自行搜索下载
- /*
-
- 代码这里复制:
- https://blog.csdn.net/River_and_lake/article/details/121431164
- https://blog.csdn.net/qq_39470634/article/details/120524207
-
- 流程:
- https://blog.csdn.net/weixin_53944340/article/details/125719320
-
- 这里是t2.c
- 基于这里的代码修改,要实现:C51+ESP8266 能给手机端tcp server 发送dat9
- https://blog.csdn.net/River_and_lake/article/details/121431164
-
- */
-
-
-
- #include<reg51.h>
-
- #define uint unsigned int
- #define uchar unsigned char
-
- sbit led1=P1^1;
- sbit led2=P1^2;
- sbit led3=P1^3;
-
- uchar Recive_table[15];
- uchar buff;
- uint i;
-
- typedef unsigned char uint8_t;
- typedef uint8_t u8;
-
- // sta 模式
- code u8 dat1[]="AT+RST\r\n", \
- dat2[]="AT+CWMODE=2\r\n", \
- dat3[]="AT+CWSAP=\"ESP8266AP_test\",\"12345678\",1,3\r\n", \
- dat4[]="AT+CIPMUX=0\r\n", \
- dat5[]="AT+CIPSERVER=0\r\n",\
-
- // 安可信安卓端自动配置IP: 192.168.199.208
- // 端口:8088
- dat6[]="AT+CIPSTART=\"TCP\",\"192.168.199.208\",8088\r\n", \
- dat7[]="AT+CIPMODE=1\r\n",\
- dat8[]="AT+CIPSEND\r\n", \
- dat9[]="hello!!! I am ESP-01S\r\n";
-
- // fmq = 0; 低电平蜂鸣器,0响,1不响
- sbit fmq = P2^0;
-
-
- void delay_ms(uint ms)
- {
- uchar i,j;
- for(i=ms;i>0;i--)
- {
- for(j=120;j>0;j--)
- {
- //
- }
- }
-
- }
-
- void delay_us(uchar us)
- {
- while(us--);
- }
-
- void Usart_Init()//初始化51单片机
- {
- SCON = 0x50;//串行口中断方式一,且启动串行口接受(REN=1)
- TMOD = 0x20;//计数器1工作方式2,自动重装载
-
- TH1 = 0xfd;//设置波特率与esp8266达成一致
- // AT+CIOBAUD=9600,8,1,0,0 返回ok后 记得将串口先断开然后把串口助手的波特率也进行修改 9600
- // AT+UART_DEF=9600,8,1,0,0 该指令是新版的波特率设置指令
- TL1 = TH1;
-
- PCON = 0;//波特率不加倍
-
- TR1 = 1;//启动计数器
- EA = 1;//开总中断
- }
-
- //延时函数, 对于11.0592MHz时钟, 例i=10,则大概延时10ms.
- void delayMs(unsigned int i)
- {
- unsigned int j;
- while(i--)
- {
- for(j = 0; j < 125; j++);
- }
- }
-
- void SENT_At(uchar *At_Comd)//指针指向At指令
- {
-
- ES = 0;
-
- while(*At_Comd!='\0')
- {
- SBUF = *At_Comd;
- while(!TI);//等待该字节发送完毕,发送完后硬件自动置一TI
- TI = 0;//硬件之以后必须软件置零才能进行下一次数据传送
- delay_us(5);
- At_Comd++;//指向下一个字节
- }
-
- }
-
- void WIFI_Init()//通过单片机配置AT指令
- {
- delayMs(6000); //esp8266 模块启动需要时间,所以要延时,个人给了6秒
-
- //SENT_At("AT+CIPMUX=1\r\n");//多连接模式
- SENT_At(dat6);
- //delay_ms(20000);
- delayMs(2000);
-
- fmq = 0;
-
- //SENT_At("AT+CIPSERVER=1,8080\r\n");//设置端口号
- SENT_At(dat7);
- //delay_ms(20000);
- delayMs(2000);
-
- fmq = 1;
-
- SENT_At(dat8);
- //delay_ms(20000);
- delayMs(2000);
-
- fmq = 0;
-
- SENT_At(dat9); //实验预期,手机接收dat9数据
- delayMs(2000);
-
- fmq = 1;
-
- ES = 1;
-
- }
-
-
-
- void main()
- {
- Usart_Init();
- //delayMs(5000);
- //fmq = 0;
- WIFI_Init();
-
- while(1);
-
- }
-
-
- void Uart() interrupt 4 //中断程序
- {
- if(RI==1)//接受一帧完成后由硬件置一
- {
- RI = 0;//软件清零,防止下次未接收完成就执行程序
- Recive_table[i] = SBUF;
- buff = SBUF;
- if(buff == '1'){
- fmq = 1;
- }else if(buff == '0'){
- fmq = 0;
- }
- /*
- if(Recive_table[0]=='+')
- i++;
- else
- i = 0;
- if(i>=10)
- {
- if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P')&&(Recive_table[3]=='D'))
- {
- if(Recive_table[9]=='1')//输入1亮灯
- //led3 = 0;
- fmq = 1;
- if(Recive_table[9]=='0')//输入0关灯
- //led3 = 1
- fmq = 0;
- }
- i = 0;//如果不清零 就无法达到变化
- }
- */
- }
- else
- TI = 0;
- }
-
-
-
-
-
-
-
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。