开发板
亚博K210开发板
实验目的
本次测试主要学习 WiFi 模块的设置为服务器。
实验元件
板载WiFi 模块
元件特性
K210 开发板自带的 WiFi 模块是 ESP8285 芯片模块,其实 ESP8285 还有更加热门的好兄弟 ESP8266,ESP8285 与 ESP8266 共享同一套 SDK,ESP8285 比 ESP8266多了一片 1MB FLASH 芯片,并且是 DOUT 模式,所以固件编译和下载时需要设置为 DOUT 模式才可以下载;而且还多了两个 IO 口(GPIO9 和 GPIO10)可以供用户使用。 除此之外,ESP8285 还有其他特性,如:体积小、远距离传输、低功耗、可外接天线、耐高温、无线透传、串口转 WiFi 等。
硬件连接
K210 开发板出厂默认已经焊接好 WiFi 模块,WiFi 模块与 K210 之间有三个跳线帽,如果插入跳线帽,则 ESP8285 的 WIFI_TXD 连接 K210 的 IO13,WIFI_RXD连接 IO14,WIFI_EN 连接 IO15,拔掉跳线帽则不通。
实验准备
WiFi 模块联网的基础上增加设置 WiFi 模块为服务器的功能。作为服务器的好处在于可以连接多个客户端,接收不同客户端的数据。
实验原理
ESP8285 WiFi 模块是一个强大的芯片,它可以把自己设置成一个局域网的TCP/UDP 服务器,然后进行 TCP/UDP 通讯,这里我们只使用 TCP 通讯的功能,通过局域网 TCP 协议传输数据到 WiFi 模块上,WiFi 模块把数据转化成串口数据传输给 K210 芯片,K210 芯片传输到电脑串口助手上显示。
主要代码
c
#include "pin_config.h"
#include "string.h"
/**
* Function hardware_init
* @author Gengyue
* @date 2020.05.27
* @brief 硬件初始化,绑定GPIO口
* @param[in] void
* @param[out] void
* @retval void
* @par History 无
*/
void hardware_init(void)
{
/* USB串口 */
fpioa_set_function(PIN_UART_USB_RX, FUNC_UART_USB_RX);
fpioa_set_function(PIN_UART_USB_TX, FUNC_UART_USB_TX);
/* WIFI模块串口 */
fpioa_set_function(PIN_UART_WIFI_RX, FUNC_UART_WIFI_RX);
fpioa_set_function(PIN_UART_WIFI_TX, FUNC_UART_WIFI_TX);
}
/**
* Function main
* @author Gengyue
* @date 2020.05.27
* @brief 主函数,程序的入口
* @param[in] void
* @param[out] void
* @retval 0
* @par History 无
*/
int main(void)
{
/* 硬件初始化 */
hardware_init();
// 初始化USB串口,设置波特率为115200
uart_init(UART_USB_NUM);
uart_configure(UART_USB_NUM, 115200, UART_BITWIDTH_8BIT, UART_STOP_1, UART_PARITY_NONE);
/* 初始化WiFi模块的串口 */
uart_init(UART_WIFI_NUM);
uart_configure(UART_WIFI_NUM, 115200, UART_BITWIDTH_8BIT, UART_STOP_1, UART_PARITY_NONE);
/* 开机发送hello yahboom! */
char *hello = {"hello yahboom!\n"};
uart_send_data(UART_USB_NUM, hello, strlen(hello));
char recv = 0, send = 0;
while (1)
{
/* 接收WIFI模块的信息 */
if(uart_receive_data(UART_WIFI_NUM, &recv, 1))
{
/* 发送WiFi的数据到USB串口显示 */
uart_send_data(UART_USB_NUM, &recv, 1);
}
/* 接收串口的信息,并发送给WiFi模块 */
if(uart_receive_data(UART_USB_NUM, &send, 1))
{
uart_send_data(UART_WIFI_NUM, &send, 1);
}
}
return 0;
}
实验现象
- 烧录完成固件后,系统会弹出一个终端界面,如果没有弹出终端界面的可以打开串口助手显示调试内容。
- 从串口助手,可以接收到 hello yahboom!的欢迎语。然后按一下 WiFi 模块的复位键,可以看到一大串乱码,这个不用管,只要看到 ready 字符则表示 WiFi模块正常。由于上一节课已经连接好路由器,所以我们这次就不必重复连接。
- 发送 AT 指令打开多端连接。
bash
AT+CIPMUX=1

- 发送 AT 指令打开服务器,并设置端口为 8086。看到 OK 就已经打开了服务器的功能。
bash
AT+CIPSERVER=1,8086

- 为了验证服务器,还需要有客户端来连接。打开网络调试助手 netassist,设置网络调试助手的参数,在左上角网络设置中,(1)协议类型选择TCP Client,(2)远程主机地址输入 WiFi 模块的地址,如果忘记了可以输入 AT+CIFSR 指令查看,(3)远程主机端口输入 8086,要与上一步的端口对应。最后点击连接。这里必须要注意一点就是使用的电脑必须要与 WiFi 连接的是同个路由器,否则是无法连通的。
- 连接成功后,原本的'连接',会变成'断开',颜色也变为红色。而在 K210 这边的串口助手上,会显示一 x,CONNECT,由于是第一个连接,所以编号为 0, 第二个连接则编号为 1,以此类推,可以连接多个设备。
- 此时从网络调试助手发送数据,会在串口助手上显示,原因就是网络调试助手通过 TCP 协议把数据传输给 WiFi 模块,WiFi 模块又传输给K210 芯片,K210听过串口再把数据在串口调试助手上显示
- 此时只能从客户端发送数据到服务器,而服务器发送的数据客户端是接收不到的。如果需要从服务器发送数据给客户端,可以输入以下命令
bash
AT+CIPSEND=客户端号,数据量
例如发送一个 hello 给客户端 0.
可以看到已经发送成功。
实验总结
- WiFi 模块可以设置为服务器模式。
- 其他网络助手的客户端也可以连接到 WiFi 模块的服务器,只是要保证在同一 个局域网,并且输入正确的参数。