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

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

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

RTT RA2L1 MQTT網(wǎng)絡(luò)溫濕度采集

冬至子 ? 來源:Lu_盼盼 ? 作者:Lu_盼盼 ? 2023-10-12 11:10 ? 次閱讀

1、添加uart0,波特率為默認的115200。串口回調(diào)函數(shù)為默認的user_uart_callbakc,TXD、RXD 為P101、P100,剛好適配PMOD2(J7),來接DA16200。

1.jpg

2、添加AT—client包

1.jpg

3、打開uart0:

1.jpg

4、編寫DA16200.c的函數(shù):

主要的思路是先初始化at_clinet客戶端,根據(jù)da16200的mqtt命令初始化。如果注冊成功,向服務(wù)器訂閱與發(fā)布主題,詳見代碼:

/*

  • Copyright (c) 2006-2021, RT-Thread Development Team
  • SPDX-License-Identifier: Apache-2.0
  • Change Logs:
  • Date Author Notes
  • 2023-02-24 Administrator the first version
    /
    #include
    #include
    #include
    #include
    // #ifndef ULOG_USING_SYSLOG
    //#define LOG_TAG "AT_DA16200"
    //#define LOG_LVL LOG_LVL_DBG
    //#include
    //#else
    //#include
    //#endif /
    ULOG_USING_SYSLOG /
    /
    初始化 at_client /
    /
    設(shè)置當(dāng)前 AT 客戶端最大支持的一次接收數(shù)據(jù)的長度 */
    #define AT_CLIENT_RECV_BUFF_LEN 512
    #define AT_CLIENT_DEVICE_NAME "uart0"
    #define AT_WAITE_OK_MAXTIME 3000
    #define WIFI_SSID HUAWEI-H10R9U
    #define WIFI_PWD 18977381885@
    #define AT_ADDR_LEN 32
    static rt_err_t wifi_connect_state = -1;
    char ip[AT_ADDR_LEN] = {0};
    char gateway[AT_ADDR_LEN] = {0}, netmask[AT_ADDR_LEN] = {0};
    static void urc_conn_func(struct at_client *client ,const char data, rt_size_t size)
    {
    /
    WIFI 連 接 成 功 信 息 */
    rt_kprintf("AT Server device WIFI connect success!");
    wifi_connect_state = RT_EOK;
    }
    static void urc_recv_func(struct at_client *client ,const char data, rt_size_t size)
    {
    /
    接收到服務(wù)器發(fā)送數(shù)據(jù) */
    char *ptr;
    char *p;
    rt_kprintf("AT Client receive AT Server data!");
    rt_kprintf("%s",data);
    ptr = strtok(data, ":");
    ptr = strtok(NULL, ",");
    while (ptr != NULL) {
    rt_kprintf("ptr=%sn", ptr);
    ptr = strtok(NULL, ",");
    }
    }
    int da16200_mqtt_pub(char *msg)
    {
    int result = RT_EOK;
    at_response_t resp = RT_NULL;
    if(wifi_connect_state != RT_EOK)
    {
    rt_kprintf("MQTT_client not ready!");
    return -1;
    }
    resp = at_create_resp(256, 0, rt_tick_from_millisecond(5000));
    if (resp == RT_NULL)
    {
    rt_kprintf("No memory for response structure!");
    return -2;
    }
    result = at_exec_cmd(resp, "AT+NWMQMSG='%s'",msg);
    if(resp < 0)
    {
    rt_kprintf("Pub msg ERRO! cord:%d", result);
    }
    at_delete_resp(resp);
    return result;
    }
    static void urc_func(struct at_client *client ,const char data, rt_size_t size)
    {
    /
    設(shè)備啟動信息 /
    rt_kprintf("AT Server device startup!");
    rt_kprintf("%s",data);
    }
    static struct at_urc urc_table[] = {
    {"+NWMQCL:1", "rn", urc_conn_func},
    {"+NWMQMSG:", "rn", urc_recv_func},
    {"RDY", "rn", urc_func},
    };
    int at_client_port_init(void)
    {
    /
    添加多種 URC 數(shù)據(jù)至 URC 列表中,當(dāng)接收到同時匹配 URC 前綴和后綴的數(shù)據(jù),執(zhí)行 URC 函數(shù) /
    at_set_urc_table(urc_table, sizeof(urc_table) / sizeof(urc_table[0]));
    return RT_EOK;
    }
    int at_client_16200_mqtt_init(void)
    {
    int result = RT_EOK;
    at_response_t resp = RT_NULL;
    /
    創(chuàng)建響應(yīng)結(jié)構(gòu)體,設(shè)置最大支持響應(yīng)數(shù)據(jù)長度為 256 字節(jié)
    (最大響應(yīng)長度用戶根據(jù)實際需求自定義),響應(yīng)數(shù)據(jù)行數(shù)無限制,超時時間為 5 秒 /
    resp = at_create_resp(256, 0, rt_tick_from_millisecond(5000));
    if (resp == RT_NULL)
    {
    rt_kprintf("No memory for response structure!");
    return -2;
    }
    result = at_client_init(AT_CLIENT_DEVICE_NAME, AT_CLIENT_RECV_BUFF_LEN);
    if(result != RT_EOK)
    {
    rt_kprintf("at_clinet init erro %d",result);
    return result;
    }
    /
    等待AT OK /
    result = at_client_wait_connect(AT_WAITE_OK_MAXTIME);
    if(result != RT_EOK)
    {
    rt_kprintf("client to da16200 at timeout %d",result);
    return result;
    }
    /
    設(shè)置回顯 /
    if(at_exec_cmd(resp, "ATE") != RT_EOK)
    {
    rt_kprintf("AT client send ATE failed,response error!");
    return -RT_ERROR;
    }
    /
    解釋返回顯狀態(tài) 如果返回是on 則再發(fā)一條關(guān)閉 /
    if(at_resp_get_line_by_kw(resp, "on") != NULL)
    {
    at_exec_cmd(resp, "ATE");
    }
    /
    設(shè)置 station模式 */
    if(at_exec_cmd(resp, "AT+WFMODE=0") != RT_EOK)
    {
    rt_kprintf("AT client send AT+WFMODE failed,response error!");
    return -RT_ERROR;
    }
    /* 連接到 ap */
    if(at_exec_cmd(resp, "AT+WFJAPA=ssid,pwd") != RT_EOK)
    {
    rt_kprintf("AT client send AT+WFWFJAPA failed,response error!");
    return -RT_ERROR;
    }
    rt_thread_delay(2000);
    /* 查看IP服務(wù)器 */
    if(at_exec_cmd(resp, "AT+NWIP") != RT_EOK)
    {
    rt_kprintf("AT client send AT+NWIP failed,response error!");
    return -RT_ERROR;
    }
    rt_thread_delay(1000);
    //LOG_D("recv:%s,recv line:%d",resp->buf,resp->line_num);
    if(at_resp_parse_line_args(resp,2,"%*[^,],%[^,]",&ip)>0)
    {
    rt_kprintf("ip:%s ",ip);
    }
    else{
    rt_kprintf("NWIP erro");
    return -RT_ERROR;
    }
    /* 連接MQTT服務(wù)器*/
    if(at_exec_cmd(resp, "AT+NWMQBR=%s,%d","192.168.3.192",1883) != RT_EOK)
    {
    rt_kprintf("AT client send AT+NWMQBR failed,response error!");
    return -RT_ERROR;
    }
    /* 設(shè)置訂閱主題 */
    if(at_exec_cmd(resp, "AT+NWMQTS=%d,%s",1,"lugl_sub") != RT_EOK)
    {
    rt_kprintf("AT client send AT+NWMQTS failed,response error!");
    return -RT_ERROR;
    }
    /* 設(shè)置發(fā)布主題 */
    if(at_exec_cmd(resp, "AT+NWMQTP=%s","lugl_pub") != RT_EOK)
    {
    rt_kprintf("AT client send AT+NWMQTP failed,response error!");
    return -RT_ERROR;
    }
    at_client_port_init();
    /* 使能MQTT */
    if(at_exec_cmd(resp, "AT+NWMQCL=1") != RT_EOK)
    {
    rt_kprintf("AT client send AT+NWMQCL failed,response error!");
    return -RT_ERROR;
    }
    /* 刪 除 服 務(wù) 器 響 應(yīng) 結(jié) 構(gòu) 體 */
    at_delete_resp(resp);
    return RT_EOK;
    }
    hal_entry.c:

