This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220SF-LAUNCHXL:HTTP 服务器连接的 AT 命令演示

Guru**** 2568565 points
Other Parts Discussed in Thread: CC3220MOD

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/653817/cc3220sf-launchxl-at-command-demo-for-http-server-connection

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220MOD

你(们)好

12月在 simplelink 中使用了 AT 命令演示、并在该论坛上发布了许多以前的文章。 圣诞节前的时候、我的命令演示将不起作用、因为我想将数据发布到 HTTP 服务器网页、并检查响应。

但是、由于 AT 命令演示非常接近我的产品中所需的内容、我再次来到这里。  我计划通过 MSP430微控制器控制 CC3220MOD

以下是通过 VB.NET 和 CC3320SF-LUNCHXL 中写入的终端程序之间记录的消息。

如果现在已成功将数据发布到 HTTP 服务器并收集回复。

但现在的问题是、AT+Send 只能在打开套接字后工作一次。 如果我尝试执行附加的发送和恢复操作,则会出现错误:process_command:-1

然后、我必须停止并重新启动 NWP。

有人可以帮助解决这个问题吗?

此致

Nick


2018/10/04 11:10:54.540 -- AT+Get=Status、WLAN
2018/10/04 11:10:54.915 --+eventwlan:provisioning_status、stopped、sta、disconnected、

+获取:

好的

2018年11月04日11:11:01.583 -- AT+WlanScan=0、10
2018/11/04 11:11:01.849 --错误:进程命令,-2073

2018年11月04日11:11:01.864 -- AT+WlanScan=0、10
2018年11月4日11:11:02.130 --

+wlansCAN:S**** L_P1601、0x24:0x3c:0x20:0x1E:0x49:0x7c、-36、11、wpa2、0、CCMP、PSK

好的

2018年11月4日11:11:05.817 -- AT+WlanConnect=S**** L_P1601,wpa_WPA2,**** 、、、、
2018年11月4日11:11:06.286 --好的

2018年11月4日11:11:09.380 -- AT+GET=状态,WLAN
2018/11/04 11:11:09.646 --+get:wlan_sta_connected

好的

2018/11/04 11:11:11:14.802 -- AT+Socket =iNet,流,TCP
2018年11月4日11:11:15.068 --+插座:0

好的

2018年11月04日11:11:21.721 -- AT+Connect=0,iNet,80,192.168.137.1
2018年11月4日11:11:21.924 --好的


+connect:80,192.168.137.1

好的

发布/p1601/wifi/rx.php HTTP/1.1
主机:192.168.137.1
内容类型:application/x-www-form-urlencoded
内容长度:8.

测试%3D0
2018/JT04 11:11:30.904 -- AT+Send = 0、1、180、UE9TVCAvcDE2MDEvd2lmaS911/C5wahUCA8xLjENCkhvc3Q6IDE5MiM4xNjguMTM3LjENCkNvRXRnQtVh DQxNh Dh Dh Dh Dh Dh Zh Dh
2018年11月4日11:11:31.123 --好的


2018年11月04日11:11:31.123 -- AT+Recv=0、1、255
2018年11月4日11:11:31.389 --好的

+recv:0、296、SFRUUC8xLjeGjAwe9LDQpEYXrlOiBUaHUSIDA0IEphbiAyMDE4IDExOjExOjMwIEdNVA0KU2VydmYBCCXLVQUCCUV1IUQUCCX4UXUQUCC240002VQUQUCC24V1UQUQUV1UCC24V0XUG0XUGQV0XUGQUV0QV0X24V0XUGQUG0QV0GQUV0GQUV0G0QV0GQUQV0QV0GQUV0QV0QV1UGQUV1UQV0QV0QV0QV0GQUQV0QV0GQUG0QV0QV0QV0QV0QV1I2UGQUGQUV0QV0QUV0Q

好的

HTTP/1.1 200正常
日期:2018年1月4日星期四11:11:30 GMT
服务器:Apache/2.4.25 (Win32) mod_log_rotate/1.0.0 PHP/7.1.1
X 供电:PHP/7.1.1
内容长度:19.
内容类型:text/html;charset=UTF-8


