Unlocking and improving the Pythings SIM800 GPRS module for MicroPython

Auch andere berichten über fehlenden SSL support bei den SIM800-Modulen.

Hier wird noch von einem AT-Kommando AT+SSLOPT=1,1 gesprochen, um die SSL-Option (überhaupt erst?) einzuschalten. Hm.

OK, danke ! ;)

Aber das ist ja leider schon interpretiert (dadurch, daß Du das Ding per Python ansprichst) und leider nicht transparent wie in einem terminal-Programm: die Ausgabe eines etwaigen OK wird durch sowas unterdrückt - wir bräuchten hier mal die Ausgabe im raw-Modus…
Hier z.B. (2x in der Mitte, nach CIPSSL suchen) findet sich ein Hinweis, daß auch bei diesem Befehl -wenn er funktioniert resp. implementiert ist- eine Leerzeile samt OK auf neuer Zeile rausgeschickt wird. - Ist aber jetzt auch nicht soo wichtig; wenn Du Zeit findest.

… oder du packst die Arduino-IDE kurz aus und spielst das drauf

Arduino-Code AT über Serielle
// GPRS credentials (leave empty, if missing)
const char apn[]      = "internet.telekom"; // Your APN
const char gprsUser[] = ""; // User
const char gprsPass[] = ""; // Password
const char simPIN[]   = ""; // SIM card PIN code, if any

// pins TTGO T-Call 
// SIM800
#define MODEM_RST            5
#define MODEM_PWKEY          4
#define MODEM_POWER_ON       23
#define MODEM_TX             27
#define MODEM_RX             26
// I2C pins for IP5306
#define I2C_SDA              21
#define I2C_SCL              22

// power management IP5306 
#define IP5306_ADDR          0x75
#define IP5306_REG_SYS_CTL0  0x00

// Serials
// set serial for Serial Monitor
#define SerialMon Serial
// set serial for SIM800 / AT commands
#define SerialAT  Serial1
// Define the serial console for debug prints, if needed
#define TINY_GSM_DEBUG SerialMon
//#define DUMP_AT_COMMANDS

// Configure TinyGSM library
#define TINY_GSM_MODEM_SIM800      // Modem is SIM800
#define TINY_GSM_RX_BUFFER   1024  // Set RX buffer to 1Kb

// libraries 
#include <Wire.h>
#include <TinyGsmClient.h>

#ifdef DUMP_AT_COMMANDS
  #include <StreamDebugger.h>
  StreamDebugger debugger(SerialAT, SerialMon);
  TinyGsm modem(debugger);
#else
  TinyGsm modem(SerialAT);
#endif

TinyGsmClient client(modem);

// power management via IP5306
bool setPowerBoostKeepOn(int en)
{
  Wire.beginTransmission(IP5306_ADDR);
  Wire.write(IP5306_REG_SYS_CTL0);
  if (en) {
    Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
  } else {
    Wire.write(0x35); // 0x37 is default reg value
  }
  return Wire.endTransmission() == 0;
}


void setup() {
  // Set console baud rate
  SerialMon.begin(115200);
  delay(10);

  // Keep power when running from battery
  Wire.begin(I2C_SDA, I2C_SCL);
  bool isOk = setPowerBoostKeepOn(1);
  SerialMon.println(String("IP5306 KeepOn ") + (isOk ? "OK" : "FAIL"));

  // Set-up modem reset, enable, power pins
  pinMode(MODEM_PWKEY, OUTPUT);
  pinMode(MODEM_RST, OUTPUT);
  pinMode(MODEM_POWER_ON, OUTPUT);
  digitalWrite(MODEM_PWKEY, LOW);
  digitalWrite(MODEM_RST, HIGH);
  digitalWrite(MODEM_POWER_ON, HIGH);

  // Set GSM module baud rate and UART pins
  SerialAT.begin(115200, SERIAL_8N1, MODEM_RX, MODEM_TX);
  delay(3000);
  

  // restart takes quite some time
  // to skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();
  // Or, use modem.init() if you don't need the complete restart
  //modem.init();

  String modemInfo = modem.getModemInfo();
  SerialMon.print("Modem: ");
  SerialMon.println(modemInfo);

  // Unlock your SIM card with a PIN if needed
  if (strlen(simPIN) && modem.getSimStatus() != 3 ) {
    modem.simUnlock(simPIN);
  }
}

void loop() {
  if (SerialAT.available()) {
    SerialMon.write(SerialAT.read());
  }
  if (SerialMon.available()) {
    SerialAT.write(SerialMon.read());
  }
}

mit 115200 baud und neue Zeile im Seriellen Monitor kannst du dann AT-Kommandos absetzen.

Macht Euch nicht zu viel Mühe. Eigentlich haben wir alles Wichtige schon herausgefunden und könnten 1:1 der "hasSSL"-Implementierung der TinyGSM-Bibliothek folgen.

2 Likes