0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样使用ESP8266-01引脚和指示灯

454398 来源:网络整理 作者:佚名 2019-11-08 17:19 次阅读

第1步:ESP8266-01 Pins

怎样使用ESP8266-01引脚和指示灯

ESP8266-01是最小的ESP8266模块,只有8个管脚。在这些VCC中,GND,RST(复位)和CH_PD(片选)不是I/O引脚,但需要模块操作。这样就可以将GPIO0,GPIO2,TX和RX用作可能的I/O引脚,但即使这些引脚都具有预先分配的功能。 GPIO0和GPIO2确定模块以哪种模式启动,并且TX/RX引脚用于对模块进行编程以及用于串行I/O(通常用于调试)。 GPIO0和GPIO2需要连接上拉电阻,以确保模块正确启动。

步骤2:ESP8266编程技巧(espcomm失败)

使用Arduino IDE编程ESP8266时(请参阅ESP8266-01 Wifi Shield),有时(通常)会在Arduino IDE中收到错误消息,例如:-

esp_com打开失败

错误:失败打开COM33错误:espcomm_open失败

错误:espcomm_upload_mem失败

在这种情况下,请按照以下步骤操作:-

检查是否已在Arduino工具菜单中选择了ESP8266板

检查是否已在Arduino工具菜单中选择了COM端口

将GPIO0接地的ESP8266重新通电(干净)电源应用程序,请参阅下文)

如果3)不能解决问题,请从计算机上拔下USB电缆,等待几秒钟,然后再将其重新插入

如果4)不能解决问题,从PC上拔掉USB电缆,关闭Arduino IDE,打开Arduino IDE,重新插入USB电缆。

在给ESP8266供电时,将GPIO0接地后,请确保干净地供电。不要摇晃连接。 ESP8266 led应该亮起并保持不闪烁。

步骤3:最佳技巧–使用I2C

使ESP8266-01额外输入的最好技巧是使用I2C接口

一种选择是使用GPIO0和GPIO2作为I2C总线。

使模块正确启动所需的上拉电阻可以加倍,因为I2C总线上拉电阻和总线上的其他从器件均是集电极开路,因此不应下拉总线通电时。但是,在某些情况下,从站(尤其是具有备用电池的从站)可能会卡住并压低总线。在这种情况下,您需要隔离总线,直到ESP8266进入引导阶段为止。

通过为I2C总线使用TX和RX可以避免此问题

注意:

GPIO1(TX)用作数据线,因为在加电时,您总是会在GPIO1上获得一些调试输出。没有办法抑制此输出,但时钟线(RX)会保持高电平,因此这些数据都不会被时钟传给从机

在对ESP8266进行编程时,RX线会连接到ESP8266。程序员的输出。编程结束时,ESP8266会重新启动,并且330保护电阻可防止RX短路编程器的输出驱动器

I2C串联电阻可为TX,RX提供防止I2C总线短路的保护

ESP8266是3.3V器件,因此最好使用3.3V I2C从器件。如今,许多(但不是全部)I2C器件均为3.3V。 “通常,在一个设备的电压高于另一个设备的电压的系统中,有可能通过I2C连接两个设备,而它们之间没有任何电平转换电路。技巧是将上拉电阻器连接到两个电压中的较低者。”(SparkFun I2C教程)对于5V和3.3V器件的混合,将上拉电阻器连接到3.3V线,如上所示。

使用I2C是向ESP8266-01添加多通道A-to-D转换器的好方法,该转换器不会暴露底层模块的单个ADC输入。例如,使用Adafruit 12位I2C 4通道ADC或模拟输出SparkFun的I2C DAC Breakout – MCP4725板。 I2C总线还提供许多其他类型的传感器

有关克服I2C问题的更多信息,请参见http://www.i2c-bus.org/i2c-primer/common-problems.。.。另请参阅I2C电池后备RTC可靠启动的简短方法,以帮助清除总线

第4步:将GPIO0/GPIO2用于OUTPUT,将RX用于INPUT

虽然可以通过WiFi连接发送调试消息,但是使用TX连接通常很方便。下一个示例显示如何将GPIO0和GPIO2用作输出,将RX用作输入。

使用

Serial.begin(115200,SERIAL_8N1,SERIAL_TX_ONLY);

允许您将RX用作通用输入(或其他输出),同时仍将调试消息写入串行。 RX引线中的330欧姆电阻再次连接到Flash编程器,可以防止编程器的驱动器短路。注意:必须先打开S1才能对ESP8266进行编程。

可以从草图访问TX引脚,因为GPIO1和RX为GPIO3

使用GPIO0作为输出时如何重新编程

注意:需要将GPIO0接地才能进入编程模式。如果您将其拉高,则将其接地可能会损坏ESP8266芯片。当代码驱动GPIO0输出时,对ESP8266进行重新编程的安全方法是:-

a)关闭开发板电源 b)短GPIO0到gnd c)打开开发板电源,使其进入编程模式由于GPIO0短路

d)消除了GPIO0的短路,因此在程序运行时您不会短路输出

