Go Down

Topic: Probleme arduino uno / module sim 900 / bme280 (Read 238 times) previous topic - next topic

pierrev7

Bonjour à tous ,

Suite à mon projet de station météo et controle à distance de relais pour éteindre une machine agricole  je rencontre quelques difficultées ,

voici ma configuration :

-carte arduino uno
-carte sim900 AZ delivery
-relais
-capteur bme280

pour la phase de branchement de tout les capteurs et alimentations pas de pb (arduino via usb , sim900 5v et bme280 via arduino )
j 'ai tester la lecture du capteur bme280 sur mon moniteur RAS mais maintennant apres téléversement du programme pour le sim 900 voici la réponse :

Initializing...
AT
 
OK
AT+CSQ
 
+CSQ: 20,0
 
OK
AT+CCID
 
89*****************
 
OK
AT+CREG?
 
+CREG: 0,0
 
OK


voici le programme :
Code: [Select]
#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM900
SoftwareSerial mySerial(7, 8); //SIM900 Tx & Rx is connected to Arduino #7 & #8

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
 
  //Begin serial communication with Arduino and SIM900
  mySerial.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //Handshaking with SIM900
  updateSerial();
  mySerial.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  updateSerial();
  mySerial.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  mySerial.println("AT+CREG?"); //Check whether it has registered in the network
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available())
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available())
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}



aprés recherche sur le net ( https://www.ercogener.com/faq-support-en-ligne/reseau-et-operateurs/)  pour la commande AT+CREG? je devrais avoir une réponse differente de +CREG: 0,0 je pense donc à un probleme d'attachement au réseau céllulaire , j'ai bien sur pas de code pin , j'ai essayer avec deux cartes SIM differentes et j'ai du réseau , toujours le meme résultat .

J'ai envoyer un sms avec un autre programme et pas de sms en reception sur le téléphone ...

Pour finir au niveau des LED ; power rouge (en fonction )
                                                 netlight clignotement rouge
                                                 statuts pas de led en fonction

Merci pour votre aide ! :)

al1fch

#1
Nov 15, 2020, 03:02 pm Last Edit: Nov 15, 2020, 03:03 pm by al1fch
Bonjour et Bienvenue

L'aide viendra... à condition de se conformer aux Règles du Forum, en particulier en évitant d'occuper le sous forum dédié aux choses F I N I E S

Demandes rapidement au modérateur (lien Report to Moderator) le déplacement du message à l'endroit approprié et prends connaissance des Règles du Forum.

pierrev7


jfs

Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

al1fch

Si la carte  Sim900 est alimentée en 5v via la carte Arduino elle manque de courant pout pouvour 'accrocher' le réseau.
Il lui faut une alimentation 2A avec la bonne valeur de tension qui dépend du modèle de carte.

pierrev7

Bonjour ,

après recherche il s'agit d'un module sim900A (india) donc inutlisable ici ...
nouveaux tests avec un nouveau module sim900 même brachement (alim 5V dédiée ) et tout fonctionne !

Merci à tous pour votre aide

al1fch

Merci du retour !!
Bonne continuation.....

pierrev7

Bonjour ,
dans la continuité de mon projet je bloque sur le programme , je me suis inspiré de ce tuto mais au lieu du capteur DHT j'ai le bme 280.(https://randomnerdtutorials.com/request-sensor-data-sms-arduino-sim900-gsm-shield/)

Voici une ébauche de mon code :


Code: [Select]


//Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme; // use I2C interface
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();

// Create global varibales to store temperature and humidity
float t; // temperature in celcius
float p; // pressure in hpa
float h; // humidity in %

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Create variable to store incoming SMS characters
char incomingChar;

void setup() {

  Serial.begin(9600);
  Serial.println(F("BME280 Sensor event test"));

  if (!bme.begin()) {
    Serial.println(F("Could not find a valid BME280 sensor, check wiring!"));
    while (1) delay(10);
  }
 
  bme_temp->printSensorDetails();
  bme_pressure->printSensorDetails();
  bme_humidity->printSensorDetails();
 
  Serial.begin(19200);
  SIM900.begin(19200);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r");
  delay(100);
  // Set module to send SMS data to serial out upon receipt
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){
  if (SMSRequest()){
    if(readData()){
      delay(10);
      // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
      // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
      SIM900.println("AT + CMGS = \"+XXXXXXXXXX\"");
      delay(100);
      // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
      String dataMessage = ("Temperature: " + String(t) + "*C " + " Humidity: " + String(h) + "%" + " Pressure: " + String(p) + "hpa" );
           
     
      // Send the SMS text message
      SIM900.print(dataMessage);
      delay(100);
      // End AT command with a ^Z, ASCII code 26
      SIM900.println((char)26);
      delay(100);
      SIM900.println();
      // Give module time to send SMS
      delay(5000); 
    }
  }
  delay(10);
}

boolean readData() {
  //Read humidity
  t = bme.getTemperatureSensor();
  // Read temperature as Celsius
  h = bme.getHumiditySensor();
  // Read humidity as %
  p = bme.getPressureSensor();
  // Read pressure as hpa
 
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(p)) {
    Serial.println("Failed to read from bme sensor!");
    return false;
  }
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Pressure: ");
  Serial.print(p);
  Serial.print(" hpa ");
 
  return true;
}

