通信接口

[2016.04.21]ESP8266 wifi模块在Arduino上的应用

字号+ 作者:duino123.com 来源:未知 2017-02-16 09:02 我要评论( )

[2016.04.21]ESP8266 wifi模块在Arduino上的应用

ESP8266低功耗,低成本,小体积,应用广泛。是Arduino学习的必备内容。以下是本人所做的一些入门功能测试,应该可以让大家很快熟悉此模块的大部分功能。


本例可以目前实现的功能:
             连接AP
             作为客户端访问外网服务器
             作为服务器局域网内利用PC和手机进行访问
             作为服务器通过外网访问需要在路由器设置端口转发     
       

1. 硬件:
             Arduino 2560一块
             ESP8266一块
             连接线 5根
             面包板一块

2. 连接:


以上是8266的引脚,对应的接到2560如下:

 
*   VCC------------->3.3V
*   GND------------->GND
*   CH_PD---------->3.3V
*   URXD------------>D3
*   UTXD------------>D2
 
3. 配置:
本例没有使用TTL转接,直接将8266的串行口与2560的串行口连接,通过2560串口发送AT指令对8266进行配置。
一方面可以熟悉串口的使用,另外也可以更好的了解AT指令,还能节省一块额外的转接板。
以下是此版本的8266对应的AT指令,以及AT指令发送时候的一些容易碰到的问题。

可用指令


*      AT指令有三:基础指令; wifi功能指令; TCP/IP工具箱指令;
*      基础指令:
*              AT                      测试指令
*              AT+RST              重启模块
*              AT+GMR             查看版本信息 
*      wifi功能指令:
*              AT+CWMODE      选择WIFI应用模式
*              AT+CWJAP          加入AP
*              AT+CWLAP          列出当前可用AP
*              AT+CWQAP         退出与AP的连接
*              AT+CWSAP          设置AP模式下的参数
*              AT+CWLIF            查看已接入设备的IP
*      TCP/IP工具箱指令
*              AT+ CIPSTATUS   获得连接状态
*              AT+CIPSTART      建立TCP连接或注册UDP端口号
*              AT+CIPSEND       发送数据
*              AT+CIPCLOSE     关闭TCP或UDP
*              AT+CIFSR            获取本地IP地址
*              AT+CIPMUX         启动多连接
*              AT+CIPSERVER    配置为服务器
*              AT+CIPMODE        设置模块传输模式
*              AT+CIPSTO           设置服务器超时时间

每一条指令一般对应4种操作方式:

               测试操作
AT+x=?       该命令用于查询设置命令或内部程序设置的参数以及其取值范围。

               查询操作
AT+x?         该命令用于返回参数的当前值

               设置操作
AT+x=xxxxx 该命令用于设置用户自定义的参数值。

               执行操作
AT+x          
该命令用于执行受模块内部程序控制的变参数不可变的功能。

4. 代码:
/*****************************************************************************************************
*   ESP8266-01   Mega 2560
*   VCC------------>3.3V
*   GND------------>GND
*   CH_PD---------->3.3V
*   URXD----------->D3
*   UTXD----------->D2
*
*      AT指令有三:基础指令; wifi功能指令; TCP/IP工具箱指令;
*      基础指令; 
*              AT         测试指令
*              AT+RST     重启模块
*              AT+GMR     查看版本信息 
*      wifi功能指令:
*              AT+CWMODE  选择WIFI应用模式
*              AT+CWJAP   加入AP
*              AT+CWLAP   列出当前可用AP
*              AT+CWQAP   退出与AP的连接
*              AT+CWSAP   设置AP模式下的参数
*              AT+CWLIF   查看已接入设备的IP
*      TCP/IP工具箱指令
*              AT+ CIPSTATUS   获得连接状态
*              AT+CIPSTART     建立TCP连接或注册UDP端口号
*              AT+CIPSEND      发送数据
*              AT+CIPCLOSE     关闭TCP或UDP
*              AT+CIFSR        获取本地IP地址
*              AT+CIPMUX       启动多连接
*              AT+CIPSERVER    配置为服务器
*              AT+CIPMODE      设置模块传输模式
*              AT+CIPSTO       设置服务器超时时间
*
*****************************************************************************************************/

void setup() {
Serial.begin(9600);
Serial1.begin(115200);
}

