前言

ESP8266 Wi-Fi模块作为可以进行WiFi传输的模块集成了业内领先的Tensilica L106超低功耗32位微型MCU,带有16位精简模式,主频可达160MHz。同时支持RTOS(Real Time Operating System)集成Wi-Fi MAC/BB/RF/PA/LNA和 IEEE802.11 b/g/n 协议,支持完整的TCP/IP协议栈,也支持STA(Station),AP(Access Point),ATA+AP三种模式。


一、ESP8266可以干什么?

  • ESP8266可以作为辅助的模块进行数据的传输:可以在Arduino IDE的主程序内创建函数进行编写,将Arduino开发板连接的检测模块的数据通过ESP8266传输到服务器等
  • ESP8266也可以直接作为开发板通过Arduino IDE进行编译

二、ESP8266作为传输数据的开发

1.电路连接图

  • ESP8266具有两种烧录的模式,使用者需要根据自己的需要进行不同电路的连接:

(一)通过AT指令进行烧录,在此烧录模式下需要将ESP8266与USB转TTL连接通过电脑的烧录软件进行烧录,具体的连接图如图1所示:

(二)通过Arduino进行代码烧录,在此模式下需要将ESP8266与Arduino进行连接,通过Arduino IDE编写代码对Arduino板子进行烧录,具体连接如图2所示:

2.ESP8266直接烧录

  • 按照图1连接电路,将USB口插入电脑端,在我的电脑管理内查询端口号,第一次使用可能会出现无法显示的问题可以安装CH340驱动(一般window10系统会自动安装驱动/CH340驱动模块以及后面说的工具我会在后面给大家链接)识别出端口号后要记住,在烧录的时候会使用。
  • 打开SSCOM串口调试工具或者其他串口调试工具(本文以SSCOM作为例子),根据你在管理看到的串口号选择自己的串口(一定要在USB插上电脑后在打开,否则可能会找不到自己的串口号),波特率选择115200(ESP8266默认出厂频率为115200,想要更改可以通过AT固件重刷,不过我没有用到过,有需要的可以自行百度),打开串口。

  • 进行AT指令的发送,AT指令集如下所示(这些指令集是几年前当的,现在那篇博客没有了,如果博客大大看到的话,感谢博客大大提供这么全的资料!):

1. AT+CWMODE 选择 wifi 应用模式

STA模式(1):Station,类似无线网终端,接收无线的接入。

AP模式(2):ACCESS POINT 提供无线网服务,允许其他无线设备接入。

AP+STA模式(3)

2. AT+CWJAP 加入 AP

3. AT+CWLAP 列出可用AP

4. AT+CWQAP 退出与AP连接

5. AT+CWSAP 设置AP模式下的参数

6. AT+CWLIF 查看已经连接的IP

TCP/IP指令集

1. AT+CIPSTATUS 查看连接状态

2. AT+CIPSTART 建立TCP连接或者注册 UDP端口号

3. AT+CIPEND 发送数据

4. AT+CIPCLOSE 关闭TCP UDP连接

5. AT+CIFSR 获取本地IP地址

6. AT+CIPMUX 启用多连接

7. AT+CIPSERVER 配置服务器

  • 如果你不太清楚自己需要什么的话一般都使用STA模式,连接自己的热点,访问服务器,可以按照下图去发送:

  • 如果你选择的模式是STA,可以打开网络调试助手选择TCP Sever,输入自己本地的IP地址测试是否通讯成功,如果成功会在数据接收部分显示通过ESP8266传输的数据。

3.通过Arduino对ESP8266进行烧录

  • 方法一:通过Arduino对ESP8266烧录需要先打开Arduino IDE编译器,新建一个工程,将下面代码copy过去,选择你要烧录的Arduino的板子和串口进行烧录,通过串口监视器(选择115200波特率的)发送你要配置的AT指令进行手动烧录
/***************************************************
 * 
 * 名称:ESP8266 01S AT指令手动联网
 * 接线:
 * Arduino nano       ESP8266 01S
 * D2(RX)   ———   TX
 * D3(TX)   ———   RX
 * VCC(3.3) ———   VCC(&EN)
 * GND      ———   GND
 * 
 ****************************************************/
 
 
#include<SoftwareSerial.h>
SoftwareSerial mySerial(2,3);//RX ,TX   wifiSerial
 
 
void setup() {
  Serial.begin(115200);
  while (!Serial)
  {
    ;
    }
   Serial.println("ok");
   
   mySerial.begin(115200);
   mySerial.println("ready");

}
 
