你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

請問 ESP8266 , ESP8266_ReceiveString()在 main 裡 , 無法正常收data?

[复制链接]
jeffhe1 提问时间:2018-11-5 18:07 /
阅读主题, 点击返回1楼
收藏 评论15 发布时间:2018-11-5 18:07
15个回答
jeffhe1 回答时间:2018-11-7 11:24:40
踏平幼稚园 发表于 2018-11-7 09:51
if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
还是判断啊,判断逻辑假,依然不会赋 ...

是假的話 , 不是透傳模式 , 走 TCP/IP  protcol , 封包裡會有標檔頭 " +IPD " , 我在這裡有打印出來正確的 data
hu9977 回答时间:2018-11-7 14:55:51
jeffhe1 发表于 2018-11-7 11:21
函式裡有打印出來正確值 , 到main() 裡 打印出來是亂碼

你把关键地方的函数代码贴出来,你的截图,看不清楚
jeffhe1 回答时间:2018-11-7 19:44:56
hu9977 发表于 2018-11-7 14:55
你把关键地方的函数代码贴出来,你的截图,看不清楚

/*
* 函数名:ESP8266_ReceiveString
* 描述  :WF-ESP8266模块接收字符串
* 输入  :enumEnUnvarnishTx,声明是否已使能了透传模式
* 返回  : 接收到的字符串首地址
* 调用  :被外部调用
*/
char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
        char * pRecStr = 0;
        int c;
       
       
        strEsp8266_Fram_Record .InfBit .FramLength = 0;
        strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;
       
        while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
        strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
       
        if ( enumEnUnvarnishTx )
                pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
       
        else
        {
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
                        pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
               
                //b = strncpy(a,strEsp8266_Fram_Record .Data_RX_BUF,c);
               
                c = strlen(strEsp8266_Fram_Record .Data_RX_BUF);
               
                macPC_Usart ( "c1=%d\n",c);
                strncpy(a,strEsp8266_Fram_Record .Data_RX_BUF,c);
               
               
                macPC_Usart ( "c2=%d\n",c);
                //macPC_Usart ( "b=%s\n",  b );
                   //pRecStr = &a[0];
               
                macPC_Usart ( "3=%s\n",strEsp8266_Fram_Record .Data_RX_BUF );
                macPC_Usart ( "4=%s\n",  a );

        }

        return pRecStr;
       
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

volatile uint8_t ucTcpClosedFlag = 0;

char cStr [ 1500 ] = { 0 };

char *test;

/**
  * @brief  ESP8266 (Sta Tcp Client)透传
  * @param  无
  * @retval 无
  */
void ESP8266_StaTcpClient_UnvarnishTest ( void )
{
        uint8_t ucStatus;
       
        char cStr [ 100 ] = { 0 };
       
               
  printf ( "\r\n正在配置 ESP8266 ......\r\n" );

        macESP8266_CH_ENABLE();
       
        ESP8266_AT_Test ();
       
        ESP8266_Net_Mode_Choose ( STA );

  while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );       
       
        ESP8266_Enable_MultipleId ( DISABLE );
       
        while ( !        ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
       
        //while ( ! ESP8266_UnvarnishSend () );
       
        printf ( "\r\n配置 ESP8266 完毕\r\n" );
       
                       
                sprintf ( cStr,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n" );


                //ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );               //发送数据
               
                ESP8266_SendString ( DISABLE, cStr, 104, Single_ID_0 );               //发送数据
               
                Delay_ms ( 100 );

         // ESP8266_ExitUnvarnishSend();
               


       
        while ( 1 )
        {
/*               
                sprintf ( cStr,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\
ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\nABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n" );
               
                ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );               //发送数据
               
                Delay_ms ( 100 );
*/
   //ESP8266_ExitUnvarnishSend();
               
               
         
               
   test = ESP8266_ReceiveString(1);

   macPC_Usart ( "test=%s\n", test );
         
         
               
                if ( ucTcpClosedFlag )                                             //检测是否失去连接
                {
                        ESP8266_ExitUnvarnishSend ();                                    //退出透传模式
                       
                        do ucStatus = ESP8266_Get_LinkStatus ();                         //获取连接状态
                        while ( ! ucStatus );
                       
                        if ( ucStatus == 4 )                                             //确认失去连接后重连
                        {
                                printf ( "\r\n正在重连热点和服务器 ......\r\n" );
                               
                                while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
                               
                                while ( !        ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
                               
                                printf ( "\r\n重连热点和服务器成功\r\n" );

                        }
                       
                        while ( ! ESP8266_UnvarnishSend () );               
                       
                }
        }
       
               
}



hu9977 回答时间:2018-11-7 23:39:04
jeffhe1 发表于 2018-11-7 19:44
/*
* 函数名:ESP8266_ReceiveString
* 描述  :WF-ESP8266模块接收字符串

你在函数里面打印的是strEsp8266_Fram_Record .Data_RX_BUF,pRecStr 是经过判断才赋值的,前面的兄弟也说过,建议将判断语句( if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) ))去掉,或者
return  (char *) strEsp8266_Fram_Record .Data_RX_BUF.然后在看看数据是啥样的
helloworld121 回答时间:2020-2-3 21:24:46
我也遇到了相同的问题。。请问有人解决了吗
helloworld121 回答时间:2020-2-4 17:23:44
hu9977 发表于 2018-11-7 23:39
你在函数里面打印的是strEsp8266_Fram_Record .Data_RX_BUF,pRecStr 是经过判断才赋值的,前面的兄弟也 ...

你好
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版