Arduino--ESP8266 无线模块(四)

一、Esp8266简介

官网:https://www.espressif.com/zh-hans
  2015年物联网处于爆发的一年,乐鑫的ESP8266WIFI 芯片成为强烈的催化剂。成功的将2014年前的40以上的WIFI成本压缩到现在的10元左右。内置WIFI前端和高性能的32位MCU,基本引爆物联网市场,几乎牵扯到电子的行业,都可以用上,比如WIFI开关 灯具 WIFI定位 电饭锅 空气净化器 等消费类小家电与大家电,都面临这一场技术革新,与新的用户体验!比如你仅仅增加10元的成本就可以把自己的产品被手机控制了。
文档资料:https://www.espressif.com/zh-hans/support/download/documents

ESP8266

  1. Esp8266特点:
    1)低功耗、高集成度的 Wi-Fi 芯片。
    2)最小系统仅需 7 个元器件
    3)超宽工作温度范围:-40°C 至 +125°C
    4)ESP8285 : ESP8266 内封 8 Mbit Flash。
    5)ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。
    最小系统搭建(强调:烧录时候,一定要让GPIO0处于低电平,即接GND):


    最小系统

TX:串口写
GND:接地
CH_PD:高电平为可用,低电平为关机
GPIO2:可悬空
RST:重置,可悬空
GPIO0:上拉为工作模式,下拉为下载模式,可悬空
VCC:3.3V(切不可接5V,烧片)
RX:串口读
示例代码:
https://github.com/esp8266/Arduino

引脚说明

  1. 工作模式
    1)AP+STA模式
    ESP8266模块可以作为一个工作站,所以我们可以将它连接到Wi-Fi网络。它也可以作为软接入点(soft-AP)运行,建立自己的Wi-Fi网络。因此,我们可以将其他站连接到这样的ESP模块。ESP8266也可以在工作站和软接入点模式下工作。


    AP+STA模式

    2)STA 模式
    站级有几个功能,以方便管理Wi-Fi连接。如果连接丢失,ESP8266将自动重新连接到上一次使用的接入点,一旦它再次可用。模块重启也会发生同样的情况。


    STA 模式
  1. 使用TTL调试
    使用USB接Esp8266,CH_PD需要串联一个10kΩ的电阻后,再连接3.3v的电源。


    串口调试
  2. 常用AT指令:
    1)重启模块
    指令为AT+RST


    重启模块
  1. 查看版本信息
    指令为AT+GMR


    查看版本信息

3)恢复出厂设置
指令为AT+RESTORE


恢复出厂设置

4)设置应用模式
指令为AT+CWMODE=3
注释:1为Station,2为AP,3为AP兼Station 模式


设置应用模式

5)查询工作模式
指令为AT+CWMODE?


查询工作模式

6)查看附近无线网络
指令为AT+CWLAP


查看附近无线网络

7)加入AP
指令为AT+CWJAP="SSID","PWD"
ChinaNet-304


加入路由器

8)退出接AP
指令为:AT+CWQAP

9)设置AP模式下的参数
指令为:AT+CWSAP
设置命令
AT+CWSAP=<ssid>,<pwd>,<chl>, <ecn>
参数定义:

参数 定义 取值 对取值的说明
<ecn> 加密方式 0 OPEN
<ecn> 加密方式 1 WEP
<ecn> 加密方式 2 WPA_PSK
<ecn> 加密方式 3 WPA2_PSK
<ecn> 加密方式 4 WPA_WPA2_PSK
<ssid> 接入点名称 字符串参数
<pwd> 密码 字符串型,最长64字节,ASCII编码
<chl> 通道号

10)获取本地IP地址
指令为AT+CIFSR


获取本地IP地址

获取本地IP地址

11)设置透传模式
指令为AT+CIPMODE=1
1 为STA模式


开启透传模式

STA模式:(透传模式)
ESP8266模块要和电脑(服务端)在同一个局域网中。对路由器不需要任何其他的配置,只需要知道WIFI名称和密码;也不需要有外网;

