• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式優(yōu)質(zhì)項目分享-一個基于C語言的AT客戶端命令通信交互組件的設(shè)計與實現(xiàn)

02/08 11:00 來源:嵌入式應(yīng)用研究院
1183
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

素材來源 |Github開源社區(qū)

在當(dāng)今物聯(lián)網(wǎng)(IoT)高速發(fā)展的時代,設(shè)備之間的高效通信成為了關(guān)鍵。AT指令作為設(shè)備通信的標(biāo)準(zhǔn)方式,被廣泛應(yīng)用于Modem、Wi-Fi模塊、藍(lán)牙等場景。然而,如何高效管理這些AT指令的通信交互,始終是開發(fā)者面臨的挑戰(zhàn)。為此,GitHub上的開源項目at-client-cmd應(yīng)運而生,為開發(fā)者提供了一個強大而靈活的解決方案。

一、項目概述

at-client-cmd是一款用于管理AT指令通信交互的組件,適用于Modem、Wi-Fi模塊、藍(lán)牙等需要使用AT指令或ASCII命令行通信的場景。它涵蓋了大部分AT通信形式,如參數(shù)設(shè)置、查詢、二進(jìn)制數(shù)據(jù)發(fā)送等,同時支持自定義命令的交互管理。由于每個命令請求都是異步的,因此即使在無操作系統(tǒng)的環(huán)境下也能良好運行。相較于V1版本,新版本在命令接收匹配、URC不定長度數(shù)據(jù)捕獲以及內(nèi)存安全上進(jìn)行了大量優(yōu)化,使其能夠應(yīng)對更復(fù)雜的產(chǎn)品應(yīng)用。

二、主要特性

    異步命令請求:所有命令請求均為異步,無操作系統(tǒng)也可運行。多樣化命令支持:支持單行命令、批量命令、可變參數(shù)命令以及自定義AT命令。完善的錯誤處理機制:支持命令響應(yīng)超時、錯誤重傳和優(yōu)先級管理。URC消息捕獲:支持不定長度URC(未經(jīng)請求主動上報)消息的捕獲。多設(shè)備管理:支持多個AT設(shè)備的通信管理。內(nèi)存監(jiān)控:支持內(nèi)存使用監(jiān)視與限制。命令生命周期管理:支持命令請求的生命周期管理,實時監(jiān)視命令執(zhí)行狀態(tài)。命令透傳:支持命令透傳功能。

三、系統(tǒng)要求

為了確保AT指令的正常通信,目標(biāo)系統(tǒng)需滿足以下要求:

    動態(tài)內(nèi)存支持。RAM資源:至少1KB(取決于接收緩沖區(qū)與URC緩沖區(qū)的設(shè)置),建議在可分配3KB以上內(nèi)存的系統(tǒng)中使用。編譯器:系統(tǒng)使用了一些C99的特性(如柔性數(shù)組、內(nèi)聯(lián)),因此編譯器需開啟對C99的支持。對于IAR、GCC,它們默認(rèn)是開啟的,而Keil MDK需要手動增加編譯選項(--c99 --gnu)。

四、版本及其使用說明

相較于V1版本,V2版本主要針對“at_chat”模塊進(jìn)行了整體優(yōu)化,支持URC功能,同時加強了對操作系統(tǒng)環(huán)境的支持。由于采用動態(tài)內(nèi)存方式管理AT命令請求,對RAM資源的要求更高,但使用上更加便捷。下面簡單介紹下如何使用(參考:https://github.com/zhbi98/at-client-cmd/tree/main):

定義適配器,完成驅(qū)動接口及緩沖區(qū)設(shè)置

/**
?*?@brief?AT適配器
?*/
static?const?at_adapter_t?at_adapter?=?{
????.lock??????????=?at_mutex_lock,???????????//多任務(wù)上鎖(非OS下填NULL)
????.unlock????????=?at_mutex_unlock,?????????//多任務(wù)解鎖(非OS下填NULL)
????.write?????????=?at_device_write,?????????//串口數(shù)據(jù)寫接口(非阻塞式)
????.read??????????=?at_device_read,??????????//串口數(shù)據(jù)讀接口(非阻塞式)
????.debug?????????=?at_debug,????????????????//調(diào)試打印接口(不需要則填NULL)?
????.recv_bufsize??=?256???????????????????????//接收緩沖區(qū)大小(按實際情況填寫)
};

使用AT適配器創(chuàng)建AT通信對象

????at_obj_t?*at_obj;
????//....
????at_obj?=?at_obj_create(&at_adapter);
????if?(at_obj?==?NULL)?{
????????printf("at?object?create?failedrn");
????}??
????//...

加入定時輪詢?nèi)蝿?wù)

