Arduino UNO 板和ESP-01S(ESP8266)连接并烧写

前提:我收到了基于ESP8266的WiFi模块 ESP-01S,但我手头没有USB 转 UART的板子,所以,我只能用Arduino UNO板子作为USB转串口的工具。

1 相关材料
1.1 Arduino UNO板

Arduino UNO


1.2 ESP01-01S

ESP-01S


2 软件环境配置

1.1 Arduino USB驱动

这个用系统自带的。我是Win10可以直接识别,如果不识别,可以百度相关解决方法。

1.2 ESP01-S的相关软件支持

1.2.1 自动下载

首先打开Arduino ID,在菜单栏点击“文件->首选项”,如下图。

文件->首选项

在打开的页面中,找到“附加开发板管理网址”,填入如下内容(上图红框中),并点击“好”退出。 arduino.esp8266.com/sta

在菜单栏点击“工具->开发板->开发板管理”

在打开的页面中搜索“ESP8266”,并安装。

1.2.2 手工安装

通过IDE自动安装在国内很容易失败,所以,也可以手工进行安装。手工安装的步骤略繁琐,我另外写文章详细描述。

3 Arduino 板初始化

首先,说明一下整体关系,框图如下:

整体框图

在这里,Arduino UNO不再作为开发板,只是作为一个USB转串口工具的存在。ESP-01S为开发板,所有的WiFi相关的代码是跑在ESP-01S上的。

Arduino UNO板我们先要将其进行初始化,使之成为USB转串口工具。

打开Arduino IDE,新建,并填入代码如下:

const int tx = 1;
const int rx = 0;
void setup() {
pinMode(rx,INPUT_PULLUP);
pinMode(tx,INPUT_PULLUP);
void loop() {

这段代码的作用就是初始化你的Arduino UNO板子。其中管脚1和管脚0作为对外串口连接。对于UNO板子来说,0脚和1脚是默认作为串口输出的。所以我们只要做一个简单的初始化就可以了。将如上代码烧写到UNO板子中。注意,这里的代码是烧写到UNO板上的。所以在开发板选择上,我们要选择“Arudino Uno”。

4 连接ESP-01S并验证可用

将ESP01-01S模块连接到Arduino UNO板子。接线如下表:

Arduino UNO板 ESP-01S
3.3V 3V3
不接 RST
3.3V EN
pin1 TX
pin0 RX
不接 IO0
不接 IO2
GND GND

将UNO板通过USB先插入电脑USB,打开串口监视器,设置为“115500”、“NL和CR”,输入“AT”,可以在串口监视器中看到“OK”。说明ESP-01S连接成功。

AT命令

注意:ESP-01S的RX和TX连接分别连接到UNO板的pin0(RX)和pin1(TX)。这里一开始容易不理解,其实这里ESP-01S只用到了UNO板上的USB转串口芯片,你可以理解为ESP-01S代替了原本UNO 板上的MCU。

5 ESP-01S代码烧写

接下来我们可以正式开始ESP-01S的代码编写了。

首先,我们要将ESP-01S进入烧写模式,需要将IO0接地。接线方式如下表:

Arduino UNO板 ESP-01S
3.3V 3V3
不接 RST
3.3V EN
pin1 TX
pin0 RX
GND IO0
不接 IO2
GND GND


在Arduino IDE中,将开发板选为“Generic ESP8266 Module”

我们先用示例代码Blink为例:

                                                                                                  /*
  ESP8266 Blink by Simon Peter
  Blink the blue LED on the ESP-01 module
  This example code is in the public domain
  The blue LED on the ESP-01 module is connected to GPIO1
  (which is also the TXD pin; so we cannot use Serial.print() at the same time)
  Note that this sketch uses LED_BUILTIN to find the pin with the internal LED
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  // Initialize the LED_BUILTIN pin as an output
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, LOW);  // Turn the LED on (Note that LOW is the voltage level
  // but actually the LED is on; this is because