ESP8266的PC客户端和Arduino两种方式的连接及使用笔记

Arduino UNO上连接esp8266

连接电路

正常供电后蓝灯闪两下,红灯常亮,模块正常启动。
注意使用的是3.3V的电源
ESP8266与arduino 的电路连接

编写连接程序

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

连接介绍

硬件设备:

  1. USB转TTL模块

  2. ESP8266模块

  3. 杜邦线若干

  4. 电脑
    USB转TTL
    USB转TTL模块☝

与ESP8266的连接示意图:
TTL与ESP8266连接
线路后,接电脑上,这时无线模块的蓝灯会闪两下,红灯会常亮。用手机搜索wifi网络,会看到一个ESP_******的无线信号源,说明模块正常启动了。

软件客户端初始化

1.检测设备及软件准备

连接完成后,在电脑的设备管理器中能看到该串口设备,这时候打开串口助手软件,这里使用的是sscom v5.13.1(点击下载)
查看TTL

2. 初始化软件参数

调整如下图所示进行波特率的调整
太正调整波特率

2.AT 指令执行的方式

发送AT指令


---------------------
作者:meetslowly
来源:CSDN
原文:https://blog.csdn.net/meetslowly/article/details/107919652
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值