12)连接到服务器
指令为AT+CIPSTART="TCP","服务器IP地址",端口
先在电脑打开服务端:


建立服务端
连接服务器

12)发送数据
发送数据:AT+CIPSEND
指令为:


发送数据

发送数据

12)退出透传模式
退出透传模式的办法是发送+++(后面不要加回车)即可退出。

14)AT+CIOBAUD=9600 修改波特率
T+CWMODE? //查询工作模式 1.Station (客户端模式)2.AP (接入点模式)3.Station+AP (两种模式共存)
更多请查看文档:AT-Espressif AT 指令集_AIThinkerMod_v021

二、电路原理图

电路原理图

ESP8266
arduino ESP8266
0 TX
1 RX
GND GND
VCC VCC 3.3V
2 CH_PD

注意:电压一定要为3.3V
连接好后,ESP8266板上的LED会亮。

三、安装库文件

  1. 添加库文件
    https://github.com/esp8266/Arduino

1)选择首选项:

选择首选项

在其他Board Manager URL字段中输入https://arduino.esp8266.com/stable/package_esp8266com_index.json。 您可以添加多个URL,用逗号分隔。
附加开发板管理

2)开发板管理器
开发板管理器

开发板管理器

安装库文件

3)开发板选板
http://www.cnblogs.com/kekeoutlook/p/8286117.html
安装完成

安装完成

文档地址:
https://arduino-esp8266.readthedocs.io/en/latest/installing.html

第3方库文件下载地址:
https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

库文件

库文件

四、Arduino与Esp8266硬串口连接

就是将Arduino的串口直接到Esp8266串口,注意RX连RX,TX连TX。

  1. 连接
ESP8266 Arduino Uno
TX 1(TX1)
GND GND
CH_PD 串联10KΩ电阻连接3.3v
GPIO2 -
RST -
GPIO0 -
VCC 3.3V
RX 0 (RX0)

CH_PD需要串联一个10kΩ的电阻后,再连接3.3v的电源

  1. 代码
#include <Arduino.h>
const int tx = 1;
const int rx = 0;
//硬串口连接
void setup() {
  //Serial.begin(9600); 注意!!千万别加这行代码
  pinMode(rx,INPUT_PULLUP);
  pinMode(tx,INPUT_PULLUP);

}

void loop() {
}

  1. 测试
    可以直接发AT指令给Esp8266:
    波特率一定要先115200。
    每个版本的ESP8266波特率不同,一般是115200,你可以多测试几次。


    串口调试

五、Arduino与Esp8266软串口连接

  1. Esp8266软串口连接
    把ESP8266 的波特率改为9600。之前我们连接的Arduino上的0和1是硬串口。
    注意,使用软串口连接导线时,模块的rx连接Arduino的tx,模块的tx连接Arduino的rx。
    设置arduino上的8号口为RX,9号口为TX。就需要把ESP8266 的TX连接到Arduino的9号口上,模块的RX连接Arduino的8号口上。
ESP8266 Arduino Uno
VCC 3.3V(不能接5V,可能会烧坏)
GND GND
CH_PD (10k电阻)3.3V (实际上可以不加电阻)
RX 9(接软串口发送端,自定义)
TX 8(接软串口接收端,自定义)
  1. 代码
#include <Arduino.h>
#include <SoftwareSerial.h>

//软串口通讯
SoftwareSerial espSerial(9, 8); //定义虚拟串口名为mySerial RX为9, TX为8

void setup() {
    espSerial.begin(115200);    //初始化虚拟串口  esp8266 01波特率
    Serial.begin(115200);           //初始化Arduino默认串口
}
char a;
void loop() {

    //虚拟串口的用法和默认串口的用法基本一样
    if (Serial.available()) {
        espSerial.write(Serial.read());
    }
    if (espSerial.available()) {
        Serial.write(espSerial.read());
    }
}