void loop() {
  if(mySerial.available())
  Serial.write(mySerial.read());
  
  if(Serial.available())
  mySerial.write(Serial.read());
 
}
  •  方法二:自己写一个函数,写上自己需要发送的指令,在初始化过程中调用此函数,在主函数中使用Serial.println(****);(****为你要传输的数据)将数据发送出去,核心代码如下所示:
void setup() {
  Serial1.begin(115200);
  wifibegin(); 
}

void wifibegin()
{
  delay(8000); 
  Serial1.println("AT");delay(2000);
  Serial1.println("AT+RST");delay(2000);
  Serial1.println("AT+CWMODE=1");delay(2000);
  Serial1.println("AT+CIPMODE=1"); delay(4000);
  Serial1.println("AT+CIPSTART=\"TCP\",\"IP地址\",端口号"); delay(4000);
  Serial1.println("AT+CIPSEND"); delay(4000); 
}


三、ESP8266作为开发板的开发

  • 再选择工具管理库,就会看到正在加载库,搜索ESP8266,下载ESP8266的库

  • 以下代码可以直接烧录到ESP8266的板子上,可用于测试,ESP8266还有更多自身的开发,可以去百度找相关资料
#include <ESP8266WiFi.h>
#define led 2 //发光二极管连接在8266的GPIO2上
const char *ssid     = "kiki";//这里写入网络的ssid
const char *password = "1234567890k";//wifi密码
const char *host = "192.168.174.1";//修改为Server服务端的IP,即你电脑的IP,确保在同一网络之下。
WiFiClient client;//声明一个客户端对象,用于与服务器进行连接
const int tcpPort = 8266;//修改为你建立的Server服务端的端口号,此端口号是创建服务器时指定的。
static String comdata = "";
static String val = "";
void setup()
{
    Serial.begin(115200);    
    pinMode(led,OUTPUT);
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");//会通过usb转tll模块发送到电脑,通过ide集成的串口监视器可以获取数据。
    Serial.println(ssid);
    WiFi.begin(ssid, password);//启动
     //在这里检测是否成功连接到目标网络,未连接则阻塞。
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
    }
 //几句提示
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}
void loop()
{
/******************串口接受数据************************/
  while (Serial.available() > 0) // 串口收到字符数大于零。
  {   
  comdata += char(Serial.read());
  }
 /******************串口打印数据************************/ 
  if(comdata!="")//如果接受到数据
  {
    client.print(comdata);//向服务器发送数据 
   }
   comdata="";//清空数据
  if (client.connected()) //尝试访问目标地址,如果没连接上LED灯灭
   Serial.println("connect client fail");
    //digitalWrite(led, LOW);
  else
  Serial.println("connect client ok");
    //digitalWrite(led, HIGH);

  while (!client.connected())//若未连接到服务端,则客户端进行连接。
  {
    if (!client.connect(host, tcpPort))//实际上这一步就在连接服务端,如果连接上,该函数返回true
    {
       Serial.println("连接中....");
       delay(500);
    }    
  }
  while (client.available())//available()表示是否可以获取到数据
  {
//    char val = client.read();//read()表示从网络中读取数据。
     while (client.available() > 0) // 串口收到字符数大于零。
    {   
    val += char(client.read());
    }
    client.print("text:"+val); 
    val="";//清空数据
   }
  delay(1);
}
  • 编译的时候一定要选择对开发板,根据你的ESP8266型号选择

四、可能会存在的问题

  • 串口号找不到可能是因为没有驱动,或者先打开了串口调试助手,或者是因为USB转TTL出现了问题,可以从这些进行尝试判断
  • AT发送失败,可能是电路连接问题(我的VCC一直连接的是3.3V,有看到资料说不能连接5V可以注意一下),可能是ESP8266模块坏掉了(可以多买几个备用着),还有可能是因为之前烧录过,这个时候需要对ESP8266模块进行固件初始化,具体步骤如下:

1.连接方式参考图1,这里比图一多了一个GPIO0要接GND其他一样

2.打开一键烧写的软件,选择配置选项卡,点击小齿轮图标 - 加载固件地址

3.只选择第二个选项(固件地址),最后的地址为默认的0x00000,其他不更改

4.返回操作选项卡,选择正确COM端口,点击一键下载

5.等待下载完成,Finish


总结

这个模块的研究不是一帆风顺,会有很多小问题,希望大家能通过此文有所收获,能帮助大家解决一些小问题,最后给大家放上工具的连接地址,可以免费下载

地址:https://download.csdn.net/download/sunshineQY/16661852

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