Bonjour
Ce sketch ce compile parfaitement pour une carte nano mais lorsque je le compile pour un XIAO j'ai cette erreur :
In file included from /Users/abc/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.5/cores/arduino/WString.h:29:0,
from /Users/abc/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.5/cores/arduino/Print.h:27,
from /Users/abc/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.5/cores/arduino/Stream.h:26,
from /Users/abc/Documents/Arduino/libraries/SoftwareSerial/SoftwareSerial.h:36,
from /Users/abc/Documents/Arduino/libraries/GPRS_SIM900/sim900.h:35,
from /Users/abc/Documents/Arduino/libraries/GPRS_SIM900/GPRS_Shield_Arduino.h:35,
from /Users/abc/Documents/Arduino/libraries/GPRS_SIM900/GPRS_Shield_Arduino.cpp:33:
/Users/abc/Documents/Arduino/libraries/GPRS_SIM900/GPRS_Shield_Arduino.cpp: In member function 'int16_t GPRS::httpSendGetRequest(const __FlashStringHelper*, const char*, const __FlashStringHelper*, uint8_t, const __FlashStringHelper* const*, const char* const*, uint16_t)':
/Users/abc/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.5/cores/arduino/avr/pgmspace.h:105:61: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
#define pgm_read_word(addr) ((const unsigned short )(addr))
^
/Users/abc/Documents/Arduino/libraries/GPRS_SIM900/GPRS_Shield_Arduino.cpp:1244:52: note: in expansion of macro 'pgm_read_word'
tempParamKey = (const __FlashStringHelper)pgm_read_word(&queryParameterKeys[i]);
^~~~~~~~~~~~~
/Users/abc/Documents/Arduino/libraries/GPRS_SIM900/GPRS_Shield_Arduino.cpp: In member function 'bool GPRS::httpReadResponseData(char, uint16_t)':
/Users/abc/Documents/Arduino/libraries/GPRS_SIM900/GPRS_Shield_Arduino.cpp:1309:83: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
if (sim900_read_string_until(receiveBuffer, sizeof(receiveBuffer), "\r\n") == false) {
^~~~~
Plusieurs bibliothèque trouvées pour "SoftwareSerial.h"
Utilisé: /Users/abc/Documents/Arduino/libraries/SoftwareSerial
Non utilisé: /Users/abc/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.5/libraries/SoftwareSerial
exit status 1
Compilation error: exit status 1
Mon sketch :
// ***************************************************
// SIM900 (TX) - XIAO (D0)
// SIM800L (RX) - XIAO (D1)
// DHT22 (A6)
// RESET nano (D2)
// ENTREE contact alarme (A3)
// affichage de REDEMARRAGE sur gsm à chaque relancement de la XIAO
// affichage de RESET VOLONTAIRE su gsm lors de l'envoi de l'ordre "R"
// Lancement de la mesure par "T"
// lancement du reset volontaire par "R"
// LED verte 9 ON = GSM OK - prêt à recevoir des ordres
// LED jaune 8 ON = TRAFFIC GSM
// LED rouge 7 ON = GSM NOK ou INTRUSION
// ***************************************************
#include <Wire.h>
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>
// *** TEMPERATURE *****
// *********************
#include "DHT.h"
#define brocheDeBranchementDHT A6 // pine de mesure DHT22
#define typeDeDHT DHT22 // type de DHT utilisé
DHT dht(brocheDeBranchementDHT, typeDeDHT); // Instanciation de la librairie DHT
// ****HORLOGE ****
// ****************
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include "RTClib.h" //library DS1307
RTC_DS1307 rtc;
char NomJour[7][12] = { "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" };
char NomMois[12][12] = { "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre" };
String jour, moisMod;
int date, mois, annee, heure, minute, seconde;
char phone[16];
char datetime[10];
int humMesuree;
int tempMesuree;
String TEMP;
String HUM;
String REDEM;
String REDEMVOL;
String PRET;
String DANGER;
String DateAlarm;
String DHTdefaut;
String FININTRUSION;
String INTRUSION;
int State = 0;
int X = 0;
String jourMod;
String DATEjour;
String DATEmois;
String DATEannee;
String DATEmod;
String HEUREmod;
String MOISmod;
#define PIN_TX 1
#define PIN_RX 0
#define BAUDRATE 57600
GPRS gprs(PIN_TX, PIN_RX, BAUDRATE); //RX,TX,PWR,BaudRate
#define PHONE_NUMBER "+32474611688"
#define MESSAGE_LENGTH 10
char message[2];
int messageIndex = 0;
//***************************************************
void setup() {
LED_JAUNE_ON();
// vitesse moniteur
Serial.begin(9600);
// attribution des pines
pinMode(A3, INPUT); // alarme intrusion
pinMode(9, OUTPUT); // led verte
pinMode(7, OUTPUT); //led jaune
pinMode(8, OUTPUT); //led rouge
if (!rtc.begin()) {
Serial.println("recherche RTC");
Serial.flush();
while (1) delay(10);
}
//chargement de l'heure et date dans le DS3231 choisi une des deux options
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//rtc.adjust(DateTime(2025, 04, 9, 18, 20, 0)); //année,mois,jour, heure,minutes,secondes
//activation du DHT22;
dht.begin();
delay(1000);
// Test connexion GSM
gprs.checkPowerUp();
while (!gprs.init()) {
LED_ROUGE_ON(); //LED rouge ON = GSM non ok
}
LED_ROUGE_OFF();
//envoi vers gsm de la signalisation du reboot du systeme
REDEM = "Redemarrage\n \n *** PRET *** \n \n T= ordre Temperature\n R= ordre reset Nano\n";
ENVOI(REDEM); // envoi du SMS REBOOT
delay(1000);
LED_JAUNE_OFF();
//LED verte ON = ready prêt recevoir des ordres
LED_VERTE_ON();
}
//********************************************
void loop() {
messageIndex = 0;
// lecture du buffer messages du gsm
messageIndex = gprs.isSMSunread();
// test de la presence d'au moins d'un ordre envoyé
if (messageIndex > 0) {
gprs.readSMS(messageIndex, message, 10, phone, datetime);
gprs.deleteSMS(messageIndex); //suppression de l'ordre envoyé pour ne pas saturer la memoire de la carte SIM
Serial.print(message[0]);
//switch (message[0]) {
if (message[0] == 'T') {
//case 'T':
DATE();
//LED jaune ON = réception de l'ordre de mesure T° et humidité
LED_JAUNE_ON();
// Lecture des données
humMesuree = dht.readHumidity(); // Lecture du taux d'humidité (en %)
tempMesuree = dht.readTemperature(); // Lecture de la température, exprimée en degrés Celsius
// Vérification si les mesures se font
if ((humMesuree == 0) || (tempMesuree == 0)) {
DHTdefaut = " DHT22 defecteux - redemarrer";
ENVOI(DHTdefaut); // envoi du sms "READY"REDEMVOL = " Reset volontaire";
return; // Si aucune valeur n'a été reçue par l'Arduino, on attend 2 secondes, puis on redémarre la fonction loop() pou une retentative
}
// detection alarme gel
if (tempMesuree < 40) {
DANGER = "\n *** GEL *** \n\r";
}
// préparation String pour envoi des valeurs T° et humidité vers GSM
String TEMP;
TEMP.reserve(100);
TEMP += "Temperature (degres) = ";
TEMP += tempMesuree;
TEMP += "\n Humidite (%) = ";
TEMP += humMesuree;
TEMP += "\n\n " + jourMod + " " + date + " " + moisMod + " " + annee + " " + heure + ":" + minute + "\n";
TEMP += DANGER;
TEMP += " T= ordre Temperature\n R= ordre reset Nano\n";
ENVOI(TEMP); // envoi du sms temperature
LED_JAUNE_OFF();
// break;
}
if (message[0] == 'R') {
//LED JAUNE ON = ordre redémarrage reçu
LED_JAUNE_ON();
DateAlarm = "Redemarrage volontaire \n";
ENVOI(DateAlarm); // envoi du sms "Redemarrage volontaire"
// envoi signal reset sur pro-mini
RESET();
//LED JAUNE OFF = extinction si reset fait
LED_JAUNE_OFF();
}
}
State = digitalRead(A3);
if ((State == 1) & (X == 0)) {
DATE();
LED_ROUGE_ON();
LED_JAUNE_ON();
String INTRUSION;
INTRUSION.reserve(100);
INTRUSION += "INTRUSION\n\n" + jourMod + " " + date + " " + moisMod + " " + annee + " " + heure + ":" + minute + "\n";
ENVOI(INTRUSION);
LED_JAUNE_OFF();
LED_ROUGE_OFF();
X = 1;
} else if ((State == 0) & (X == 1)) {
DATE();
String FININTRUSION;
FININTRUSION.reserve(100);
FININTRUSION += "FIN INTRUSION\n\n" + jourMod + " " + date + " " + moisMod + " " + annee + " " + heure + ":" + minute + "\n" + "\n";
FININTRUSION += " T= ordre Temperature\n R= ordre reset Nano\n";
ENVOI(FININTRUSION);
LED_JAUNE_OFF();
LED_ROUGE_OFF();
X = 0;
}
}
//*******************************************
void ENVOI(String OBJET) {
gprs.sendSMS(PHONE_NUMBER, OBJET.c_str()); // envoi du SMS OBJET
delay(1000);
}
void LED_VERTE_ON() {
digitalWrite(9, HIGH);
}
void LED_VERTE_OFF() {
digitalWrite(9, LOW);
}
void LED_JAUNE_ON() {
digitalWrite(8, HIGH);
}
void LED_JAUNE_OFF() {
digitalWrite(8, LOW);
}
void LED_ROUGE_ON() {
digitalWrite(7, HIGH);
}
void LED_ROUGE_OFF() {
digitalWrite(7, LOW);
}
void RESET() {
pinMode(2, OUTPUT); // reset
digitalWrite(2, HIGH);
}
void DATE() {
DateTime now = rtc.now();
jourMod = NomJour[now.dayOfTheWeek()];
date = now.day();
moisMod = NomMois[now.month() - 1];
annee = now.year();
heure = now.hour();
minute = now.minute();
seconde = now.second();
}
