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.

[参考译文] CC3200:连接至 Amazon AWS

Guru**** 2782445 points

Other Parts Discussed in Thread: CC3200, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/969495/cc3200-connection-to-amazon-aws

器件型号:CC3200
主题中讨论的其他器件: UNIFLASH

您好!

一个多星期以来、我正在努力与 Amazon AWS IoT Core 建立连接。 可能我在该论坛中阅读了有关"CC3200和 TLS"的所有主题、因此我创建了这个新主题。

分步说明、我如何连接到 AWS (直接将工程导入 CCS 并生成、刷写工程不起作用)。

1) 1)在 AWS 上创建东西

  • 我在 AWS 上创建了一个东西。
  • 已下载证书、私钥和根 CA 文件。  
  • 为该东西创建了证书。
  • 为该事物创建了策略。 编辑的策略权限:
{
"版本":"2012-10-17"、
"声明":[
{
"效果":"允许"、
"操作":"IoT:*"、
"资源":"*"
}
]
} 

因此、任何软件或设备都可以使用此策略连接和发布/订阅任何消息。

2) 2)连接测试:

  • 当我从 PowerShell 运行时、Amazon AWS 的"即用即用"下载脚本运行良好。  
  • 我编写了泛美卫生组织 MQTT python 程序以连接 TLS 证书文件、它可以发布和订阅主题。 现在、我可以在程序 URL、socket、TLS_VERSION 和芯片变量上看到。  
  • 我尝试了 CC3200 MQTT 示例、但都失败了。 之后、我使用泛美卫生组织嵌入式 c 对 CC3200 Launchpad 进行编程、以便在没有 TLS 的情况下与我的定制 MQTT 代理进行通信。 此链接非常有用:blog.benjamin-cabe.com/.../mqtt-on-the-ti-cc3200-launchpad-thanks-to-paho-embedded-client
  • 为了实现安全连接、我使用了 CC3200 SSL 示例、并成功使用 CC3200 Launchpad 连接到 google.com。
  • 我改进了 SSL 示例以连接 Amazon AWS、并部分成功。

现在,我一直停留在"Ganesh Gurung58"写在本页上的位置: e2e.ti.com/.../769842

xxxxx-ats.iot.xxxxx.amazonaws.com (IoT:Data-ATS)不工作、返回-155连接错误、但 xxxxx.iot.xxxxx.amazonaws.com (IoT:Data)建立连接。 我可以在 AWS IoT Core Monitor 页面上查看连接活动。 但问题是 sl_Send 无法发送任何数据。 当我对 CC3200发送的主题进行说明时、它在 AWS IoT Core MQTT 测试页面上不显示任何内容。

这是代码比较。 以下代码无需 TLS 即可连接、并将 MQTT 包发送到我的自定义代理:

