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

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

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

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

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

一、項(xiàng)目概述

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

二、主要特性

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

    三、系統(tǒng)要求

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

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

    四、版本及其使用說(shuō)明

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

    定義適配器,完成驅(qū)動(dòng)接口及緩沖區(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)試打印接口(不需要?jiǎng)t填NULL)?
    ????.recv_bufsize??=?256???????????????????????//接收緩沖區(qū)大小(按實(shí)際情況填寫)
    };
    

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

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

    加入定時(shí)輪詢?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命令

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

    命令格式如下:

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

    代碼實(shí)現(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值請(qǐng)求
    ?*/
    static?void?read_csq(void)
    {
    ????//發(fā)送命令,超時(shí)時(shí)間為1000ms,重發(fā)次數(shù)為0
    ????at_send_singlline(at_obj,?csq_respose_callback,?1000,?0,?"AT+CSQ");?
    }
    

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

    五、如何獲取

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

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

    六、結(jié)語(yǔ)

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

相關(guān)推薦

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

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