Sim900 et google sheets

Bonjour,
je suis tout petit débutant et je tente d'envoyer des données sur une google sheet en utilisant un arduino et un sim900.
J'ai trouvé ce code sur le forum dans lequel j'ai simplement mis l'url de ma feuille. Mais ca ne fonctionne pas.

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(7, 8);

int temp = 0;
int niveau = 0;

void setup()
{
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);

  //Allumer la carte SIM900
  pinMode(9, OUTPUT);
  gprsSerial.begin(9600);
  delay(300);
  Serial.begin(9600);
  delay(300);


  Serial.println("Activation");
  digitalWrite(9, HIGH);
  delay(2000);
  toSerial();
}


void loop()
{ 
  Serial.println("boot");
  gprsSerial.flush();
  Serial.flush();
  delay(500);

  // cherche le nombre de reseau mobile
  gprsSerial.println("AT+CGATT?");
  delay(2000);
  toSerial();

  // Profil GPRS
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // Config APN
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"free\"");
   delay(2000);
  toSerial();
  // Connection au GPRS
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();

  // initialisation du service HTTP
  gprsSerial.println("AT+HTTPINIT");
  delay(2000);
  toSerial();

  // configuration du service HTTP
  gprsSerial.println("AT+HTTPPARA=\"CID\",1");
  delay(2000);
  toSerial();

  // adresse serveur
  gprsSerial.print("AT+");
  gprsSerial.print("HTTPPARA=\"URL\",");
  gprsSerial.print("https://script.google.com/macrosxxxxx/exec?func=addData&val1=1&val2=2&val3=15&val4=Bordettes"); // envoi des variables
  gprsSerial.print("?temp=");
  gprsSerial.print(temp);
  gprsSerial.print("&niveau=");
  gprsSerial.print(niveau);
  gprsSerial.println("\"");
  delay(2000);
  toSerial();

  // Lancer la session
  //  0 = GET, 1 = POST, 2 = HEAD
  gprsSerial.println("AT+HTTPACTION=0");
  delay(2000);
  toSerial();

  // lis les donnees
  gprsSerial.println("AT+HTTPREAD");
  delay(6000);
  // delay(10000UL); // 10 secondes
  toSerial();

  //Fermer la session
  gprsSerial.println("");
  gprsSerial.println("AT+HTTPTERM");
  toSerial();
  delay(2000);

  gprsSerial.println("");
  delay(2000);

   temp = digitalRead(A0);
   Serial.print("temp = ");
    Serial.println(temp);
  niveau = digitalRead(A1);
   Serial.print("niveau = ");
    Serial.println(niveau);
    delay(2000);
}
void toSerial()
{
  const uint32_t timeout = 2000UL;
  uint32_t t0 = millis();
  while (millis() - t0 <= timeout) {
    if (gprsSerial.peek() != -1) {
      Serial.write(gprsSerial.read());
    }
  }
}

Bonjour,
il faut donner plus d'informations .
pour trouver ce qui ne fonctionne pas, il faut suivre dans la console arduino les messages qui remontent du sim900 et voir a quel moment, il renvoie un code erreur ?
comment est cablé le sim900 ?

Mon sim 900 est sur l'arduino uno
Voici les message dans le moniteur

Bonjour @sebagri63

:no_entry:pas de photos pour indiquer ce qui s'échange sous forme de texte entre la carte UNO et le SIM900 !

Faire ci un copié-collé du texte complet, jusqu'au moment où il te semble que quelque chose ne se passe pas pas comme attendu

Message d’accueil : description exacte du matériel exigée.
Description = référence, lien vers datasheet ou à défaut vers le site marchand.

Désolé.
J'utilise arduino uno avec un module sim900 tecnoiot cf : https://www.amazon.fr/dp/B083M72P9Y?psc=1&ref=ppx_yo2ov_dt_b_product_details

voici le résultat dans le moniteur série
21:17:05.497 -> boot 21:17:07.999 -> 21:17:07.999 -> AT+CGATT? 21:17:07.999 -> 21:17:07.999 -> +CGATT: 1 21:17:08.035 -> 21:17:08.035 -> OK

les xxxx sont bien remplacés par tes informations personnelles ?
il faudrait que tu modifies ton programmes en ajoutant des lignes de debugage afin de remonter des infos à la console chaque fois qu'une action est réalisée.

je ne connais pas ton niveau en programmation (tu as mis "tout petit debutant"), mais envoyer les valeurs d'une entrée analogique vers une page google sheet via une connection GPRS est d'un bon niveau.
tu peux essayer d'envoyer tes données vers un service plus simple que google sheet par exemple thinkspeak .

Bonjour @sebagri63

il semble bien que le code que tu as repris te fait buter sur la commande AT+CGATT?

// cherche le nombre de reseau mobile
  gprsSerial.println("AT+CGATT?");
  delay(2000);
  toSerial();

Tu ne laisses ici que 2 secondes à Freemobile pour répondre à travers le SIM900
Augmenter à une dizaine de secondes pourrait peut être arranger un peu les choses et voir au moins sur le terminal à quoi ressemble la réponse (OK ? ou pas ?)
Avec cette commande tu demandes à Freemobile (via le réseau Orange...) s'il t'a connecté au servive GPRS, laisses le répondre avant de continuer :wink:

De manière plus générale ce code de style 'au pif' n'est pas du tout robuste puisqu'il n'analyse pas les réponses du SIM900 aux commandes AT envoyées.
Une commande AT est un dialogue, ne pas attendre dans le code un OK avant de lancer la commande suivante ouvre grand la porte aux dysfonctionnements

Si j'ose dériver un peu, de mon point de vue l'ignorance du code retour de n'importe quelle fonction appelée est une très mauvaise idée.
C'est souvent l'erreur que font les "débutants" et encore plus lorsqu'il récupère du code YouTube qui n'a pas pour but d'être réellement fonctionnel mais démonstratif.
Il en va souvent de même pour les exemples de démonstrations d'une API, qui pour ne pas noyer le nouvel utilisateur dans du code rébarbatif, ne traite pas les codes retours.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.