Ecriture de données sur ThingSpeak

Bonjour,

je me suis lancée dans l'utilisation de ThingSpeak pour envoyer les données d'un capteur de CO2, (+ humidité et température mais non utiles) et d'un capteur de turbidité.J'utilise une carte D1R32 avec shield grove (montage plus simple pour des élèves collège)
J'ai regardé pas mal de tutos pour finalement utiliser l'exemple fourni par ThingSpeak pour écrire sur un seul champ (capteur de CO2) et tout a très bien fonctionné.
J'ai donc ajouté le capteur de turbidité, sa valeur est bien envoyée dans la console j'obtiens une erreur pour l'nvoi dans ThingSpeak
Pouvez-vous me dire d'où vient l'erreur et comment la corriger SVP ?
Merci

#include <WiFi.h>

#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
#include <Wire.h>
#include <Adafruit_CCS811.h>
#include "SCD30.h"

#if defined(ARDUINO_ARCH_AVR)
    #pragma message("Defined architecture for ARDUINO_ARCH_AVR.")
    #define SERIAL Serial
#elif defined(ARDUINO_ARCH_SAM)
    #pragma message("Defined architecture for ARDUINO_ARCH_SAM.")
    #define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_SAMD)
    #pragma message("Defined architecture for ARDUINO_ARCH_SAMD.")
    #define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_STM32F4)
    #pragma message("Defined architecture for ARDUINO_ARCH_STM32F4.")
    #define SERIAL SerialUSB
#else
    #pragma message("Not found any architecture.")
    #define SERIAL Serial
#endif


char ssid[] = "iPhone de Marie-Claude";   // your network SSID (name) 
char pass[] = "xxxxxx";   // your network password
            // your network key Index number (needed only for WEP)
WiFiClient  client;

unsigned long myChannelNumber = 2126995;
const char * myWriteAPIKey = "1GQXXXXXXXXXX";

const int sensPin = 12;
int sensorVal = analogRead(sensPin);
float result[3] = {0};
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1024.0);


void setup() {
  
  Serial.begin(115200); 
  scd30.initialize();
  SERIAL.println("SCD30 Raw Data");//Initialize serial
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo native USB port only
  }
  
  WiFi.mode(WIFI_STA);   
  ThingSpeak.begin(client);  // Initialize ThingSpeak
}

void loop() {

  // Connect or reconnect to WiFi
  if(WiFi.status() != WL_CONNECTED){
    Serial.print("Attempting to connect to SSID: ");
    Serial.println("iPhone de Marie-Claude");
    while(WiFi.status() != WL_CONNECTED){
      WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      Serial.print(".");
      delay(5000);     
    } 
    Serial.println("\nConnected.");
        
    }

   // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
  // pieces of information in a channel.  Here, we write to field 1.
  int x = ThingSpeak.writeField(myChannelNumber, 1, result[0], myWriteAPIKey);
 int y = ThingSpeak.writeField(myChannelNumber, 1, voltage, myWriteAPIKey);
  if ((x == 200) and (y == 200)){
    Serial.println("Channel update successful.");
    if (scd30.isAvailable()) {
        scd30.getCarbonDioxideConcentration(result);
        SERIAL.print("Carbon Dioxide Concentration is: ");
        SERIAL.print(result[0]);
        SERIAL.println(" ppm");
        SERIAL.println(" ");
        SERIAL.print("Temperature = ");
        SERIAL.print(result[1]);
        SERIAL.println(" ℃");
        SERIAL.println(" ");
        SERIAL.print("Humidity = ");
        SERIAL.print(result[2]);
        SERIAL.println(" %");
        SERIAL.println(" ");
        SERIAL.println(" ");
        SERIAL.println(" ");
        Serial.println(voltage); // print out the value of turbidity
    }
   
  }
  else{
    Serial.println("Problem updating channel. HTTP error code " + String(x));
  }
  
   delay(10000); // Wait 10 seconds to update the channel again
}

Je n’utilise pas ThingSpeak mais à en croire le commentaire Que vous avez dans le code, si vous envoyez deux données ils faudrait peut être que la première soit dans le field 1 et la seconde dans le field 2 non ?