波特率最好一致,否则会出现乱码。

  1. 测试


    获取
SSID

六、 AP模式

Arduino上电,它通过软串口(Arduino的9号和8号脚)发送命令,
配置espson8266为 AP模式
wifi名称:test
密码:123456
通过硬串口向电脑打印调试信息,以及espson8266收到指令后发出的信息。

  1. 代码
#include <Arduino.h>
#include <SoftwareSerial.h>     //串口模块

#define DEBUG true

SoftwareSerial esp8266(9, 8); //使Rx-Arduino线为插脚9,使Tx-Arduino线为插脚8。

String sendCommand(String command, const int timeout, boolean debug) {
    String response = "";
    esp8266.print(command); // 将读取字符发送到ESP8266
    long int time = millis();
    while ((time + timeout) > millis()) {
        while (esp8266.available()) {
            // ESP有数据,因此将其输出显示到串行窗口
            char c = esp8266.read(); //读下一个字符。
            response += c;
        }
    }
    if (debug) {
        Serial.print(response);
    }
    return response;
}


void setup() {
    Serial.begin(115200);
    esp8266.begin(115200); //esp波特率

    sendCommand("AT+CWMODE=2\r\n", 2000, DEBUG); //重置模式为AP
    // delay(20000);
    String s = "AT+CWSAP=\"test\",\"123456\",11,0\r\n";
    sendCommand(s, 2000, DEBUG);                //设置模式
    Serial.println("1");
    // delay(30000);
    sendCommand("AT+RST\r\n", 2000, DEBUG); //设置模式
    delay(3000);
    sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG); //为多个连接配置
//   delay(20000);
    sendCommand("AT+CIPSERVER=1,6000\r\n", 1000, DEBUG); //服务端口为 6000
    Serial.println("Server Ready");
}

void loop() {
    //读取esp数据
    if (esp8266.available()) {
        Serial.write(esp8266.read());
    }
    //读取arduino数据
    if (Serial.available()) {
        esp8266.write(Serial.read());
    }
}

  1. 测试:
串口连接
电脑连接AP
IP地址
网络连接
数据收发

七、工作站模式

四、代码

烧入代码蓝色LED会亮起。

#include <Arduino.h>
#include <SoftwareSerial.h>     //串口模块
#include <SerialESP8266wifi.h>  //8266模块

#define sw_serial_rx_pin 4 //将此引脚连接到esp8266上的TX
#define sw_serial_tx_pin 6 //将此引脚连接到esp8266上的RX
#define esp8266_reset_pin 5 //将此引脚连接到esp8266上的CH_PD,而不是复位。 (让重置不连接)

//设置串口引脚
SoftwareSerial swSerial(sw_serial_rx_pin, sw_serial_tx_pin);

//最后一个参数设置ESP8266模块的本地echo选项。
//添加串口启用本地回显和wifi调试
SerialESP8266wifi wifi(swSerial, swSerial, esp8266_reset_pin, Serial);

String inputString;
boolean stringComplete = false;
unsigned long nextPing = 0;

void setup() {
    inputString.reserve(20);
    swSerial.begin(9600);
    Serial.begin(9600);
    while (!Serial)
        ;
    Serial.println("Starting wifi");

    wifi.setTransportToTCP(); // 默认TCP协议
    // wifi.setTransportToUDP();//连接服务器时会使用UDP,默认为TCP

    wifi.endSendWithNewline(true); // 将使用换行符和回车符结束所有传输,即println ..默认为true
    wifi.begin();

    //打开本地ap和服务器(TCP),本地服务,如果别的Wifi连接本模块
//  wifi.startLocalAPAndServer("MY_CONFIG_AP", "123456", "5", "2121");
    // 指定用户名密码连接WIFI,连接其它的Wifi
    wifi.connectToAP("ChinaNet-304", "houjianjunxunteng1");
    wifi.connectToServer("192.168.1.9", "2121");
    wifi.send(SERVER, "ESP8266 test app started");
}

