SIM800L GSM 模块使用 http 并显示 https 错误,为什么?
SIM800L GSM Module working with http and shows error with https, why?
我正在尝试使用 Arduino 和 sim800l GSM 模块将一些传感器数据发送到 MySQL 数据库。当我对 URL 使用 HTTP 并从我的网站删除 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());
}
}
这是我将 URL 替换为 https 并启用我的网站 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 模式,我应该将此代码放在哪里。谢谢
终于弄明白了,因为这个sim800只支持TLS 1.0.但它是一个已弃用的版本,许多网站和主机服务已将其禁用。您可以从这里 cdn77.com/tls-test
检查您的服务器 SSL 版本
首先检查你的 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 数据库。
我正在尝试使用 Arduino 和 sim800l GSM 模块将一些传感器数据发送到 MySQL 数据库。当我对 URL 使用 HTTP 并从我的网站删除 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());
}
}
这是我将 URL 替换为 https 并启用我的网站 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 模式,我应该将此代码放在哪里。谢谢
终于弄明白了,因为这个sim800只支持TLS 1.0.但它是一个已弃用的版本,许多网站和主机服务已将其禁用。您可以从这里 cdn77.com/tls-test
检查您的服务器 SSL 版本首先检查你的 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 数据库。