e)重新编程开发板 f)必要时重启开发板。

步骤5:另一个技巧-使用GPIO0/GPIO2驱动继电器并读取按钮

这里是另一种配置方式别针。注意:仅当您的继电器模块具有隔离的输入(N1和N1-com)时,此技巧才有效。由于此限制和支持代码的复杂性,上一个示例以RX作为输入为佳。

使用ESP8266 GPIO0/GPIO2/GPIO15引脚已经介绍了如何一起使用GPIO0/GPIO2获得额外的输入。在这里,该示例将扩展为使用GPIO0作为继电器驱动器输出,并使用GPIO0/GPIO2作为输入。

此处是pdf格式的原理图。

此处GPIO0被用作输出以驱动继电器,GPIO0/GPIO2用作输入来读取瞬时按钮,该按钮除了可以通过WiFi连接进行远程控制之外,还可以用作手动操作来打开和关闭继电器。如果在通电时按下瞬时按钮,则也可用于启用配置模式。

这里的诀窍是在ESP8266模块初始化时仍保持GPIO0和GPIO2为高电平的同时进行所有操作。

上拉电阻R1和R3为这两个引脚提供了必要的高电平,但是必须确保连接到GPIO0和GPIO2的任何额外电路都不能将引脚拉低。光电隔离继电器连接在+ 3.3V和GPIO0之间。这样可在启动时使GPIO0保持高电平,但在启动后允许GPIO0作为输出,并使继电器输入接地以操作继电器。模块初始化时是否操作瞬时按钮都没有关系,因为只需将GPIO0连接到GPIO2并将这两个都连接到其上拉电阻即可。

检测配置模式

使用ESP8266作为一个临时访问点,您可以按此处所述通过网页进行配置。该过程的一部分是在加电时使用按钮或短路链接来指示要进入配置模式的软件。

ESP8266模块初始化后,将运行 setup()代码。在该代码中,要检测瞬时按钮是否被按下,您无需使GPIO0为低电平即可为按钮提供GND,然后检查GPIO2输入是否为低。该检查的副作用是,当设备进入配置模式时,继电器将始终处于运行状态。一旦看到继电器操作,就可以释放按钮,因为届时将已检测到其输入。这是一些示例代码,可在 setup()

boolean configMode = false; // not in config mode normally

void setup() {

pinMode(0, OUTPUT);

digitalWrite(0, LOW); // make GPIO0 output low

// check GPIO2 input to see if push button pressed connecting it to GPIO0

configMode = (digitalRead(2) == LOW);

if (configMode) {

// start AP and get ready to serve config web page

// leave relay on to indicate in config mode

//。..。..

} else {

// normal usage

// make GPIO0 HIGH to turn off the relay

digitalWrite(0, HIGH);

//。..。.

}

// rest of setup()

}

检测手动覆盖按钮

中进行此操作。开机时按下按钮以启用配置模式。除了能够通过WiFi链接控制继电器之外,我们还希望使用该按钮作为手动替代来打开和关闭继电器。

此处不介绍继电器的WiFi控制,但可以使用pfodApp轻松完成。有关如何使用pfodDesigner为ESP8266模块生成Arduino代码的信息,请参见OLIMEX菜单生成器。

本节将介绍如何检测何时按下按钮,指示用户想要切换继电器,即打开它。如果是OFF,则将其打开;如果关闭,则将其打开。原理图与上面相同,所有技巧都在代码中。有两种情况需要考虑:-

继电器已关闭,用户希望使用按钮将其打开,

继电器已打开,用户希望

继电器关闭,用户希望使用按钮将其打开。

在这种情况下, GPIO0为高电平。在这种情况下,实际上GPIO0可以作为输入,因为上拉电阻R1将确保继电器不会打开。那是诀窍。在这种情况下,将GPIO0设为输入,将GPIO2输出设为LOW,然后当用户按下按钮时,将发生两件事:-a)由于GPIO2通过按钮提供的接地,继电器将打开,并且b)输入GPIO0将变为低电平。该代码检查输入GPIO0的状态,并在输入GPIO0变为低电平时知道使用已按下按钮并希望继电器打开。然后,该代码使GPIO0变为Output LOW,以在释放按钮时使继电器保持打开状态。

继电器打开,用户希望使用按钮将其关闭。

在这种情况下,从上述情况开始,GPIO0为输出低电平,继电器保持打开状态。现在,在这种情况下,将GPIO2设为输入(由R3上拉),然后当用户按下按钮时,输入GPIO2被GPIO0上的LOW输出拉低。当用户释放按钮时,代码将检测到低电平到高电平的过渡,然后将GPIO0设为输入,由于上拉电阻R1而释放继电器,并使GPIO2变为输出LOW,以针对上述情况i)进行设置。

还有另一个窍门。对于情况ii),我们需要GPIO2作为输入,该输入可检测到从低电平到高电平的转换以关闭继电器。但是,如果我们在情况i)的末尾制作GPIO2并输入,那么当用户释放他们刚刚按下以打开继电器的按钮时,我们将获得从低到高的转换。为避免立即再次关闭继电器,将忽略继电器打开后的第一个从低到高的过渡,因为这只是用户释放他们按下的按钮来打开继电器。

