RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于模塊HTTP測試流程

科技綠洲 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2023-09-11 15:05 ? 次閱讀
  • 前言
  • 一、基礎(chǔ)說明
    • 1.1 CAT1 與 4G
    • 1.2 EC800M 模塊
    • 1.3 HTTP
  • 二、開始使用
    • 2.1 硬件設(shè)計(jì)部分
    • 2.2 模塊上電流
    • 2.3 PDP 上下文
  • 三、 HTTP 流程
    • 3.1 客戶端
    • 3.2 服務(wù)器端
  • 結(jié)語

前言

最近用到了 CAT1 模塊 EC800 ,項(xiàng)目需求是使用 CAT1 模塊通過 HTTP 協(xié)議上報(bào)數(shù)據(jù)給服務(wù)器。

以前的項(xiàng)目對于 MQTT 協(xié)議使用比較多,對于 HTTP 其實(shí)并沒有太過深入的了解, 寫本文的目的就是 記錄一下 EC800 HTTP 協(xié)議的使用流程,給大家提供一個(gè)例子,在對 HTTP 協(xié)議沒有深入理解的情況下,如何能夠快速的使得產(chǎn)品正常的設(shè)計(jì)出來。ヾ(?°?°?)?? !

因?yàn)樯婕暗揭苿?dòng)通信網(wǎng)絡(luò)相關(guān)問題,對于一些專業(yè)性的基本知識,本文會中會引用前人的一些博文說明,文中的引用都會給出原文連接。

我是矜辰所致,全網(wǎng)同名,盡量用心寫好每一系列文章,不浮夸,不將就,認(rèn)真對待學(xué)知識的我們,矜辰所致,金石為開!

一、基礎(chǔ)說明

接到項(xiàng)目需求,第一時(shí)間就得對一些基本的背景知識做一定的了解,比如 什么是 CAT1? 模塊的基本應(yīng)用資料,HTTP 的相關(guān)知識等等。

1.1 CAT1 與 4G

Cat.1 的全稱是 LTE UE-Category1,在2009年,Cat.1-5 是 3GPP 專門劃分出來,面向于未來物聯(lián)網(wǎng)應(yīng)用市場的類別,Cat.1 的最終目標(biāo)是服務(wù)于物聯(lián)網(wǎng)并實(shí)現(xiàn)低功耗和低成本 LTE 連接。

LTE 英文 “Long-Term Evolution” ,中文名稱為長期演進(jìn)技術(shù)。它是一種用于移動(dòng)通信的無線網(wǎng)絡(luò)標(biāo)準(zhǔn),也是4G(第四代)移動(dòng)通信技術(shù)的主要標(biāo)準(zhǔn)之一。 UE 英文 “User Equipment” 指的是用戶終端,它是LTE網(wǎng)絡(luò)下用戶終端設(shè)備的無線性能的分類。3GPP用Cat.1~20來衡量用戶終端設(shè)備的無線性能,也就是劃分終端速率等級。

Cat.1 是屬于4G系列,可以完全重用現(xiàn)有的4G資源。Cat.1是配置為最低版本參數(shù)的用戶終端級別,可讓業(yè)界以低成本設(shè)計(jì)低端4G終端。

隨著現(xiàn)在物聯(lián)網(wǎng)的發(fā)展,Cat.1 在物聯(lián)網(wǎng)領(lǐng)域越發(fā)重要,與NB-IoT和2G模塊相比,Cat.1在網(wǎng)絡(luò)覆蓋范圍,速度和延遲方面具有優(yōu)勢。與傳統(tǒng)的 Cat.4 模塊相比,它具有成本低,功耗低的優(yōu)點(diǎn)。

1.2 EC800M 模塊

EC800M-CN 是移遠(yuǎn)通信專為 M2MIoT 領(lǐng)域而設(shè)計(jì)的超小尺寸LTE Cat 1無線通信模塊,支持最大下行速率10 Mbps和最大上行速率 5 Mbps。

