色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

GD32F310連接ESP8266實現遠程燈控制

冬至配餃子 ? 來源:兆易創新GD32 MCU ? 作者:Ljfly ? 2022-09-22 18:10 ? 次閱讀

功能描述

通過mcu與esp01通過uart連接,通過at指令來創建socket連接,接收遠端控制燈的指令,來實現燈亮,滅及閃爍;

開啟兩路串口,usart0(GPIO09-TX,GPIO10-RX)連接esp01,進行收發at指令,usart1(GPIO02-TX,GPIO03-RX)作為log輸出口;

接線圖

poYBAGMsNFOATpujAADTzf4hZCo728.png

ps.電阻可以不接,直接EN和3.3V拉一根線也能起來;

有條件的話,可以選esp01s,不用接電阻。

代碼流程介紹

uart0連接esp01,收發數據使用中斷方式進行,接收數據檢測到OK,ERROR等關鍵字以后關閉接收。

uart中斷

void USART0_IRQHandler(void) {

    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) {
        /* receive data */
        rx_buffer[rx_count++] = usart_data_receive(USART0);
        if(rx_count >= BUFFER_SIZE) {
            usart_interrupt_disable(USART0, USART_INT_RBNE);
                        printf("rx buffer is full!!\n");
                        recv_flag = 0;
        }
                
                if(strstr((const char *)rx_buffer, "OK\r\n") || 
                    strstr((const char *)rx_buffer, "ERROR\r\n")
                ){
                    usart_interrupt_disable(USART0, USART_INT_RBNE);
                    recv_flag = 0;
                }
                else if(strstr((const char *)rx_buffer, "blink") || 
                    strstr((const char *)rx_buffer, "on") || 
                    strstr((const char *)rx_buffer, "off")
                ){
                    usart_interrupt_disable(USART0, USART_INT_RBNE);
                    recv_flag = 0;
                }
    }

    if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE)) {
        /* transmit data */
        usart_data_transmit(USART0, tx_buffer[tx_count++]);
        if(tx_count >= BUFFER_SIZE) {
          usart_interrupt_disable(USART0, USART_INT_TBE);
                    send_flag = 0;
        }
                if(tx_count >= send_len)
                {
                    usart_interrupt_disable(USART0, USART_INT_TBE);
                    send_flag = 0;
                    send_len = 0;
                }
    }
}

uart初始化:

    /* enable COM GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* connect port to USARTx_Tx */
    gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);

    /* connect port to USARTx_Rx */
    gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);

    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);

    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);

    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART0);

    /* USART configure */
    usart_deinit(USART0);
    usart_baudrate_set(USART0, 115200U);
    usart_receive_config(USART0, USART_RECEIVE_ENABLE);
    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);

    usart_enable(USART0);
    nvic_irq_enable(USART0_IRQn, 0, 0);

LED初始化:

GPIO_InitTypeDef GPIO_InitStruct = {0};
    /*GPIO Port Clock Enable */
    rcu_periph_clock_enable(RCU_GPIOA);
    
    /*Configure GPIO pin : PtPin  PA8*/
    GPIO_InitStruct.gpio_periph = GPIOA;
    GPIO_InitStruct.mode = GPIO_MODE_OUTPUT;
    GPIO_InitStruct.pin = GPIO_PIN_8;
    GPIO_InitStruct.otype = GPIO_OTYPE_PP;
    GPIO_InitStruct.speed = GPIO_OSPEED_50MHZ;
    GPIO_InitStruct.pull_up_down = GPIO_PUPD_NONE;
    gpio_mode_set(GPIO_InitStruct.gpio_periph,GPIO_InitStruct.mode,GPIO_InitStruct.pull_up_down,GPIO_InitStruct.pin);

    /*Configure GPIO pin Output Level */
    gpio_output_options_set(GPIO_InitStruct.gpio_periph,GPIO_InitStruct.otype,GPIO_InitStruct.speed,GPIO_InitStruct.pin);
    GPIO_BC(GPIO_InitStruct.gpio_periph) = GPIO_InitStruct.pin;
    /* EXTI interrupt init*/

程序代碼

