ESP 32 LILYGO TTGO t-call ESP32 SIM800H

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

ESP 32

Matériel acheté : Le système est basé sur une carte LILYGO TTGO t-call ESP32 SIM800H qui intègre à la fois un ESP32 et un module SIM800H. Donc rien à souder ou adapter, juste à alimenter en USB-C.

https://fr.aliexpress.com/item/33045221960.html?spm=a2g0o.order_list.order_list_main.16.577c5e5b3XhXo9&gatewayAdapt=glo2fra PRix payé : 26,56€ avec le port

Lire doc, https://fablabutc.fr/wp-content/uploads/2021/01/Tutoriel_ESP32.pdf

telecharger IDE Arduino

installer IDE (win)

Installer le package “ESP32 by expressif systems” (cf. doc)


La doc pour l'envoi des SMS avec Home Assistant, mais pour l'instant ce n'est pas le sujet, on va essayer de faire fonctionner l'ESP32 de façon autonome. https://hacf.fr/blog/esphome-sms-appels-sans-internet/


la doc de la carte, https://github.com/Xinyuan-LilyGO/LilyGo-T-Call-SIM800

Et voir cet échange de forum, https://forum.arduino.cc/t/esp32-sim800h-recevoir-un-sms/1195632/4


Étape 1 : Installation de l'IDE Arduino

Téléchargez et installez l'IDE Arduino depuis le site officiel : Arduino Software.


Étape 2 : Ajout du support pour ESP32 dans l'IDE Arduino

Ouvrez l'IDE Arduino.

Allez dans Fichier -> Préférences.

Dans la section "URL de gestionnaire de cartes supplémentaires", ajoutez l'URL suivante : https://dl.espressif.com/dl/package_esp32_index.json.

Cliquez sur OK pour fermer la fenêtre de préférences.

Allez dans Outils -> Type de carte (board) -> Gestionnaire de cartes.

Recherchez "esp32" dans la barre de recherche.

Cliquez sur l'option pour installer le package pour les cartes ESP32.


Étape 3 : Sélection de la carte ESP32

Après l'installation, allez dans Outils -> Type de carte et sélectionnez votre carte ESP32.

Choisissez également le port correct sous Outils -> Port pour votre carte ESP32.


Étape 4 : Téléversement d'un programme de test

Voici un exemple de code simple

void setup() {
  Serial.begin(19200); // Démarre la communication série à 19200 bauds
}

void loop() {
  Serial.println("Bonjour, ESP32 !"); // Envoyer un message au moniteur série
  delay(1000); // Attendre une seconde
}

Et un autre qui fonctionne aussi, (https://github.com/Xinyuan-LilyGO/LilyGo-T-Call-SIM800/commit/b0304b918dc726939bfa914272670d1cc28a8cbf)

#include <esp_system.h>

void setup() {
  Serial.begin(19200);
  delay(1000);
  
  esp_chip_info_t chip_info;
  esp_chip_info(&chip_info);

  Serial.println("\nInformations sur le module ESP32 :");
  Serial.printf("Modèle du module: %d\n", chip_info.model);
  Serial.printf("Cœurs CPU: %d\n", chip_info.cores);
  Serial.printf("Fréquence du CPU: %d MHz\n", ESP.getCpuFreqMHz());
  Serial.printf("Révision du module: %d\n", chip_info.revision);
}

void loop() {
  // Votre code ici
}

Et encore un, il en faut peu pour être heureux !

const int ledPin = 13; // GPIO de la LED intégrée sur la carte TTGO T-Call ESP32 SIM800H

void setup() {
  pinMode(ledPin, OUTPUT); // Définir le GPIO de la LED en sortie
}

void loop() {
  digitalWrite(ledPin, HIGH); // Allumer la LED
  delay(1000); // Attendre une seconde
  digitalWrite(ledPin, LOW); // Éteindre la LED
  delay(1000); // Attendre une seconde
}

Étape 5 : envoi d'un SMS

L'objectif est d'utiliser le SIM800H pour envoyer un SMS.

Ce tuto peut être une source d'inspiration, https://randomnerdtutorials.com/esp32-sim800l-send-text-messages-sms/

- installer la bibliothèque TinyGSM

- installer la bibliothèque StreamDebugger

- charger ce code, un peu modifié pour envoyer plusieurs SMS en boucle.

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-sim800l-send-text-messages-sms/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/
// SIM card PIN (leave empty, if not defined)
const char simPIN[]   = "0000";

// Your phone number to send SMS: + (plus sign) and country code, for Portugal +351, followed by phone number
// SMS_TARGET Example for Portugal +351XXXXXXXXX
#define SMS_TARGET  "0749541320"

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

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

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

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

// Define the serial console for debug prints, if needed
#define DUMP_AT_COMMANDS

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

#define IP5306_ADDR          0x75
#define IP5306_REG_SYS_CTL0  0x00

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);

  // 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 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 SIM800 module, it takes quite some time
  // To skip it, call init() instead of restart()
  SerialMon.println("Initializing modem...");
  modem.restart();
  // use modem.init() if you don't need the complete restart

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

  // attendre la fin de l'initialisation
  delay(30000);
  }
}

