Mbed OS 文档翻译 之 参考(API(平台(ATCmdParser)))

ATCmdParser

                                                                        

                                                                              ATCmdParser 类层次结构

ATCmdParser 是一个兼容 Mbed OS 的 AT 命令解析器和序列化器。AT 命令是用于与诸如调制解调器,电话或 Wi-Fi 模块之类的通信设备通信的指令。每个命令都是 ASCII 格式的文本字符串,每个命令都以 “AT” 字符开头,后跟一个指定要执行的操作的命令。

Mbed OS 中的 ATCmdParser 类实现了向能够使用 AT 命令进行通信的设备发送和接收 AT 命令的功能。ATCmdParser 在内部使用通信通道的驱动程序与设备通信。它希望驱动程序实现 FileHandle 接口以调用驱动程序上的函数。

例如,UARTSerial 通信驱动程序实现 FileHandle 接口,您可以将其与 ATCmdParser 一起用于向通过 UART 连接的设备发送和接收 AT 命令。ATCmdParser 还执行 AT 命令解析,它验证数据格式并分离 AT 事务的命令和数据部分。实际的命令集和使用的 AT 命令的格式取决于所使用的通信设备。您正在与之通信的设备的供应商指定此命令集和格式。

要使用 ATCmdParser,创建 ATCmdParser 对象的实体会将实现 FileHandle 接口的对象的引用作为参数传递给 ATCmdParser 构造函数。ATCmdParser 还支持配置特定的输出分隔符字符序列,具体取决于连接到通信接口的接口或设备。

ATCmdParser 类参考

mbed::ATCmdParser 类参考

公共成员函数
  ATCmdParser (FileHandle *fh, const char *output_delimiter="\r", int buffer_size=256, int timeout=8000, bool debug=false)
  ~ATCmdParser ()
void  set_timeout (int timeout)
void  setTimeout (int timeout)
void  set_delimiter (const char *output_delimiter)
void  setDelimiter (const char *output_delimiter)
void  debug_on (uint8_t on)
void  debugOn (uint8_t on)
bool  send (const char *command,...) MBED_PRINTF_METHOD(1
bool bool  vsend (const char *command, va_list args)
bool  recv (const char *response,...) MBED_SCANF_METHOD(1
bool bool  vrecv (const char *response, va_list args)
int  putc (char c)
int  getc ()
int  write (const char *data, int size)
int  read (char *data, int size)
int  printf (const char *format,...) MBED_PRINTF_METHOD(1
int int  vprintf (const char *format, va_list args)
int  scanf (const char *format,...) MBED_SCANF_METHOD(1
int int  vscanf (const char *format, va_list args)
void  oob (const char *prefix, mbed::Callback< void()> func)
void  flush ()
void  abort ()
bool  process_oob (void)

ATCmdParser 示例

示例 1

main.cpp                                                                                                                                          导入到 Mbed IDE

/* ATCmdParser usage example
 * Copyright (c) 2016 ARM Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "mbed.h"
#include "platform\ATCmdParser.h"
#include "drivers\UARTSerial.h"

#define   ESP8266_DEFAULT_BAUD_RATE   115200

UARTSerial *_serial;
ATCmdParser *_parser;

int main()
{
    printf("\nATCmdParser with ESP8266 example");
    
    _serial = new UARTSerial(D1, D0, ESP8266_DEFAULT_BAUD_RATE);
    _parser = new ATCmdParser(_serial);
    _parser->debug_on( 1 );
    _parser->set_delimiter( "\r\n" );
    
    //Now get the FW version number of ESP8266 by sending an AT command 
    printf("\nATCmdParser: Retrieving FW version");
    _parser->send("AT+GMR");
    int version;
    if(_parser->recv("SDK version:%d", &version) && _parser->recv("OK")) {
        printf("\nATCmdParser: FW version: %d", version);
        printf("\nATCmdParser: Retrieving FW version success");
    } else { 
        printf("\nATCmdParser: Retrieving FW version failed");
        return -1;
    }
    
    printf("\nReset ESP8266 WiFi module");
    for (int i = 0; i < 2; i++) {
        if (_parser->send("AT+RST")
            && _parser->recv("OK\r\nready")) {
            printf("\nATCmdParser: Reseting ESP8266 success");
        } else {
            printf("\nATCmdParser: Reseting ESP8266 failure");
        }
    }
    
    printf("\nStarting-up ESP8266");
    bool success = _parser->send("AT+CWMODE_CUR=%d", 1)
        && _parser->recv("OK")
        && _parser->send("AT+CIPMUX=1")
        && _parser->recv("OK");
    if( success ) {
        printf("\nATCmdParser: Starting-up ESP8266 success");
    } else {
        printf("\nATCmdParser: Starting-up ESP8266 failure");
    }      

    printf("\nScan for WiFi networks");
    unsigned cnt = 0;
    unsigned sec = 0;
    unsigned scan_limit = 5;
    nsapi_wifi_ap_t ap;
    bool ret = true;
    
    if (!_parser->send("AT+CWLAP")) {
        printf("\nScan for WiFi networks failed");
    }

    do
    {
        ret = _parser->recv("+CWLAP:(%d,\"%32[^\"]\",%hhd,\"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx\",%d", 
                            &sec, 
                            ap.ssid,
                            &ap.rssi, 
                            &ap.bssid[0], 
                            &ap.bssid[1], 
                            &ap.bssid[2], 
                            &ap.bssid[3], 
                            &ap.bssid[4],
                            &ap.bssid[5], 
                            &ap.channel);
        

        printf("\nSSID: %s", ap.ssid );
        cnt++;
        if (cnt >= scan_limit) {
            break;
        }
    } while(ret);
    
    printf("\nDone\n");
}

示例 2

您可以在 ESP8266 设备的 Wi-Fi 驱动程序实现中找到另一个真实示例。ESP8266 是一个 Wi-Fi 模块,您可以通过 UART 连接到 SoC 以获得 Wi-Fi 支持。

                                                                          

                                   上图显示了 ESP8266 Wifi 驱动程序如何使用 ATCmdParser 与 ESP8266 设备进行通信。

猜你喜欢

转载自blog.csdn.net/u012325601/article/details/81777127