Android应用程序上的ESP手动LED关闭状态更新

时间:2017-02-06 07:10:55

标签: android firebase esp8266

我是这个领域的初学者。我开发了一个Android应用程序,通过它我可以控制连接到ESP Wi-Fi模块的GPIO引脚的LED。该应用已连接到Firebase以保存按钮的状态。一切正常。

现在我要实现以下内容:

  1. 我想,如果我通过移除相应LED的GPIO引脚手动关闭LED,那么应该在我的应用程序上更新“LED OFF”状态。
  2. 我想添加风扇速度控制器
  3. 对于第一个要点,我也应该使用firebase吗?

    请提供教程以及我可以实现的方法。

1 个答案:

答案 0 :(得分:0)

第1名:

在ESP8266上读取数字输出状态

在动态改变pinMode时,不能在不闪烁灯光的情况下读取和写入相同的引脚。最简单的方法是将另一个GPIO连接为LED的阴极,并将该引脚的pinMode设置为INPUT。然后,您可以 digitalRead 输入该输入以确定LED是否存在1)或不存在(0)。

这只适用于红色低功率LED,因为GPIO只能正式处理12ma。您可能希望使用像NPN晶体管这样的东西为它们提供VCC,在这种情况下,您可以通过5-10k电阻将输入引脚连接到LED阳极,将LED阴极连接到GND。

在将该状态推送到更新方面,您可以每几百毫秒轮询一次,检查每个读取值是否与最后一个相同,并在找到时将更改发送到sparkfun。将状态存储在全局中并与读取进行比较。

您也可以使用中断而不是轮询。这些性能更高,更复杂,因此对于像LED状态这样的极低频率事件,轮询就足够了,并且从头开始编写代码更容易。最后看一下中断,它们在单线程设备上很强大。

2号:

使用ESP8266控制风扇速度

您需要一个PWM电路来控制直流电机的风扇速度。有许多相对简单的电路使用mosfet非常快速地连接和断开风扇的接地,从而将其使用的功率平均为最大功率的比率。比率是使用analogWrite使用引脚#和01024的int设置的。

请注意,如果书面值小于350,您的粉丝可能不会旋转;这些低值时电压不足。另外,我建议使用analogWriteFreq(16000);中的setup()将PWM频率提升到超音速水平,以避免风扇噪音。如果您可以获得12v DC 4线PC冷却风扇,您实际上可以将pwm输入线连接到控制GPIO,而不必连接任何电路。

如果您的风扇在AC上运行,则会更加复杂和危险。最简单的电路使用IGBT晶体管在AC信号上实现“PWM”,但是如果您管理自己的交叉时序,则三端双向可控硅+二极管和随机交叉固态继电器可以很好地工作。确保您也处理电机阻抗。复杂?你打赌。

我发现修改现有且价格低廉的风扇控制器(如this one),拆焊大型电位器并替换为LDR更容易,更便宜。电位器用作可变电阻器,而不是分压器,因此很容易模仿。然后,您可以将LED连接到LDR,将LED挂接到GPIO输出,然后使用analogWrite()来控制AC输出。尝试使用LED电阻值以最大限度地提高精度和线性度,但对于风扇,即使只有三个可用水平也是一种改进。从ESP到main的光隔离是这种廉价方法的一个很好的特征。

如果您现有的商用多速风扇有几个级别,如吊扇或箱式风扇,您可以用继电器替换风扇的开关/旋钮,以模仿人类选择开关位置。您必须在不同的选择下对哪些电线“热或不”进行反向工程。它是AC的主电源,所以要小心这样做......