Je testerais donc avec

  // Write to ThingSpeak. There are up to 8 fields in a channel, allowing you to store up to 8 different
  // pieces of information in a channel.  Here, we write to field 1.
  int x = ThingSpeak.writeField(myChannelNumber, 1, result[0], myWriteAPIKey);
  int y = ThingSpeak.writeField(myChannelNumber, 2, voltage, myWriteAPIKey);

(Attention quand vous postez du code à ne pas laisser des infos personnelles)

1 Like

merci oui désolée j'ai copié le mauvais programme, j'avais corrigé cette erreur mais je n'arrive pas malgré tout à écrire la valeur de la turbidité dans ThingSpeak

Bonjour,
Pour écrire plusieurs données sur Thingspeak, il faut utiliser une autre méthode.
Essaye ce programme modifié qui écrit bien les deux valeurs sur Thingspeak.
Je n'ai pas les capteurs aussi j'ai remplacé result[0] et Voltage par des valeurs aléatoires.

#include <WiFi.h>

#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
#include <Wire.h>
#include <Adafruit_CCS811.h>
#include "SCD30.h"

#if defined(ARDUINO_ARCH_AVR)
#pragma message("Defined architecture for ARDUINO_ARCH_AVR.")
#define SERIAL Serial
#elif defined(ARDUINO_ARCH_SAM)
#pragma message("Defined architecture for ARDUINO_ARCH_SAM.")
#define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_SAMD)
#pragma message("Defined architecture for ARDUINO_ARCH_SAMD.")
#define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_STM32F4)
#pragma message("Defined architecture for ARDUINO_ARCH_STM32F4.")
#define SERIAL SerialUSB
#else
#pragma message("Not found any architecture.")
#define SERIAL Serial
#endif


char ssid[] = "xxxxxxxxxxxx";   // your network SSID (name)
char pass[] = "xxxxxxxxxxx";   // your network password
// your network key Index number (needed only for WEP)
WiFiClient  client;

unsigned long myChannelNumber = xxxxx;
const char * myWriteAPIKey = "xxxxxxx";


const int sensPin = 12;
int sensorVal = analogRead(sensPin);
//float result[3] = {0};
float result;
int sensorValue = analogRead(A0);
//float voltage = sensorValue * (5.0 / 1024.0);
float voltage ;


void setup() {

  Serial.begin(115200);
  // scd30.initialize();
  SERIAL.println("SCD30 Raw Data");//Initialize serial
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo native USB port only
  }

  WiFi.mode(WIFI_STA);
  ThingSpeak.begin(client);  // Initialize ThingSpeak
}

void loop() {

  // Connect or reconnect to WiFi
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println("iPhone de Marie-Claude");
    while (WiFi.status() != WL_CONNECTED) {
      WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
      Serial.print(".");
      delay(5000);
    }
    Serial.println("\nConnected.");

  }

  result = random(0, 20);
  voltage = random(0, 5);
  Serial.print("Result = ");Serial.println(result);
  Serial.print("Voltage = ");Serial.println(voltage);
  ThingSpeak.setField( 1, result );
  ThingSpeak.setField( 2, voltage );

  int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

  if (x == 200) {
    Serial.println("Channel update successfuly.");
  }
  else {
    Serial.println("Problem updating channel. HTTP error code " + String(x));
  }
  delay(10000); // Wait 10 seconds to update the channel again
}// fin loop
/*
      if (scd30.isAvailable()) {
           scd30.getCarbonDioxideConcentration(result);
           SERIAL.print("Carbon Dioxide Concentration is: ");
           SERIAL.print(result[0]);
           SERIAL.println(" ppm");
           SERIAL.println(" ");
           SERIAL.print("Temperature = ");
           SERIAL.print(result[1]);
           SERIAL.println(" ℃");
           SERIAL.println(" ");
           SERIAL.print("Humidity = ");
           SERIAL.print(result[2]);
           SERIAL.println(" %");
           SERIAL.println(" ");
           SERIAL.println(" ");
           SERIAL.println(" ");
           Serial.println(voltage); // print out the value of turbidity
       }

  }
  else {
  Serial.println("Problem updating channel. HTTP error code " + String(x));
  }

  delay(10000); // Wait 10 seconds to update the channel again
  }
*/

Cordialement

1 Like

Merci beaucoup je vais essayer !!

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