int main(void)
{
        e_at_state at_state = e_init;
    /* enable DMA clock */
    
        init();
        led_flash(5);
    while(1) {
            switch (at_state)
            {
                case e_init:
                    sat("ATE0\r\n", "OK");
                
                    if(!sat("AT\r\n", "OK")){
                        led_on();
                        at_state = e_at_ok;
                    }
                    else{
                        delay_1ms(100);
                        led_off();
                    }
                break;
                case e_at_ok:
                    if(!sat("AT+CWJAP="testssid","12345678"\r\n", "WIFI GOT IP"))
                    {
                        at_state = e_wifi_ok;
                    }
                    else{
                        delay_1ms(100);
                    }
                break;
                case e_wifi_ok:
                    if(!sat("AT+CIFSR\r\n", "CIFSR:STAIP"))
                    {
                        at_state = e_sock_ok;
                    }
                    else
                    {
                        delay_1ms(100);
                    }
                    at_state = e_sock_ok;
                break;
                case e_sock_ok:
                    //close socket
                    sat("AT+CIPCLOSE\r\n", "OK");
                    //start a new socket
                    if(!sat("AT+CIPSTART="TCP","192.168.1.36",1314\r\n", "CONNECT"))
                    {
                        //sat("AT+CIPSEND=10","OK");
                        at_state = e_connect_ok;
                    }
                    else
                    {
                        delay_1ms(100);
                    }
                break;
                case e_connect_ok:
                {
                    char at_resp[128] = {0};
                    wait_atrsp(at_resp);
                    
                    if(strstr(at_resp,"on")){
                        printf("light on\n");
                        led_on();
                    }
                    else if(strstr(at_resp,"off")){
                        printf("light off\n");
                        led_off();
                    }
                    else if(strstr(at_resp, "blink"))
                    {
                        printf("buling buling\n");
                        led_flash(10);
                    }
                    else
                    {
                        printf("other cmd got:[%s]\r\n", at_resp);
                    }
                }
                break;
                default:
                    printf("Get into other:%d\n",at_state);
                break;
            }
            //delay_1ms(100);
    }
}

待改善

usart接收數據采用關鍵字判斷結束,效率較低;

at指令接收沒有超時,如果得不到期望結果會卡住;

socket異常斷開沒有做處理;

后面可以接一個繼電器控制插座或者臺燈

因為esp01升級不到最新版本,無法支持mqtt,只能點對點控制玩玩了,支持mqtt就可以做更多事情;

異步中斷處理usart_interrupt_flag_get不是很理解,正常接收或者發送完數據應該是可以退出,但是好像一直無法退出,不知道是使用的問題還是哪里出的問題,有經驗的大神可以交流交流指導指導。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52267
  • UART接口
    +關注

    關注

    0

    文章

    124

    瀏覽量

    15322
  • ESP8266
    +關注

    關注

    50

    文章

    962

    瀏覽量

    45231