extern struct hs300x_device temp_humi_dev;
void hal_entry(void)
{
float temp_f,humi_f;
char mqtt_send_buf[128] = {0};
rt_kprintf("nHello RT-Thread!n");
rt_uint32_t led1_pin = rt_pin_get(LED1_PIN);
at_client_16200_mqtt_init();
while (1)
{
rt_pin_write(led1_pin, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(led1_pin, PIN_LOW);
rt_thread_mdelay(500);
hs300x_read_data(&temp_humi_dev, &humi_f, &temp_f);
rt_sprintf(mqtt_send_buf,"{"temp":"%d.%2d","humi":"%d.%2d"}",(int)temp_f,(int)(temp_f100)%100,(int)humi_f,(int)(humi_f100)%100);
da16200_mqtt_pub(mqtt_send_buf);
// rt_kprintf("HUMI: %d.%2dn", (int)humi_f, (int)(humi_f100)%100);
// rt_kprintf("HUMI: %d.%2dn", (int)temp_f, (int)(temp_f
100)%100);
}
}

實現(xiàn)在的效果:

1.jpg

打開mqtt客戶端,收到數(shù)據(jù)

1.jpg

【項目總結(jié)】

作為國產(chǎn)的RT-Thread 實時操作系統(tǒng),生態(tài)系統(tǒng)越來越豐富。同時也有自己的RT-Thread Studio IDE來實現(xiàn)圖形化的配置,特別是集合了RASC的圖形化配置系統(tǒng)。使得入門非常容易。

