查看: 637|回复: 9

第2章 如何安装ESP8266的Arduino开发环境

[复制链接]
  • TA的每日心情
    开心
    2018-11-14 09:30
  • 签到天数: 527 天

    [LV.9]以坛为家II

    发表于 2018-10-23 09:26 | 显示全部楼层 |阅读模式

    第2章 如何安装ESP8266的Arduino开发环境

        俗话说,工欲善其事必先利其器。基于Arduino平台开发ESP8266,我们至少要分别准备好硬件和软件开发环境:
        1. 硬件
        ESP8266模块,或者ESP8266开发板,笔者建议初学者直接使用开发板;
        2. 软件
        Arduino IDE开发环境;

    2.1 硬件

        硬件环境主要分为两种:
        1. ESP8266开发板 + USB线
        笔者建议入门初学者直接入手一块开发板,开发板的一个好处就是板子设计者已经给初学者排查了硬件连接错误,可以使初学者专注于软件开发,加快学习进度。目前比较火的一款ESP8266开发板就是NodeMcu,其核心芯片是ESP8266-12F,如下图所示(图片引用自安信可官网):  

    image

        不过,笔者本书使用的另外一款开发板——ESP202测试板,其核心芯片也是ESP8266-12F,如下图所示:
    <!--在这里插入内容-->
    image

        笔者选择它的理由很简单——既有NodeMcu的功能,又可以作为ESP8266-01系列模组的烧写器,这样就不用手动搭建ESP01的烧写环境。  

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

    引脚编号 引脚定义 引脚描述
    1 TX 1)UART_TX发送端;2)通用IO口:GPIO1;
    2 GND GND
    3 CH_PD 1)高电平工作;2)低电平模块供电关掉;
    4 GPIO2 开机上电时必须为高电平,禁止硬件下拉,内部默认已拉高;
    5 GPIO16 外部Reset信号,低电平复位,高电平工作(默认应该是高电平);
    6 GPIO0 接地进入烧录固件模式,悬空为正常运行模式;
    7 VCC 3.3V(切记不要供5V!!!)
    8 RX 1)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固件(笔者成为 ESP8266 Arduino固件)。

    2.2 软件开发环境

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

    2.2.1 安装Arduino IDE

        由于某些原因,Arduino官网网站(https://www.arduino.cc/en/Main/Software) 经常打不开或者下载速度极慢,导致下载IDE非常困难,读者可以通过以下两种方式下载安装:

    1. 笔者提供了百度网盘链接(https://pan.baidu.com/s/1QGAbBAsP4-VNQfT-bV46aA) 以供大家下载,长期有效,请注意英文大小写。
    2. 通过Arduino中文社区链接地址(https://www.arduino.cn/thread-5838-1-1.html) 去下载。

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

    image

    2.2.2 安装ESP8266开发环境

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

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

    image  

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

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

    2.3 烧录ESP8266

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

    2.3.1实例代码

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

    /**
     * Demo:
     *    测试ESP8266 demo
     *    打印ESP8266模块信息
     *    1.打印Arduino Core For ESP8266 版本,笔者是2.4.2版本
     *    2.打印Flash的唯一性芯片id(读者可以思考一下是否可以用来做点什么唯一性参考)
     *    3.打印Flash实际大小
     *    4.打印IDE配置的使用Flash大小
     *    5.打印IDE配置的Flash连接通信的频率
     *    6.打印Flash连接模式:QIO QOUT DIO DOUT,可以理解为Flash传输速率
     * @author 单片机菜鸟
     * home.php?mod=space&uid=53147 2018/10/22
     */
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(115200);
      //使能软件看门狗的触发间隔
      ESP.wdtEnable(5000);
    }
    
    void loop() {
      //喂狗
      ESP.wdtFeed();
      FlashMode_t ideMode = ESP.getFlashChipMode();
      String coreVersion = ESP.getCoreVersion();
      Serial.print(F("Arduino Core For ESP8266 Version: "));
      Serial.println(coreVersion);
      Serial.printf("Flash real id(唯一标识符):   %08X\n", ESP.getFlashChipId());
      Serial.printf("Flash 实际大小: %u KBytes\n", ESP.getFlashChipRealSize()/1024);
      Serial.printf("IDE配置Flash大小: %u KBytes,往往小于实际大小\n", ESP.getFlashChipSize()/1024);
      Serial.printf("IDE配置Flash频率 : %u MHz\n", ESP.getFlashChipSpeed()/1000000);
      Serial.printf("Flash ide mode:  %s\n\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));
    
      delay(1000);
    }
    代码讲解

        1.setup函数里面,主要设置了串口通信波特率115200(串口调试器的波特率需要设置成一致),同时设置了软件看门狗WatchDog的触发间隔5s(看门狗的作用就是如果不喂狗就会在触发时间到达的时候自动复位,很多);
        2.在loop函数中,会不断循环执行,所以需要喂狗,然后就打印ESP8266 Arduino Core的当前版本、芯片id、flash实际大小、Arduino IDE配置Flash大小、通信频率以及flash的连接模式(这些信息都可以称为ESP8266模块的物理信息)。

    温馨提示

        如果以上代码编译不通过,原因一般是以下两个之一:
        1.烧录配置没改成ESP8266(请看下小节讲解),当前可能是Arduino Uno、Mega等平台;
        2.Arduino Core For ESP8266软件环境没有配置成功,请重新检查一遍;
        3.上面例子的看门狗属于软件看门狗,作用是:如果在规定时间内不进行喂狗操作,那么系统就会在看门狗的作用下复位。默认情况下,软件看门狗是开启的,很多读者的代码运行之所以不稳定或者抛出各种异常,其中一大原因就是没有喂狗。关于这一个,笔者后面的章节会有具体讲解。

    2.3.2 烧录配置

        笔者的开发板是ESP202测试板,核心芯片是ESP8266-12F,Flash大小是4MB,Flash芯片是W25Q32,适用下图配置:
    image

    烧录代码

        ESP8266进入烧录固件模式,点击上传,等待上传结果。
        如果显示下图,表示上传成功。
    image
        如果显示下图,表示上传失败。
    image

    温馨提示

        上传失败原因可能有以下几点,请逐一排除:
        1.烧录过程还没有显示任何进度就立刻提示失败,原因如下:

    • ESP8266的COM端口没选对,请确认ESP8266对应端口;
    • ESP8266 Upload Speed选择不对,默认应该是115200;
    • ESP8266还没有进入到烧录固件模式,重新进入烧录模式;
    • Flash Mode没选对,比如有些NodeMcu需要选择为DIO/DOUT,Flash Mode有如下选型:
      image
      那么它们之间的区别在哪里呢?
      1)QIO , for flash that support quad r/w operation(e.g. W25Q flash芯片)
      2)QOUT, for flash that support quad read operation(e.g. W25Q flash芯片)
      3)DIO, for flash that support dual r/w operation(e.g. W25Q &W25X flash芯片)
      4)DOUT, for flash that support dual read operation(e.g. W25Q &W25X flash芯片)
      它们之间的区别可以简单理解为传输速率的区别,quad是四倍传输速率,dual是两倍传输速率。
      经测试:
      Winbond 25Q32B 可工作于 DIO / DOUT / QIO /QOUT (Noduino Falcon);
      BergMicro 25Q32A 只可工作于 DIO / DOUT (NodeMCU V1.0 可能是 ESP-12E 接线的问题);
      MXIC 25L80 (小 K mini)只可工作于 DOUT;

    • Flash Size大于Flash实际大小,最好改成往下兼容Flash实际大小,也就是不能大于Flash实际大小,Flash Size有多种选型,请看下图:
      image
      切记:配置时,请查阅ESP8266 选型表(笔者在第1章有讲解过)。
      2.烧录过程显示一定进度就提示失败,原因如下:
    • ESP8266供电不稳定,请尝试独立供电;
    • ESP8266模块接线接触不良;

    2.3.3 测试结果

        烧录完上面测试固件之后,笔者的测试结果如下(正常情况下读者的结果也会跟笔者一样大同小异):
    image

    2.4 本章总结

        在这一章,笔者给读者讲解了硬件环境的配置以及Arduinio IDE环境的配置,并且提供了一个获取ESP8266物理信息的测试例子,同时也讲解了烧录固件的配置工作以及常见问题。可以这么说,这章属于配置环境基础,属于我们成功的第一步。

    博哥ESP8266 qq交流群:869920142

    打赏作者鼓励一下!

    1人打赏

  • TA的每日心情
    奋斗
    2018-11-13 04:34
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2018-11-8 18:36 | 显示全部楼层
    楼主你好,请问编译出现以下报警是什么原因:
    Arduino:1.8.5 (Windows XP), 开发板:"Generic ESP8266 Module, 80 MHz, Flash, ck, 26 MHz, 40MHz, QIO, 1M (no SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

    In file included from d:\documents and settings\administrator\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\algorithm:60:0,

                     from D:\Documents and Settings\Administrator\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:255,

                     from sketch\Blink.ino.cpp:1:

    d:\documents and settings\administrator\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\utility:68:28: fatal error: bits/c++config.h: No such file or directory

    #include <bits/c++config.h>

                                ^

    compilation terminated.

    exit status 1
    为开发板 Generic ESP8266 Module 编译时出错。

    在文件 -> 首选项开启
    “编译过程中显示详细输出”选项
    这份报告会包含更多信息。




















































  • TA的每日心情
    开心
    2018-11-14 09:30
  • 签到天数: 527 天

    [LV.9]以坛为家II

     楼主| 发表于 2018-11-9 08:08 | 显示全部楼层
    lwq1947 发表于 2018-11-8 18:36
    楼主你好,请问编译出现以下报警是什么原因:
    Arduino:1.8.5 (Windows XP), 开发板:"Generic ESP8266 Module ...

    你用的是哪里的代码
    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2018-11-13 04:34
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2018-11-9 11:30 | 显示全部楼层
    您的2.3.1实例代码
  • TA的每日心情
    奋斗
    2018-11-13 04:34
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2018-11-9 11:34 | 显示全部楼层
    用8266示例bilnk也是如此.
  • TA的每日心情
    开心
    2018-11-14 09:30
  • 签到天数: 527 天

    [LV.9]以坛为家II

     楼主| 发表于 2018-11-9 13:07 | 显示全部楼层
    lwq1947 发表于 2018-11-9 11:34
    用8266示例bilnk也是如此.

    那就可能是你的环境配置不对
    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2018-11-13 04:34
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2018-11-10 06:27 | 显示全部楼层
    我用的支持库是bilinker_librery_master.zip,您用的是什么?
  • TA的每日心情
    奋斗
    2018-11-13 10:39
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2018-11-11 17:21 | 显示全部楼层
    小白,正在学习中。上周刚买回来的(ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340),arduino IDE已补装了Arduino Core For ESP8266,台式机(WIN7),下载了“实例代码”,测试结果:flash512时,QIO/DIO/DOUT,失败;改成flash1M时,QIO/DIO/DOUT,失败。状态都一样(编译OK、烧制OK,然后,模块右上角蓝灯亮三下,就出现烧制失败了)。
    请楼主指教!
  • TA的每日心情
    开心
    2018-11-14 09:30
  • 签到天数: 527 天

    [LV.9]以坛为家II

     楼主| 发表于 2018-11-11 20:40 | 显示全部楼层
    mzbbzy 发表于 2018-11-11 17:21
    小白,正在学习中。上周刚买回来的(ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340),arduino ID ...

    NodeMcu烧写代码好像需要按一个按键进入下载模式
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2018-11-12 10:53 | 显示全部楼层
    很棒的基础帖啊,mark
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    关于switch的问题
    关于switch的问题
    为什么switch 只能实现第一个case 1:的显示,case 2:的显示不出来,我用蓝牙发一个
    原创 drawbot平面关节机械臂 教程直播贴
    原创 drawbot平面关节机械
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    esp8266完美对接机智云与安卓APP开发和远程控制
    esp8266完美对接机智云与
    在极客工坊和咱们社区混了很久了,也没有发过帖子,第一次哦,不好意思也没有太多的时
    Arduino显示所选端口号找不到主板
    Arduino显示所选端口号找
    请问一下我这个问题是板子坏了,还是什么其他问题
    visual studio 2017 下载程序导致串口数据出错
    visual studio 2017 下载
    想做一个蓝牙通信的功能,程序如下,发现用官方的IDE没有任何问题,但是用visual stud
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表