ESP8266WiFi模块在Arduino上的应用实践

在前一篇的笔记中波波通过简单的小实验用几行代码成功实现了LED灯珠的闪烁频率控制,参见https://www.zkii.net/tech/java/947.html,今天波波继续分享ESP8266Wifi模块在Arduino开发板上的应用实践。

ESP8266WiFi模块在Arduino上的应用实践

准备材料:

1、ESP8266Wifi模块1个。本例型号:ESP8266-12F

2、Arduino开发板1个。本例型号:Arduino R3 uno

3、焊烙铁1个,引脚线若干,母对母排线。

操作步骤:

1、给ESP8266Wifi模块焊接引脚,便于用母对母排线进行连接。在第一幅图上可以清楚的看到从网上购买的Wifi模块是没有引脚的,连接有点麻烦,焊上引脚之后便于后期其他模块的组合,拆解。所以不建议通过引线焊死。

2、ESP8266的引脚与连接方法:

先看图一,是我拍的实际的引脚图,实际的模块比较小。

ESP8266WiFi模块在Arduino上的应用实践

图二是ESP8266-12F的接线示意图:

ESP8266WiFi模块在Arduino上的应用实践

连接信息:

  1. *   VCC------------->3.3V
  2. *   GND------------->GND
  3. *   CH_PD---------->3.3V
  4. *   URXD------------>D3
  5. *   UTXD------------>D2

3、调试指令知识:

在这个例子中我没有用USB转TTL,而是通过Arduino开发板与ESP8266模块直接连接的方式,通过串口发送AT指令进行配置。不仅可以省掉一个模块,也可以更好的了解下AT指令。

常用AT指令

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

每一种指令基本上对应4种操作:

  1. 测试操作 AT+x=?          该命令用于查询设置命令或内部程序设置的参数以及其取值范围。
  2. 查询操作 AT+x?            该命令用于返回参数的当前值
  3. 设置操作 AT+x=xxxxx   该命令用于设置用户自定义的参数值。
  4. 执行操作 AT+x              该命令用于执行受模块内部程序控制的变参数不可变的功能。