UART_PRINT ("\n\rInternet 访问。");
while (1)
{
MQTTPacket_connectData 数据= MQTTPacket_connectData_initializer;
int RC = 0;
char buf[200];
MQTTString topicString = MQTTString_initializer;

UART_PRINT ("\n\rMQTT 定义。");


char*有效载荷="mypayload";
int payloadlen = strlen (payload);
int buflen = sizeof (buf);

uart_print ("\n\rpayload 定义。");

//data.clientID.Cstring ="thissmee";
data.keepaliveInterval = 20;
data.清洁= 1;
data.clientID.Cstring ="asdfjlsdl";
data.username.cstring ="usrnew";
data.password.Cstring ="gabcd";
int len = MQTTSerialize_connect (buf、buflen、&data);

UART_PRINT ("\n\n\rMQTTSerialize_connect");

topicString.cstring ="cc3200-Ben-xxxx";
len += MQTTSerialize_publish (buf + len、buflen - len、0、0、0、0、 0、topicString、有效载荷、payloadlen);
UART_PRINT ("\n\n\rMQTTSerialize_publish");

len += MQTTSerialize_disconnect (buf + len、buf - len);
UART_PRINT ("\n\n\rMQTTSerialize_disconnect");

int mysock = sl_Socket (sl_AF_iNet、sl_sock_stream、0);

UART_PRINT ("\n\RSL_Socket);

SlSockAddrIn_t addr;
Addr.Sin_Family = SL_AF_iNet;
Addr.Sin_port = sl_Htons (8883);
addr.sin addr.s_addr = sl_Htonl (0xA1B2C3D4FF);//我的自定义代理的十六进制 IP 地址

UART_PRINT ("\n\RSL_Htonl");

sl_Connect (mysock、(SlSockAddr_t *)&addr、sizeof (addr));
UART_PRINT ("\n\RSL_Connect");
sl_Send (mysock、buf、len、NULL);
UART_PRINT ("\n\nRSL_Send");
sl_close (mysock);
UART_PRINT ("\n\RSL_Close");

UART_PRINT ("\n\rMQTT message sent!");

OSI_SLEEP (1000);

} 

以下代码与 AWS 建立连接、执行 MQTT 消息时没有错误、但在 AWS MQTT 测试页面上没有发生任何错误。

//开始 AWS TLS 连接。 由于 TI CC3200 TLS 示例不起作用、泛美卫生组织使用了嵌入式 C。

网络 n;
客户端 hMQTTClient;

SlSockSecureFiles_t sockSecureFiles;
sockSecureFiles.secureFiles[0]= 127;
sockSecureFiles.secureFiles[1]= 128;
sockSecureFiles.secureFiles[2]= 129;//129;
sockSecureFiles.secureFiles[3]= 0;
lRetVal = TLSConnectNetwork (&n、"XXXXXXXXXXX.iot.XXXXX.amazonaws.com、8883、
等项 SecureFiles (&S)、
SL_SO_SEC_METHOD_TLSv1_2、//SL_SO_SEC_METHOD_SSLv3_TLSv1_2
SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、0);//SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

if (lRetVal < 0)
{
UART_PRINT ("TLSConnectNetwork 函数错误\n");
GPIO_IF_LedOn (MCU_RED_LED_GPIO);
返回 lRetVal;
}
//结束 AWS TLS 连接。 使用了泛美卫生组织的嵌入式 C。


UART_PRINT ("带返回代码的已打开 TCP 端口:%d "、lRetVal);
MQTTPacket_connectData 数据= MQTTPacket_connectData_initializer;
int RC = 0;
char buf[200];
MQTTString topicString = MQTTString_initializer;

UART_PRINT ("\n\rMQTT 定义。");


char*有效载荷="mypayload";
int payloadlen = strlen (payload);
int buflen = sizeof (buf);

uart_print ("\n\rpayload 定义。");

//data.clientID.Cstring ="thissmee";
data.keepaliveInterval = 20;
data.清洁= 1;
data.clientID.Cstring ="testThing1";
int len = MQTTSerialize_connect (buf、buflen、&data);

UART_PRINT ("\n\n\rMQTTSerialize_connect");

topicString.cstring ="denemetopic";
len += MQTTSerialize_publish (buf + len、buflen - len、0、0、0、0、 0、topicString、有效载荷、payloadlen);
UART_PRINT ("\n\n\rMQTTSerialize_publish");

len += MQTTSerialize_disconnect (buf + len、buf - len);
UART_PRINT ("\n\n\rMQTTSerialize_disconnect");


//uart_print ("\n\RSL_Connect");
sl_Send (n.my_socket、buf、len、NULL);
UART_PRINT ("\n\nRSL_Send");
sl_close (n.my_socket);
UART_PRINT ("\n\RSL_Close");

UART_PRINT ("\n\rMQTT message sent!"); 

您能帮助建立与 Amazon AWS 的连接吗?

此致、

Onur。

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

    您好、Onur、

    在这里有一个主题、我将介绍如何在启用 TLS 和 ATS 的 CC3200上使用 AWS 进行设置:

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

    如果您采用我提供的 main.c (CC3200 MQTT 示例的修改版本)、您是否能够使 AWS 连接正常工作?

    请注意、在运行 AWS 代码之前、您需要确保通过 Uniflash 刷写以下3个文件:

    1.您的 AWS 认证

    2. AWS 的私有密钥

    3. Starfield Class 2 Certificate Authority 证书文件。

    此致、

    Michael