ESP8266的库已经下好了 , 上传过程中出现如下问题warning: espcomm_sync failederror: espcomm_open failederror: espcomm_upload_mem failederror: espcomm_upload_mem failed尝试了网上的各种方法,屡屡失败,屡败屡战。终于在找到了解决方法,来,看这篇基于Arduino的ESP8266模块的玩法:

关于该项目

ESP8266无线收发模块,可串口远距离传输,可用于扩展Arduino的无线连接能力,本文主要是展示如何使得Arduino 的Nano-atmega32p芯片与Esp8266进行烧写、通讯、调试的过程,以及中间过程所遇到的各种问题。
ESP8266 WIFI模块除了具备以下能力外,一个很重要的原因是稳定且价格低廉,价格低廉,价格低廉,重要的事情说三遍!

贼坑--关于Arduino Nano对ESP8266的烧写

  • ESP8266 拥有强大的片上处理和存储能力,内置32位处理器,内置Lwip协议栈。支持AP+STA模式共存,可通过AT指令配置各种参数

  • Wi-Fi Direct (P2P)、soft-AP, 支持 WPA WPA2/WPA2–PSK加密, 无线标准:IEEE802.11b/g/n, 频率: 2.4 GHz

元件准备

图片参考项目数量购买渠道
贼坑--关于Arduino Nano对ESP8266的烧写ESP8266 WiFi模块1国内某宝网站
贼坑--关于Arduino Nano对ESP8266的烧写Arduino nano atmega328p1国内某宝网站
贼坑--关于Arduino Nano对ESP8266的烧写Arduino NANO UNO的扩展板1国内某宝网站
贼坑--关于Arduino Nano对ESP8266的烧写杜邦线(母)若干国内某宝网站

项目步骤


配置ESP8266在Arduino的运行环境

使用1.6.4及以上版本的Arduino来安装安装ESP8266开发板软件包, 打开Arduino IDE,打开’文件->首选项’在 附加开发板管理器网址一栏填入:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
添加完以后点击‘好’。

做完这步以后重启Arduino IDE,然后依次点击’工具->开发板->开发板管理器’打开后在搜索框输入esp,然后能找到类似’esp8266 by ESP8266 Community’,选择较近的一个稳定版本(我用的是2.4.2版本),点击并安装。
注意

  • 搜索到的结果,在安装时,拜我们伟大的墙所赐,也有可能会下载失败,可以参考这里的方法去手动安装,如果手动从github下载仍然受阻,你可以尝试从这里下载这个文件
    安装完后重启Arduino IDE,然后依次点击 工具->开发板->Generic ESP8266 Module,接着按照下面的信息在菜单栏找到对应项进行配置
    Flash Mode: QIO
    Flash Frequency: 40 MHz
    CPU Frequency: 80 MHz
    Flash Size: 1M (512K SPIFFS)
    Upload Speed: 115200
    Port: 对应的USB 端口 (当你一将Arduino连接电脑时,在设备管理器中会冒出端口号)
    Programmer: AVRISP mkll
    其他的设置就按照默认的选择不变即可

贼坑--关于Arduino Nano对ESP8266的烧写

实物连线

ESP8266各引脚的标注内容如下:


贼坑--关于Arduino Nano对ESP8266的烧写
ESP8266与Arduino Nano 扩展板的引脚对应关系如下:
ESP8266:___ Arduino:
GND ————————– GND
GP2 ————————– Not connected (open)
GP0 ————————– GND
RXD ————————– RX
TXD ————————– TX
CHPD ———————— 3.3V
RST ————————– Not connected (open)
VCC ————————– 3.3V

其硬件针脚的具体说明规格请点击这里查看ESP8266_Hardware

