1.介绍esp8266基本情况,上图为原理图,采用串口AT指令通信,模块有3种运行方式,AP、STA、AP+STA。具体指令请参考at指令集
2.我们接着讲RTT的AT组件,在RTT系统中,分为客户端,服务端,这里我们主要用到客户端,就是来解析URC的。其中有时要用到调试交互功能,输入at client就行了。如图
3.这里讲具体使用,如果在env工具中没有初始化串口,则需要用函数 。
int at_client_init(const char *dev_name, rt_size_t recv_bufsz);
接着创建响应结构体
at_response_t at_create_resp(rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout);
发送信息函数
rt_err_t at_exec_cmd(at_response_t resp, const char *cmd_expr, …);
删除响应结构体函数
at_delete_resp(resp);
解析数据的函数
const char *at_resp_get_line(at_response_t resp, rt_size_t resp_line);//返回某行的数据
const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword);//返回关键字某行的数据
int at_resp_parse_line_args(at_response_t resp, rt_size_t resp_line, const char *resp_expr, …);//返回某行自定义的数据
int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char resp_expr, …);//返回关键字所在行自定义数据
响应的结构体信息
struct at_response
{
/ response buffer */
char buf;
/ the maximum response buffer size /
rt_size_t buf_size;
/ the number of setting response lines
* == 0: the response data will auto return when received ‘OK’ or ‘ERROR’
* != 0: the response data will return when received setting lines number data /
rt_size_t line_num;
/ the count of received response lines /
rt_size_t line_counts;
/ the maximum response time */
rt_int32_t timeout;
};
typedef struct at_response *at_response_t;
下面给出具体示例
#include <rtthread.h>
#include "at.h"
#include "math.h"
#include "string.h"
int main(void)
{
at_response_t resp = RT_NULL;
rt_uint8_t *ip,*mac;
at_client_init("uart3",512);
resp = at_create_resp(128, 0, rt_tick_from_millisecond(5000));
at_exec_cmd(resp, "ATE0");
at_exec_cmd(resp, "AT+CIFSR");
const char * resp_expr = "%*[^\"]\"%[^\"]\"";
char resp_arg[AT_CMD_MAX_LEN] = { 0 };
//第一个
// if(at_resp_parse_line_args(resp, 1, resp_expr, resp_arg) == 1)
// {
// rt_kprintf("Station IP : %s\r\n", resp_arg);
// memset(resp_arg, 0x00, AT_CMD_MAX_LEN);
// }
// if (at_resp_parse_line_args(resp, 2, resp_expr, resp_arg) == 1)
// {
// rt_kprintf("Station MAC : %s\r\n", resp_arg);
// }
//第二个
// at_resp_parse_line_args_by_kw(resp,"IP",resp_expr,resp_arg);
// rt_kprintf("Station IP : %s\r\n", resp_arg);
//第三个
// rt_kprintf(" %s\r\n",at_resp_get_line(resp,1));
// rt_kprintf(" %s\r\n",at_resp_get_line(resp,2));
//第四个
// rt_kprintf(" %s\r\n",at_resp_get_line_by_kw(resp,"IP"));
// rt_kprintf(" %s\r\n",at_resp_get_line_by_kw(resp,"MAC"));
at_delete_resp(resp);
return 0;
}