void loop() {
if(Serial.available()){
 int command = Serial.read();
  switch(command) {
    case 48: Serial1.print("AT\r\n");break;// 0
    case 97: Serial.println("");Serial1.print("AT+RST\r\n");                                        break;   //a 复位
    case 98: Serial.println("");Serial1.print("AT+GMR\r\n");                                        break;   //b 显示版本信息 
//------------------------------------------------------------------------------    
    case 99: Serial.println(""); Serial1.print("AT+CWMODE?\r\n");                                   break;   //c 查询模式  
    case 100: Serial.println("");Serial1.print("AT+CWMODE=3\r\n");                                  break;   //d 设定模式
    case 101: Serial.println("");Serial1.print("AT+CWJAP?\r\n");                                    break;   //e 查询AP信息
    case 102: Serial.println("");Serial1.print("AT+CWJAP=\"ssid\",\"password\"\r\n");               break;   //f 连接AP
    case 103: Serial.println("");Serial1.print("AT+CWLAP=<ssid>,< mac >,<ch>\r\n");                 break;   //G      
    case 104: Serial.println("");Serial1.print("AT+CWLAP\r\n");                                     break;   //h 
    case 105: Serial.println("");Serial1.print("AT+CWQAP=?\r\n");                                   break;   //i    
    case 106: Serial.println("");Serial1.print("AT+CWQAP\r\n");                                     break;   //j 断开AP   
    case 107: Serial.println("");Serial1.print("AT+CWSAP?\r\n");                                    break;   //k
    case 108: Serial.println("");Serial1.print("AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>\r\n");            break;   //l    
    case 109: Serial.println("");Serial1.print("AT+CWLIF\r\n");                                     break;   //m   
//-------------------------------------------------------------------------------    
    case 110: Serial.println("");Serial1.print("AT+CIPSTART=\"TCP\",\"www.baidu.com\",80\r\n");     break;   //n 连接服务器
    case 111: Serial.println(""); 
              Serial1.print("AT+CIPMODE=0\r\n");delay(200); 
              Serial1.print("AT+CIPCLOSE\r\n");                                                     break;   //o 断开服务器
    case 112: Serial.println("");
              Serial1.print("AT+CIPMODE=1\r\n");delay(200);
              Serial1.print("AT+CIPSEND\r\n");  delay(200);                                         break;   //p         
//------------------------------------------------------------------------------    
    case 113: Serial.println("");                                
              Serial1.print("GET / HTTP/1.1\n");
              Serial1.print("Host:www.baidu.com\n");
              Serial1.print("User-Agent: abc\n");
              Serial1.print("Connection: close\n");
              Serial1.print("\n");                                                                  break;   //q 连接Server
    case 114: Serial.println("");Serial1.print("AT+CLEAR");                                         break;   //u              
    case 115: Serial.println("");Serial1.print("AT+CLEAR");                                         break;   //u                      
    case 116: Serial.println("");Serial1.print("+++");  delay(200);Serial1.print("\n");             break;   //t 断开Server
//------------------------------------------------------------------------------       
    case 117: Serial.println("");Serial1.print("AT+CIPMUX=1\r\n");                                  break;   //u 设置多点模式
    case 118: Serial.println("");Serial1.print("AT+CIPSERVER=1,5566\r\n");                          break;   //v 设置为服务器模,端口5566
    case 119: Serial.println("");Serial1.print("AT+CIPSEND=0,6\r\n");   delay(100);Serial1.print("123456");   break;   //w  发送数据到客户端
    case 120: Serial.println("");Serial1.print("AT+CIPSERVER=0\r\n");                               break;   //x  取消服务器模式
    case 121: Serial.println("");Serial1.print("AT+CIPMUX=0\r\n");                                  break;   //y  取消多点模式之后才可以断开AP
    default: Serial.println("");Serial1.println("Wrong command!");
  }
}
  delay(100);  
  String cmd = "";
  int st = 0;
  while(Serial1.available()) {
      char feedback = Serial1.read();
      cmd += feedback;
      st = 1;
   }
  if(st == 1) {Serial.println(cmd); st = 0;}
}

5.注意事项
  • 每条指令发送完要换行,8266才能正确识别指令和执行指令。
  • print内容包括双引号时候需要在双引号之前加 \ ,才能通过IDE的编译。
  • 作为客户端访问服务器之后,如果不执行断开服务器指令,之后发送的指令不会被接收。
  • 断开服务器的命令为发送"+++"加一个空行,服务器即可断开,之后可以进行AT操作。
具体的截屏和后续测试会持续更新。







如需更详细资料,如有好资源分享,请加入QQ交流群:214461008

欢迎阅读,欢迎转载,不用注明出处!本站只提供入门和进阶资料,做您学习的小伙伴!

老司机也欢迎光临指导!有好内容请加群:214461008 不要看声明了,看内容吧!

相关文章
  • ESP8266使用指南(基于AT指令 NodeMCU 固件ESP-12E)

    ESP8266使用指南(基于AT指令 NodeMCU 固件ESP-12E)

    2016-04-28 17:50

  • ESP8266 ESP-12新手指南

    ESP8266 ESP-12新手指南

    2016-04-27 23:23

  • 利用ESP8266搭建你的Web服务器+安卓app客户端

    利用ESP8266搭建你的Web服务器+安卓app客户端

    2016-04-28 10:08

  • [转]Arduino ESP8266调试笔记

    [转]Arduino ESP8266调试笔记

    2016-04-22 23:57

网友点评
Arduino