在前一篇的笔记中波波通过简单的小实验用几行代码成功实现了LED灯珠的闪烁频率控制,参见https://www.zkii.net/tech/java/947.html,今天波波继续分享ESP8266Wifi模块在Arduino开发板上的应用实践。
准备材料:
1、ESP8266Wifi模块1个。本例型号:ESP8266-12F
2、Arduino开发板1个。本例型号:Arduino R3 uno
3、焊烙铁1个,引脚线若干,母对母排线。
操作步骤:
1、给ESP8266Wifi模块焊接引脚,便于用母对母排线进行连接。在第一幅图上可以清楚的看到从网上购买的Wifi模块是没有引脚的,连接有点麻烦,焊上引脚之后便于后期其他模块的组合,拆解。所以不建议通过引线焊死。
2、ESP8266的引脚与连接方法:
先看图一,是我拍的实际的引脚图,实际的模块比较小。
图二是ESP8266-12F的接线示意图:
连接信息:
- * VCC------------->3.3V
- * GND------------->GND
- * CH_PD---------->3.3V
- * URXD------------>D3
- * UTXD------------>D2
3、调试指令知识:
在这个例子中我没有用USB转TTL,而是通过Arduino开发板与ESP8266模块直接连接的方式,通过串口发送AT指令进行配置。不仅可以省掉一个模块,也可以更好的了解下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、程序源代码:(2017年10月22日重新更新此处代码)
- #include <SoftwareSerial.h>
- SoftwareSerial Serial1(3, 2); // RX, TX
- //测试ESP8266-12F WIFI模块
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- Serial1.begin(115200);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- if(Serial.available()){
- int command = Serial.read();
- switch(command){
- case 48:
- //0
- Serial1.print("AT\r\n");
- break;
- case 97:
- //a 复位
- Serial.println("");
- Serial1.print("AT+RST\r\n");
- break;
- case 98:
- //b 显示版本信息
- Serial.println("");
- Serial1.print("AT+GMR\r\n");
- break;
- case 99:
- //c 查询模式
- Serial.println("");
- Serial1.print("AT+CWMODE?\r\n");
- break;
- case 100:
- //d 设定模式
- Serial.println("");
- Serial1.print("AT+CWMODE=3\r\n");
- break;
- case 101:
- //e 查询AP信息
- Serial.println("");
- Serial1.print("AT+CWJAP?\r\n");
- break;
- case 102:
- //f 连接AP
- Serial.println("");
- Serial1.print("AT+CWJAP=\"ssid\",\"password\"\r\n");
- break;
- case 103:
- // G
- Serial.println("");
- Serial1.print("AT+CWLAP=<ssid>,<mac>,<ch>\r\n");
- break;
- case 104:
- //h
- Serial.println("");
- Serial1.print("AT+CWLAP\r\n");
- break;
- case 105:
- //i
- Serial.println("");
- Serial1.print("AT+CWQAP=?\r\n");
- break;
- case 106:
- //j 断开AP
- Serial.println("");
- Serial1.print("AT+CWQAP\r\n");
- break;
- case 107:
- //k
- Serial.println("");
- Serial1.print("AT+CWSAP?\r\n");
- break;
- case 108:
- //l
- Serial.println("");
- Serial1.print("AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>\r\n");
- break;
- case 109:
- //m
- Serial.println("");
- Serial1.print("AT+CWLIF\r\n");
- break;
- case 110:
- //n 连接服务器
- Serial.println("");
- Serial1.print("AT+CIPSTAR=\"TCP\",\"www.aabc.com.cn\",80\r\n");
- break;
- case 111:
- //断开服务器
- Serial.println("");
- Serial1.print("AT+CIPMODE=0\r\n");delay(200);
- Serial1.print("AT+CIPCLOSE\r\n");
- break;
- case 112:
- //p
- Serial.println("");
- Serial1.print("AT+CIPMODE=1\r\n");delay(200);
- Serial1.print("AT+CIPSEND\r\n");delay(200);
- break;
- case 113:
- //q 连接服务器
- Serial.println("");
- Serial1.print("GET /HTTP/1.1\n");
- Serial1.print("Host:www.aabc.com.cn\n");
- Serial1.print("User-Agent:abc\n");
- Serial1.print("Connection:close\n");
- Serial1.print("\n");
- break;
- case 114:
- //u
- Serial.println("");
- Serial1.print("AT+CLEAR");
- break;
- case 115:
- //u
- Serial.println("");
- Serial1.print("AT+CLEAR");
- break;
- case 116:
- //t 断开Server
- Serial.println("");
- Serial1.print("+++"); delay(200);
- Serial1.print("\n");
- break;
- case 117:
- //u 设置多点模式
- Serial.println("");
- Serial1.print("AT+CIPMUX=1\r\n");
- break;
- case 118:
- //v 设置服务模式
- Serial.println("");
- Serial1.print("AT+CIPSERVER=1,5566\r\n");
- break;
- case 119:
- //w 发送数据到客户端
- Serial.println("");
- Serial1.print("AT+CIPSEND=0,6\r\n"); delay(100);
- Serial1.print("123456");
- break;
- case 120:
- //x 取消服务模式
- Serial.println("");
- Serial1.print("AT+CIPSERVER=0\r\n");
- break;
- case 121:
- //y 取消多点模式之后才可以断开AP
- Serial.println("");
- Serial1.print("AT+CIPMUX=0\r\n");
- break;
- default:Serial.println("");Serial1.print("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操作。
- 对于Arduino 2560的板子可以去掉第一行、第二行代码,仅UNO需要加第一行第二行代码。
具体的截屏和后续测试会持续更新,敬请关注。
对于Arduino波波也是一个初学者,所以谈不上任何经验的分享,只是希望我的实践笔记尽可能详尽的记录我在学习Arduino过程中的一些知识点,从而避免误导其他新手。