Springe zum Inhalt

Einfaches Modem-Skript für TC35

Da hier jemand nach einem einfachen Modem-Skript fragte, mit 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). 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
  1. #include <SoftwareSerial.h>
  2. #define rxPin 2
  3. #define txPin 3
  4.  
  5. SoftwareSerial gsmSerial(rxPin, txPin);
  6. char recu[150];    // Array for message
  7. String message = "";
  8. int i;
  9.  
  10. void setup() {
  11.   // initialize digital pin 13 as an output.
  12.   pinMode(13, OUTPUT);
  13.  
  14.   Serial.begin(9600);
  15.   while(!Serial) {}
  16.  
  17.   //--- turn on TC35 ---
  18.   // wire pin 8 Arduino to IGT pin on TC35
  19.   // ground pin for 100 ms - this is the same as pressing the button on the TC35 to start it up
  20.   pinMode(8, INPUT);
  21.   digitalWrite(8, LOW);
  22.   pinMode(8, OUTPUT);
  23.   delay(100);
  24.   pinMode(8, INPUT);
  25.  
  26.   gsmSerial.begin(9600);
  27.   delay(5000);
  28.   Serial.println("Bereit für Kommandos. Kommando beenden mit Punkt.");
  29. }
  30.  
  31. void loop() {
  32.   i = 0;
  33.   while (Serial.available() > 0) {
  34.     recu[i] = Serial.read();
  35.     if ((recu[i] != 46) && (recu[i] != 13) && (recu[i] != 10))
  36.     {
  37.       message += char(recu[i]);
  38.     }
  39.     i++;
  40.     // 46 is ASCII code for "."
  41.     if (recu[i - 1] == 46) {
  42.       SendCmdMessage();
  43.       ShowSerialData();
  44.       delay(1000);
  45.       message = "";
  46.       i = 0;
  47.     }
  48.   }
  49.   ShowSerialData();
  50. }
  51.  
  52. void SendCmdMessage() {
  53.   gsmSerial.println(message);
  54.   delay(500);
  55. }
  56.  
  57. void ShowSerialData() {
  58.   while(gsmSerial.available() > 0) {
  59.     Serial.write(gsmSerial.read());
  60.   }
  61. }

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 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!