关于ESP8266引脚相连的一些说明

  • GP0引脚与GND相连,在代码烧写的时候是必须处于连接状态的,烧写完成之后,代码运行时,可以撤掉这根线

  • RST引脚可以不连任何线,但在烧写开始前,请记得备上一根母的杜邦线将RST引脚与Arduino Nano扩展板上的GND通电再撤掉,目的是为了重置低电平(重置过程中可以看到ESP8266板上自带的蓝灯闪烁一下)

  • 有的文章写需要在GPO或CHPD引脚加装1千欧的电阻云云,我没去尝试,个人认为是锦上添花的事儿,与烧写能否成功并无关系,不用照做,最后也能烧写完成

  • ESP8266模块是由低电压(3.3V DC)供电的,其VCC和CH_PD要连接到Arduino的3.3V引脚上

编写Arduino的代码

此段代码是我为了调试ESP8266板与远程服务器连通情况而改写,你可以照搬走(但是需要使用Java/NodeJS等后台语言来搭建下例代码url中提供的类似服务),然后将SSID及PASSWORD等信息改成你自己的,如果你想更简单的例程,你也可以发现Arduino的菜单‘文件-示例-Generic ESP8266 moudle的例子‘里有大把可以学习的例子,调出来一个你想要验证的功能即可:

#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("SSID", "PASSWORD");

}

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

    WiFiClient client;
    HTTPClient http;

    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, "//www.nswlp.cn/")) {  // HTTP

      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 || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }
      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }
  delay(10000);
}

烧写代码

激动了,终于来到烧写这一步了,决定你的付出能否被esp8266板子接受的关键一步,Arduino IDE中选好对应的串口,编译无误后,点击上传?额,别着急,先把‘文件-首选项-显示详细输出’的‘编译’‘上传’复选框选中,然后再烧写,如果一次能烧写成功,恭喜你了,如果失败,请对号入座看下面的一些问题及解决方案是不是能够帮到你?

  1. espcomm_send_command: can’t receive slip payload data
    解决:这应该是没有连GP0到GND时的错误

  2. A fatal error occurred: Invalid head of packet (0x00)
    检查Arduino nano板上刷的代码是不是影响了ESP8266相连针脚,可以考虑重刷Arduino板的代码后(可以烧个最简单的blink上去)再来试试烧写ESP8266板

  3. GP0到GND连接后还出现下面错误:
    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed
    解决方案—这个错误成因要逐个排查,请确认你已进行检查:

    • RX与TX连线没接错,RX对RX,TX对TX

    • 尝试esptool.py工具,点击参考文章这里查看如何使用,不过参考文章说的是在linux机器上跑,在windows机器上用,需要安装python,执行setup.py。esptool.py的使用,有两点要注意下:
      一是要找到esptool.py.exe这个命令被安装的位置,我的机器是在D:\Program Files\python\Scripts目录之下
      二是platform.txt这个文件的位置因系统而异,我的win10系统的位置就是C:\Users\RoyLi\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2这个目录下面,这两点信息能确认了,那个esptool.py的工具也就能顺利运行了

    • 如果接线也无问题,且esptool.py也能运行,但仍然没有排除以上问题,请尝试我前文提到的将RST引脚重置低电平(连GND),然后将Arduino板的USB电源线拔出再重新接入,之后重新尝试上传代码

经过这一系列折腾,如果看到下面的这一串提示,那么恭喜你,你的代码已经烧写成功了。

贼坑--关于Arduino Nano对ESP8266的烧写


运行代码及调试效果

烧写完的代码并不是马上会被ESP8266执行,仍然需要下面这个动作才会生效。
拔除GP0与GND的连线,RST再接一下GND线然后拔除,这时,通过打开IDE中的‘工具-串口监视器’,然后就可以观察串口打印出来的日志,表明你已经连接到wifi网络中,开始在互联网的天空中自由翱翔吧,小飞龙…

贼坑--关于Arduino Nano对ESP8266的烧写

上一篇:Flex 布局语法教程

下一篇:arduino下载ESP8266开发板的方法

评论列表
发表评论
称呼
邮箱
网址
验证码(*)
热评文章
相关阅读