/**
?*?@brief?輪詢程序
?*/
void?at_device_process(void)
{
????static?unsigned?int?timer;
????//為了加快AT命令處理響應(yīng)速度,建議5ms以內(nèi)輪詢一次
????if?(get_tick()?-?timer?>?5)?{
????????timer?=?get_tick();
????????at_obj_process(&at_obj);
????}????
}

發(fā)送AT命令

完成上面幾個步驟之后,就可以執(zhí)行AT命令請求了,下面以查詢MODEM信號質(zhì)量為例,演示如何發(fā)送AT命令及解析響應(yīng)內(nèi)容.

命令格式如下:

=>??AT+CSQ
<=??+CSQ:?<rssi>,<ber>
<=??OK

代碼實現(xiàn):

/**
?*?@brief??命令響應(yīng)處理程序
?*/
static?void?csq_respose_callback(at_response_t?*r)???
{
????int?rssi,?ber;
????//+CSQ:?<rssi>,<ber>
????if?(r->code?==?AT_RESP_OK)?{
????????//命令響應(yīng)成功后,解析出rssi,ber.
????????if?(sscanf(r->prefix,?"+CSQ:%d,%d",?&rssi,?&ber)?==?2)?{
????????????printf("rssi:%d,?ber:%drn",?rssi,?ber);
????????}
????}?else?{
????????printf("'CSQ'?command?response?failed!rn");
????}
}??
/**
?*?@brief??讀CSQ值請求
?*/
static?void?read_csq(void)
{
????//發(fā)送命令,超時時間為1000ms,重發(fā)次數(shù)為0
????at_send_singlline(at_obj,?csq_respose_callback,?1000,?0,?"AT+CSQ");?
}

下面是在M169 WIFI上運行的效果圖(例子:at_chat/samples/none_os)

五、如何獲取

您可以在GitHub上訪問at-client-cmd項目,獲取詳細(xì)的文檔和源碼。該項目遵循Apache-2.0開源許可證,歡迎廣大開發(fā)者參與貢獻(xiàn)。

https://github.com/zhbi98/at-client-cmd

六、結(jié)語

AT 指令作為設(shè)備通信的標(biāo)準(zhǔn)方式,就像一座橋梁,連接著不同的設(shè)備,被廣泛應(yīng)用于 Modem、Wi-Fi 模塊、藍(lán)牙等場景。然而,如何高效管理這些 AT 指令的通信交互,始終是開發(fā)者面臨的挑戰(zhàn)。就好比在繁忙的交通樞紐,如何合理調(diào)度車輛,確保交通順暢,是一個復(fù)雜而又關(guān)鍵的問題。at-client-cmd組件為開發(fā)者提供了一個高效、靈活的AT指令通信管理方案。無論是在有操作系統(tǒng)還是無操作系統(tǒng)的環(huán)境下,它都能助您輕松實現(xiàn)設(shè)備間的通信交互,加速產(chǎn)品開發(fā)進(jìn)程。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本科畢業(yè)于華南理工大學(xué),現(xiàn)美國卡羅爾工商管理碩士研究生在讀,曾就職于世界名企偉易達(dá)、聯(lián)發(fā)科技等,多年嵌入式產(chǎn)品開發(fā)經(jīng)驗,在智能玩具、安防產(chǎn)品、平板電腦、手機開發(fā)有豐富的實戰(zhàn)開發(fā)經(jīng)驗,現(xiàn)任深圳市云之手科技有限公司副總經(jīng)理、研發(fā)總工程師。