Einfaches Modem-Skript für TC35

  • 3 Antworten
  • 710 Aufrufe
Einfaches Modem-Skript für TC35
« am: 26. Sep 26, 2016, 20:31:38 »
Da hier jemand nach einem einfachen Modem-Skript, bei dem über die serielle Konsole AT-Befehle geschickt werden können und die Antworten vom TC35 angezeigt werden, poste ich das einfach mal hier.

Wichtig: seriellen Monitor auf 9600 Baud umstellen und jedes AT-Kommando mit Punkt abschließen! Sind Kommandos oder Antworten des TC35 länger als 64 Bytes, so muss vorher in der Serial-Library der Puffer entsprechend hoch gesetzt werden (_SS_MAX_RX_BUFF), siehe dazu https://blog.tausys.de/2015/10/21/arduino-uno-und-siemens-tc35-sms-empfangen-und-schalter-steuern/. Nach dem Hochsetzen muss das Skript natürlich nochmal kompiliert und auf den Arduino hochgeladen werden.

Verkabelung:
  • GND Arduino mit GND von TC35
  • Pin 8 des Arduino mit IGT des TC35
  • Pin 2 des Arduino mit RXD0 des TC35
  • Pin 3 des Arduino mit TXD0 des TC35

#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3

SoftwareSerial gsmSerial(rxPin, txPin);
char recu[150];    // Array for message
String message = "";
int i;

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);

  Serial.begin(9600);
  while(!Serial) {}

  //--- turn on TC35 ---
  // wire pin 8 Arduino to IGT pin on TC35
  // ground pin for 100 ms - this is the same as pressing the button on the TC35 to start it up
  pinMode(8, INPUT);
  digitalWrite(8, LOW);
  pinMode(8, OUTPUT);
  delay(100);
  pinMode(8, INPUT);

  gsmSerial.begin(9600);
  delay(5000);
  Serial.println("Bereit für Kommandos. Kommando beenden mit Punkt.");
}

void loop() {
  i = 0;
  while (Serial.available() > 0) {
    recu[i] = Serial.read();
    if ((recu[i] != 46) && (recu[i] != 13) && (recu[i] != 10))
    {
      message += char(recu[i]);
    }
    i++;
    // 46 is ASCII code for "."
    if (recu[i - 1] == 46) {
      SendCmdMessage();
      ShowSerialData();
      delay(1000);
      message = "";
      i = 0;
    }
  }
  ShowSerialData();
}

void SendCmdMessage() {
  gsmSerial.println(message);
  delay(500);
}

void ShowSerialData() {
  while(gsmSerial.available() > 0) {
    Serial.write(gsmSerial.read());
  }
}

Wenn vorher alles (auch der TC35) ausgeschaltet war, dann blinkt ca. 5 Sekunden nach dem Start die LED neben R1 und R2 auf dem TC35. Das bedeutet, dass sich der TC35 ins GSM-Netz eingebucht hat. Im seriellen Monitor meldet sich das Skript dann wie im Bild-Anhang dargestellt.

Danach können ganz normal AT-Kommandos an den TC35 geschickt werden. Zu beachten ist nur, dass jedes Kommando im seriellen Monitor mit einem Punkt abgeschlossen werden muss (welcher durch das Skript aber nicht an den TC35 weitergereicht wird). Es dient nur zur Kennung für "hier ist ein Kommando zu Ende". Anschließend werden die Ausgaben des TC35 gelesen und auch im seriellen Monitor angezeigt.

Viel Spaß damit!
« Letzte Änderung: 26. Sep 26, 2016, 20:34:54 von Jens Tautenhahn »

Re: Einfaches Modem-Skript für TC35
« Antwort #1 am: 03. Mär 03, 2017, 18:40:33 »
Moin Jens,

nachdem ich mehrfach mit dem SMS senden gescheitert bin habe ich es erstmal mit dem Seriellen Monitor versucht. Danke dafür.
Ich habe mir über den IDE Seriellen Monitor Texte geschickt und per Terminal Programm mitgelesen, was ankommt. Damit hätten wir dann auch geklärt, warum das SMS senden nicht klappt...

Sende ich mir beispielsweise über den Seriellen Monitor "Bereit fuer Kommandos. Kommando beenden mit Punkt. " empfange ich folgendes:  �M�MKћ�T��K�**��
                 �T�K�**��
                           �۪����+j���U4)�Q�=

Beide Geräte sind auf 9600 Baud eingestellt.
Auch mit Beispielsweise 2400 Baud schaut das ganze ziemlich genauso aus.
Eine Textübertragung zwischen 2 Laptops mit Terminalprogrammen klappt wunderbar.


Vielleicht fällt dir da ja was ein. Ich versuche weiter...




Re: Einfaches Modem-Skript für TC35
« Antwort #2 am: 06. Mär 06, 2017, 10:07:05 »
Könnte es vielleicht sein, dass zusätzlich zur gleichen Geschwindigkeit nicht 8N1 als Kodierung der seriellen Übertragung eingestellt ist? Was noch sein könnte ist, dass eine Seite RTS/CTS (also "Hardwareflußkontrolle") spricht und die andere Seite nur XON/XOFF.

Allerdings verstehe ich Deinen Aufbau noch nicht richtig. Per seriellem Monitor (über USB-Kabel) an den Arduino etwas schicken, ok, aber wo ist da das Terminal zum Mitlesen angeschlossen? Kannst Du das vielleicht noch mal ein bisschen näher beschreiben?

Re: Einfaches Modem-Skript für TC35
« Antwort #3 am: 11. Mär 11, 2017, 23:52:42 »
Ok das war evtl. schlecht beschrieben. Über den Seriellen Monitor vom Arduino habe ich Befehle gesendet und diese an einer anderen Seriellen Schnittstelle am PC mitgelesen.

Ich muss dazu sagen, dass ich ein Siemens TC35i Prog verwende, welches über RS232 kommuniziert und keinen ITG Pin hat.
Daher hatte ich zwischen Arduino und TC35i einen Max232 TTL Wandler. Dieser war augenscheinlich das Problem.
Dank Amazon ist heute ein neuer eingetroffen und jetzt funktioniert bei mir alles wunderbar.

Das sind meine ersten Startversuche mit dem Arduino.
Ich schalte über den Arduino ein Relais für 1sec. um damit bei Wartungen Technische Anlagen zurückzusetzen.
Ich danke Dir vielmals für die Hilfe :)

lg
Tim