Hallo zusammen,
ich habe ein Waveshare SIM7600E-H Shield am Arduino Due "laufen", habe aber Probleme Daten auf einen Webserver zu schicken bzw. erst einmal irgendeine Verbindung zum Web herzustellen.
SMS-Versand und Anrufen funktioniert problemlos. Zum testen der Verbindung habe ich ein Code aus dem Netz mit der Tiny-GSM Library leicht umgeschrieben.
#define TINY_GSM_MODEM_SIM7600
#define SerialMon Serial
//HardwareSerial Serial1(1);
#if !defined(TINY_GSM_RX_BUFFER)
#define TINY_GSM_RX_BUFFER 650
#endif
#define TINY_GSM_YIELD() { delay(2); }
const char apn[] = "internet.telekom"; // Change this to your Provider details
const char gprsUser[] = "congstar";
const char gprsPass[] = "cs";
const char server[] = "ptsv2.com"; // Change this to your selection
const char resource[] = "/t/51f7c-1630711879/post";
const int port = 443;
unsigned long timeout;
const int trigPin = 25;
const int echoPin = 26;
long duration;
int distance;
#include <TinyGsmClient.h>
TinyGsm modem(Serial1);
TinyGsmClient client(modem);
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
SerialMon.begin(115200);
delay(10);
SerialMon.println("Wait...");
Serial1.begin(9600);
delay(600);
SerialMon.println("Initializing modem...");
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
modem.restart();
SerialMon.print("Waiting for network...");
if (!modem.waitForNetwork()) {
SerialMon.println(" fail");
delay(1000);
return;
}
SerialMon.println(" success");
if (modem.isNetworkConnected()) {
SerialMon.println("Network connected");
}
SerialMon.print(F("Connecting to "));
SerialMon.print(apn);
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialMon.println(" fail");
delay(1000);
return;
}
SerialMon.println(" success");
if (modem.isGprsConnected()) {
SerialMon.println("GPRS connected");
}
if (!client.connect(server, port)) {
SerialMon.println(" fail");
}
SerialMon.println("Performing HTTP POST request...");
String httpRequestData = "key=a@4K%3&distance="+ String(distance) +"";
client.print(String("POST ") + resource + " HTTP/1.1\r\n");
client.print(String("Host: ") + server + "\r\n");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(httpRequestData.length());
client.println();
client.println(httpRequestData);
timeout = millis();
while (client.connected() && millis() - timeout < 10000L) {
while (client.available()) {
char c = client.read();
SerialMon.print(c);
timeout = millis();
}
}
SerialMon.println();
client.stop();
SerialMon.println(F("Server disconnected"));
modem.gprsDisconnect();
SerialMon.println(F("GPRS disconnected"));
}
Im Serial Monitor kommt folgendes als Antworten:
01:35:26.814 -> Wait...
01:35:27.425 -> Initializing modem...
01:36:34.535 -> Waiting for network... success
01:36:35.936 -> Network connected
01:36:35.936 -> Connecting to internet.telekom success
01:36:36.916 -> GPRS connected
01:37:29.290 -> fail
01:37:29.290 -> Performing HTTP POST request...
01:37:30.734 ->
01:37:30.874 -> Server disconnected
01:37:30.921 -> GPRS disconnected
Wenn ich das richtig verstehe läuft alles ohne Probleme - bis der connect Befehl die fail Rückmeldung gibt.
Wo könnte der Fehler liegen?
Habe auch schon verschiedene SIM-Karten getestet - ohne, dass sich etwas geändert hat.
Bin für alle Ideen dankbar.
Grüße
Julius