RT-Thread AT 组件应用笔记 - 客户端篇 1

1 本文的目的和结构

1.1 本文的目的和背景

随着 AT 命令的逐渐普及,越来越多的嵌入式产品上使用了 AT 命令,一般AT 命令作为主芯片和通讯模块的协议接口,硬件接口一般为串口,这样主控设备可以通过简单的命令和硬件设计完成多种操作。

但是不同厂家的不同 AT 命令之间还是没有完全的标准化,这直接提高了用户使用的复杂性。对于 AT 命令的发送和接收以及数据的解析没有统一的处理方式,并且在使用 AT 设备连接网络时,只能通过命令完成简单的设备连接和数据收发功能,很难做到对上层网络应用接口的适配,不利于产品设备的开发。

为了方便用户使用 AT 命令,并且适配不同厂家的不同设备, RT-Thread 提供了 AT 组件用于 AT 设备的连接和数据通讯。AT 组件的使用包括客户端的和服务器,对于嵌入式设备而言,更多的情况下设备使用 AT 组件作为客户端连接服务器设备,所以本文将为大家介绍 AT 组件中客户端的原理、移植方式和主要功能使用,并介绍在客户端的基础上实现标准 BSD Socket API,使用 AT 命令进行网络通讯。

1.2 本文的结构

本应用笔记将从以下几个方面来介绍 RT-Thread AT 组件:

  • AT 组件介绍
  • AT Client 配置与使用
  • AT Socket 配置与使用

2 问题阐述

本应用笔记将围绕下面几个问题来介绍 RT-Thread AT 组件。

  • 什么是 AT 命令? AT 组件的主要功能是什么?
  • 什么是 AT Client,它与 AT Server 之间如何进行数据交互?
  • 如何使用 AT 命令实现标准 BSD Socket API,支持多种网络软件包和功能?

想要解决这些问题,就要了解 RT-Thread AT 组件基本原理和功能使用方式。下面就从 RT-Thread AT 组件 AT Client 原理开始逐步介绍 配置方式、移植以及功能使用,使用户快速上手 AT 组件的 AT Client 功能。

3 问题的解决

3.1 AT 命令简介

AT 命令是一种应用于 AT 客户端(AT Client)与 AT 服务器(AT Server)间的设备连接与数据通信的方式。 其基本结构如下图所示:

RT-Thread AT 组件应用笔记 - 客户端篇 1_第1张图片

 

3.1.1 AT 命令基本概念

  • 一般 AT 命令由三个部分组成,分别是:前缀、主体和结束符。其中前缀由字符 AT 构成;主体由命令、参数和可能用到的数据组成;结束符一般为 ("\r\n")。

  • AT 功能的实现需要 AT Server 和 AT Client 两个部分共同完成;

  • AT Server 主要用于接收 AT Client 发送的命令,判断接收的命令及参数格式,并下发对应的响应数据,或者主动下发数据;

  • AT Client 主要用于发送命令、等待 AT Server 响应,并对 AT Server 响应数据或主动发送的数据进行解析处理,获取相关信息。

  • AT Client 和 AT Server 之间支持多种数据通讯的方式(UART、SPI等),目前最常用的是串口 UART 通讯方式。

  • AT Client 接收到的数据类型分成两种:响应数据和 URC 数据。

    • 响应数据: AT Client 发送命令之后收到的 AT Server 响应状态和信息;
    • URC 数据: AT Server 主动发送给 AT Client 的数据,一般出现在一些特殊的情况,比如 WIFI 连接断开、TCP 接收数据等,这些情况往往需要用户做出相应操作。

3.1.2 AT 组件介绍

AT 组件是基于 RT-Thread 系统的 AT Server 和 AT Client 的实现,组件完成 AT 命令的发送、命令格式及参数判断、命令的响应、响应数据的接收、响应数据的解析、URC 数据处理等整个 AT 命令数据交互流程。

通过 AT 组件,设备可以作为 AT Client 使用串口连接其他设备完成数据的发送、接收与解析,可以作为 AT Server 让其他设备甚至 PC 设备连接完成数据的响应,也可以在本地 shell 启动 CLI 模式使设备同时支持 AT Server 和 AT Clinet 功能,该模式多用于设备开发调试。

3.2 AT Client 功能

本文将基于正点原子 STM32F4 探索者开发板和乐鑫 ESP8266 开发板,给出了 AT 组件中 AT Client 功能的配置、移植和使用方式。

下图为本文使用的两个开发板的底板图,开发者可以使用 ESP8266 开发板或模组,若缺少正点原子 STM32F4 探索者开发板可使用其他带额外串口的开发板代替,需确保开发板正常运行 RT-Thread 系统且串口使用正常即可:RT-Thread AT 组件应用笔记 - 客户端篇 1_第2张图片