收藏 人收藏

    評論

    相關推薦

    遠程控制通訊--基于Arduino + ESP8266控制LED

    Arduino是許多智能硬件愛好者的首選,使用簡單快捷,而ESP8266模塊也是當前最為熱門的WIFI模塊。本項目完成了Arduino使用EDP協議通過ESP8266 WIFI模塊接入OneNET服務器,并通過在接入設備中創建的應用來
    的頭像 發表于 02-27 09:10 ?4w次閱讀
    <b class='flag-5'>遠程控制</b>通訊--基于Arduino + <b class='flag-5'>ESP8266</b><b class='flag-5'>控制</b>LED<b class='flag-5'>燈</b>

    使用CW32單片機通過ESP8266連接OneNET物聯網平臺

    這期視頻向大家介紹如何使用CW32單片機通過ESP8266連接OneNET物聯網平臺,發送溫濕度數據到平臺,并接受平臺的云控制
    的頭像 發表于 11-09 14:32 ?1605次閱讀

    關于esp8266連接互聯網問題

    esp8266怎么連接上互聯網,以實現遠程通過3G網控制esp8266
    發表于 07-30 22:06

    STM32F4/F1+ESP8266連接OneNET的主要問題有哪些

    STM32F4/F1+ESP8266是怎樣與OneNET進行連接的?STM32F4/F1+ESP8266
    發表于 10-25 08:15

    STM32F103如何驅動ESP8266連接貝殼物聯?

    STM32F103如何驅動ESP8266連接貝殼物聯?
    發表于 12-14 06:18

    Rtthread stm32f103rct6 esp8266連接超時怎么處理?

    Rtthread stm32f103rct6 esp8266連接超時
    發表于 04-18 09:17

    如何解決esp8266連接不穩定問題?

    如何解決esp8266連接不穩定問題
    發表于 11-03 07:03

    使用esp8266實現STM32聯網(最簡單USART方法)

    到電腦上的java程序 這一篇 esp8266與STM32連接,電腦通過STM32配置esp8266實現聯網發送數據具體流程如下圖 2= esp82
    發表于 11-22 11:51 ?1.3w次閱讀

    如何將ESP8266連接到WiFi

    在之前的ESP8266項目中,我簡要介紹了ESP8266 WiFi模塊,如何開始使用ESP8266和Arduino,ESP8266 ESP-
    的頭像 發表于 07-29 11:32 ?8.7w次閱讀
    如何將<b class='flag-5'>ESP8266</b><b class='flag-5'>連接</b>到WiFi

    Arduino 編程 ESP8266 12F NodeMCU 實現 PWM 控制呼吸

    Arduino 編程 ESP8266 12F NodeMCU 實現 PWM 控制呼吸
    發表于 11-18 19:21 ?47次下載
    Arduino 編程 <b class='flag-5'>ESP8266</b> 12<b class='flag-5'>F</b> NodeMCU <b class='flag-5'>實現</b> PWM <b class='flag-5'>控制</b>呼吸<b class='flag-5'>燈</b>

    HC05-ESP8266實現控制LED的閃爍

    藍牙設備是不可或缺的一部分,在這里我們將用HC05-ESP8266實現控制LED的閃爍在本篇文章中,將HC-05藍牙模塊與流行的Wi-Fi模塊ESP8266
    發表于 11-23 18:06 ?1次下載
    HC05-<b class='flag-5'>ESP8266</b><b class='flag-5'>實現</b><b class='flag-5'>控制</b>LED的閃爍

    ESP8266連接手機

    esp8266的三種模式1為Station 模式:ESP8266 模塊通過路由器連接互聯網,手機或電腦通過互聯網實現對設備的遠程控制。2為A
    發表于 11-30 16:06 ?37次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>連接</b>手機

    Esp8266連接器擴展器開源項目

    電子發燒友網站提供《Esp8266連接器擴展器開源項目.zip》資料免費下載
    發表于 07-05 11:15 ?4次下載
    <b class='flag-5'>Esp8266</b><b class='flag-5'>連接</b>器擴展器開源項目

    使用ESP8266 wifi DIY控制

    電子發燒友網站提供《使用ESP8266 wifi DIY控制.zip》資料免費下載
    發表于 07-25 09:18 ?15次下載
    使用<b class='flag-5'>ESP8266</b> wifi DIY<b class='flag-5'>控制</b><b class='flag-5'>燈</b>

    ESP8266 01S繼電器控制智能實現

    是GPIO3繼電器控制端,繼電器選 擇常閉端接線高電平觸發,控制LED亮滅。 補充說明:①市面上的LED大多是直接用簡單的整流橋芯
    發表于 04-27 11:31 ?7次下載
    <b class='flag-5'>ESP8266</b> 01S繼電器<b class='flag-5'>控制</b>智能<b class='flag-5'>燈</b><b class='flag-5'>實現</b>
    主站蜘蛛池模板: 中文字幕在线观看| 午夜福利视频极品国产83| 欧美成人中文字幕在线视频| 三级黄色一级视频| 在线播放一区| 国产欧美无码亚洲| 欧美日韩精品久久久免费观看| 亚洲AV蜜桃永久无码精品红樱桃| AV无码久久无遮挡国产麻豆| 精品动漫国产亚洲AV在线观看| 日韩AV爽爽爽久久久久久| 中文字幕在线视频在线看| 国产永不无码精品AV永久| 青柠电影在线看| 2021乱码精品公司| 精品欧美18videosex欧美| 无码人妻少妇色欲AV一区二区| 扒开粉嫩的小缝末成年小美女| 久久视频精品38线视频在线观看| 性夜影院午夜看片| 久久九九精品国产自在现线拍| 秋霞电影网伦大理电影在线观看| 亚洲三级大片| 国产欧美一区二区精品性色tv| 秋霞电影网午夜鲁丝片无码| 做你的爱人BD日本| 久久国产欧美日韩精品免费| 小学生偷拍妈妈视频遭性教育| 国产电影午夜成年免费视频| 日本69xx 老师| MELODY在线播放无删减| 嫩草国产福利视频一区二区| 在线播放一区| 麻豆出品国产AV在线观看| 亚洲热在线视频| 好男人好资源在线播放| 亚洲2017久无码| 激情丛林电影完整在线| 一个人免费完整观看日本| 久久99国产视频| 最近免费中文MV在线字幕|