当前位置: 首页 > 新闻中心
返回
列表

WIFI_ESP8266通信系统模块设计

发表时间: 2024-04-11 作者: 新闻中心

  要求:通过手机或电脑网络调试助手给ESP8266模块发送数据,FPGA驱动ESP8266模块获取数据,并显示在底板的数码管上。

  解析:要通过ESP8266实现WIFI通信有多种方式,本实验采用方式:FPGA驱动ESP8266模块,将ESP8266配置成SoftAP模式同时配置成TCP Server,手机或电脑连接ESP8266的WIFI热点,网络调试助手TCP Client连接到ESP8266的TCP Server,并发送数据,FPGA读取ESP8266数据并处理,最后显示在8位数码管上。

  在前面串口监视系统设计实验中我们学习了UART总线的驱动原理及设计实现,本实验主要了解WIFI通信TCP协议,熟悉AT指令集,掌握ESP8266模块的配置方法,最终通过FPGA编程实现对ESP8266模块的配置应用。

  ESP8266是ai-thinker公司推出的一款无线WIFI模块,能够最终靠配置,和单片机上的串口进行通信,利用WIFI传输数据。模块内部使用乐鑫推出的低功耗高集成度的WIFI芯片,ESP8266EX内置超低功耗32位RISK处理器,CPU最高时钟频率可达160Mhz,支持实时操作系统RTOS,和WIFI协议栈,可将高达80%的解决能力留给编程与开发。

  (2)打开串口调试助手,发送“AT”(AT指令集后要换行),发送,如果连接无误效果如下:

  (3)保险起见,我们复位一下模块,发送AT+RST,如无误如下图所示(乱码为正常现象,有返回ready即可):

  (4)如果你在一个存在WIFI的环境下,可以将ESP8266连入路由器,并获得IP,首先,配置ESP8266的工作模式为sta,输入AT+CWMODE=1,如无误如下图所示:

  找到我们要连入的WIFI,本例中,我们连入“FHQ”,密码为123456789

  我们可以从图片中看到已经成功连入并获取到IP,你能够正常的使用AT+CWQAP来断开WIFI。

  (5)成功连入WIFI之后,我们要开始配置透传了,首先,配置连接模式为单连接:

  (8)我们在成功进入透传模式后,在串口助手中发送”hello”,如连接无误,你可以在网络调试助手端接收到“hello”。

  本实验我们将ESP8266配置成SoftAP模式,同时配置成服务器,采用下表中的指令对ESP8266模块进行配置。

  这里我们发送的各种指令,实际发送的数据为字符对应的ASCII码,所以在FPGA程序实现的时候就是要取AT指令的ASCII码值,例如”AT+RST”复位指令,通过串口调试助手发送的数据为0x41,0x54,0x2B,0x52,0x53,0x54,0x0D,0x0A,每个字符的ASCII码都是8位位宽的数据,其中0x41为A的ASCII码,0x0D和0x0A为回车换行的ASCII码, Verilog语言中使用双引号获取字符的ASCII码。

  变量char表示AT指令数据,变量num表示AT指令中包含的字符数量(包含回车和换行),程序实现如下:

  我们使用状态机的MAIN状态控制我们应该配置的所有指令数据,你可以比喻成帝王,把握整个设计的大局。

  使用AT指令集控制ESP8266模块是UART接口,我们前面串口监视系统模块设计实验详细讲解了UART通信,本实验需要例化UART模块进行数据传输,如下:

  Baud模块和UartTx模块配合完成UART发送数据的功能,前级电路通过txdatavalid和txdatain[7:0]端口将数据传递给UartTx模块,然后Uart_Tx模块将数据按照UART总线时序发送出去,框图如下:

  我们使用之前设计的UART发送模块将需要传递的数据通过UART总线发送出去,你可以比喻成士兵,是具体的执行人员。

  帝王把握整体设计,有哪些数据需要传输;士兵只会干活,UART传输实现,每次传输8位数据;我们还需要一名将军,按照帝王的要求指挥士兵达成目标。所以每当MAIN(帝王)状态跳转到TXMD(将军)状态后,TXMD状态完成对UartTx模块txdatavalid和txdata_in[7:0]端口的配置。

  到这里对ESP8266的配置已完成了,假设用手机或电脑连接该网络:STEP_FPGA,同时打开网络调试助手作为TCP Client连接TCP服务器:192.168.4.1,端口号:8686,那么就可以给ESP8266发数据了,ESP8266模块接收到WIFI数据,然后以UART总线时序发送给FPGA,FPGA需要UART总线的接收模块接收数据,所以设计中还需要对UART接收功能模块的例化,程序实现如下:

  Baud模块和UartRx模块配合完成UART接收数据的功能,UartRx模块按照UART总线时序接收数据,然后将接收到的数据通过rxdatavalid和rxdataout[7:0]端口输出给后级电路,框图如下:

  当我们连接服务器,使用网络调试助手发送数据123,ESP8266模块接收WIFI信号,并通过UART返回数据+IPD,0,3:123,如上图所示,想要将123显示在数码管上,需要对UART接收的数据来进行解析,包括两个方面, 1)接收到的数据中+IPD,0,3:部分不能显示,需要排除,只显示数据123 2)数据以ASCII码形式接收,需要解析成字符数据

  UART数据中被舍弃的数据+IPD,0,3:,我们大家可以简单的使用加号+和冒号:来控制显示的部分,例如显示冒号以后且加号以前的数据,程序实现如下

  例化扫描式数码管驱动模块,将移位寄存器缓存的多个方面数据显示在数码管上,程序实现如下:

  将设计加载到FPGA,手机或电脑WIFI连接到STEP_FPGA网络上,打开网络调试助手配置成TCP Client连接TCP服务器:192.168.4.1,端口号:8686,发送0~9的阿拉伯数字,底板数码管就能显示出来,当一次发送超过8位数据,只显示后面的8位数据。例如,网络调试助手发送数据123,数码管显示123。