boolean SMSRequest() {
  if(SIM900.available() >0) {
    incomingChar=SIM900.read();
    if(incomingChar=='S') {
      delay(10);
      Serial.print(incomingChar);
      incomingChar=SIM900.read();
      if(incomingChar =='T') {
        delay(10);
        Serial.print(incomingChar);
        incomingChar=SIM900.read();
        if(incomingChar=='A') {
          delay(10);
          Serial.print(incomingChar);
          incomingChar=SIM900.read();
          if(incomingChar=='T') {
            delay(10);
            Serial.print(incomingChar);
            incomingChar=SIM900.read();
            if(incomingChar=='E') {
              delay(10);
              Serial.print(incomingChar);
              Serial.print("...Request Received \n");
              return true;
            }
          }
        }
      }
    }
  }
  return false;
}


et voici les messages d'erreur :

Arduino : 1.8.13 (Linux), Carte : "Arduino Uno"


 In function 'boolean readData()':
sendsmspierre3:83:32: error: cannot convert 'Adafruit_Sensor*' to 'float' in assignment
   t = bme.getTemperatureSensor();
                                ^
sendsmspierre3:85:29: error: cannot convert 'Adafruit_Sensor*' to 'float' in assignment
   h = bme.getHumiditySensor();
                             ^
sendsmspierre3:87:29: error: cannot convert 'Adafruit_Sensor*' to 'float' in assignment
   p = bme.getPressureSensor();
                             ^
exit status 1
cannot convert 'Adafruit_Sensor*' to 'float' in assignment


Merci pour vos lumières :)







kamill

Bonjour,

Comme son nom l'indique bme.getTemperatureSensor() retourne l'objet capteur de température. Pour lire la température c'est bme.readTemperature(). Idem pour les autres erreurs.

Regardes les exemples de la librairie.

pierrev7

Merci beaucoup pour ta réponse , j'apprend beaucoup grace à toi !

je viens de corriger tout ça , plus de code d'erreur mais pourtant une fois le sms envoyé pas de reponse ...
mon capteur Bme 280 est fonctionnel ainsi que mon module sim900

voici le nouveau code :


Code: [Select]
/Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme; // use I2C interface
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();

// Create global varibales to store temperature and humidity
float t; // temperature in celcius
float p; // pressure in hpa
float h; // humidity in %

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Create variable to store incoming SMS characters
char incomingChar;

void setup() {

  Serial.begin(9600);
  Serial.println(F("BME280 Sensor event test"));

  if (!bme.begin()) {
    Serial.println(F("Could not find a valid BME280 sensor, check wiring!"));
    while (1) delay(10);
  }
 
  bme_temp->printSensorDetails();
  bme_pressure->printSensorDetails();
  bme_humidity->printSensorDetails();
 
  Serial.begin(9600);
  SIM900.begin(9600);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r");
  delay(100);
  // Set module to send SMS data to serial out upon receipt
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){
  if (SMSRequest()){
    if(readData()){
      delay(10);
      // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
      // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
      SIM900.println("AT + CMGS = \"+336XXXXXXXXX\"");
      delay(100);
      // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
      String dataMessage = ("Temperature: " + String(t) + "*C " + " Humidity: " + String(h) + "%" + " Pressure: " + String(p) + "hpa" );
           
     
      // Send the SMS text message
      SIM900.print(dataMessage);
      delay(100);
      // End AT command with a ^Z, ASCII code 26
      SIM900.println((char)26);
      delay(100);
      SIM900.println();
      // Give module time to send SMS
      delay(5000);
    }
  }
  delay(10);
}

boolean readData() {
  //Read humidity
  t = bme.readTemperature();
  // Read temperature as Celsius
  h = bme.readHumidity();
  // Read humidity as %
  p = bme.readPressure();
  // Read pressure as hpa
 
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(p)) {
    Serial.println("Failed to read from bme sensor!");
    return false;
  }
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
 
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
 
  Serial.print("Pressure: ");
  Serial.print(p);
  Serial.print(" hpa ");
 
  return true;
}

boolean SMSRequest() {
  if(SIM900.available() >0) {
    incomingChar=SIM900.read();
    if(incomingChar=='S') {
      delay(10);
      Serial.print(incomingChar);
      incomingChar=SIM900.read();
      if(incomingChar =='T') {
        delay(10);
        Serial.print(incomingChar);
        incomingChar=SIM900.read();
        if(incomingChar=='A') {
          delay(10);
          Serial.print(incomingChar);
          incomingChar=SIM900.read();
          if(incomingChar=='T') {
            delay(10);
            Serial.print(incomingChar);
            incomingChar=SIM900.read();
            if(incomingChar=='E') {
              delay(10);
              Serial.print(incomingChar);
              Serial.print("...Request Received \n");
              return true;
            }
          }
        }
      }
    }
  }
  return false;
}



une petite idée ?
un grand merci

Go Up