Probleme mit Baud Rate und LTE Modul

Also ich weiß nicht was für ein Shield du benutzt, ich habe eines von dfrobot gefunden, dort wird im Datenblatt geschrieben: * Input Power: VIN(7-23V)/USB(5V) muss aber ehrlich zugeben, dass mir nicht erschließt wo die bis zu 23 V eingespeist werden müssen. Aber was auch interessant ist. Da gibt es eine Note mit ! Unter Punk 4 steht folgendes: 1. Indicator “ON” –SIM7600CE power indicator. The module will work properly only when it is powered by the external power supply.
Heißt für mich soviel, dass eine Stromversorgung über den Uno allein nicht ausreichend ist.

Und nur weil etwas kurzfristig zu funktionieren scheint, heißt das nicht, das es das auch langfristig tut. Vielleicht liegts wirklich nur an deinem code. Aber langfristig würde ich mir durchaus gedanken über eine stabile Spannungsversorgung machen.

2 Likes

Mein Compiler motzt eben, wenn ich den üblichen Syntax verwende.

"request for member 'end' in 'SIM7600Serial', which is of pointer type 'SoftwareSerial*' (maybe you meant to use '->' ?)"

Das ist doch wegen dem Pointer *SIM7600Serial, der auf die Adresse von SIM7600SS zeigt.

SoftwareSerial SIM7600SS = SoftwareSerial(GSM_TX, GSM_RX);
SoftwareSerial *SIM7600Serial = &SIM7600SS;

Mag sein dass ich da falsch liege, da ich von einer anderen Library ausgegangen bin.
Dann solltest du unbedingt immer einen Link deiner verwendeten Libraries posten.
Nicht alle Libraries kann man kennen.

Hallo Leute
Das Umschalten der Baudrate funktioniert nun. Es lag am von HotSystems entdeckten fehlenden "Serial" in der Zeile:
SIM7600.write("AT+IPR=9600\n");
Dann fehlte aber auch noch ein carriage return, anstatt nur dem linefeed.

Es wird alles initialisiert, aber SMS lesen geht nicht. Es kommt immer nur immer "Invalid command". Werde mir morgen ein Arduino Mega holen und alles über eine Hardware Serial laufen lassen. Ist mir irgendwie zu mühsam mit dem Umschalten.

Soll ich für die hardwaremässige Serial mit 11520 Baud auf dem Arduino Mega die "HardwareSerial"-Library nutzen, was meint ihr?

Wenn Sie einen Arduino MEGA verwenden, nehmen Sie einen Hardware-Port in Anspruch und verwenden Sie Serial1, Serial2 oder Serial3

#define SIM7600Serial Serial1

void setup() {
  Serial.begin(115200);
  SIM7600Serial.begin(115200); // Passen Sie die Baudrate an, um sie an Ihr Modul anzupassen
}

void loop() {
}

Und im Constructor, also hier?

SoftwareSerial SIM7600SS = SoftwareSerial(GSM_TX, GSM_RX);
SoftwareSerial *SIM7600Serial = &SIM7600SS;
#define GSM_RST 20 // Dummy
#define SIM7600Serial Serial1
Adafruit_FONA SIM7600 = Adafruit_FONA(GSM_RST);

void setup() {
  Serial.begin(115200);
  SIM7600Serial.begin(115200); // Passen Sie die Baudrate an, um sie an Ihr Modul anzupassen
  if (! SIM7600.begin(& SIM7600Serial)) {
    Serial.println(F("Couldn't find SIM7600"));
    playErrorMelody();
    while (true) yield();
  }
•••

Also dann kann ich diese nachfolgenden Zeilen weglassen, korrekt?

SoftwareSerial SIM7600SS = SoftwareSerial(GSM_TX, GSM_RX);
SoftwareSerial *SIM7600Serial = &SIM7600SS;

Ja, Sie können alles entfernen, was mit SoftwareSerial zu tun hat (und #include <SoftwareSerial.h>)

Ich bekomme diesen Error mit den von oben angepassten Codezeilen:
C:\Users\leich\OneDrive\Dokumente\Arduino\DFRobot_Tel0124_fona_Mega\DFRobot_Tel0124_fona_Mega.ino: In function 'void setup()':
DFRobot_Tel0124_fona_Mega:79:38: error: no matching function for call to 'Adafruit_FONA::begin(HardwareSerial*)'
if (! SIM7600.begin(& SIM7600Serial)) {

Ich hatte die Details nicht überprüft.

Es scheint, dass die Bibliothek eine Referenz auf einen FONAStreamType erwartet, der nur ein Alias für Stream ist.

Und HardwareSerial erbt tatsächlich von Stream.

Da es eine Referenz möchte, müssen Sie nicht die Adresse übergeben, sondern nur die Instanz.

#define GSM_RST 20 // Dummy
#define SIM7600Serial Serial1
Adafruit_FONA SIM7600 = Adafruit_FONA(GSM_RST);

void setup() {
  Serial.begin(115200);
  SIM7600Serial.begin(115200); // Passen Sie die Baudrate an, um sie an Ihr Modul anzupassen
  if (! SIM7600.begin(SIM7600Serial)) { // <=====
    Serial.println(F("Konnte SIM7600 nicht finden"));
    playErrorMelody();
    while (true) yield();
  }
•••

Ich konnte compilieren, aber der Code bleibt bei genau diesem if-statement hängen. Ich kann aber mit einem anderen Code mit dem Modul über Serial1 kommunizieren. Hardwareseitig sollte alles stimmen.

Couldn't find SIM7600

Vielleicht

  SIM7600Serial.begin(9600); // Passen Sie die Baudrate an, um sie an Ihr Modul anzupassen

Das hilft nicht. Das Modul ist per default auf 115200 Baud eingestellt

OK...

Sie könnten versuchen zu sehen, ob das Modul auf AT-Befehle antwortet...

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200); // SIM7600
}

void loop() {
  if (Serial.available()) Serial1.write(Serial.read());
  if (Serial1.available()) Serial.write(Serial1.read());
}

Stellen Sie den Serial Monitor so ein, dass er CR/LF sendet, und versuchen Sie, AT-Befehle einzugeben.

Ich hatte einen identischen Code vorhin verwendet, um die Schnittstelle zu prüfen. Die AT-Commands kommen an

Haben Sie ADAFRUIT_FONA_DEBUG in der Bibliothek aktiviert?

Was Sehen Sie?

Im file FONAConfig.h der Library sehe ich diese Zeile:

#define ADAFRUIT_FONA_DEBUG

Aber ich glaube mit der Library stimmt trotzdem etwas nicht. In meinem Sketch ist Adafruit_FONA nicht grün: