esp8266 wifi模块的使用

时间:2021-08-20 22:23:35

  这两天,我们的项目卡在了无线模块的使用上,今天总算是有了眉目。我就大致总结一下esp8266的用法。
  首先,先说明这个wifi模块的用途,这样我们学起来就有了方向。我们的应用是围绕着将数据从电脑传到wifi模块,最后传到单片机来进行的。那么现在问题来了,电脑需要做什么,wifi模块需要做什么,单片机又怎么和wifi模块进行数据交换呢?
  一步步来分析。先从整体来看,我们通过什么手段来达成wifi模块和电脑的通信?用术语来说,用的是网络的连接手段,协议是TCP/IP。那通俗点怎么说呢?就是通信的两端,用ip地址和端口作为目的地,空气是道路,只要发送信息的两方知道目的地在哪里,就能够进行数据传输。这个就是一个通信的规则,机器已经约定好的通信手段,所以管他叫协议,全称就是TCP/IP协议。
  好,懂得了这个以后,对我们编程解决实际问题其实毫无帮助啊,毕竟落不到实际应用上。那实现这个协议的代码的一系列算法叫什么呢?我们管他叫socket编程。socket编程乍一看名字觉得好难,其实很简单,首先我们要知道,它是基于TCP/IP这个理论来写的代码。专门用于网络编程。
  这时我们先跳出socket这个坑,知道这么个东西,具体怎么用编程语言后面再说。我们目前对于两个端进行通信已经有了眉目了,我先假设一个端叫服务端,一个端叫客户端。他们之间通信的协议是TCP/IP协议,而运用TCP/IP理论写出的用于通信的代码叫做socket编程。
  那现在具体到实际编写代码了,服务端的socket编写,需要的步骤是:
1.先建立socket,这是为了让服务器知道要进行网络通信了,之后这个socket就作为一个工具(专业术语叫套接字)去执行网络通信的一系列步骤。刚刚说了,TCP/IP是用ip地址和端口号作为目的地的,那服务端自然要将自己的网络服务的ip地址和端口号定下来,所以要绑定地址和端口号,用bind()函数,具体参数自己查。绑定以后,就开始监听端口,要是有人来敲门了,申请要通信了,自己如果想理会,那就accept(),接受以后,别人说的话是什么,自己需要接收,用recv()。如果要发送数据,就send()。如果网络通信关闭,直接socket.close()就好。以上的函数是大致的,具体的语言可能调用方式不一样。至于客户端,为了使用网络编程,同样要创建socket,但是,它不是服务器,不需要把自己的端口和ip地址绑定,知道自己要把数据给谁就好了,所以只需要知道服务端的目的地,即ip地址和端口号,接下来函数啥的都差不多。
2.说来简单,但是对于wifi模块来说,它的代码写在哪里呢?我们之前就是卡在这一步,但是经过一个同学的帮助,我知道了对于它进行编程,要用eclipse打开它集成的SDK环境,然后在里面的user.c文件进行编程即可,这里编程的代码就是我说的socket代码,当然,得根据自己的应用来写。至于电脑端,就方便多了,搭个服务器,用什么语言都ok,但是注意字符格式的转换问题就好。
3.单片机和wifi模块的通信,他们之间的通道不再是wifi了,而是利用单片机的串口部分进行通信。但是有需要注意的一点,wifi模块得到的数据存在哪里?单片机要去wifi的哪个地方取出数据?经过同学的点拨,我终于知道了,wifi模块存储的地方叫做flash。单片机要到这个地方找数据。那它的地址怎么知道呢?在eclipse把我们修改过的代码生成新的bin文件以后,它会在底下告诉我们,flash的地址,到时候在单片机编程的时候,从里面取就好了。
4.电源供电问题。硬件终归不是软件,还得考虑它的供电和一些管脚的参数,一不小心就可能烧了。单片机供电是5v,而wifi模块是3.3V,如果为了偷懒,自然可以找两个电源单独供电,但是如果想节省成本,就得想办法利用好现有资源了,这个到时候还得再计算,不过同学说得注意,烧写代码的时候需要严格控制电源,烧写好以后才能折腾电源。


这就是wifi模块的一点小总结,有些地方可能说得不对,还得在实践中摸索。