From 3412bedb2a54485197c422b98de11e30b38906f1 Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Wed, 7 Dec 2016 16:03:10 +0200 Subject: [PATCH] Auto-detect baud rate --- tools/AT_Debug/AT_Debug.ino | 78 +++++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/tools/AT_Debug/AT_Debug.ino b/tools/AT_Debug/AT_Debug.ino index 2136807..d004ba5 100644 --- a/tools/AT_Debug/AT_Debug.ino +++ b/tools/AT_Debug/AT_Debug.ino @@ -1,47 +1,77 @@ /************************************************************** * - * To run this tool you need StreamDebugger library: - * https://github.com/vshymanskyy/StreamDebugger - * or from http://librarymanager/all#StreamDebugger + * This script tries to auto-detect the baud rate + * and allows direct AT commands access * * TinyGSM Getting Started guide: * http://tiny.cc/tiny-gsm-readme * **************************************************************/ -#include -#include - -char apn[] = "YourAPN"; -char user[] = ""; -char pass[] = ""; +// Set serial for debug console (to the Serial Monitor, speed 115200) +#define SerialMonitor Serial +// Set serial for AT commands (to the module) // Use Hardware Serial on Mega, Leonardo, Micro -#define GsmSerial Serial1 +#define SerialAT Serial1 // or Software Serial on Uno, Nano -//#include -//SoftwareSerial GsmSerial(2, 3); // RX, TX +//#include +//SoftwareSerial SerialAT(2, 3); // RX, TX -StreamDebugger DebugSerial(GsmSerial, Serial); -TinyGsmClient gsm(DebugSerial); +#include +TinyGsmClient gsm(SerialAT); void setup() { // Set console baud rate - Serial.begin(115200); - delay(10); + SerialMonitor.begin(115200); + delay(5000); +} - // Set GSM module baud rate - GsmSerial.begin(115200); - delay(3000); +void loop() { + // Detect module baud rate + uint32_t rate = 0; + uint32_t rates[] = { 115200, 9600, 57600, 19200, 74400, 74880 }; - gsm.networkConnect(apn, user, pass); + SerialMonitor.println("Autodetecting baud rate"); + for (unsigned i = 0; i < sizeof(rates)/sizeof(rates[0]); i++) { + SerialMonitor.print(String("Trying baud rate ") + rates[i] + "... "); + SerialAT.begin(rates[i]); + delay(10); + if (gsm.autoBaud(3000)) { + rate = rates[i]; + SerialMonitor.println(F("OK")); + break; + } else { + SerialMonitor.println(F("fail")); + } + } - // Access AT commands from Serial - DebugSerial.directAccess(); -} + if (!rate) { + SerialMonitor.println(F("***********************************************************")); + SerialMonitor.println(F(" Module does not respond!")); + SerialMonitor.println(F(" Check your Serial wiring")); + SerialMonitor.println(F(" Check the module is correctly powered and turned on")); + SerialMonitor.println(F("***********************************************************")); + delay(30000L); + return; + } -void loop() { + // Access AT commands from Serial Monitor + SerialMonitor.println(F("***********************************************************")); + SerialMonitor.println(F(" You can now send AT commands")); + SerialMonitor.println(F(" Enter \"AT\" (without quotes), and you should see \"OK\"")); + SerialMonitor.println(F(" If it doesn't work, select \"Both NL & CR\" in Serial Monitor")); + SerialMonitor.println(F("***********************************************************")); + while(true) { + if (SerialAT.available()) { + SerialMonitor.write(SerialAT.read()); + } + if (SerialMonitor.available()) { + SerialAT.write(SerialMonitor.read()); + } + delay(0); + } }