基于串口调试助手的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 ...
随机推荐
- Ubuntu中NS2安装详细教程
前言: NS2是指 Network Simulator version 2,NS(Network Simulator) 是一种针对网络技术的源代码公开的.免费的软件模拟平台,研究人员使用它可以很容易的 ...
- 写一个杀死Gradle Daemon的shell脚本和bat脚本
1. Gradle Daemon也就是Gradle守护进程 Gradle需要运行在一个Java虚拟机中,每一次执行gradle命令就意味着一个新的Java虚拟机被启动,然后加载Gradle类和库,最后 ...
- 使用curl指令实现restful接口操作
curl 是很方便的Rest客戶端,可以很方便的完成許多Rest API測試的需求,甚至,如果是需要先登入或認證的rest api,也可以進行測試,利用curl指令,可以送出HTTP GET, POS ...
- 怎样做一个iOS App的启动分层引导动画?
一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷 ...
- Effective C++: 07模板与泛型编程
C++ template机制自身是一部完整的图灵机(Turing-complete):它可以被用来计算任何可计算的值.于是导出了模板元编程(TMP, template metaprogramming) ...
- 字符串Hash算法比较
基本概念所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2).设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m> ...
- Best Time to Sell and Buy Stock
这道题想了很多,但是想多了.这个题思路很简单,如果当前值大于最小值,就计算差,和最大利润值比较. class Solution { public: int maxProfit(vector<in ...
- hdu1403 后缀数组
比较简单的应用. #include <stdio.h> #include <string.h> #define maxn 200002 int wa[maxn],wb[maxn ...
- phpexcel使用说明1
<?php /** * PHPEXCEL生成excel文件 * @author:firmy * @desc 支持任意行列数据生成excel文件,暂未添加单元格样式和对齐 */ require_o ...
- Myeclipse 方法中文注释看不到
参考以下几种解决方式: 1 改变整个文件类型的编码格式 1) eclipse->window->preferences->General->Content Types 2) 找 ...