我是嵌入式固件开发的新手,也是第一次使用MC60。 我必须为要在MC60中使用的所有功能编写自己的头文件和库,无论是UART,BLE,GSM,GPS等。我想知道如何在C中编写头文件,从MCU发送AT命令到MC60,然后获取响应。但是,仍未确定要使用的MCU,仅供参考,我想用C语言编写一个脚本,该脚本可以像使用Arduino LCD命令一样自定义MC60的AT命令,方法是使用LiquidCrystal.h库,如果有人可以告诉我如何编写头文件中的BLE模块的一个或两个命令,然后可以作为我自己编写其他命令的参考。
我正在关注BLE的AT命令的此PDF文档,它包含我要在头文件中自定义的所有命令。 https://github.com/nkolban/esp32-snippets/files/2105752/Quectel_MC60_BLE_AT_Commands_Manual_V1.1.pdf
答案 0 :(得分:1)
我想知道如何用C编写可以发送AT命令的头文件
来自simplewikipedia header file:
在计算机编程中,如果头文件遇到无法理解的词,则可以将其视为编译器使用的字典。
程序的源代码是专门为方便计算机程序员的工作而设计的。
您不能编写将执行操作的头文件。源代码完成计算机的工作,头文件充当字典。
我想知道如何用C编写头文件
关于如何通过C用C编写头文件有很多教程。 tutorialspoint上的教程就是其中之一。
如果有人可以告诉我如何编写BLE模块的一两个命令
意见:经验法则-谷歌“ github,我想要这个”,您将获得代码示例。
我将在MC60中使用的所有功能的库,包括UART,BLE,GSM,GPS
Stackoverflow不是编码服务。
开始上下移动。创建一个抽象。创建API并编写支持抽象的库。向上(或向下)工作并创建所有相关的源文件。
Arduino有许多可以使用的库。 AT命令是您通过通信链接发送的纯数据-主要是通过通用异步收发器(UART)发送的,但不仅如此。您链接的文档是准确的-它列出了可以与设备一起使用的所有可用AT命令。阅读。
可以从MCU发送AT命令到MC60,然后获取响应。
在Serial中描述了arduino上的所有串行通信。您可以在线在arduino上获得许多串行通信示例。请注意,arduino库使用C ++,而不是C。您可以为uart通信编写自己的抽象(或完全没有抽象)。下载设备的数据表/参考手册,阅读并开始在程序中实现所需的功能。
我想要用C语言编写的脚本,该脚本只能自定义AT命令
// 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();
}
以上,我已经自定义了用于打开或关闭设备电源的命令。通过简单的snprintf
,您可以使用所有系列的printf格式修饰符,包括"%d"
。
int state = 1;
snprintf(buf, sizeof(buf), "AT+QBTPWR=%d\r\n", state);