SIM7080G AWS IoT Core MQTTS 连接不起作用

问题描述 投票:0回答:1

我有一个 SIM7080G 连接到 Arduino Mega,尝试使用 MQTTS 连接我的 AWS IoT Core 服务器。无论我尝试了多少种不同的方法,我都无法通过“AT+SMCONN”,因为每次都会返回错误。

我尝试过使用旧证书、更改为 TLS1.2、忽略 RTC 时间等等,但似乎无法取得任何进展。

芯片通过CAT-M网络连接。

此外,我什至无法通过公共经纪商的 1883 端口连接到他们。

任何帮助将不胜感激。

这是在 Mega 上运行的代码(已编辑的设备证书和密钥,以及 URL 的一部分):


String _buffer;
#define BUFFER_RESERVE_MEMORY 500
#define TIME_OUT_READ_SERIAL    5000


char caCert[] = R"EOF(
  -----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
)EOF";


char deviceCert[] = R"EOF(
  -----BEGIN CERTIFICATE-----
--
-----END CERTIFICATE-----

)EOF";

char privateKey[] = R"EOF(
-----BEGIN RSA PRIVATE KEY-----
--
-----END RSA PRIVATE KEY-----
)EOF";


int BOARD_MODEM_PWR_PIN = 5;

void readSerial()
{
  _buffer = "";
    uint64_t timeOld = millis();
    while (!Serial1.available() && !(millis() > timeOld + TIME_OUT_READ_SERIAL)) { ; }
    if(Serial1.available()) { _buffer = Serial1.readString(); }
  Serial.println(_buffer);
}

bool atCheck()                                
{
  Serial1.print(F("AT\r"));

  readSerial();

  if(_buffer.indexOf(F("OK")) != -1)
  {
    return true;
  }
  else
  {
    return false;
  }
}

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  _buffer.reserve(BUFFER_RESERVE_MEMORY);
  pinMode(BOARD_MODEM_PWR_PIN, OUTPUT);

  // Check connection
  while(!atCheck()) 
  {
    Serial.println("Failed connection, trying again...");
    delay(100);
    digitalWrite(BOARD_MODEM_PWR_PIN, LOW);
    delay(100);
    digitalWrite(BOARD_MODEM_PWR_PIN, HIGH);
    delay(1000);
    digitalWrite(BOARD_MODEM_PWR_PIN, LOW);
    Serial1.print(F("AT AT AT AT AT AT\r"));
    readSerial();
    Serial1.print(F("AT\r"));
    readSerial();
  }
  Serial.println("Connected");

  Serial1.print(F("AT+CNACT=0,1\r"));
  readSerial();

  Serial1.print(F("AT+CCLK?\r"));
  readSerial();

  Serial1.print(F("AT+CNACT?\r"));
  readSerial();

  Serial1.print(F("AT+CFSINIT\r")); // get stream ready
  readSerial();

  // Root certificate
  Serial1.print("AT+CFSWFILE=3,ca.crt,0,"+String(sizeof(caCert))+",5000\r"); // start stream
  readSerial();

  Serial1.print(caCert);
  Serial1.print("\r");
  readSerial();

  // Device certificate and device key
  Serial1.print("AT+CFSWFILE=3,myclient.crt,0,"+String(sizeof(deviceCert))+",5000\r"); // start stream
  readSerial();
  Serial1.print(deviceCert);
  Serial1.print("\r");
  readSerial();

  Serial1.print("AT+CFSWFILE=3,\"myclient.key\",0,"+String(sizeof(privateKey))+",5000\r"); // start stream
  readSerial();
  Serial1.print(privateKey);
  Serial1.print("\r");
  readSerial();

  // Finished  
  Serial1.print(F("AT+CFSTERM\r")); // clear stream
  readSerial();
  
  Serial1.print(F("AT+SMCONF=\"URL\",-ENDPOINT-.iot.ap-southeast-2.amazonaws.com,8883\r"));
  readSerial();  
  Serial1.print(F("AT+SMCONF=\"KEEPTIME\",60\r"));
  readSerial();
  Serial1.print(F("AT+SMCONF=\"CLEANSS\",1\r"));
  readSerial();
  Serial1.print(F("AT+SMCONF=\"QOS\",1\r"));
  readSerial();
  Serial1.print(F("AT+SMCONF=\"CLIENTID\",\"simcom\"\r"));
  readSerial();

  Serial1.print(F("AT+CSSLCFG=\"SSLVERSION\",0,3\r"));
  readSerial();
  Serial1.print(F("AT+CSSLCFG=\"CONVERT\",2,ca.crt\r"));
  readSerial();
  Serial1.print(F("AT+CSSLCFG=\"CONVERT\",1,myclient.crt,myclient.key\r"));
  readSerial();  


  Serial1.print(F("AT+SMSSL=1,ca.crt,myclient.crt\r"));
  readSerial();
  Serial1.print(F("AT+SMCONN\r"));
  readSerial();

  Serial.println("Manual commmand mode");

}

void loop() {
  
    while(Serial1.available())
    {
      Serial.write(Serial1.read());
    }
    while(Serial.available())
    {
      Serial1.write(Serial.read());
    }
    delay(1);
}

这是输出:

Connected
AT+CNACT=0,1

OK

AT+CCLK?

+CCLK: "24/09/05,01:21:44+48"

OK

AT+CNACT?

+CNACT: 0,1,"100.91.252.95"
+CNACT: 1,0,"0.0.0.0"
+CNACT: 2,0,"0.0.0.0"
+CNACT: 3,0,"0.0.0.0"

OK

AT+CFSINIT

OK

AT+CFSWFILE=3,ca.crt,0,1296,5000

DOWNLOAD


OK

AT+CFSWFILE=3,myclient.crt,0,1225,5000

DOWNLOAD


OK

AT+CFSWFILE=3,"myclient.key",0,1677,5000

DOWNLOAD


OK

AT+CFSTERM

OK

AT+SMCONF="URL",XXXXXXXX,8883

OK

AT+SMCONF="KEEPTIME",60

OK

AT+SMCONF="CLEANSS",1

OK

AT+SMCONF="QOS",1

OK

AT+SMCONF="CLIENTID","simcom"

OK

AT+CSSLCFG="SSLVERSION",0,3

OK

AT+CSSLCFG="CONVERT",2,ca.crt

OK

AT+CSSLCFG="CONVERT",1,myclient.crt,myclient.key

OK

AT+SMSSL=1,ca.crt,myclient.crt

OK

AT+SMCONN

+CME ERROR: operation not allowed

Manual commmand mode

策略(只是试图确保没有任何东西阻止任何连接尝试) 政策

amazon-web-services ssl mqtt iot aws-iot
1个回答
0
投票

抱歉,我没有答案给你。我也有同样的问题。你解决了吗?

© www.soinside.com 2019 - 2024. All rights reserved.