【问题标题】:SIM800L GSM Module working with http and shows error with https, why?SIM800L GSM 模块使用 http 并显示 https 错误,为什么?
【发布时间】:2020-07-17 08:56:18
【问题描述】:

我正在尝试使用 Arduino 和 sim800l GSM 模块将一些传感器数据发送到 MySQL 数据库。当我使用 HTTP 作为 URL 并从我的网站中删除 SSL 证书时,它运行良好。但是当我在我的网站上启用 SSL 证书时,它会在串行监视器中显示 HTTP 响应代码 606。 这是我没有 SSL 证书的工作代码(此代码完美运行)

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(3, 2);

void setup()
{
  gprsSerial.begin(19200);
  Serial.begin(19200);

  Serial.println("Config SIM900...");
  delay(2000);
  Serial.println("Done!...");
  gprsSerial.flush();
  Serial.flush();

  // attach or detach from GPRS service 
  gprsSerial.println("AT+CGATT?");
  delay(100);
  toSerial();


  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"myapn\"");
  delay(2000);
  toSerial();

  // bearer settings
   gprsSerial.println("AT+SAPBR=0,1");
   delay(2000);
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
}


void loop()
{
   // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000); 
   toSerial();

   // set http param value
   gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://www.website123456.com/data/index.php?data1=2.88&data2=2.93\""); 
   delay(20000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD"); 
   delay(10000);
   toSerial();

   gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial.write(gprsSerial.read());
  }
}

这是我用 https 替换 URL 并启用我的网站 ssl 时的输出。 (如您所见,它显示 http 响应代码 606 “不可接受 已成功联系用户代理,但会话描述的某些方面(例如请求的媒体、带宽或寻址方式)不可接受”

23:16:48.974 -> Config SIM800L...
23:16:50.946 -> Done!...
23:16:51.079 -> AT+CGATT?

23:16:51.079 -> +CGATT: 1
23:16:51.079 -> 
23:16:51.079 -> OK
23:16:53.107 -> AT+SAPBR=3,1,"CONTYPE","GPRS"

23:16:53.107 -> OK
23:16:55.100 -> AT+SAPBR=3,1,"APN","dialogbb"

23:16:55.133 -> OK
23:16:59.122 -> AT+SAPBR=0,1

23:16:59.155 -> OK
23:16:59.155 -> AT+SAPBR=1,1

23:17:01.151 -> OK
23:17:03.185 -> AT+HTTPPARA="URL","https://www.mywebsitttte.com/index.php?dAT+HTTPSSL=1

23:17:08.207 -> OK
23:17:14.221 -> AT+HTTPACTION=0

23:17:14.255 -> OK
23:17:14.255 -> 
23:17:14.255 -> +HTTPACTION: 0,606,0
23:17:24.266 -> AT+HTTPREAD

23:17:24.266 -> OK
23:17:36.595 -> 
AT+HTTPTERM

23:17:36.595 -> OK

那么我应该对这段代码做哪些修改,以便能够使用 SSL 证书将数据上传到网站?我看到有人说我需要使用此代码AT+HTTPSSL=1 进入 SSL 模式,我应该将这个代码放在哪里。谢谢

【问题讨论】:

  • 在小型 8 位 Arduino 上,您应该忘记 SSL。
  • 但是当我在网站上安装 SSL 时它会显示错误。这个数据发送过程我不需要 ssl,但我的网站需要 ssl
  • 603 Decline :"The destination does not wish to participate in the call, or cannot do so" 嗯,所以你的问题是:如何让web服务器接受http请求(80端口)
  • 当我使用 https 但不使用 https 发送时,它正在接受请求
  • @AshfaqHAhmed 是的,我终于想通了,因为这个 sim800 只支持 TLS 1.0。但这是一个已弃用的版本,许多网站和主机服务已禁用它。您可以从这里检查您的服务器 TLS 版本cdn77.com/tls-test

标签: mysql ssl arduino ssl-certificate gsm


【解决方案1】:

我终于弄明白了,这是因为这个sim800只支持TLS 1.0。但这是一个已弃用的版本,许多网站和主机服务已禁用它。您可以从此处 cdn77.com/tls-test 检查您的服务器 SSL 版本

【讨论】:

    【解决方案2】:

    首先检查您的 SIM800 固件,我的 808 模块上有旧固件,没有 SSL,我几周前才买的。您可以使用此 AT 命令进行检查:

    AT+HTTPSSL=?
    

    如果出现错误,请检查并更新固件。 否则,如果工作这是我使用的顺序:

     client.println("AT+HTTPINIT");
     getresponse();
     delay(1000);
     client.println("AT+HTTPSSL=1");    // set SSL for HTTPS
     getresponse();
     delay(1000);
     client.println("AT+HTTPPARA=\"CID\",1");
     getresponse();
     delay(1000);
    

    我可以可靠地 HTTPS 连接到我的 Firebase 数据库。

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2021-12-15
      • 1970-01-01
      • 2017-11-26
      • 2020-04-26
      • 1970-01-01
      相关资源
      最近更新 更多