基于串口调试助手的WIFI模块调试-FPGA简单联网(点灯)
根据正点原子的《ATK-ESP8266 WIFI用户手册》,使用XCOM V2.2串口调试助手测试WIFI模块[26]。在本系统中运用到的功能主要是TCP/IP模式中的TCP Client透传模式。发送指令的顺序如下:
- 设置WIFI的模式为STA模式:AT+CWMODE=1。响应:OK
- 重启使命令生效:AT+RST。响应:OK
- 联网:AT+CWJAP="wy225","pcblab225"(连接WIFI的名称(ssid)和密码)。响应:OK WIFIconnect GOTip
- 连接服务器:AT+CIPSTART="TCP","www.mjywxy.xin",80。响应:CONNECT OK
- 开启透传模式:AT+CIPMODE=1。响应:OK
- 开始透传:AT+CIPSEND。响应: OK >
- 最后使用“+++”退出透传模式
结果如下使用GET方法,通过HTTP请求的方法发送数据,得到服务器返回的数据如下。
图1 WIFI调试之HTTP请求
服务器端wifi.php程序主要代码如下。
图2 wifi.php主要程序
第一个if判断,是否获取到数据;第二个if判断获取到数据中a的值是否是0或1。如果是则表示存储a的值到wifi.dat文件中,否则从wifi.dat文件中读取a的值返回。
…… FPGA-UART-WIFI
原计划UART部分使用NiosII搭建,但是使用片上ROM进行搭建系统时会提示内存不足,ELF文件下载失败。EP4CE6E22C8N只有276480bits的片上ROM。但是NiosII+UART需要27480Byte,编译显示超过片上ROM的106%内存占用率。故需用SDRAM(只买了SDRAM)作为系统的复位向量和错误向量,而NiosII与原来用Verilog写的系统要共用SDRAM,这无疑增加了系统的复杂程度,而且难以实现,故采用纯Verilog进行整个系统的编写。
…… UART_TX
为了进行串口通信,首先进行串口发送模块程序的编写。其功能是每次发送一个字节的数据(串转并),并可通过baud_set选择不同的波特率,用tx_done信号表示已经发送完成。其端口定义如下。
表1 UART发送模块端口定义
端口名 |
位宽 |
输入 / 输出 |
说明 |
clk |
1 |
input |
时钟信号50MHz |
rst_n |
1 |
input |
复位信号,低电平有效 |
data_byte |
8 |
input |
要发送的数据 |
send_en |
1 |
input |
为1使能发送(一个脉冲就好) |
baud_set |
3 |
input |
波特率选择端 |
rs232_TX |
1 |
output |
数据串行输出引脚 |
tx_done |
1 |
output |
发送完成标志信号 |
uart_state |
1 |
output |
发送状态,为1表示正在发送中 |
具体实现方法,包括波特率的计算、激励文件的编写等,参照《小梅哥的教学视频》
…… UART_RX
关于串口接收程序,同样参照《小梅哥的教学视频》,有波特率的选择、接收数据存储(串转并)和接收完成标志等功能。在顶层文件中例化uart的发送模块,使用“In-System Source and Probe”IP核,完成在线发送和接收功能。
表2 UART接收模块端口定义
端口名 |
位宽 |
输入 / 输出 |
说明 |
clk |
1 |
input |
时钟信号50MHz |
rst_n |
1 |
input |
复位信号,低电平有效 |
data_byte |
8 |
output |
接收到的数据 |
baud_set |
3 |
input |
波特率选择端 |
rs232_RX |
1 |
input |
数据串行输入引脚 |
Rx_done |
1 |
output |
接收完成标志信号 |
…… UART_WIFI之自启动联网
首先发送数据到电脑上,通过串口调试助手,检测发送数据的格式是否有问题。一开始通过按键控制发送数据的内容,确认无误之后,再修改为自启动。其中,为了避免插拔的麻烦,直接定义两个相等的RX和TX引脚,故定义模块的端口如下表。
表3 UART配置WIFI自启动联网模块端口定义
端口名 |
位宽 |
输入 / 输出 |
说明 |
clk |
1 |
input |
时钟信号50MHz |
rst_n |
1 |
input |
复位信号,低电平有效 |
key |
1 |
input |
按键 |
rs232_tx |
1 |
output |
数据串行输出引脚 |
rs232_rx |
1 |
input |
数据串行输入引脚 |
test_tx |
1 |
output |
方便测试用,等于rs232_tx |
test_rx |
1 |
input |
方便测试用,等于rs232_rx |
led |
1 |
output |
LED灯,接收到指定数据的标志 |
关于程序,首先初始化要发送的数据,如图7-4示。其中,由于之前连接了WIFI,模块会保存账号和密码,故可不发送WIFI账号和密码。重启之后,模块会在5秒之内自动连接到WIFI,并获得IP。
关于波特率设置,因为ESP8266每次重启之后,都会把波特率自动设置为115200,故配置UART的波特率为115200。
图3 自启动联网相关配置数据
需要注意的是,WIFI模块数据接收时,以十六进制的“0A 0D”表示数据接收完成,对应到程序中是“\r\n”。还有,发送“+++”表示退出透传模式,此时不需要“\r\n”,而且任何多余字符(包括空格、换行等)都不能有,否则无法退出透传模式[26]。
另外,还有一个需要注意的点是,Verilog中必须用双引号包围字符串。且发送CIPSTART的字符串时,也必须用双引号。故此时就必须用反斜杠转义双引号。
首先,通过计数器cnt判断发送到第几字节了。由于字符串寄存器最大设置了42字节,所以当发送完第42字节时,让cnt清零。相关程序如下:
图4 发送完42字节清零寄存器
其中delay1s_cnt是延时1秒计数器,为了实现自动启动(发送完一个字符串之后,自动发送下一个字符串)而设置。delay5s_cnt是延时5秒计数器,目的是为了保证模块能获得IP后再操作。
接下来开始按字符串的顺序发送,其中,为了使每次都能正常退出透传模式,在程序开始,首先发送“+++”。之后,发送复位信号,使ESP8266重启,此时需要等待5秒延时,才能保证模块已获得IP,能够进行之后的数据发送。
图5 发送数据转换程序
由于uart_tx模块每次只能发送一个字节,所以需要一个移位寄存器来表示,每次应该发送第几个字节。相关代码如下。
图6 移位寄存器的实现
对于接收模块,接收完成后判断当接收到0时,让LED灯亮;接收到K时,让LED灯熄灭。实现其功能的代码如图所示。
图7 接收到指定字符,执行相应操作代码
将LED与单片机的舵机信号直连(使用电阻分压),即可实现WIFI控制舵机,使摄像头旋转或者停止。关于程序部分,直接例化此模块到myCamera的顶层文件即可。
…… 最终显示结果
图8 WIFI控制的显示结果
从图中可以看出网页可以实现对蓝色LED的亮灭控制。由于舵机控制无法从图片上提现出来,故用LED灯指示。
基于串口调试助手的WIFI模块调试-FPGA简单联网(点灯)的更多相关文章
- [原创]基于Zybo SDIO WiFi模块调试
采用的是RTL8189 SDIO 模块,介绍如下 The Realtek RTL8189ES-VB-CG is a highly integrated single-chip 802.11n Wire ...
- 11-51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接TCP服务器,用串口调试助手和手机TCP调试助手测试)
写完题目刚想起来一件事情,如果手机作为客户端(不连接路由器的情况下),手机连接模块的无线会分配一个IP地址,,,这个IP地址事先我也不知道....我先看看AT指令里面有没有一个指令可以打印一下连接自己 ...
- 基于H7的串口WIFI模块ESP8266的TCP客户端例子和操作说明(AP兼STA模式)
说明: 1.如果不熟悉网络的话,等我这几天更新V7用户手册的ESP8266章节,如果熟悉的话,直接操作即可,这里将操作说明发出来. 2.串口WIFI是采用的AT指令操作,简单易用,指令手册在这个帖子里 ...
- 4G模块与WIFI模块的工作及应用区别
在物联网行业中,4G模块和wifi模块经经常会被使用,但是由于网络不同,二者的工作原理和场景还是有很大的不同,本篇主要讲讲4G模块和WIFI模块的功能和应用场景 什么是4G模块? 4G模块是基于4G网 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级
实现功能概要 前面的版本都是,定时访问云端的程序版本,如果版本不一致,然后下载最新的升级文件,实现升级. 这一节,在用户程序里面加入MQTT通信,执行用户程序的时候,通过接收MQTT的升级命令实现升级 ...
- Arduino 基于 ESP8266 配置WIFI模块
Arduino 基于 ESP8266 配置WIFI模块 使用ESP8266作为服务器,使用浏览器访问该服务器,从而控制LED灯 选择 [文件]->[示例]->[ESP8266WIFI]-& ...
- 调试经验分享-让自己的电脑充当WI-Fi模块,用来抓取连接Wi-Fi模块APP上的通信数据
需求 手头有了厂家的APP和Wi-Fi模块 在已经知道APP是通过TCP连接Wi-Fi模块(8266), 同时也知道了连接的端口号的 情况下如何知道厂家的APP发送给Wi-Fi模块的数据 打开自己的笔 ...
- android 基于wifi模块通信开发
这篇文章主要是我写完手机与wifi模块通信后所用来总结编写过程的文章,下面,我分几点来说一下编写的大概流程. 一.拉出按钮控件并设置它的点击事件 二.设置wifi权限 三.打开和关闭wifi 四.扫描 ...
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块(ESP8266)AT指令TCP透传方式,MQTT通信控制升级(加入数据校验)
前言 这节演示下,上两节写的利用MQTT来控制STM32控制的程序 测试准备工作(默认访问我的服务器,改为自己的服务器,请看后面说明) 一,下载BootLoader程序(请自行下载) 首先BootLo ...
随机推荐
- JavaEE架构简介与JavaWeb新特性
Fragment 将一个web应用做成几个部分,然后整合 创建Fragment项目 然后打包放入Servlet项目中的WEB-INF下的lib中 注解 @WebServlet @WebServle ...
- python 自定义检测缺失值的方法
- Java程序中如何使用事物
在java操作数据库是,为了保证数据的一致性,比如转账操作,从一个账户减掉10元,在另一个账户加上10元. 在类中定义的成员属性(变量)不用赋初值,但在函数里头定义的变量就一定要赋初值. packag ...
- 【水滴石穿】react-native-template-app
这个也是一个基础项目 地址如下https://github.com/ndlonghi/react-native-template-app 点击登陆跳转到首页 分析代码如 react-native-te ...
- django2.0基础
一.安装与项目的创建 1.安装 pip install django 2.查看版本 python -m django --version 3.创建项目 django-admin startprojec ...
- css 的float和inline-block区别
CSS布局创建网站,浮动绝对占据了很大的比例.大块区域如主内容及侧边栏,以及在其中的小块区域,都可以看到浮动的影子.这里浮动是唯一的解决方案吗? 浮动通常表现正常,但有时候搞起来会很纠结.特别是处理内 ...
- php代码在模板页的活用
- wepy ——$apply
1.说明 在异步函数中更新数据的时候,必须手动调用 $apply 方法. 2.代码和效果 // html <button type="primary" plain=" ...
- wepy —— 组件之间通信
一.props 1.静态传值 —— 父组件向子组件传递常量数据 // 父组件 <coma fruitName="橘子"></coma> // 子组件 // ...
- Java成员方法,构造方法
//作者:qingfeng//2017/2/17//功能:理解类的成员方法和构造方法class CreatWays{ public static void main(String args[]){ ...