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: Connection to Amazon AWS

Part Number: CC3200
Other Parts Discussed in Thread: UNIFLASH

Hello,

Over a week, I am working on making a connection to Amazon AWS IoT Core Thing. Probably, I read all the threads about "CC3200 and TLS" in this forum, so I created this new thread.

Step by step, I will explain what I did to make a connection to AWS (Directly importing a project to CCS and building, flashing it didnt work).

1) Creating Thing on AWS

  • I created a thing on AWS.
  • Downloaded the certificate, private key and root CA files. 
  • Created a certificate for the thing.
  • Created a policy for the thing. Edited policy rights:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:*",
      "Resource": "*"
    }
  ]
}

So, any software or device can connect and publish/subscribe to any message using this policy.

2) Connection Tests:

  • Amazon AWS' "ready to go" downloaded script worked well when I run it from the powershell. 
  • I wrote a paho mqtt python program to connect with TLS certificate files and it can publish and subscribe to a topic. So, now, I can see on my program url, socket, tls_version and chipher variables. 
  • I tried CC3200 mqtt examples but they all failed. After that, I programmed my CC3200 launchpad using paho embedded c to communicate my custom mqtt broker without TLS. This link was very helpful:blog.benjamin-cabe.com/.../mqtt-on-the-ti-cc3200-launchpad-thanks-to-paho-embedded-client
  • To make a secure connection, I worked on CC3200 ssl example and I succeeded to make a connection to google.com with my CC3200 launchpad.
  • I improved the ssl example to connect Amazon AWS and partly I succeded.

Now, I am stuck at the point where "Ganesh Gurung58" wrote on this page: e2e.ti.com/.../769842

xxxxx-ats.iot.xxxxx.amazonaws.com (iot:Data-ATS) isnt working and returning -155 connection error, but xxxxx.iot.xxxxx.amazonaws.com (iot:Data) makes a connection. I can see the connection activity on AWS Iot Core Monitor page. But the problem is sl_Send cannot send any data. When I make a subcription to the topic that CC3200 sends, it shows nothing on AWS IoT Core MQTT test page.

Here is the code comparison. Below code works without TLS to make a connection and sending MQTT package to my custom broker:

    UART_PRINT("\n\rInternet Access.");
    while(1)
    {
        MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
        int rc = 0;
        char buf[200];
        MQTTString topicString = MQTTString_initializer;

        UART_PRINT("\n\rMQTT definitions.");


        char* payload = "mypayload";
        int payloadlen = strlen(payload);
        int buflen = sizeof(buf);

        UART_PRINT("\n\rpayload definitions.");

        //data.clientID.cstring = "thisismeee";
        data.keepAliveInterval = 20;
        data.cleansession = 1;
        data.clientID.cstring = "asdfjlsdl";
        data.username.cstring = "usrnew";
        data.password.cstring = "gabcd";
        int len = MQTTSerialize_connect(buf, buflen, &data);

        UART_PRINT("\n\rMQTTSerialize_connect");

        topicString.cstring = "cc3200-ben-xxxx";
        len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, payload, payloadlen);
        UART_PRINT("\n\rMQTTSerialize_publish");

        len += MQTTSerialize_disconnect(buf + len, buf - len);
        UART_PRINT("\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);//my custom broker's ip address in hex

        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\rsl_Send");
        sl_Close(mysock);
        UART_PRINT("\n\rsl_Close");

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

        osi_Sleep(1000);

    }

The code below makes a connection to AWS, no error executing MQTT messages but nothing happening on the AWS MQTT test page.

        // BEGIN AWS TLS CONNECTION. BECAUSE OF TI CC3200 TLS EXAMPLES DID NOT WORK, PAHO EMBEDDED C USED. 

        Network n;
        Client 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,
                               &sockSecureFiles,
                               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 function error \n\r");
            GPIO_IF_LedOn(MCU_RED_LED_GPIO);
            return lRetVal;
        }
        // END AWS TLS CONNECTION. PAHO EMBEDDED C USED.


        UART_PRINT("Opened TCP Port with return code:%d", lRetVal);
        MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
        int rc = 0;
        char buf[200];
        MQTTString topicString = MQTTString_initializer;

        UART_PRINT("\n\rMQTT definitions.");


        char* payload = "mypayload";
        int payloadlen = strlen(payload);
        int buflen = sizeof(buf);

        UART_PRINT("\n\rpayload definitions.");

        //data.clientID.cstring = "thisismeee";
        data.keepAliveInterval = 20;
        data.cleansession = 1;
        data.clientID.cstring = "testThing1";
        int len = MQTTSerialize_connect(buf, buflen, &data);

        UART_PRINT("\n\rMQTTSerialize_connect");

        topicString.cstring = "denemetopic";
        len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, payload, payloadlen);
        UART_PRINT("\n\rMQTTSerialize_publish");

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


        //UART_PRINT("\n\rsl_Connect");
        sl_Send(n.my_socket, buf, len, NULL);
        UART_PRINT("\n\rsl_Send");
        sl_Close(n.my_socket);
        UART_PRINT("\n\rsl_Close");

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

Could you please help on making a connection to Amazon AWS?

Best regards,

Onur.