對于模塊來說,移遠(yuǎn)會提供你完成的一套說明資料,硬件設(shè)計(jì),軟件設(shè)計(jì),使用流程應(yīng)有盡有,如果你本身對這一領(lǐng)域有所了解,那使用起來基本不費(fèi)什么事情,完全不需要去額外的尋找資料。

圖片

1.3 HTTP

如果你了解 HTTP ,以及 4G 網(wǎng)絡(luò)的一些基礎(chǔ),那你直接照著上面 模塊的手冊資料直接 AT 指令直接用起來就行了。

如果你沒有了解過,確實(shí)需要花店時(shí)間去了解,這里推薦一篇文章:

HTTP超詳細(xì)教程

對于我們應(yīng)用而言,有幾個(gè)地方我們是一定要了解的,第一個(gè) HTTP 協(xié)議格式,比如 HTTP 的協(xié)議格式(圖片引用至上面推薦文章):

HTTP 請求格式:

圖片

HTTP 響應(yīng)格式:

圖片

HTTP 協(xié)議格式:

圖片

GET 方法用來獲取服務(wù)器上面的數(shù)據(jù),對于我們的項(xiàng)目,我們其實(shí)只需要用到 HTTP 的 POST 方法,POST請求需要傳遞的數(shù)據(jù)一般通過 body 傳遞。

比如一個(gè)給服務(wù)器輸入用戶名密碼的 POST 請求例子(圖片引用至上面推薦文章):

圖片

對于我們使用 CAT1 模塊來說,我們最終要做的就是在程序中組一個(gè)類似上面內(nèi)容的數(shù)據(jù)包,發(fā)送出去就行了。

當(dāng)然實(shí)際上一般在物聯(lián)網(wǎng)場合,傳感器上報(bào)數(shù)據(jù)需要組的包比上面會簡單得多。

二、開始使用

基礎(chǔ)知識了解過后,接下來就是開始測試使用了。

2.1 硬件設(shè)計(jì)部分

硬件部分基本上照著 官方文檔來就行了,沒有一點(diǎn)難度,真的沒什么好說的,省略,詳細(xì)請參考 《Quectel_EC800M-CN_硬件設(shè)計(jì)手冊_V1.1.pdf》(不同型號的芯片有不同的對應(yīng)手冊,根據(jù)手冊來就行了)。

象征性的上一張?jiān)韴D:

圖片

2.2 模塊上電流程

雖然模塊的官方會提供文檔說明 HTTP 命令的使用流程,如下圖:

圖片

但是我們一般不會一上電就直接這么使用,簡單來說就是首先你得確保模塊通訊正常并且正常附著網(wǎng)絡(luò),那么我們正常的使用中都會有一個(gè) 模塊初始化流程(雖然模塊一切正常的情況下,會自動(dòng)聯(lián)網(wǎng))。

我們需要經(jīng)過一些上電后的 AT 指令交互,確保模塊聯(lián)網(wǎng)正常,然后才能開始按照上面手冊的流程走下去。

步驟指令說明
1AT串口通訊基本測試
OK返回“OK”表示與模塊通訊正常
2AT+CPIN?檢查 SIM 卡是否插入
+CPIN: READY OK返回“READY”表明讀卡成功
3AT+CSQ查詢信號質(zhì)量
+CSQ: 23,99 OK參數(shù)1:信號質(zhì)量(0~ 31),一般打魚8 小于31就行 參數(shù)2:忽略
4AT+CEREG?查詢網(wǎng)絡(luò)注冊狀態(tài)
+CEREG: 0,1 OK參數(shù)2:1表示注冊成功
5AT+CGATT?查詢網(wǎng)絡(luò)附著狀態(tài)
+CGATT: 1 OK1表示成功,0表示失敗

上面的這些可作為模塊上電的檢查手段,完成上面的步驟,才可以開始進(jìn)行后面的操作。 在程序中,我們可以把這些操作當(dāng)做 模塊的初始化。

