Différences entre les versions de « ESP 32 LILYGO TTGO t-call ESP32 SIM800H »
m (Denis a déplacé la page ESP 32 vers ESP 32 LILYGO TTGO t-call ESP32 SIM800H) |
|||
(30 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:// | |||
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 | |||
<pre> | |||
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 | |||
} | |||
</pre> | |||
Et un autre qui fonctionne aussi, (https://github.com/Xinyuan-LilyGO/LilyGo-T-Call-SIM800/commit/b0304b918dc726939bfa914272670d1cc28a8cbf) | |||
<pre> | |||
#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 | |||
} | |||
</pre> | |||
Et encore un, il en faut peu pour être heureux ! | |||
<pre> | |||
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 | |||
} | |||
</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> | |||
== É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. | |||
<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();