Arduino UNO上连接esp8266
连接电路
正常供电后蓝灯闪两下,红灯常亮,模块正常启动。
注意使用的是3.3V的电源
编写连接程序
1. Arduino引用软串口库
由于UNO只有Serial,没有Serial1,所以为实现相关功能必须使用软串口的方式进行连接,这里我们将Digital 的10、11两个口配置成软串口,10为RX,11为TX口。
❗❗❗注意连接的时候要跟模块的针脚交叉连接
从程序上配置软串口,
#include <SoftwareSerial.h>
//软串口配置
SoftwareSerial mySerial(10, 11); //RX--10;TX--11;两针脚交叉连接
第一次使用或者测试的时候仅用上面的程序即可,再往后的学习中可以再加上一些程序用来进行一些常规性的检测。
2. 初始化
在setup函数中的一些初始化设定。
❗❗❗注意波特率的设定值,Arduino 的串口波特率要与ESP8266的WiFi模组波特率相同,波特率不一致时就会出现乱码或者丢包现象。
⭐有种特殊的情况是ESP8266的WiFi模组的出厂默认波特率过高超过了Arduino 最高支持的波特率,
👉解决办法:
执行下面的AT指令可修改默认波特率AT+UART_DEF=57600,8,1,0,0
void setup() {
// 硬件串口
Serial.begin(9600);
while (!Serial) {}//判断串口是否打开
// 软串口
mySerial.begin(9600);
// mySerial.println("AT+UART_DEF=9600,8,1,0,0");//解决特殊情况,或者先连接后在串口监视器中输入AT指令
// delay(1000);
while (!mySerial) {}//判断串口是否打开
}
3. AT指令集使用说明
- 使用Arduino IDE的串口监视器
直接在arduino IDE中的串口监视器中进行AT指令的发送,实现程序如下,是将IDE的串口监视器输入内容连接到ESP8266的串口上,将ESP8266的打印连接到IDE的监视器上。
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());//IDE的串口监视器输入内容输入ESP8266中;
if (Serial.available())
mySerial.write(Serial.read());//ESP8266串口打印的东西打印到IDE的串口监视器上;
}
AT指令使用例子:
- 在Arduino的程序中直接进行AT指令执行
可以自己编写封装函数,也可以直接使用一些网上已经有的封装函数,这个官方是没有的,网上的也都基本没有什么大问题。
这里使用找到的一个封装公共函数–飘易封装的公共函数,使用以下函数在程序中直接进行AT指令的执行。
封装函数👇
/* 执行AT指令 返回值: 类型为布尔型,包含false和true; 参数值: String cmd:AT指令; String flog: 返回值包含flag则true(2个以|分割); long timeout:超时时间ms(200的整数倍); */ bool doCMD(String cmd, String flag, long timeout) { String str = ""; mySerial.println(cmd); //发送AT指令 delay(300); flag.toLowerCase();// 小写 // 限期时间 long deadline = millis() + timeout; while (millis() < deadline) { str = ""; while (WIFISerial.available()) { str += (char)WIFISerial.read(); delay(2); } if (str != "") { Serial.println(str);// 打印输出 str.toLowerCase();// 小写 // 判断 flag 是否需要切割,以 | 切割,逻辑或关系 String flag1 = "", flag2 = ""; int commaPosition = flag.indexOf('|'); if (commaPosition > -1) { flag1 = flag.substring(0, commaPosition); flag2 = flag.substring(commaPosition + 1, flag.length()); } if (flag1 != "" && flag2 != "") { if (str.indexOf(flag1) > -1 || str.indexOf(flag2) > -1 ) { return true; } } if (str.indexOf(flag) > -1) { return true; } } delay(100); } return false; }
AT指令使用例子:
//AT指令实行:AT+RST,延时2s
doCMD("AT+RST","OK",2000);
实例
执行的业务逻辑是:每50秒为一个循环,在每个循环的第5秒上报传感器的温度和湿度值给云端。当用户按下wifi配网按钮时,wifi模组进入一键配网流程重新设置wifi的ssid和密码信息。
set up 函数参考上面的,这里直接给出loop函数
void loop() {
String info = "";
// 定时上报给服务器 - TCP长连接
if (millis() - lastTime == 5000) {
// 判断wifi是否连接上
if (!wifiLinked) {
Serial.println(F("!!WIFI NOT CONNECTED!!"));
}
else {
//连接TCP服务器
if (!serverLinked) {
connectTcp();//连接TCP服务器
}
else {
// 上报传感器值 - 定时上报,可代替心跳包(1分钟内1次)
String temp = String(random(10, 40));// 模拟温度
String humi = String(random(40, 90));// 模拟湿度
if (true) {
String s1(F("{\"method\": \"upload\",\"data\":[{\"Name\":\"temp\",\"Value\":\""));// 字符串存入FLASH
String s2(F("\"},{\"Name\":\"humi\",\"Value\":\""));// 字符串存入FLASH
String s3(F("\"}]}&^!"));// 字符串存入FLASH
info = s1 + temp + s2 + humi + s3;
Serial.println(info);
doCMD("AT+CIPSEND=" + String(info.length()), ">", 3000);
if (!doCMD(info, SENDOK, 3000)) {
serverLinked = false;
}
else {
}
}
}
}
}
// 恢复计时,云端限制提交频率不能低于20秒
if (millis() - lastTime >= 50000) {
lastTime = millis();
}
// 读取WIFI配网按钮是否接通
boolean val = digitalRead(WIFIPIN);
if (val && WIFIPINAvailable) {
WIFIPINAvailable = false;
Serial.println(F("WIFIPIN pressed"));
smartConfig();// 启动一键配网
WIFIPINAvailable = true;
}
// PC串口转发给wifi软串口
while (Serial.available()) {
WIFISerial.write(Serial.read());
}
// wifi软串口发送过来的信息
String str = "";
while (WIFISerial.available()) {
str = str + (char)WIFISerial.read();
}
if (str != "") {
Serial.println(str);
}
}
PC客户端连接esp8266
连接介绍
硬件设备:
-
USB转TTL模块
-
ESP8266模块
-
杜邦线若干
-
电脑
USB转TTL模块☝
与ESP8266的连接示意图:
线路后,接电脑上,这时无线模块的蓝灯会闪两下,红灯会常亮。用手机搜索wifi网络,会看到一个ESP_******的无线信号源,说明模块正常启动了。
软件客户端初始化
1.检测设备及软件准备
连接完成后,在电脑的设备管理器中能看到该串口设备,这时候打开串口助手软件,这里使用的是sscom v5.13.1(点击下载)
2. 初始化软件参数
调整如下图所示进行波特率的调整
2.AT 指令执行的方式
---------------------
作者:meetslowly
来源:CSDN
原文:https://blog.csdn.net/meetslowly/article/details/107919652
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件