-2

我是嵌入式固件开发的新手,第一次使用 MC60。我必须为我将在 MC60 中使用的所有功能编写自己的头文件和库,无论是 UART、BLE、GSM、GPS 等。我想知道如何用 C 编写头文件,可以从 MCU 向 MC60 发送 AT 命令并获取响应。但是,要使用的 MCU 仍未确定,作为参考,我想要一个 C 中的脚本,它可以像使用库 LiquidCrystal.h 对 Arduino LCD 命令一样自定义 MC60 的 AT 命令,如果有人能告诉我如何编写头文件中BLE模块的一两个命令,然后可以作为我自己编写其他命令的参考。

我正在关注 BLE AT 命令的 PDF 文档,它包含我想在头文件中自定义的所有命令。https://github.com/nkolban/esp32-snippets/files/2105752/Quectel_MC60_BLE_AT_Commands_Manual_V1.1.pdf

4

1 回答 1

1

我想知道如何在 C 中编写一个可以发送 AT 命令的头文件

simplewikipedia 头文件

在计算机编程中,头文件可以被认为是编译器在遇到一个它不理解的单词时使用的字典。

来自维基百科源代码

程序的源代码是专门为方便计算机程序员的工作而设计的。

您不能编写将执行操作的头文件。源代码完成计算机的“工作”,头文件充当字典。

我想知道如何在 C 中编写头文件

网上有很多关于如何用 C 语言编写头文件的教程。tutorialspoint 上的教程就是其中之一。

如果有人能告诉我如何编写BLE模块的一两个命令

意见:经验法则 - 谷歌“github我想要这个”,你会得到代码示例。

我将在 MC60 中使用的所有功能的库,无论是 UART、BLE、GSM、GPS

Stackoverflow 不是编码服务。

开始向上或向下。创建一个抽象。创建 API 并编写支持您的抽象的库。向上(或向下)工作并创建所有相关的源文件。

Arduino 有许多可以使用的库。AT 命令是您通过通信链路发送的纯数据 - 主要通过通用异步接收传输 (UART),但不仅如此。您链接的文档是准确的 - 它列出了您可以在设备上使用的所有可用 AT 命令。阅读。

可以从 MCU 向 MC60 发送 AT 命令并获取响应。

arduino 上的所有串行通信都在Serial中进行了描述。您可以在线获取 arduino 上的许多串行通信示例。请注意,arduino 库是 C++ 中的,而不是 C 中的。您可以为 uart 通信编写自己的抽象(或根本没有抽象)。为您的设备下载数据表/参考手册,阅读并开始在您的程序中实现所需的功能。

我想要一个可以自定义 AT 命令的 C 脚本

// abstract API to send the data pointed to by pointer with ptrsize bytes through UART
void uart_send(void *ptr, size_t ptrsize);
// abstract API to read the data from uart and place it at memory pointed to by ptr
// reads as much as ptrsize bytes or until timeout_ms miliseconds timeout
void uart_read(void *ptr, size_t ptrsize, int timeout_ms);

// buffer
char buf[256];

// "customize" buf to the "Power on/off BT" at command that powers up the device
snprintf(buf, sizeof(buf), "AT+QBTPWR=1\r\n");
// power up the device
uart_send(buf, strlen(buf));

// read the response from the device with 1 second timeout
uart_read(buf, sizeof(buf), 1000);
// check the response
if (strcmp(buf, "OK\r\n") != 0) { 
    fprintf(stderr, "Device didn't repond with OK!\n");
    abort();
}


// "customize" buf to have the "Power on/off BT" at command that powers down the device
snprintf(buf, sizeof(buf), "AT+QBTPWR=0\r\n");
// power down the device
uart_send(buf, strlen(buf));

uart_read(buf, sizeof(buf), 1000);
if (strcmp(buf, "OK\r\n") != 0) { 
    fprintf(stderr, "Device didn't repond with OK!\n");
    abort();
}

上面我已经自定义了启动或关闭设备的命令。使用 simplesnprintf您可以使用所有系列 printf 格式修饰符,包括"%d".

int state = 1;
snprintf(buf, sizeof(buf), "AT+QBTPWR=%d\r\n", state);
于 2018-12-20T08:28:10.223 回答