RT-Thread AT 组件应用笔记 - 客户端篇 1_第3张图片 

 

AT 组件中 AT Client 主要完成 AT 命令的发送和响应数据的接收与解析。这里我们使用正点原子 STM32F4 探索者开发板串口 2 作为 AT Client 连接 ESP8266 开发板的串口 2,ESP8266 开发板的串口 2 作为 AT Server,完成 AT Client 数据收发和解析的功能,下面就具体给出配置、移植和使用方式的介绍。

3.2.1 AT Client 配置

1.下载 RT-Thread 源码

2.下载 env 工具

3.开启 env 工具,进入 rt-thread\bsp\stm32f4xx-HAL 目录,在 env 命令行输入 menuconfig 进入配置界面配置工程。

RT-Thread AT 组件应用笔记 - 客户端篇 1_第4张图片 配置 shell 设备:RT-Thread Kernel ---> Kernel Device Object ---> 修改 the device name for console 为 uart1,配置 shell 默认设备为串口 1。

RT-Thread AT 组件应用笔记 - 客户端篇 1_第5张图片

  • 配置串口支持:勾选 Using UART1、Using UART2 选项,选择芯片型号为 STM32F407ZG ,外部时钟源为 8MHz。

开启 AT Client 功能:RT-Thread Components ---> Network ---> AT commands --> 开启 AT DEBUG,开启 AT Client 支持,设置 AT Client 使用设备为串口 2。

RT-Thread AT 组件应用笔记 - 客户端篇 1_第6张图片

AT Client 配置选项介绍如下:

  • Enable debug log output:开启调试日志;
  • Enable AT commands client:开启 AT 客户端;
  • Client device name:配置 AT 客户端设备的名称;
  • The maximum length of client data accepted:配置 AT 客户端单次接收数据最大长度;
  • Enable print RAW format AT command communication data: 配置开启收发数据实时打印功能。

4.配置完成,保存并退出配置选项,输入命令 scons --target=mdk5 生成 keil 工程;

3.2.2 AT Client 移植

AT Client 的移植主要是对 URC 数据(服务器主动下发数据)的处理,实现获取不同的 URC 数据时执行相应的操作函数的功能。

如下函数为 AT Client 移植初始化函数,AT 组件源码 src/at_client.c 文件中给出了移植初始化函数的弱函数定义,用户可在项目中新建移植文件实现如下函数完成移植接口,也可以直接在源码文件中修改弱函数完成移植接口。

 

int at_client_port_init(void);

对于 URC 数据,AT 组件中已经提供完善的 URC 数据判断和处理方式,下面给出 AT Client 移植具体示例,该示例主要展示 at_client_port_init() 移植函数中 URC 数据的具体处理方式,用户可直接复制应用到自己的移植文件中,或者进行自定义修改实现功能,最终完成 AT Client 的移植。

注: "OK" 和 "ERROR" 为正常命令响应结果判断字符串,切勿作为 URC 数据设置到 URC 列表中。

 

/* URC 数据相关结构体定义 */
struct at_urc
{
    const char *cmd_prefix;                             //URC 数据前缀
    const char *cmd_suffix;                             //URC 数据后缀
    void (*func)(const char *data, rt_size_t size);     //URC 数据执行函数
};

static void urc_func(const char *data, rt_size_t size)
{
    /* 自定义 URC 数据处理方式 */
    LOG_D("URC data : %.*s", size, data);
}

static struct at_urc urc_table[] = {
    {"ready",            "\r\n",    urc_func},
    {"WIFI CONNECTED",   "\r\n",    urc_func},
    {"WIFI DISCONNECT",  "\r\n",    urc_func},
};

int at_client_port_init(void)
{
    /* 添加多个 URC 结构体至 URC 列表中,当接收到同时匹配 URC 前缀和后缀的数据,执行 URC 函数  */
    at_set_urc_table(urc_table, sizeof(urc_table) / sizeof(urc_table[0]));

    return RT_EOK;

3.2.3 AT Client 示例添加

下载 AT Client 示例代码,添加到打开的 keil 工程中,如下图所示:

RT-Thread AT 组件应用笔记 - 客户端篇 1_第7张图片 示例添加完成,就可以编译、下载程序到开发板,之后打开 PC 上串口工具,这里使用 xshell 工具,选择正确的串口(配置串口参数为 115200-8-1-N、无流控),然后按下复位后就可以在串口 1 连接的终端上看到 RT-Thread 系统启动日志,并可以看到 AT Client 的启动日志,说明 AT Client 功能配置启动成功,如下图所示:

RT-Thread AT 组件应用笔记 - 客户端篇 1_第8张图片

 阅读全文请点击:https://www.rt-thread.org/document/site/rtthread-application-note/components/at/an0014-rtthread-system-at-client/

你可能感兴趣的:(RT-Thread AT 组件应用笔记 - 客户端篇 1)