4、程序源代码:(2017年10月22日重新更新此处代码)

  1. #include <SoftwareSerial.h>
  2. SoftwareSerial Serial1(32); // RX, TX
  3. //测试ESP8266-12F WIFI模块
  4. void setup() {
  5.   // put your setup code here, to run once:
  6.   Serial.begin(9600);
  7.   Serial1.begin(115200);
  8. }
  9. void loop() {
  10.   // put your main code here, to run repeatedly:
  11.  if(Serial.available()){
  12.   int command = Serial.read();
  13.   switch(command){
  14.     case 48:
  15.         //0
  16.         Serial1.print("AT\r\n");
  17.         break;
  18.     case 97:
  19.        //a 复位
  20.         Serial.println("");
  21.         Serial1.print("AT+RST\r\n");
  22.         break;
  23.      case 98:
  24.         //b 显示版本信息
  25.         Serial.println("");
  26.         Serial1.print("AT+GMR\r\n");
  27.         break;
  28.      case 99:
  29.        //c 查询模式
  30.         Serial.println("");
  31.         Serial1.print("AT+CWMODE?\r\n");
  32.         break;
  33.       case 100:
  34.         //d 设定模式
  35.         Serial.println("");
  36.         Serial1.print("AT+CWMODE=3\r\n");
  37.         break;
  38.        case 101:
  39.           //e 查询AP信息
  40.            Serial.println("");
  41.            Serial1.print("AT+CWJAP?\r\n");
  42.            break;
  43.         case 102:
  44.           //f 连接AP
  45.            Serial.println("");
  46.            Serial1.print("AT+CWJAP=\"ssid\",\"password\"\r\n");
  47.            break;
  48.         case 103:
  49.            // G
  50.            Serial.println("");
  51.            Serial1.print("AT+CWLAP=<ssid>,<mac>,<ch>\r\n");
  52.            break;
  53.         case 104:
  54.            //h
  55.            Serial.println("");
  56.            Serial1.print("AT+CWLAP\r\n");
  57.            break;
  58.          case 105:
  59.             //i
  60.             Serial.println("");
  61.             Serial1.print("AT+CWQAP=?\r\n");
  62.             break;
  63.           case 106:
  64.              //j 断开AP
  65.               Serial.println("");
  66.               Serial1.print("AT+CWQAP\r\n");
  67.               break;
  68.            case 107:
  69.               //k
  70.               Serial.println("");
  71.               Serial1.print("AT+CWSAP?\r\n");
  72.               break;
  73.            case 108:
  74.               //l
  75.               Serial.println("");
  76.               Serial1.print("AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>\r\n");
  77.               break;
  78.            case 109:
  79.                //m
  80.                Serial.println("");
  81.                Serial1.print("AT+CWLIF\r\n");
  82.                break;
  83.             case 110:
  84.                //n 连接服务器
  85.                Serial.println("");
  86.                Serial1.print("AT+CIPSTAR=\"TCP\",\"www.aabc.com.cn\",80\r\n");
  87.                break;
  88.            case 111:
  89.                //断开服务器
  90.                Serial.println("");
  91.                Serial1.print("AT+CIPMODE=0\r\n");delay(200);
  92.                Serial1.print("AT+CIPCLOSE\r\n");
  93.                break;
  94.            case 112:
  95.                //p
  96.                Serial.println("");
  97.                Serial1.print("AT+CIPMODE=1\r\n");delay(200);
  98.                Serial1.print("AT+CIPSEND\r\n");delay(200);
  99.                break;
  100.            case 113:
  101.                //q 连接服务器
  102.                Serial.println("");
  103.                Serial1.print("GET /HTTP/1.1\n");
  104.                Serial1.print("Host:www.aabc.com.cn\n");
  105.                Serial1.print("User-Agent:abc\n");
  106.                Serial1.print("Connection:close\n");
  107.                Serial1.print("\n");
  108.                break;
  109.             case 114:
  110.                //u
  111.                Serial.println("");
  112.                Serial1.print("AT+CLEAR");
  113.                break;
  114.             case 115:
  115.                 //u
  116.                 Serial.println("");
  117.                 Serial1.print("AT+CLEAR");
  118.                 break;
  119.             case 116:
  120.                 //t 断开Server
  121.                 Serial.println("");
  122.                 Serial1.print("+++"); delay(200);
  123.                 Serial1.print("\n");
  124.                 break;
  125.             case 117:
  126.                 //u  设置多点模式
  127.                 Serial.println("");
  128.                 Serial1.print("AT+CIPMUX=1\r\n");
  129.                 break;
  130.             case 118:
  131.                 //v  设置服务模式
  132.                 Serial.println("");
  133.                 Serial1.print("AT+CIPSERVER=1,5566\r\n");
  134.                 break;
  135.              case 119:
  136.                 //w 发送数据到客户端
  137.                 Serial.println("");
  138.                 Serial1.print("AT+CIPSEND=0,6\r\n"); delay(100);
  139.                 Serial1.print("123456");
  140.                 break;
  141.               case 120:
  142.                  //x 取消服务模式
  143.                  Serial.println("");
  144.                  Serial1.print("AT+CIPSERVER=0\r\n");
  145.                  break;
  146.                case 121:
  147.                    //y 取消多点模式之后才可以断开AP
  148.                    Serial.println("");
  149.                    Serial1.print("AT+CIPMUX=0\r\n");
  150.                    break;
  151.                 default:Serial.println("");Serial1.print("Wrong command!");
  152.     }
  153.   }
  154.   delay(100);
  155.   String cmd = "";
  156.   int st = 0;
  157.   while(Serial1.available()){
  158.     char feedback = Serial1.read();
  159.     cmd += feedback;
  160.     st = 1;
  161.     }
  162.     if(st == 1){Serial.println(cmd);st = 0;}
  163. }

5、注意事项:

  • 每条指令发送完要换行,8266才能正确识别指令和执行指令。
  • print内容包括双引号时候需要在双引号之前加 \ ,才能通过IDE的编译。
  • 作为客户端访问服务器之后,如果不执行断开服务器指令,之后发送的指令不会被接收。
  • 断开服务器的命令为发送"+++"加一个空行,服务器即可断开,之后可以进行AT操作。
  • 对于Arduino 2560的板子可以去掉第一行、第二行代码,仅UNO需要加第一行第二行代码

具体的截屏和后续测试会持续更新,敬请关注。

对于Arduino波波也是一个初学者,所以谈不上任何经验的分享,只是希望我的实践笔记尽可能详尽的记录我在学习Arduino过程中的一些知识点,从而避免误导其他新手。

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!