Other Parts Discussed in Thread: CC3200, UNIFLASH
主题中讨论的其他器件: 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。