Un programme simple pour envoyer des commandes au modem SIM800 intégré avec l'ESP32

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche

Avec ce programme, les commandes sont lues sur la console Arduino, ou avec Putty connecté sur le port série. Cela permet d'envoyer ou de recevoir des SMS, et aussi de faire sonner le tel distant.

Ce code assure une communication bidirectionnelle entre deux ports série, SerialAT (généralement connecté au module GSM) et SerialMon (utilisé pour le débogage ou la communication avec l'ordinateur hôte). Les données reçues sur l'un des ports sont immédiatement transférées vers l'autre port, permettant ainsi une transmission en temps réel des données entre le module GSM et l'ordinateur hôte.




// Please select the corresponding model

// #define SIM800L_IP5306_VERSION_20190610
// #define SIM800L_AXP192_VERSION_20200327
// #define SIM800C_AXP192_VERSION_20200609
  #define SIM800L_IP5306_VERSION_20200811

#include <Arduino.h>
#include "utilities.h"

// Set serial for debug console (to the Serial Monitor, default speed 115200)
#define SerialMon Serial
// Set serial for AT commands (to the module)
#define SerialAT  Serial1

void setupModem()
{
#ifdef MODEM_RST
    // Keep reset high
    pinMode(MODEM_RST, OUTPUT);
    digitalWrite(MODEM_RST, HIGH);
#endif

    pinMode(MODEM_PWRKEY, OUTPUT);
    pinMode(MODEM_POWER_ON, OUTPUT);

    // Turn on the Modem power first
    digitalWrite(MODEM_POWER_ON, HIGH);

    // Pull down PWRKEY for more than 1 second according to manual requirements
    digitalWrite(MODEM_PWRKEY, HIGH);
    delay(100);
    digitalWrite(MODEM_PWRKEY, LOW);
    delay(1000);
    digitalWrite(MODEM_PWRKEY, HIGH);

    // Initialize the indicator as an output
    pinMode(LED_GPIO, OUTPUT);
    digitalWrite(LED_GPIO, LED_OFF);
}

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

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

    setupModem();

}

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

}