void loop() {
  const int numberOfSMS = 2;
  String smsMessage = "Hello from ESP32!";

  for (int i = 0; i < numberOfSMS; i++) {
    if(modem.sendSMS(SMS_TARGET, smsMessage)){
      SerialMon.println("SMS #" + String(i) + " envoyé");
    }
    else{
      SerialMon.println("Échec de l'envoi du SMS #" + String(i));
    }
    delay(1000); // Attendre une seconde avant d'envoyer le prochain SMS
  }

  // Attendre un moment avant de recommencer la boucle
  delay(30000); // Attendre 30 secondes avant de recommencer l'envoi de SMS
}

Nouvelle ligne
115200 baud
/�e�AT

RDY

+CFUN: 1

+CPIN: SIM PIN
AT

OK
ATE0
ATE0

OK
AT+CMEE=0

OK
AT+CLTS=1

OK
AT+CBATCHK=1

OK
AT+CPIN?

+CPIN: SIM PIN

OK
AT+CPIN?

+CPIN: SIM PIN

OK
AT+CPIN="0000"

OK
AT+CMGF=1

ERROR
Échec de l'envoi du SMS #0
AT+CMGF=1

+CPIN: READY

OK
AT+CSCS="GSM"

OK
AT+CMGS="0749541320"

>Hello from ESP32!� 
Call Ready

SMS Ready

ERROR
Échec de l'envoi du SMS #1
AT+CMGF=1

OK
AT+CSCS="GSM"

OK
AT+CMGS="0749541320"

>Hello from ESP32!� 
+CMGS: 115

OK
SMS #2 envoyé
AT+CMGF=1

OK
AT+CSCS="GSM"

OK
AT+CMGS="0749541320"

>Hello from ESP32!� 
+CMGS: 116

OK
SMS #3 envoyé
AT+CMGF=1

OK
AT+CSCS="GSM"

OK
AT+CMGS="0749541320"

>Hello from ESP32!� 
+CMGS: 117

OK
SMS #4 envoyé

Étape 5 : paramétrage de la mise en veille

En l'état, la consommation du module est de l'ordre de 1400 mAh, c'est à dire de quoi vider un accu 18650 en moins de 2h.

Si l'envoi des SMS n'a pas à être trop fréquent, on peut paramétrer une mise en sommeil de l'ESP 32 auquel cas sa consommation est pratiquement réduite à zéro.

Pour cela, on ajoute, dans la partie Setup

// paramétrage mise en sommeil
  esp_sleep_enable_timer_wakeup(30 * 1000000); // 30 secondes en microsecondes

Et ceci dans la boucle,

  // Mettre l'ESP32 en veille profonde pour un certain délai
  esp_deep_sleep_start();