分类
Uncategorized

ESP8266 For Arduino基础篇 如何安装ESP8266的Arduino开发环境


本网站所有源码和文章均为作者提供和网友推荐收集整理而来,对提供的源码不拥有任何权利,其版权归原著者拥有。仅供学习和研究使用,下载后请24小时内删除。不得使用于非法商业用途,不得经营非法游戏或违反国家法律。一切关于该资源商业行为与www.meryun.com无关。

1. 硬件
    ESP8266模块,或者ESP8266开发板,建议初学者直接使用开发板;
    2. 软件
    Arduino IDE开发环境;

1. 硬件

    硬件环境主要分为两种:
    1. ESP8266开发板 + USB线
    

在这里插入图片描述

2. ESP8266模块 + USB转TTL线
    如果WiFi模块是ESP8266-01系列,首先请看一下以下引脚接口说明:

引脚编号引脚定义引脚描述
1TX1)UART_TX发送端;2)通用IO口:GPIO1;
2GNDGND
3CH_PD1)高电平工作;2)低电平模块供电关掉;
4GPIO2开机上电时必须为高电平,禁止硬件下拉,内部默认已拉高;
5GPIO16外部Reset信号,低电平复位,高电平工作(默认应该是高电平);
6GPIO0接地进入烧录固件模式,悬空为正常运行模式;
7VCC3.3V(切记不要供5V!!!)
8RX1)UART_RX接收端;2)通用IO口:GPIO3;

    其余引脚悬空即可。 从引脚介绍表可以看出,关键引脚GPIO0决定了模块当前处于什么工作模式。

烧录固件模式

    请按照下图连接ESP8266-01和USB转TTL线,进入烧录模式:

image

    如果WiFi模块是ESP8266-12系列,按照下图对应引脚接线:

image

温馨提示

  • 从Arduino IDE角度来看,ESP8266工作模式包括:
    1.烧录固件模式
    下载代码的时候,需要将GPIO0口接地;
    2.正常工作模式
    下载完代码,需要将GPIO0口悬空;
    有电路经验的读者可以安装拨码开关来切换工作模式。
  • 注意ESP8266安全工作电压是3.3V,不要直接连接5v;
  • 手动切换工作模式之后,最好重新启动一下ESP8266模块(通断电);
  • 有时ESP8266下载失败,有可能是供电问题,可以尝试独立供电,不直接连到TTL Vcc;
  • 烧录固件,我们需要了解的是,我们的固件是以下哪一种:AT固件、自己编写的SDK固件(基于ESP8266 SDK开发或者Lua)以及本书基于Arduino平台开发的ESP8266固件

2. 软件开发环境

    软件安装需要分成两个步骤:
    1.安装Arduino IDE
    Arduino IDE开发环境主要用于Arduino Uno/Mini/Mega2560等平台的项目开发。而ESP8266也可以基于该IDE来开发, 所以我们首先需要安装它;

2.1 安装Arduino IDE

    由于某些原因,Arduino官网网站(https://www.arduino.cc/en/Main/Software) 经常打不开或者下载速度极慢,导致下载IDE非常困难,读者可以通过以下两种方式下载安装:通过Arduino中文社区链接地址(https://www.arduino.cn/thread-5838-1-1.html) 去下载。

    如果你下载的是windows安装版(exe后缀),那么直接安装即可,其他则直接解压即可使用,注意路径不要存在中文目录。启动Arduino,会出现如下图所示界面:

image

2.2 安装ESP8266开发环境

    安装好Arduino IDE环境后,就得在它基础上配置Arduino Core For ESP8266。以window版本为例,读者可以安装以下顺序安装:

  1. 打开Arduino IDE->菜单项文件->首选项,然后会看到附加开发版管理器网址,填入http://arduino.esp8266.com/stable/package_esp8266com_index.json,重启IDE;
  2. 重启IDE之后->菜单项工具->开发板->点击开发板管理器->滚动找到ESP8266平台;
  3. 从下拉选项中选择你想下载的版本,点击安装,需要等待一段时间安装完毕。
  4. 安装成功的话,会可以看到下图所示。
image

    到此,整个软件开发环境搭建完毕。

温馨提示

  • 如果安装失败,一般都是因为网络问题,可以尝试多次重新安装;多次安装失败之后,可能需要翻墙;
  • Arduino Core For ESP8266库版本之间是有区别,有些版本可能没有某些方法,比如笔者刚开始的时候安装了2.0.0版本,但是编译代码不通过,提示client.peekBytes方法不存在,安装最新版本完美无bug。
  • Arduino IDE界面相对比较简单,笔者觉得代码提示功能、自动补全不够友好,推荐使用Visual Studio、Eclipse等更为专业的开发环境进行开发。这些第三方的开发环境都需要下载对应的Arduino插件进行配置,笔者这里就不具体讲解,有兴趣的可以自行查阅资料解决。

3. 烧录ESP8266

    实验是检验真理的唯一标准,配置好硬件和软件环境之后,笔者就给读者提供一个实例代码,并且告诉读者如何配置烧录以及提及一些烧录配置注意点。

3.1实例代码

    首先,请读者不用在意代码细节问题,请先拷贝如下代码到Arduino IDE,然后点击编译:


/**
   Authorization.ino

    Created on: 09.12.2015

*/

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("1502", "18560052108");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    WiFiClient client;

    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    // configure traged server and url


    http.begin(client, "http://xxx.com/1.php");

    /*
      // or
      http.begin(client, "http://jigsaw.w3.org/HTTP/Basic/");
      http.setAuthorization("guest", "guest");

      // or
      http.begin(client, "http://jigsaw.w3.org/HTTP/Basic/");
      http.setAuthorization("Z3Vlc3Q6Z3Vlc3Q=");
    */


    Serial.print("[HTTP] GET...\n");
    // start connection and send HTTP header
    int httpCode = http.GET();

    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTP] GET... code: %d\n", httpCode);

      // file found at server
      if (httpCode == HTTP_CODE_OK) {
        String payload = http.getString();
        Serial.println(payload);
      }
    } else {
      Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }

    http.end();
  }

  delay(10000);
}