void loop() {

    //确保esp8266已启动..
    if (!wifi.isStarted())
        wifi.begin();

    //将您在arduino控制台中输入的内容发送到服务器
    static char buf[20];
    if (stringComplete) {
        inputString.toCharArray(buf, sizeof buf);
        wifi.send(SERVER, buf);
        inputString = "";
        stringComplete = false;
    }

    //发送Ping命令
    if (millis() > nextPing) {
        wifi.send(SERVER, "Ping ping..");
        nextPing = millis() + 10000;
    }

    //监听收到的消息并回显,将等待收到消息,或者最大6000毫秒..
    WifiMessage in = wifi.listenForIncomingMessage(6000);
    if (in.hasData) {
        if (in.channel == SERVER)
            Serial.println("Message from the server:");
        else
            Serial.println("Message a local client:");
        Serial.println(in.message);
        //回显;
        wifi.send(in.channel, "Echo:", false);
        wifi.send(in.channel, in.message);
        nextPing = millis() + 10000;
    }

    //如果要与服务器断开连接,请使用:
    // wifi.disconnectFromServer();

}

//从控制台侦听串行输入
void serialEvent() {
//  读取串口数据并显示
    while (Serial.available()) {
        char inChar = (char) Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
            stringComplete = true;
        }
    }
}

五、测试

打开软件:


串口调试

六、ESP8266刷固件

官网:https://www.espressif.com/zh-hans/products/hardware/esp8266ex/resources

安信科技:
http://micropython.org/download/#esp8266

  1. 工具:


    工具
  2. 固件包:
    RTOS SDK是指实时的操作系统的开发包,是带有系统的。 NONOS SDK是不带系统的开发包,non-os:非系统,不是系统的。


    固件包
  3. 连接:


    硬串口

烧写模式连线:
1- GND --- TTL板GND
3- GPIO0 --- TTL板GND (重要)
4- RXD --- TTL板TXD
5- VCC --- TTL板VCC3.3V(必须为3.3V,接5V必烧)
7- CH_PD --- TTL板VCC3.3V(必须为3.3V,接5V必烧)
8- TXD --- TTL板RXD
注:这里的7脚最好使用一个104欧姆的上拉电阻
GPIO0 默认是工作模式(不接线)。如果接了低电平就是下载模式(给模块刷固件!!)所以接低电平。CH_PD接高电平,其余除了TX,RX外可以不接线。

  1. 刷写:
    打开FlashDownloadTools:


    工具

    打开下载

选择端口,修改BAUD为115200。单击 START 按钮,如果没问题 "DETECTED INFO" 窗口会出现你模块的信息,按照信息将 "SPI MODE"、"FLASH SIZE" 选择好,"SPI SPEED" 默认即可。

blank.bin文件要烧到两个地址里来初始化系统和用户数据。一切就绪后再次单击START按钮既可。


固件烧写

下载完成,打开串口调试,要给Rest一个低电平信号,进行复位,看到ready,说明烧写成功。

QIO -> Quad IO 四倍的数据输入输出
DIO -> Dual IO 两倍的数据输入输出
需要设置晶振和实际板载晶振要求一致,设置SPI Flash 读写速度,高支持80 MHz,SPI模式和选用的SPI flash要求一致,Dual SPI选DIO 或者DOUT,Quad Flash 选QIO或者QOUT。

  1. 刷成功能包:
    1)esp8266_nonos_sdk_v1.5.4_16_05_20
    2)Ai-Thinker_ESP8266_DOUT_8Mbit_v1.5.4.1-a_20171130.bin


    Ai-Thinker

    Ai-Thinker

七、常见问题:

  1. 连接失败
    断电,重连,多试几次即可。
  2. Fatal exception 0(IllegalInstructionCause):
    原因为电压不足,重复位或断电重连。
    要保持电压在4.8V以上。

https://blog.csdn.net/qq_35174914/article/details/52757803

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容