{"RESPONSE":"E1"}
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、

    似乎有一些以前的上下文我没有理解--你能详细说明为什么 AT 命令演示不能用于你的应用吗? 此外、您是否对 AT 命令演示进行了任何修改? 正在使用哪个 SDK 版本? 最后、我看不到上面日志中包含的第二个 AT+Send 命令导致错误响应。 是否可以提供完整日志?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、奥斯汀

    我使用的是 SDK 1.60.00.04、错误与之前版本相同。

    我对代码所做的唯一更改是删除   AT_Commands.c 文件中 ATCommands_readCmd 函数中的"//UART_PRINT"("Enter at Command:\n"r");"、因为文本"Enter at Command"实际上不起任何作用。

    我已经尝试过很多次了。

    发送和接收的第一条消息正常工作,第二次发送似乎正常工作,但 Apache 日志未收到任何数据。 recv 返回0数据。

    第三次尝试返回 "error:process command、-1"

    如果我复位 NWP,有时它会被清除,有时我必须复位 CC3220。

    此致

    Nick

    下面是整个日志。


    2018/39/05 08:39:59.000 -- AT+Test
    2018/39/05 08:39:59.235 --好的


    2018/40/05 08:40:03.516 -- AT+GET=General,Version
    2018/40/05 08:40:03.828 --+eventwlan:provisioning_status、stopped、sta、disconnected、

    +Get:0x30000019、2.0.00、2.0.5.5、3.5.0.0、0

    好的


    2018/40/05 08:40:07.750 -- AT+WlanScan=0、10
    2018/40/05 08:40:08.016 --+wlanscan:S***** L_RF、0x18:0x1E:0x78:0x20:0x88:0x8e、-57、6、wpa2、0、CCMP、PSK

    好的

    2018/40/05 08:40:10.719-- AT+WlanConnect=Signatrol RF,wpa_WPA2,***** 、、、、
    2018/40/05 08:40:11.188 --好的


    2018/40/05 08:40:11.453 -- AT+GET=Status,WLAN
    2018/40/05 08:40:11.703 --+get:wlan_sta_connected

    好的
     
    2018/40/05 08:40:21.106 -- AT+Socket =iNet,流,TCP
    2018/40/05 08:40:21.367 --+插座:0

    好的

    2018/40/05 08:40:23.821 -- AT+Connect=0,iNet,80,192.168.1.100
    2018/40/05 08:40:24.028 --好的

    //要发送到 HTTP 服务器的数据


    发布/p1601/wifi/rx.php HTTP/1.1
    主机:192.168.1.100
    内容类型:application/x-www-form-urlencoded
    内容长度:8.

    测试%3D0

    //要发送到 HTTP 服务器的数据结束

    2018/40/05:40:28.967 -- AT+Send=0、1、180、UE9TVCAvcDE2MDEvd2lmaS9JTC5wahUC8xLjENCkhvc3Q6IDE5bnMibnM4xNjguMS4xMDANCkNvXRDQtVh DQxN DQtZh BnQxN DZh
    2018/40/05 08:40:29.170 --好的


    2018/40/05 08:40:29.170 -- AT+Recv=0、1、255
    2018/40/05 08:40:29.420 --好的

    +recv:0、296、SFRUUC8xLjeGjAwIE9LDQpEYRXlOiBGcmksIDA1IEPHIMDE4IDA4OjQwI4IEdNVA0KU2VybVybVybGBIBGUJHQ1ICHXUXEQ4I2UQUCC2V0QUQUV1UQUQV0QUV0QUCC24VUQUV1UQUV1UCC24VUQUQUV0QUV1UQUV0QUV0QUV0QUQUV1UV0QUQUQUV1UV0GQUQUQUV1UV0QUQUV1UV0QUV0QUV0QUQUV0QUQUV0G24V0GQUQUV0QUV0GQUVQUQUV0QUV0GQUV0QUQUV0

    好的

    //来自 HTTP 服务器的解码响应

    HTTP/1.1 200正常
    日期:2018年1月5日、星期五08:40:28 GMT
    服务器:Apache/2.4.25 (Win32) mod_log_rotate/1.0.0 PHP/7.1.1
    X 供电:PHP/7.1.1
    内容长度:19.
    内容类型:text/html;charset=UTF-8


    {"RESPONSE":"E1"}

    //从 HTTP 服务器解码的响应结束


    发布/p1601/wifi/rx.php HTTP/1.1
    主机:192.168.1.100
    内容类型:application/x-www-form-urlencoded
    内容长度:8.

    测试%3D0

    //要发送到 HTTP 服务器的数据结束


    2018/40/05:40:36.269 -- AT+Send=0、1、180、UE9TVCAvcDE2MDEvd2lmaS9yeS9JFC5wahUC8xLjENCkhvc3Q6IDE5Mi4xNjguMS4xMDANCkNvXRQtVHnQxBnDBNQxNQnZHD0ZQ24BnMQN
    2018/40/05 08:40:36.488 --好的

    //从 HTTP 服务器没有收到任何内容!!!!!   已检查 Apache 访问日志,没有接收任何内容的记录。


    2018/40/05 08:40:36.488 -- AT+Recv=0、1、255
    2018/40/05 08:40:36.754 --好的

    +recv:0、0、

    好的

    //要发送到 HTTP 服务器的数据


    发布/p1601/wifi/rx.php HTTP/1.1
    主机:192.168.1.100
    内容类型:application/x-www-form-urlencoded
    内容长度:8.

    测试%3D0

    //要发送到 HTTP 服务器的数据结束


    2018/40/05:40:44.027 -- AT+Send=0、1、180、UE9TVCAvcDE2MDEvd2lmaS9yeC5wahUC8xLjENCkhvc3Q6IDE5Mi4xNjguMS4xMDANCkNvRXRnQtVHnQxBnDBNQxNQnDBNQnQxD000ZWQ0ZBnQN
    2018/40/05 08:40:44.324 --错误:进程命令,-1

    发布/p1601/wifi/rx.php HTTP/1.1
    主机:192.168.1.100
    内容类型:application/x-www-form-urlencoded
    内容长度:8.

    测试%3D0
    2018/40/05:40:47.645 -- AT+Send = 0、1、180、UE9TVCAvcDE2MDEvd2lmaS9JTC5wahUC8xLjENCkhvc3Q6IDE5ybnMi4xNjguMS4xMDANCkNvXRDQtVQxN DQtZQnXbq24ybnQ0XdBnQ24WQN
    2018/40/05 08:40:47.895--错误:进程命令,-1


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    仍在等待我的问题的回复。

    我尝试查看问题的位置、我已将其追溯到 sl_Send 命令。 在发送时、参数 SD、格式、标志和镜头以及数据看起来都是相同的、但它仅在第一次运行时才起作用、然后命令始终返回-1。

    请帮助他人。 )

    Nick

    int32_t ATCmdSock_sendCallback (void * arg)
    {
    int32_t ret = 0;
    ATCmdSock_tcp_t 参数;
    
    memset (&params、0x0、sizeof (ATCmdSock_tcp_t));
    
    /*调用命令解析器*/
    RET = ATCmdSock_sendParse ((char *) arg、&params);
    
    如果(RET < 0)
    {
    ATCmd_errorResult (ATCmd_errorParseStr、ret);
    ATCmdSock_sendFree (params);
    返回-1;
    }
    
    /*发送*/
    RET = sl_Send (params.sd、params.data、params.len、params.flags);
    
    如果(RET < 0)
    {
    ATCmd_errorResult (ATCmd_errorCmdStr、ret);
    }
    其他
    {
    ATCmd_okResult();
    }
    
    ATCmdSock_sendFree (params);
    返回 ret;
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好

    现在,进入 sl_Send 代码..... 命令在命令@ RetVal =_SlDrvDataWriteOp (_u8) SD、(_SlCmdCtrl_t *)&_SlSendCmdCtrl、&Msg、&CmdExt)结束时失败;

    返回-1

    请提供帮助。

    Nick

    /********* /*
    sl_Send */
    ************* /
    typedef union
    {
    SlSendRecvCommand_t Cmd;
    /*对'sendTO'命令没有响应*/
    }_SlSendMsg_u;
    
    静态常量_SlCmdCtrl_t _SendSlCmdCtrl =
    {
    sl_opcode_socket_send、
    (_SlArgSize_t) sizeof (SlSendRecvCommand_t)、
    (_SlArgSize_t) 0
    };
    
    #if _sl_include_FUNC (sl_Send)
    _i16 sl_Send (_i16 SD、const void * pBuf、_i16 Len、_i16 flags)
    {
    _SlSendMsg_u Msg;
    _slCmdExt_t CmdExt;
    _i16 返回值;
    u32. 温度值;
    
    /*验证是否允许此 API。 如果不允许、则
    忽略 API 执行并立即返回、并显示错误*/
    verify_api_allowed (sl_opcode_silo_socket);
    
    _SlDrvResetCmdExt(&CmdExt);
    CmdExt.TxPayload1Len =(_U16) Len;
    CmdExt.pTxPayload1 =(_u8 *) pBuf;
    
    /*仅对于原始收发器类型套接字、在实际有效载荷之前、在2个字节(4字节对齐)中中继 flags 参数*/
    if (((SD & sl_socket_PAYLOAD_TYPE_MASK)== sl_socket_PAYLOAD_TY_RAW_收 发器)
    {
    tempVal =(_u32)标志;
    CmdExt.pRxPayload =(_u8 *)&tempVal;
    CmdExt.RxPayloadLen =-4;//(-)符号用于将 Rx 缓冲区标记为输出缓冲区*/
    }
    其他
    {
    CmdExt.pRxPayload =空;
    如果(Len < 1)
    {
    /*忽略*/
    返回0;
    }
    }
    
    MSG.Cmd.StatusOrLen = Len;
    MSG.Cmd.SD =(_u8) SD;
    MSG.Cmd.FamilyAndFlags ||标志和0x0F;
    
    RetVal =_SlDrvDataWriteOp (_u8) SD、(_SlCmdCtrl_t *)&& SlSendCmdCtrl、&Msg、&CmdExt);
    if (sl_OS_RET_CODE_OK!= RetVal)
    {
    返回 RetVal;
    }
    
    返回(_i16) len;
    }
    #endif
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    更深入地深入探究。  在下面的命令行上发送失败。 它认为最后一个发送失败了,但它没有!!!!

    /*我们有表示上次发送失败的指示-套接字不再对操作有效*/
    if (g_PCB-> SocketTXFailure &(1<<(SD & SL_BSD_BSD_Socket_ID_MASK)))
    {
    SL_DRV_obj_unlock (&G)_PCB->FlowContactCB.TxLockObj);
    返回 SL_ERROR_BSD_SOC_ERROR;
    } 

    /********* /*
    _SlDrvDataWriteOp *
    //** /
    _SlReturnVal_t _SlDrvDataWriteOp (
    _插槽_t SD、
    _slCmdCtrl_t *pCmdCtrl,
    无效 pTxRxDescBuff,
    _slCmdExt_t *pCmdExt)
    {
    _SlReturnVal_t RetVal = SL_ERROR_BSD_EAGAAIN;//针对非阻塞模式启动为 SL_EAGAIN *
    _u32 allocTxPoolPkts;
    
    while (1)
    {
    /*执行 DataWrite 操作的流控制检查/更新*/
    SL_DRV_obj_lock_forever (&G PCB->FlowContactCB.txLockObj);
    
    //清除在 TxPoolCnt 之前标记的案例的 SyncObj */
    /*低于'1'(获取最后一个数据缓冲区)*/
    /* OSI_RET_OK_CHECK (sl_SyncObjClear (&g_PCC->FlowContactCB.TxSyncObj));*/
    SL_DRV_SYNC_OBJ_CLEAR (&g_PCB->FlowContactCB.TxSyncObj);
    
    /*将使用的 TX 池数据包数*/
    LOADTxPoolPkts = 1 +(pCmdExt->TxPayload1Len-1)/ g_PCB->ContFlowCB.MinTxPayloadSize;// MinTxPayloadSize 将通过 NWP 的 Asunc 事件进行更新*/
    /*我们有表示上次发送失败的指示-套接字不再对操作有效*/
    if (g_PCB-> SocketTXFailure &(1<<(SD & SL_BSD_BSD_Socket_ID_MASK)))
    {
    SL_DRV_obj_unlock (&G)_PCB->FlowContactCB.TxLockObj);
    返回 SL_ERROR_BSD_SOC_ERROR;
    }
    if (g_pcb -> FlowContactCB.TxPoolCnt <= flow_CONT_min + allocTxPoolPkts)
    {
    //我们有指示该套接字已设置为阻塞,我们尝试*/
    /*解除阻止-返回错误*/
    if (g_PCB->SocketNonBlocking &(1<<(SD & SL_BSD_BSD_Socket_ID_MASK)))
    {
    SL_DRV_obj_unlock (&G)_PCB->FlowContactCB.TxLockObj);
    返回 RetVal;
    }
    /*如果此时其他线程增加了 TxPoolCnt,*/
    /* TxSyncObj 不会在这里等待*/
    
    SL_DRV_SYNC_OBJ_WAIT_FOREVER (&G PCB->FlowContactCB.TxSyncObj);
    }
    if (g_pcb->FlowContactCB.TxPoolCnt > flow_CONT_min + allocTxPoolPkts)
    {
    中断;
    }
    其他
    {
    SL_DRV_obj_unlock (&G)_PCB->FlowContactCB.TxLockObj);
    }
    }
    
    SL_DRV_LOCK_GLOBAL_LOCK_FOREVAL (GLOBAL_LOCK_FLAGS_UPDATE_API_IN_PROGRESS);
    
    #ifndef SL_Tiny
    /*如果全局变量被成功获取但正在进行错误处理
    这意味着它已作为错误处理的一部分发布、我们应立即中止*/
    如果(sl_in_restart_required)
    {
    SL_DRV_LOCK_GLOBAL_UNLOCK (真);
    返回 SL_API_ABORTED;
    }
    #endif
    
    //此处我们考虑将某些 cmd 发送到 NWP 的情况,
    它分配的数据包尚未释放。 *
    verify_Protocol (g_PCB->FlowContactCB.TxPoolCnt >(flow_CONT_MIN + allocTxPoolPkts -1));
    G_PCB->FlowContactCB.TxPoolCnt -=(_u8) allocTxPoolPkts;
    
    SL_DRV_obj_unlock (&G)_PCB->FlowContactCB.TxLockObj);
    
    SL_TRACE1 (DBG_MSG、MSG_312、"\n\r\n_SlDrvCmdOp:调用_SlDrvMsgWrite:%x\n\r"、pCmdCtrl->操作码);
    
    /*发送消息*/
    RetVal =_SlDrvMsgWrite (pCmdCtrl、pCmdExt、pTxRxDescBuff);
    SL_DRV_LOCK_GLOBAL_UNLOCK (真);
    
    返回 RetVal;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我假设您的 TCP 连接已关闭、您需要在下一个帖子之前再次打开 TCP 连接。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好、Jan
    感谢您的回复。 由于某种未知原因、它在某些时候开始工作。 有时、我可以在网站上发布大约20篇文章、只需发送和重新接收、没有错误。 然后它失败了、我必须重新启动 NWP。 有时、它会在第一次发送和重新接收完成后失败。
    此致
    Nick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、

    这在 NWP 或 AT 示例代码中不会出现。 您需要为每个 HTTP 请求打开新的 TCP 连接(请参阅 HTTP RFC 中的 HTTP 流水线)。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好、Jan

    我查看了下面 URL 上的文档、其中讨论了持久 HTTP 连接。 这是不可能的?  或者我在 HTML 标题中缺少一个设置以保持连接打开。

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html

    因此,我需要关闭套接字,并在每次发送和重新接收后重新打开。  可以这样做,只是浪费了一点。

    我和 TI 一起将一些示例汇总在一起。。

    我们的想法是、在物联网不是我们的知识领域后、我们使用 CC3220快速进入市场。 但它需要大量的齿拉才能使其工作到目前为止。

    但是、非常欢迎您提供相关信息、谢谢

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、

    Apache 服务器2.4已将默认的 KeepAliveTimeout 指令设置为5sec (=服务器等待持续连接上后续请求的时间)。

    您的第一次发送日期:2018/40/05 08:40:28.967。
    第二次发送2018/40/05 08:40:36.269。
    36-28 = 8秒> 5秒--> Apache 服务器已关闭连接-->您的代码无法正常工作。

    1月
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好、Jan

    我的 DEV Windows 终端运行缓慢、因为我手动按下按钮执行操作。

    现在、我已经编码了一个用于发送和接收数据的循环。

    它的工作要好得多,但有时仍然失败,但我可以忍受它。

    如果我运行一个循环来发送和重新接收数据、而每次都不关闭和重新打开套接字、则系统运行良好。  但在发送第100次后仍然失败。  非常可重复。 运行循环时,我将连接到我的本地 Apache, 完成发送和接收大约需要0.6秒。 我将发送大约133个字节、并接收大约200个字节。

    如果我再次运行循环、但这次关闭插槽并打开新插槽、则系统会不常发生故障、但通常情况下、在发生故障之前、我最多有145个循环。 周转时间大幅增加、大约为2.2秒。

    也许我收集到的其中一些信息对其他人有用。 因为 TI 提供的有关如何在实际应用中使用 AT 命令演示的信息非常少。