赞
踩
- AT
- OK
AT+UART=9600,8,1,0,0
首先封装一个输出字符的函数sendString
- void sendString(char* str)
- {
- while( *str != '\0'){
- sendByte(*str);
- str++;
- }
- }
- void Uart_Handler() interrupt 4
- {
- static int i = 0;//静态变量,被初始化一次
- char tmp;
-
- if(RI)//中断处理函数中,对于接收中断的响应
- {
- RI = 0;//清除接收中断标志位
- tmp = SBUF;
- if(tmp == 'W' || tmp == 'O' || tmp == 'L' || tmp == 'F'){
- i = 0;
- }
- buffer[i++] = tmp;
- //入网成功的判断依据WIFI GOT IP
- if(buffer[0] == 'W' && buffer[5] == 'G'){
- AT_Connect_Net_Flag = 1;
- memset(buffer, '\0', SIZE);
- }
- //连接服务器等OK返回值指令的判断
- if(buffer[0] == 'O' && buffer[1] == 'K'){
- AT_OK_Flag = 1;
- memset(buffer, '\0', SIZE);
- }
- //联网失败出现FAIL字样捕获
- if(buffer[0] == 'F' && buffer[1] == 'A'){
- for(i=0;i<5;i++){
- D5 = 0;
- Delay1000ms();
- D5 = 1;
- Delay1000ms();
- }
- sendString(RESET);
- memset(buffer, '\0', SIZE);
- }
- //灯控指令
- if(buffer[0] == 'L' && buffer[2] == '1'){
- D5 = 0;//点亮D5
- memset(buffer, '\0', SIZE);
- }
- if(buffer[0] == 'L' && buffer[2] == '0'){
- D5 = 1;//熄灭D5
- memset(buffer, '\0', SIZE);
- }
- if(i == 12) i = 0;
- }
-
- }

- AT+CWMODE=1 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模
- OK
AT指令
- AT+CWJAP="自家的WiFi名称","自家的WiFi密码" //指令
- WIFI CONNECTED //结果
- WIFI GOT IP //结果
code char LJWL[] = "AT+CWJAP=\"自己家WiFi名字\",\"自己家WiFi密码\"\r\n"; //入网指令
用sendString输出LJWL,并等待esp反馈
- //发送联网AT指令并等待成功
- sendString(LJWL);
- while(!AT_Connect_Net_Flag);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
- AT_Connect_Net_Flag = 0;
这里的 AT_OK_Flag和AT_Connect_Net_Flag 是一个标志位,其初始值为0。用来接收esp的反馈,看看是否发送正确,并正确收到,然后执行下一步,用完之后要归0.出来混迟早要还的哈哈哈哈
这里调用AT讲的比较细,后面我就不赘述啦,直接上代码。
然后打开自己的pc网络调试助手(windows终端查询自己连的wifi的ip地址)
终端指令:ipconfig
端口号随意吧
AT指令
- AT+CIPSTART="TCP","自己的windows端口号",8888 //指令,注意双引号逗号都要半角(英文)输入
- CONNECT //结果:成功
- OK //结果:成功
c语言体现
code char LJFWQ[] = "AT+CIPSTART=\"TCP\",\"192.168.1.101\",8880\r\n"; //连接服务器指令
- //发送连服务器指令并等待成功
- sendString(LJFWQ);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
AT有个很呆的指令,需要自己提前输入要发几个字符,但是开启透传就不用提前说明,想发多大字节就发多大字节,一个字,爽
- AT+CIPSEND=4 // 设置即将发送数据的长度 (这里是4个字节)
- >CLCA // 看到大于号后,输入消息,CLCA,不要带回车
- Response :SEND OK //结果:成功
- //注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!
- AT+CIPMODE=1 //开启透传模式
- Response :OK
- 退出透传模式
- 3.5.6 单片机帮你做这一切
- AT+CIPSEND //带回车
- Response: > //这个时候随意发送接收数据咯
透传模式,爽!
c代码实现:
char TCMS[] = "AT+CIPMODE=1\r\n"; //透传指令
- //发送透传模式指令并等待成功
- sendString(TCMS);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
开始数据传输
char SJCS[] = "AT+CIPSEND\r\n"; //数据传输开始指令
- //发送数据传输指令并等待成功
- sendString(SJCS);
- while(!AT_OK_Flag);
接下来就可以随意爽了
- //1 配置成双模
- AT+CWMODE=2
- Response :OK
c代码实现
- /1 工作在路由模式
- char LYMO[] = "AT+CWMODE=2\r\n";
- sendString(LYMO);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
- //2 使能多链接
- AT+CIPMUX=1
- Response :OK
c代码实现
- //2 使能多链接
- char DLJ[] = "AT+CIPMUX=1\r\n";
- sendString(DLJ);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
- //3 建立TCPServer
- AT+CIPSERVER=1 // default port = 333
- Response :OK
c代码实现
- //3 建立TCPServer
- char JLFW[] = "AT+CIPSERVER=1\r\n"; // default port = 333
- sendString(JLFW);
-
- while(!Client_Connect_Flag);
- AT_OK_Flag = 0;
- if(Client_Connect_Flag){
- D5 = 0;//点亮D5,代表有客户端接入
- }
- //4 发送数据
- AT+CIPSEND=0,5 // 发送5个字节在连接0通道上
- >abcd //输入数据,不带回车
- Response :SEND OK
- //• 接收数据
- +IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据
c代码实现:
- //发送数据
- char FSSJ[] = "AT+CIPSEND=0,5\r\n";
- //4 发送数据
- sendString(FSSJ);
- Delay1000ms();
- Delay1000ms();
- sendString("Hello");
- Delay1000ms();
- Delay1000ms();
这里不确定esp的发送数据反馈,就用了最简单的延时
- //断开连接
- AT+CIPCLOSE=0
- Response :0, CLOSED OK
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。