示例循环( )继电器手动超越控制代码

在此代码中,为简单起见,我忽略了开关的反跳。输入应在任何实际应用中进行去抖动。

示例代码在此处,ESP8266_01pinMagic_1.ino

再次使TX/RX引脚可用进行串行调试或用作其他I/O

结论

此页显示了如何充分利用ESP8266-01上可用的有限引脚。将GPIO0/GPIO2用作I2C总线可提供最大的扩展,但是如果您的项目不使用I2C,您仍可以使用GPIO0/GPIO2来驱动继电器并检测按钮输入。无论哪种情况,TX/RX都可用于串行调试,或者如果您通过WiFi链接发送调试打印语句,则这些引脚也可用于常规I/O。
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指示灯
    +关注

    关注

    3

    文章

    403

    浏览量

    27994
  • ESP8266
    +关注

    关注

    50

    文章

    947

    浏览量

    43932
收藏 人收藏

    评论

    相关推荐

    ESP8266-01烧写机智云GAgent使用哪种SPI模式?

    ESP8266-01烧写机智云GAgent使用哪种SPI模式 官网有DIO和QIO两种
    发表于 11-10 08:06

    ESP8266-01烧录机智云GAgent时SPI Mode选择哪种?

    ESP8266-01烧录机智云GAgent时SPI Mode选择哪种?是选择合并的固件还是单独烧写
    发表于 11-10 07:54

    ESP8266-01启用掉电保存将断电前数据写入哪个地址?

    ESP8266-01启用掉电保存将断电前数据写入那个地址比较好
    发表于 11-09 07:02

    关于ESP8266-01模块GPIO应用问题

    ESP8266-01模块预留了两个GPIO,GPIO0用于启动控制,GPIO2未定义。如何利用GPIO2 是否有AT命令可以控制,还是需要重刷自定义的固件?
    发表于 10-24 07:21

    ESP8266-01如何单模块连接机智云或ONENET等平台?

    ESP8266-01单模块可以直接连接机智云吧,不通过MCU。 另外,如何利用APP控制ESP8266做一个智能插座。这个APP有可供直接使用的吗。
    发表于 10-19 07:07

    如何使用移位寄存器用esp8266-01控制8路继电器?

    有没有办法使用带移位寄存器的 esp8266-01 来控制 8 个继电器开关
    发表于 06-06 08:00

    怎样才能最低限度地点亮ESP8266-01上的蓝色LED?

    嗨,我只想点亮 ESP8266-01 上的蓝色 LED,所以我将 vcc 连接到 3.3v 并将 gnd 连接到 - 但没有任何反应?我怎样才能最低限度地让 LED 点亮?
    发表于 06-06 07:55

    如何将Xee S2C与ESP8266-01模块一起使用?

    您好,我正在尝试将 Xee S2C 与 ESP8266-01 模块一起使用。我将分别通过 Xbee 和 ESP 的 TX RX 引脚将数据从我的 Xbee 直接发送到 ESP8266
    发表于 06-06 07:48

    可以使用ESP8266-01实现websockets吗?

    我可以使用 ESP8266-01 实现 websockets
    发表于 06-06 06:45

    ESP8266-01 AP干扰问题如何解决?

    我有几个基于 ESP8266-01 的数据监视器,它们在启动时使用以下方法创建一个 AP:- 代码:全选WiFi.softAP(ssid, password) 在短时间内,允许通过网页(SSID
    发表于 05-31 06:32

    如何使用I2S接口在esp8266-01上?

    我必须在 esp8266-01 上使用 I2S 接口,但我的引脚分配有问题...... 在 esp8266 文档中有: MTDI 10 IO12 I2SI_DATA MTCK 12 IO13
    发表于 05-25 12:43

    如何使用ESP8266-01和Arduino IDE控制2个电机?

    你好社区!我想用我的 ESP8266-01 制作一个电机控制器。我有 2 个电机,需要通过手机发送命令来控制第一个电机的速度和第二个电机的方向。但我真的是 ESP 的新手,我需要你的建议。ESP8266-01 够用吗?我需要做的
    发表于 05-23 06:31

    是否可以将ESP8266-01与lpc1768接口?

    我正在尝试从连接到 lpc1768 uC 的温度传感器读取数据,并通过 wifi 将传感器值发送到我的手机。我在我的项目中使用 CMSIS。我是 ESP8266-01 的新手。我的问题是 1. 是否
    发表于 05-22 10:38

    ESP8266-01通信问题如何解决?

    ESP8266-01 通信问题
    发表于 05-11 08:22

    ESP8266-01开发中的.lua脚本是否可以在modeMPU开发中工作?

    ESP8266-01 项目 ) 将作为 IFTTT Applet 的触发器。为许多事件创建触发器看起来非常容易破解,包括将 T-stat 上的电压更改为 A/C 单元电线。一个问题是 ESP8266-01
    发表于 04-27 07:55