上面的指令結(jié)尾都需要回車換行,在程序中定義字符串的時(shí)候末尾記得要加上

圖片

測試代碼如下:

void ec800_init()
{
    u16 cat1_timeout = 0;

    while(Iot_SendCmd(AT,"OK", 200)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            printf(" uart falsern");
            return;   
        }
    }
    cat1_timeout = 0;
    printf("uart okrn");
    while(Iot_SendCmd(CPIN,"READY", 200)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("simcard okrn");
    while(Iot_SendCmd(RSSI,"+CSQ", 200)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    while(Iot_SendCmd(CEREG,"0,1", 200)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    printf("網(wǎng)絡(luò)注冊 okrn");
    cat1_timeout = 0;
    while(Iot_SendCmd(CGATT,"+CGATT: 1", 200)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    printf(" 網(wǎng)絡(luò)附著 okrn");
}

2.3 PDP 上下文

我們在看文檔的時(shí)候,會有一個(gè) PDP 上下文的概念,這里我們需要對這個(gè)概念說明一下。

PDP,Packet Data Protocol,分組數(shù)據(jù)規(guī)程,移動(dòng)通信用戶在發(fā)送和接收分組數(shù)據(jù)時(shí)應(yīng)用的協(xié)議,應(yīng)用于 GPRS以及 WCDMA 等分組網(wǎng)絡(luò)。 . PDP context 即 PDP 上下文,保存用戶面進(jìn)行隧道轉(zhuǎn)發(fā)的所有信息,包括 RNC / GGSN 的用戶面 IP 地址、隧道標(biāo)識和 QoS 等。

實(shí)際上如果對網(wǎng)絡(luò)不了解的看完了上面的基本概念,應(yīng)該還是不理解,所以我這里用白話文簡單解釋一下:

就是說我們需要用 PDP(Packet Data Protocol )傳輸數(shù)據(jù),那么就必須給他建立一個(gè)背景,就是所謂的上下文,你得告訴 SGSN 和 GGSN (什么是 SGSN 和 GGSN ,往下面看,就類似于中轉(zhuǎn)站,網(wǎng)關(guān)類) 一些基本信息 :本地標(biāo)識(cid),你想要的 pdp_type(這里就是IP),你的接入點(diǎn)信息。

接入點(diǎn)不同的運(yùn)行商是不同的: 聯(lián)通:UNINET 移動(dòng):CMNET 電信:CTNET

我們不把 PDP 上下文用專業(yè)的術(shù)語去理解,簡單的說,PDP 上下文就是在你準(zhǔn)備連接 Internet 傳輸數(shù)據(jù)之前,必須要做的一些基本配置,給你發(fā)個(gè)通訊卡,后面你就可以傳輸數(shù)據(jù)了,激活一個(gè) PDP 上下文意味著發(fā)起一個(gè)分組數(shù)據(jù)業(yè)務(wù)呼叫。

2.3.1 什么是 SGSN 和 GGSN ?

在上面介紹 PDP 的時(shí)候提到過 SGSN 和 GGSN ,關(guān)于這一塊,我也是參考前人的博文:

移動(dòng)數(shù)據(jù)通信網(wǎng)絡(luò)工作原理(SGSN&GGSN)

圖片引用至上面推薦博文:

圖片

內(nèi)容引用至上面推薦博文:

SGSNSGSN主要用于為在其地理范圍內(nèi)的移動(dòng)站傳遞數(shù)據(jù)包,相當(dāng)于無線網(wǎng)絡(luò)中的路由節(jié)點(diǎn)。它可以進(jìn)行分組路由和轉(zhuǎn)發(fā),移動(dòng)性管理(附著,去附著和位置管理),邏輯鏈路管理,鑒權(quán)以及計(jì)費(fèi)功能。SGSN的位置寄存器保存著位置信息,比如當(dāng)前的小區(qū)。 SGSN的主要功能包括: 1 完成和GGSN的通信,通過GTP協(xié)議將用戶數(shù)據(jù)傳遞給GGSN,并將GGSN返回的數(shù)據(jù)傳遞給用戶 2 當(dāng)用戶地理位置發(fā)生變化,執(zhí)行移動(dòng)性管理。GGSNGSGN作為整個(gè)GPRS/UMTS網(wǎng)絡(luò)的網(wǎng)關(guān),位于GPRS網(wǎng)絡(luò)和外部分組交換網(wǎng)絡(luò)(Internet)之間。網(wǎng)關(guān)的作用能將一種協(xié)議格式的數(shù)據(jù)轉(zhuǎn)換為另一種格式的數(shù)據(jù)。 GGSN把來自的SGSN的GPRS數(shù)據(jù)包轉(zhuǎn)化為適當(dāng)?shù)姆纸M數(shù)據(jù)協(xié)議格式,比如IP,然后再把它們發(fā)送到相應(yīng)的分組數(shù)據(jù)網(wǎng)絡(luò),比如廣域有線網(wǎng)。反之亦然。SGSN和GGSN的區(qū)別所以,GGSN和SGSN的主要區(qū)別就在于,GGSN作為網(wǎng)關(guān),是在不同的通信網(wǎng)中轉(zhuǎn)換協(xié)議,而SGSN作為路由,只是在使用相同協(xié)議的網(wǎng)絡(luò)中發(fā)送、接受以及延遲它的數(shù)據(jù)包。 另外,GGSN能夠?qū)崿F(xiàn)地址的轉(zhuǎn)換,比如把無線網(wǎng)絡(luò)內(nèi)部地址(PDP地址)轉(zhuǎn)換為一個(gè)分組數(shù)據(jù)網(wǎng)絡(luò)協(xié)議地址(IP地址),而SGSN只能實(shí)現(xiàn)PDP地址映射,即根據(jù)一個(gè)地址,映射到相同種類的另一個(gè)地址??梢?,我們常說的3、4G網(wǎng)絡(luò)的IP地址,其實(shí)就是對應(yīng)GGSN的出口IP地址。

到這里,一些開始使用需要了解的基礎(chǔ)問題都已經(jīng)說明了,那么下面其實(shí)就可以直接開啟 HTTP 的使用了。

三、 HTTP 流程

上面準(zhǔn)備工作做完了,我們接下來往下面進(jìn)行。

3.1 客戶端

客戶端實(shí)際上就是我們的板子,在上面我們已經(jīng)給出了 EC800M 上電初始化的流程。

在完成上述的初始化以后,我們就可以按照官方手冊進(jìn)行下去了,本部分我們主要使用圖示和實(shí)際測試代碼給出說明。

我們來回顧一下上面的流程(這里我們用官方文檔中的示例圖說明):

圖片

上面的流程是官方給出的一個(gè)簡單的樣例,大體上,按照順序來就行了。

其中需要注意的就是 ,有一個(gè)參數(shù)設(shè)置樣例中并沒有,就是數(shù)據(jù)類型,數(shù)據(jù)類型其實(shí)是大家需要 POST 的服務(wù)器有關(guān)的,這個(gè)需要自己了解服務(wù)器端需要怎樣的數(shù)據(jù)類型:

圖片

比如本次測試,我使用了了 "AT+QHTTPCFG="contenttype",1rn" 就是設(shè)置為 "text/plain" 類型。

上面還是用了 AT+QIACT=1 激活 PDP上下文,但是圖中也提到了是默認(rèn)激活的,我發(fā)現(xiàn)如果是激活狀態(tài),使用這個(gè)指令會返回 ERROR (有待確定)。

其他的倒是沒有什么問題,這里直接上一下代碼。

3.1.1 PDP 上下文配置

void ec800_pdp_prepare(){
    u16 cat1_timeout = 0;
    while(Iot_SendCmd("AT+QHTTPCFG="contextid",1rn","OK", 200)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("設(shè)置 QHTTPCFG okrn");

    while(Iot_SendCmd("AT+QIACT?rn","OK", 3000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("PDP_CHECK one okrn");

    
    while(Iot_SendCmd("AT+QHTTPCFG="contenttype",1rn","OK", 3000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("CFG okrn");

    // while(Iot_SendCmd("AT+QHTTPCFG="rspout/auto",1rn","OK", 3000)){
    //     HAL_Delay(1);
    //     cat1_timeout ++;
    //     if(cat1_timeout >= 2000){
    //         return;   
    //     }
    // }
    // cat1_timeout = 0;
    // printf("auto header okrn");

    /*
    "AT+QICSGP=1,1,"CMNET","","",1rn"
    APN 聯(lián)通:UNINET   移動(dòng):CMNET   電信:CTNET
    */
    while(Iot_SendCmd("AT+QICSGP=1,1,"CMNET","","",1rn","OK", 3000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("PDP_CONFIG okrn");
    while(Iot_SendCmd("AT+QIACT?rn","+QIACT", 3000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout  >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("PDP_CHECK two okrn");

    // while(Iot_SendCmd("AT+QIACT=1rn","OK", 500)){
    //     HAL_Delay(1);
    //     cat1_timeout ++;
    //     if(cat1_timeout >= 2000){
    //         return;   
    //     }
    // }
    // cat1_timeout = 0;
    // printf("PDP_激活 okrn");
}

3.1.2 URL 設(shè)置

接下來就是設(shè)置 URL ,URL 從哪里來,就是服務(wù)器會提供,比如 ONENET 平臺對于 HTTP 的說明如下:

圖片

這里我們 POST 設(shè)置的 URL ,就是上面的 Address+URL,對應(yīng)在下面的程序中,就是char *url 這個(gè)參數(shù):

void http_set_url(char *url)
{
    u16 cat1_timeout = 0;
    char message[32];
    snprintf(message, sizeof(message), "AT+QHTTPURL=%d,%drn", strlen(url), 5);
    while(Iot_SendCmd(message,"CONNECT", 1000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("ready to send urlrn");
    while(Iot_SendCmd(url,"OK", 5000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("url set OKrn");
}

到目前為止,我們程序中整體調(diào)用流程如下圖所示:

圖片

3.1.3 POST 請求

上面的 URL 設(shè)置完成,我們就可以隨時(shí)發(fā)送 POST 請求了,比如我們是一個(gè)傳感器設(shè)備,周期性的采集傳感器數(shù)據(jù),到了自己設(shè)定的時(shí)間,就直接 POST 就行了,下面是 POST 請求的實(shí)現(xiàn)函數(shù):

void http_post_message(const char *message) {
    int length = strlen(message);
    char at_post[32];
    u16 cat1_timeout = 0;
    snprintf(at_post, sizeof(at_post), "AT+QHTTPPOST=%d,%d,%drn", length, 5, 10);
    while(Iot_SendCmd(at_post,"CONNECT", 500)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("ready to send post message!rn %srn", message);
    while(Iot_SendCmd(message,"OK", 5000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("http post OKrn");
    //"AT+QHTTPREAD=1rn"
    while(Iot_SendCmd("AT+QHTTPREAD=5rn","+QHTTPREAD", 1000)){
        HAL_Delay(1);
        cat1_timeout ++;
        if(cat1_timeout >= 2000){
            return;   
        }
    }
    cat1_timeout = 0;
    printf("HTTPREAD OKrn");
}

當(dāng)然上面的參數(shù)const char *message 是需要我們自己組包的,一般來說使用 JSON 格式的比較多,比如測試過程中,我的程序如下:

圖片

最后上面流程中調(diào)用的Iot_SendCmd函數(shù)也上一下:

int Iot_SendCmd(const char* cmd, char* reply, int wait)
{
 u8 i=0;
    char* rss_str;
    int rssi,res;
    CLEAR_EC800_Buffer(EC800_RX_Data);

    Uart3_sendBuffer((u8*)cmd,strlen(cmd));
    
    while(EC800ReceiveState != true)
    {
        HAL_Delay(1);
        i++;
        if(i >= wait){
            printf("cat1 check outrn");
            return 0xFF;   
        }
    }
    EC800ReceiveState = false;

    if (!strcmp(reply,"+CSQ"))
    {
       rss_str = strstr((char*)EC800_RX_BUF, "+CSQ:");
        if (!rss_str) {
            return 1;
        }

        sscanf(rss_str, "+CSQ:%d,%d", &rssi, &res);
        if (rssi != 99) {
            printf("RSSI is %drn",rssi);
            CLEAR_EC800_Buffer(EC800_RX_Data);
            return 0;
        }
    }
    
    else if (strstr((char*)EC800_RX_BUF, reply)){  
        printf("rn%srn", EC800_RX_BUF);
        CLEAR_EC800_Buffer(EC800_RX_Data);
        return 0;
    }

    return 1;  
}

3.1.4 注意事項(xiàng)

(此處待更新,后續(xù)一些細(xì)節(jié)問題的說明需要補(bǔ)充)

1、關(guān)于字體

首先要注意的就是 字體,要和服務(wù)器的字體匹配;

通過"AT+QHTTPCFG="contenttype",1rn"設(shè)置字體,這點(diǎn)上面已經(jīng)提到過;

2、關(guān)于 HTTP 響應(yīng)

指令AT+QHTTPCFG="responseheader",1是啟用輸出 HTTP 響應(yīng)頭信息:

圖片

如果啟用了以后,使用AT+QHTTPREAD讀取的 HTTP 響應(yīng)消息如下:

圖片

此時(shí)返回比較多,響應(yīng)都有 600多個(gè)字節(jié),接近 700 字節(jié),這里大家寫程序時(shí)候需要考慮到串口緩存大小。

不啟用這個(gè),則讀取的 HTTP 響應(yīng)消息如下:

圖片

此時(shí)返回不到200字節(jié)

3、關(guān)于 cat1 模塊返回?cái)?shù)據(jù)的處理

本文使用的是 STM32F103 芯片,在對于 AT 指令串口處理的時(shí)候需要注意,一般來說,對于普通的 AT 指令,我們可以直接使用 IDLE 中斷進(jìn)行判斷是否接收完成,程序處理如下:

圖片

但是對于 AT+QHTTPPOSTAT+QHTTPREAD 來說,他們返回的不是一幀數(shù)據(jù),而是分段的數(shù)據(jù),如果使用 上面的處理就會出問題,所以我們需要對于這兩個(gè)指令進(jìn)行單獨(dú)的處理:

/*省略*/
  Uart3_sendBuffer((u8*)cmd,strlen(cmd));
    
    /*
    此處串口回的不止是一幀數(shù)據(jù),所以使用 IDLE 中斷不合適
    */
    if ((!strcmp(reply,"+QHTTPREAD:"))||(!strcmp(reply,"+QHTTPPOST:"))){
        //讀取和發(fā)送的處理,直接等一段時(shí)間
        HAL_Delay(1000);// 500 600 800 1000 一直加大   
    }
    /*
        另外的設(shè)置指令大多都是等待一個(gè) OK 返回,屬于一幀數(shù)據(jù)
        所以可以用 IDLE 中斷
    */
    else{
        while(EC800ReceiveState != true)
        {
            HAL_Delay(1);
            i++;
            if(i >= wait){
                printf("cat1 check outrn");
                return 0xFF;   
            }
        }
    }
    EC800ReceiveState = false;

當(dāng)然,實(shí)際上對于 AT 指令的模塊來說,因?yàn)樗粫欢〞r(shí)的發(fā)送消息,所以實(shí)際上所有 AT 指令發(fā)送后的返回結(jié)果,都可以不用 IDLE 中斷處理,發(fā)送完 AT 命令以后,直接延時(shí)等待一定的時(shí)間讀取串口數(shù)據(jù)即可。

3.2 服務(wù)器端

服務(wù)器端大家可以選擇現(xiàn)在常用的一些云平臺, 阿里云,ONENET,華為云等等由 物聯(lián)網(wǎng)模型支持的,服務(wù)器端只需要自己進(jìn)行一些基本的產(chǎn)品創(chuàng)建,配置,然后根據(jù)平臺提供的開發(fā)文檔,進(jìn)行上面的流程即可,比如:

圖片

本次測試使用公司自己的服務(wù)器,有軟件部門的同事專門負(fù)責(zé),所以省去了服務(wù)器端的配置流程。

結(jié)語

原本寫本文的目的只是想記錄一下 EC800M HTTP 的使用步驟,但是因?yàn)樯婕暗降囊恍┩ㄓ嵉幕局R自己也都去復(fù)習(xí)了解了一邊,所以最終內(nèi)容還是比預(yù)計(jì)的要多。除了把模塊 HTTP 測試流程給大家講了一邊,還額外提了一些 網(wǎng)絡(luò)通訊相關(guān)的內(nèi)容,自己也有不少的收獲。

文中提供的代碼是自己的測試代碼,至于后期實(shí)際項(xiàng)目使用,大家還需要根據(jù)自己的需求進(jìn)行完善。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2695

    瀏覽量

    47431
  • LTE
    LTE
    +關(guān)注

    關(guān)注

    15

    文章

    1358

    瀏覽量

    177858
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9123

    瀏覽量

    85322
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    504

    瀏覽量

    31194
  • Cat1
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    3472
收藏 人收藏

    評論

    相關(guān)推薦

    講解HTTP代理類別,使用設(shè)置,測試HTTP代理方法

    HTTP
    jf_62215197
    發(fā)布于 :2024年07月19日 07:03:46

    無線模塊的生產(chǎn)測試流程!急求!感謝!

    想學(xué)習(xí)無線模塊的生產(chǎn)測試流程,細(xì)化到流程、工藝、設(shè)備、技術(shù)指標(biāo)、人員配備等。奈何網(wǎng)上極度缺乏此類資料~所以大神能否提供一些類似的網(wǎng)頁介紹,或者現(xiàn)身說法,大方分享一下貴公司的這方面實(shí)際經(jīng)
    發(fā)表于 03-18 22:18

    基于嵌入式網(wǎng)絡(luò)模塊HTTP 數(shù)據(jù)采集方案

    基于嵌入式網(wǎng)絡(luò)模塊HTTP 數(shù)據(jù)采集方案:摘要:本文提出了一種在單片機(jī)系統(tǒng)中實(shí)施基于HTTP 協(xié)議的數(shù)據(jù)采集的方案,利用嵌入式網(wǎng)絡(luò)模塊實(shí)現(xiàn)串口到以太網(wǎng)數(shù)據(jù)的轉(zhuǎn)換,使用采集
    發(fā)表于 06-21 22:39 ?18次下載

    汽車CAN/LIN總線測試流程測試工具解析

    汽車CAN/LIN總線測試流程測試工具解析 汽車CAN/LIN總線系統(tǒng)測試的關(guān)鍵是測試流程、
    發(fā)表于 03-19 10:44 ?8424次閱讀

    飛針測試儀電子模塊測試問題及解決方法

    重點(diǎn)討論了飛針在線測試技術(shù)在電子模塊測試中的測試與實(shí)現(xiàn)。介紹了飛針測試原理,闡述了電子模塊飛針
    發(fā)表于 10-23 11:10 ?4522次閱讀

    DVR測試流程

    DVR測試流程
    發(fā)表于 01-04 13:52 ?0次下載

    JMeter-HTTP壓力測試步驟

    JMeter-HTTP壓力測試步驟
    發(fā)表于 09-07 09:23 ?3次下載
    JMeter-<b class='flag-5'>HTTP</b>壓力<b class='flag-5'>測試</b>步驟

    pcba測試流程

    PCBA測試一般根據(jù)客戶的測試方案制定具體的測試流程,基本的PCBA測試流程如下:程序燒錄→IC
    的頭像 發(fā)表于 05-23 17:00 ?1.8w次閱讀

    如何發(fā)起 HTTP 請求流程

    OSI體系結(jié)構(gòu)TCP/IP相關(guān)協(xié)議結(jié)構(gòu)應(yīng)用層HTTP,Telnet,F(xiàn)TP等表示層會話層傳輸層TCP,UDP網(wǎng)絡(luò)層IP數(shù)據(jù)鏈路層物理層
    發(fā)表于 01-01 14:00 ?4952次閱讀
    如何發(fā)起 <b class='flag-5'>HTTP</b> 請求<b class='flag-5'>流程</b>

    一文知道模塊電源量產(chǎn)的基本測試流程

    模塊電源產(chǎn)品的研發(fā)階段,會對樣品進(jìn)行細(xì)致的測試。包括電應(yīng)力、熱應(yīng)力、故障模仿、邏輯功能、性能指標(biāo)、安規(guī)測試、EMC測試、可靠性測試等項(xiàng)目。
    的頭像 發(fā)表于 12-19 10:51 ?3277次閱讀

    如何測試HTTP請求示例

    電子發(fā)燒友網(wǎng)站提供《如何測試HTTP請求示例.zip》資料免費(fèi)下載
    發(fā)表于 07-13 11:35 ?1次下載
    如何<b class='flag-5'>測試</b><b class='flag-5'>HTTP</b>請求示例

    電機(jī)驅(qū)動(dòng)模塊測試方法:測試設(shè)備、測試項(xiàng)目

    ATECLOUD測試系統(tǒng)實(shí)現(xiàn)電機(jī)驅(qū)動(dòng)模塊自動(dòng)化測試需要兩部分完成,軟件和硬件。硬件主要是測試中用到的儀器設(shè)備;軟件部分兼容了測試儀器指令,以
    的頭像 發(fā)表于 04-26 14:14 ?696次閱讀
    電機(jī)驅(qū)動(dòng)<b class='flag-5'>模塊</b><b class='flag-5'>測試</b>方法:<b class='flag-5'>測試</b>設(shè)備、<b class='flag-5'>測試</b>項(xiàng)目

    Air780EP模塊AT開發(fā)-HTTP應(yīng)用指南

    Air780EP模塊AT開發(fā)-HTTP應(yīng)用指南
    的頭像 發(fā)表于 07-22 14:38 ?626次閱讀
    Air780EP<b class='flag-5'>模塊</b>AT開發(fā)-<b class='flag-5'>HTTP</b>應(yīng)用指南

    合宙Air780EP模塊AT開發(fā)-HTTP應(yīng)用指南

    簡介關(guān)聯(lián)文檔和使用工具:AT固件獲取AT指令手冊概述4G模塊支持HTTP和HTTPS協(xié)議,HTTP應(yīng)用的基本流程如下:1、激活PDP(參考:http
    的頭像 發(fā)表于 08-01 17:15 ?723次閱讀
    合宙Air780EP<b class='flag-5'>模塊</b>AT開發(fā)-<b class='flag-5'>HTTP</b>應(yīng)用指南

    電池測試流程測試方法有哪些

    電池測試是確保電池性能、安全性和可靠性的重要環(huán)節(jié)。由于電池技術(shù)的種類繁多,包括鋰離子電池、鎳氫電池、鉛酸電池等,每種電池的測試流程和方法都有所不同。 電池測試
    的頭像 發(fā)表于 09-23 16:51 ?820次閱讀
    RM新时代网站-首页