Différences entre les versions de « ESP 32 LILYGO TTGO t-call ESP32 SIM800H »

De Wiki de Mémoire Vive
Aller à la navigation Aller à la recherche
m (Denis a déplacé la page ESP 32 vers ESP 32 LILYGO TTGO t-call ESP32 SIM800H)
 
(20 versions intermédiaires par un autre utilisateur non affichées)
Ligne 4 : Ligne 4 :
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.
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,
Lire doc,
Ligne 15 : Ligne 17 :




La doc pour l'envoi des SMS avec Home Assistant
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/
https://hacf.fr/blog/esphome-sms-appels-sans-internet/


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




Ligne 57 : Ligne 61 :
<pre>
<pre>
void setup() {
void setup() {
   Serial.begin(9600); // Démarre la communication série à 9600 bauds
   Serial.begin(19200); // Démarre la communication série à 19200 bauds
}
}


Ligne 71 : Ligne 75 :


void setup() {
void setup() {
   Serial.begin(9600);
   Serial.begin(19200);
   delay(1000);
   delay(1000);
    
    
Ligne 102 : Ligne 106 :
   delay(1000); // Attendre une seconde
   delay(1000); // Attendre une seconde
}
}
</pre>
Celui-ci pour se connecter au wifi et afficher une page web
<pre>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
const char* ssid = "2-4Ghz-db94";    // Remplacez par le nom de votre réseau Wi-Fi
const char* password = "xggi62eed5tw0";  // Remplacez par le mot de passe de votre réseau Wi-Fi
AsyncWebServer server(80);
void setup() {
    Serial.begin(19200);
    // Connexion au réseau Wi-Fi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connexion au WiFi en cours...");
    }
    Serial.println("Connecté au réseau WiFi");
    Serial.print("Adresse IP attribuée : ");
    Serial.println(WiFi.localIP());
    // Définir les routes du serveur Web
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
        String html = "<html><body><h1>Bienvenue sur l'ESP32</h1></body></html>";
        request->send(200, "text/html", html);
    });
    // Lancer le serveur
    server.begin();
    Serial.println("serveur web lancé");
}
void loop() {
    // Votre code ici
}
</pre>
</pre>


Ligne 108 : Ligne 152 :
L'objectif est d'utiliser le SIM800H pour envoyer 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/
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.
<pre>
 
 
/*
  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
}
 
</pre>
 
<pre>
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é
 
</pre>
 
== É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
 
<pre>
// paramétrage mise en sommeil
  esp_sleep_enable_timer_wakeup(30 * 1000000); // 30 secondes en microsecondes
</pre>
 
Et ceci dans la boucle,
<pre>
  // Mettre l'ESP32 en veille profonde pour un certain délai
  esp_deep_sleep_start();
</pre>

Version actuelle datée du 28 mars 2024 à 11:13

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[modifier]

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[modifier]

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[modifier]

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[modifier]

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
}

Celui-ci pour se connecter au wifi et afficher une page web

#include <WiFi.h>
#include <ESPAsyncWebServer.h>

const char* ssid = "2-4Ghz-db94";    // Remplacez par le nom de votre réseau Wi-Fi
const char* password = "xggi62eed5tw0";  // Remplacez par le mot de passe de votre réseau Wi-Fi

AsyncWebServer server(80);

void setup() {
    Serial.begin(19200);

    // Connexion au réseau Wi-Fi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connexion au WiFi en cours...");
    }
    Serial.println("Connecté au réseau WiFi");
    Serial.print("Adresse IP attribuée : ");
    Serial.println(WiFi.localIP());

    // Définir les routes du serveur Web
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
        String html = "<html><body><h1>Bienvenue sur l'ESP32</h1></body></html>";
        request->send(200, "text/html", html);
    });

    // Lancer le serveur
    server.begin();
    Serial.println("serveur web lancé");
}

void loop() {
    // Votre code ici
}

Étape 5 : envoi d'un SMS[modifier]

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[modifier]

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