文档首页 > > SDK参考> SDK开发指南> LiteOS端云互通组件实战演练> (参考)端云互通组件无线接入实例> 移植WIFI模块-ESP8266

移植WIFI模块-ESP8266

分享
更新时间:2019/01/02 GMT+08:00

上一小节中,本文对AT框架进行了简单的介绍。其中需要开发者实现at_api_interface.h中所定义的接口,之后通过AT API Register进行注册,供上层的Agent Socket调用。本节给出WIFI模块ESP8266的具体例子,帮助开发者进行移植。

  1. STM32F429开发板上连接ESP8266 串口wifi模块,如下图所示:

  2. 首先在设备文件esp8266.c定义API结构体。

    at_adaptor_api at_interface = {   
         .init = esp8266_init,      
         .get_localmac = esp8266_get_localmac, /*get local MAC*/  
         .get_localip = esp8266_get_localip,/*get local IP*/  
         /*build TCP or UDP connection*/  
         .connect = esp8266_connect,  
         .send = esp8266_send,  
         .recv_timeout = esp8266_recv_timeout,  
         .recv = esp8266_recv,  
         .close = esp8266_close,/*close connection*/  
         .recv_cb = esp8266_recv_cb,/* operation for events, not implements yet */  
         .deinit = esp8266_deinit,  
    };

    esp8266.c位于 LiteOS/components/net/at_device/wifi_esp8266

  3. 在main.c文件中,代码如下:

    #elif defined(WITH_AT_FRAMEWORK) && (defined(USE_ESP8266) || defined(USE_SIM900A)) 
         extern at_adaptor_api at_interface; 
         at_api_register(&at_interface); //注册开发者定义的接口
         agent_tiny_entry();
     #endif

    main.c位于 LiteOS/targets/Cloud_STM32F429IGTx_FIRE/Src。

  4. 确保打开了编译宏。

    图1 全局宏包含WITH_AT_FRAMEWORK和USE_ESP8266

  5. 在esp8266.c实现具体设备API接口。

    例如demo例程初始化如下:

    int32_t esp8266_init() 
    
     {
          at.init(); 
          at.oob_register(AT_DATAF_PREFIX, strlen(AT_DATAF_PREFIX), esp8266_data_handler); 
      #ifdef     USE_USARTRX_DMA   HAL_UART_Receive_DMA(&at_usart,&at.recv_buf[at_user_conf.user_buf_len*0],at_user_conf.user_buf_len); 
     #endif 
         esp8266_reset();   
         esp8266_echo_off(); 
         esp8266_choose_net_mode(STA); 
         while(AT_FAILED == esp8266_joinap(WIFI_SSID, WIFI_PASSWD)) 
    
         { 
            AT_LOG("connect ap failed, repeat..."); 
    
    
         }; 
        esp8266_set_mux_mode(at.mux_mode); 
         static int8_t ip[32]; 
         static int8_t gw[32]; 
         static int8_t mac[32]; 
         esp8266_get_localip(ip, gw, NULL); 
         esp8266_get_localmac(mac); 
         AT_LOG("get ip:%s, gw:%s mac:%s", ip, gw, mac); 
         return AT_OK; 
     }

    其它几个接口参考esp8266.c即可,而ESP8266模块AT命令定义的宏在esp8266.h,具体含义可以查看ESP8266官方手册,另外用户需要在esp8266.h中修改自己连接的wifi的ssid和密码。

    #define AT_CMD_RST              "AT+RST"  
    #define AT_CMD_ECHO_OFF         "ATE0"  
    #define AT_CMD_CWMODE           "AT+CWMODE_CUR"  
    #define AT_CMD_JOINAP           "AT+CWJAP_CUR"  
    #define AT_CMD_MUX              "AT+CIPMUX"  
    #define AT_CMD_CONN             "AT+CIPSTART"  
    #define AT_CMD_SEND             "AT+CIPSEND"  
    #define AT_CMD_CLOSE            "AT+CIPCLOSE"  
    #define AT_CMD_CHECK_IP         "AT+CIPSTA_CUR?"  
    #define AT_CMD_CHECK_MAC        "AT+CIPSTAMAC_CUR?"

    esp8266.h位于 LiteOS/components/net/at_device/wifi_esp8266。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问