一直想直接通过ESP8266的输出引脚直接控制灯

查看资料可以得知我这个模块只有 三个引脚可以 分别是 GPIO0 GPIO2 GPIO16

其中GPIO0是用于下载用的,这里我就不打算用它来输出了(虽然实际上是可以的)

首先我遇到的第一个困难是关于处理TCP数据的问题,因为我要判断收到的数据来决定引脚状态,这里就涉及到了C语言类型的问题。传过来的数据以字符串的类型通过参数p传入,我的判断是如果是1就低电平,是0就高电平,那么显然不能直接用p==1,于是我就打算用强制转换为string,但是c语言又没有自带string这个类型,p的类型就是字符数组,于是我直接用unsigned

char强制转换。

其次问题是如何设置gpio2输出低电平,首先查看API文档,API文档正好有函数设置低电平,gpio_set_xxxx函数,就是用来设置的,于是我直接用,然后多次尝试并没有让GPIO2变低(通过电压表可以测量)。这时我就有点懵逼了,明明和API做的一模一样,就是不行,于是我又在乐鑫官网搜索GPIO,正好有一篇文档,正好把文档拿来看,文档提到example中有示例,我又去看示例,发现示例的方法和我的大同小异,他是先PIN_FUNC_SELECT这个函数,然后再GPIO_OUTPUT_SET(注意和前面那个小写的函数不是同一个函数),我又去改程序,结果,直接乱码显示经。过一系列百度,修改一个参数后没有乱码了,但是GPIO2也没有变低。此时我的懵逼状态

2了,我仔细的观察到,文档上面的示例是GPIO12引脚,且文档专门说明了GPIO12的某个参数在不同的GPIO需要变换,但是又没直接给出变化值,我开始怀疑是不是GPIO2需要专门的方法,于是我又百度搜索GPI02的变低方法,又搜到一篇正好就是用GPIO2的文档,这篇文档还是很优秀的,他的示例和官网一模一样,除了把12改成2,。我不信,直接复制这篇文档的内容,粘贴到我的代码中,这下不可能错了撒。然而

MDZZ,还是无法输出低电平。这个时候都1.30了,哎,我抱着试一试的心态,在乐鑫社区搜索了下GPIO2,哈哈,正好有个和我一样的问题,果然就是刚刚提到的那个参数的问题,需要变换,但是又需要看另外一个文档,我刚刚懒得去下,所以就没看,没想到啊。。。一时的懒浪费了更多的时间,不过最后很幸运的还是找到了答案,还是要感谢god,做一个乐观的人嘛。

最后成功输出了低电平。


es8266 rtos gpio_get_level 消抖 esp8266 gpio2不能拉低_搜索


0.esp8266控制gpio输出时,必须要打开一下gpio功能,如上面,打开的时候需要相关gpio引脚的寄存器作为参数,官方只提到了gpio12的寄存器,其他的需要自己去查技术文档。

1: C语言没有内置string类型,printf输出的%s实质是字符数组

2:在搜索问题时,应该首先想到的是广度,而不应该是深度,就是说不应该在一个地方多次搜索,而应该考虑换地方搜索,比如百度

乐鑫官网 社区 贴吧 …………,看来搜索也是一门艺术啊,下次要专门总结一下搜索了。

3.在看文档时,如果引用了另外一篇文档,最好还是看看,万一会有意想不到的收获呢

4.(来自于百度的文档)由于ESP8226启动需要GPIO2高电平,如果把LED一头接GPIO2,一头接GND,那么是无法启动的,需注意。

另外:我的博文主要是对自己看的,思路有点乱,还请大家见谅,如果有什么问题,欢迎在下面讨论。我的东西都不是自己的,我也是从网上到处学习的,很乐意和大家分享,

最后统一的时候又出现了问题,tcp传入的数据类型是char,我使用p==char(1)来判断,但是不论我怎么实验,把1赋给int,再char(),或者是直接char

off=1,都无法成功,搞了一个小时,终于明白了,给char赋值必须要使用单引号!!

就是说char类型在处理数字的时候必须格外小心,因为char本身就可以表示数字,也可以表示数字字符,char

a=1是合法的,表示ASCII码为十进制1的那个字符,而char a='1'才是表示数字字符!!

至此,下位机esp8266的代码部分就到此了,下面开始进行上位机的开发了,由于最终代码有点长,主要是copy官网的demo,但是自己做了些修改,如果有需要的可以找我要。