Arduino UNO 板和ESP-01S(ESP8266)连接并烧写
前提:我收到了基于ESP8266的WiFi模块 ESP-01S,但我手头没有USB 转 UART的板子,所以,我只能用Arduino UNO板子作为USB转串口的工具。
1 相关材料
1.1 Arduino UNO板
1.2 ESP01-01S
2 软件环境配置
1.1 Arduino USB驱动
这个用系统自带的。我是Win10可以直接识别,如果不识别,可以百度相关解决方法。
1.2 ESP01-S的相关软件支持
1.2.1 自动下载
首先打开Arduino ID,在菜单栏点击“文件->首选项”,如下图。
在打开的页面中,找到“附加开发板管理网址”,填入如下内容(上图红框中),并点击“好”退出。 http:// arduino.esp8266.com/sta ble/package_esp8266com_index.json
在菜单栏点击“工具->开发板->开发板管理”
在打开的页面中搜索“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连接成功。
注意: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