【有待改善的地方】

1、FSP的更新不向前兼容,導(dǎo)致會出現(xiàn)很多問題,這樣新入門的朋友,可能被難倒在起點之處。
2、包更新后會覆蓋掉原來的一起代碼,如果不做備份,非常麻煩。
總之,通過這次DIY項目,加深了瑞薩+RT-Thread的編程印象,以后會經(jīng)常關(guān)注RTT,同時也會貢獻自己的力量。

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

    關(guān)注

    0

    文章

    36

    瀏覽量

    6325
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    87

    瀏覽量

    11562
  • MQTT協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    97

    瀏覽量

    5374
  • Uart串口
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    6812
  • RTThread
    +關(guān)注

    關(guān)注

    8

    文章

    132

    瀏覽量

    40875
收藏 人收藏

    評論

    相關(guān)推薦

    使用RT-Thread和CPK-RA2L1采集DHT11溫濕度

    本篇文章主要介紹使用RT-Thread Studio 和瑞薩 CPK-RA2L1評估板,使用大佬的輪子采集溫濕度
    的頭像 發(fā)表于 10-11 11:34 ?1620次閱讀
    使用RT-Thread和CPK-<b class='flag-5'>RA2L1</b><b class='flag-5'>采集</b>DHT11<b class='flag-5'>溫濕度</b>

    【天啟教育M1開發(fā)板試用體驗】MQTT溫濕度

    【目的】建立一個溫濕度計,并通過MQTT上傳到服務(wù)器1、連接wifi:2、設(shè)置mqtt服務(wù)器連接信息:3、連接成功后,獲取
    發(fā)表于 09-15 09:44

    如何實現(xiàn)RTT RA2L1 MQTT網(wǎng)絡(luò)溫濕度采集的設(shè)計呢

    的地方】  1、FSP的更新不向前兼容,導(dǎo)致會出現(xiàn)很多問題,這樣新入門的朋友,可能被難倒在起點之處。  2、包更新后會覆蓋掉原來的一起代碼,如果不做備份,非常麻煩?! 】傊ㄟ^這次DIY項目,加深了瑞薩+RT-Thread的編程印象,以后會經(jīng)常關(guān)注
    發(fā)表于 02-28 15:07

    溫濕度傳感器與LM-8052NET實現(xiàn)網(wǎng)絡(luò)化遠程采集溫濕度

    溫濕度是自然界中和人類打交道最多的兩個物理參數(shù),無論是在生產(chǎn)實驗場所,還是在居住休閑場所,溫濕度采集或控制都十分頻繁和重要,而且,網(wǎng)絡(luò)化遠程采集
    發(fā)表于 07-02 09:16 ?1351次閱讀

    【天啟教育M1開發(fā)板試用體驗】MQTT溫濕度

    到服務(wù)器 1、連接wifi: 2、設(shè)置mqtt服務(wù)器連接信息: 3、連接成功后,獲取溫濕度,并上傳給服務(wù)器: 4、用mqttx監(jiān)控訂閱test的主題收到數(shù)據(jù): 【積木程序圖】 積木
    的頭像 發(fā)表于 10-17 11:31 ?735次閱讀
    【天啟教育M<b class='flag-5'>1</b>開發(fā)板試用體驗】<b class='flag-5'>MQTT</b><b class='flag-5'>溫濕度</b>計

    RA2L1硬件用戶手冊(中英)

    RA2L1硬件用戶手冊(中英)
    發(fā)表于 11-07 19:49 ?7次下載
    <b class='flag-5'>RA2L1</b>硬件用戶手冊(中英)

    RA2L1開發(fā)板資料

    RA2L1開發(fā)板資料
    發(fā)表于 11-07 19:50 ?18次下載
    <b class='flag-5'>RA2L1</b>開發(fā)板資料

    RA2L1 組用戶手冊:硬件

    RA2L1 組用戶手冊:硬件
    發(fā)表于 01-09 19:06 ?5次下載
    <b class='flag-5'>RA2L1</b> 組用戶手冊:硬件

    RA2L1 組數(shù)據(jù)表

    RA2L1 組數(shù)據(jù)表
    發(fā)表于 01-09 19:06 ?0次下載
    <b class='flag-5'>RA2L1</b> 組數(shù)據(jù)表

    瑞薩e2studio----RA2L1通過傳感器檢測溫濕度

    ?本篇文章主要介紹如何使用芯片型號R7FA2L1AB2DFL的開發(fā)板外接溫濕度傳感器進行溫濕度檢測,并通過串口顯示溫濕度。
    的頭像 發(fā)表于 01-04 14:38 ?1598次閱讀
    瑞薩e<b class='flag-5'>2studio----RA2L1</b>通過傳感器檢測<b class='flag-5'>溫濕度</b>

    RA2L1 組用戶手冊:硬件

    RA2L1 組用戶手冊:硬件
    發(fā)表于 06-30 18:50 ?1次下載
    <b class='flag-5'>RA2L1</b> 組用戶手冊:硬件

    RA2L1 組數(shù)據(jù)表

    RA2L1 組數(shù)據(jù)表
    發(fā)表于 06-30 18:50 ?0次下載
    <b class='flag-5'>RA2L1</b> 組數(shù)據(jù)表

    RTT RA2L1 HS3003采集溫濕度之一

    選擇基于開發(fā)板->CPK-RA2L1 填入項目名稱,點擊完成,就創(chuàng)建好了工程。
    的頭像 發(fā)表于 10-12 11:02 ?630次閱讀
    <b class='flag-5'>RTT</b> <b class='flag-5'>RA2L1</b> HS3003<b class='flag-5'>采集</b><b class='flag-5'>溫濕度</b>之一

    基于RA2L1實現(xiàn)串口DTC數(shù)據(jù)接收

    基于RA2L1實現(xiàn)串口DTC數(shù)據(jù)接收
    的頭像 發(fā)表于 10-10 09:34 ?549次閱讀
    基于<b class='flag-5'>RA2L1</b>實現(xiàn)串口DTC數(shù)據(jù)接收

    瑞薩RA2L1系列CAN通信應(yīng)用

    瑞薩RA2L1系列CAN通信應(yīng)用
    的頭像 發(fā)表于 06-26 08:06 ?613次閱讀
    瑞薩<b class='flag-5'>RA2L1</b>系列CAN通信應(yīng)用