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.

[参考译文] CC3100:TM4C129ENCPDT:使用 CC3100并使用 http_CLI 库连接到 MQTT 服务器

Guru**** 2540720 points
Other Parts Discussed in Thread: TM4C129ENCPDT, CC3100, CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/917254/cc3100-tm4c129encpdt-connecting-to-mqtt-server-using-http_cli-library-using-cc3100

器件型号:CC3100
Thread 中讨论的其他器件: CC3200

大家好、

我正在使用 TI RTOS 和 httpcli 库以及 使用   CC3100的 tm4c129encpdt (驱动程序版本  "1.0.1.6"将稍后更新、现在无法更新)。

我正在尝试使用 https://cli 库通过端口编号8883连接到 MQTT 服务器(AWS IoT)

我的原始代码是-

typedef struct TLSDataParams{
HTTPCLI_Structure aws_CLI;
HTTPCLI_Params aws_params;
HTTPCLI_Field aws_Fields;
struct sockaddr_in aws_addr;

TLS_Params AWS _ tlsPar;
TLS_Handle AWS _ TLS;

}TLSDataParams;//////// TLS 参数



////////////////////////// 创建并连接到服务器
tlsDataParams->aws_fields.name = HTTPStd_field_name_host;
tlsDataParams->aws_fields.value ="xxxxxxxxxxxxxxx";



HTTPCLI_con构(&tlsDataParams->aws_cli);
HTTPCLI_setRequestFields (&tlsDataParams->aws_CLI、(const HTTPCLI_Field *)&tlsDataParams->aws_Fields);
tls_Params_init (&tlsDataParams->aws_tlsPar);

tlsDataParams->aws_tlsPar.ca = pRootCALocation;//证书稍后要完成 Akhilesh
tlsDataParams->aws_tlsPar.calen = root_ca_pim_len;//sizeof (tlsParams->pRootCALocation);
tlsDataParams->aws_tlsParar.cert = tpDeviceCertLocation;
tlsDataParams->aws_tlsParar.certlen = client_cert_pem_len;//sizeof (tlsParams->pDeviceCertLocation);
tlsDataParams->aws_tlsPar.key = pDevicePrivateKeyLocation;
tlsDataParams->aws_tlsParar.keylen = client_private_key_pem_len;//sizeof (tlsParams->pDevicePrivateKeyLocation);


tlsDataParams->aws_TLS = tls_create (tls_method_client_TLSv1_2、&tlsDataParams->aws_tlsPar、NULL);
if (!tlsDataParams->aws_TLS){

RET =故障;
转到 quit;

}

strcat (pDestinationURL、":");strcat (tlsParams->pDestinationURL、portStr);

status = HTTPCLI_initSockAddr ((struct sockaddr *)&tlsDataParams->aws_addr、pDestinationURL、0);
if (状态< 0)
{
int error = HTTPCLI_getSocketError (&tlsDataParams->AWS CLI);
RET =错误;
转到 quit;
}

HTTPCL_PARAMS_INIT (&tlsDataParams->aws_params);
tlsDataParams->aws_params.tls = tlsDataParams->aws_TLS;
// logStr (" URL 为%s"、__function__、tlsParams->pDestinationURL);

状态= HTTPCLI_CONNECT (&tlsDataParams->aws_cli、(struct sockadr *)&tlsDataParams->aws_addr、0、&tlsDataParams->aws_params);//失败

if (状态< 0)
{
int error = HTTPCLI_getSocketError (&tlsDataParams->aws_CLI);//错误-155
RET =错误;
转到 quit;
} //////////////////////////// 直至此处。 我的状态为0;

} 

我的主要关注点是在连接时。
连接时、我遇到-155错误。

为什么会这样? 有人可以帮我解决这个问题吗?

我一次尝试这些根 CA 一个。  

  1. VeriSign 3类公共主 G5根 CA 证书

2. 亚马逊根 CA 1.

3. 交叉签名的亚马逊根 CA 1.

4. 交叉签名的亚马逊根 CA 2.

日期和时间都正确。

谢谢

Akhi

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

    您好、Akhi、

    您为什么不使用 CC3100 SDK 随附的 MQTT 库执行 MQTT 连接至 AWS IoT? 我在这里向客户提供了一些示例代码、您可以使用这些代码:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/881308/3268750#3268750

    对于您的证书、您需要使用 Starfield 2类认证机构证书、而不是您列出的证书。 我在这里的文章中解释了这背后的原因:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/789112/2919312#2919312

    请下载该证书并将其提供给 CC3100、然后再次尝试执行 MQTT 连接。

    此致、

    Michael

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

    您好、Michael、

    我下载了您提供的证书、现在工作正常。 我可以连接、发布和订阅 MQTT 服务器。  

    我不使用 cc3200 MQTT 库的原因是、我已经在使用 https://fp (隐式)和 HTTPS 的 cc3100和以太网。 使用 httpcli 库、我不必为以太网和 cc3100编写不同的代码。 httpcli 将 SL API 用于 cc3100、将 wolfsl 用于以太网。 这是我不使用该库的主要原因。

    现在、CC3100的一切都正常、但我在以太网中遇到了问题。 我已经发布了另一个有关以太网的问题、希望我能从那里得到回复。  

    非常感谢 Michael 的帮助。

    此致、

    Akhilesh