perdu avec serial et type de string

bonjour

j’ai beau lire la doc je suis perdu
qui peut m’aider avec mon code . j’essaie de mettre ensemble la température l’humidité et le co2 des capteurs afin de faire un format csv

je veux le récupérer dans un fichier sous python (j’ai mis les environnements windows et linux en fonction de ma machine de texte) mais je suis paumé

merci
:_(((((((((

code ide :sweat_smile:

/*####################################################################
 FILE: sensor temperature, humidity and co2 salle solar venti
 VERSION: 0.4.5
 PURPOSE: Test DHT11 Temperature & Humidity Sensor library functions
 LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)

                 
 HISTORY:
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.0 (06/11/11)
 Mod by Rob Tillaart - Version 0.3 (28/03/2011)
 Mod by SimKard - Version 0.2 (24/11/2010)
 George Hadjikyriacou - Original version (??)
#######################################################################*/


#include <dht11.h>

dht11 DHT11;

String (DTH_solar_temp)="Température salle Solar";
String (DTH_solar_humidity)="Humidité Salle Solar";

/*

VEETECH CO2 Monitor and Data Logger
SKETCH 2 Operation 
Code by Martin Liddament

Used to determine:
- CO2 Concentration;
IMPORTANT

- For demonstration only;
- Not verified or guaranteed free of errors;
- Not suitable for critical applications;
- Use of this code is entirely at user's risk;
- Accurate calibration of the CO2 module is essential.

This code is in the public domain.
Copyright VEETECH Ltd 2013 www.veetech.co.uk.

*/

int co2 = 9999; // co2 is the co2 concentration. Preset value for code checking
// analog input

int analogPin = A0; // voltage input from sensor

String (MG811_solarCO2)="Taux CO2 solar";

// Setting Sensor Calibration Constants

 float v400ppm = 4.535;   //MUST BE SET ACCORDING TO CALIBRATION
 float v40000ppm = 3.206; //MUST BE SET ACCORDING TO CALIBRATION````````````````````````
 float deltavs = v400ppm - v40000ppm;
 float A = deltavs/(log10(400) - log10(40000));
 float B = log10(400);

void setup()
{
  DHT11.attach(2);
  Serial.begin(9600);
  pinMode(analogPin, INPUT);

}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read();

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (°C): ");
  Serial.println((float)DHT11.temperature, 2);

  delay(2000);
  
  // Read co2 data from sensor
  
  int data = analogRead(analogPin); //digitise output from c02 sensor
  float voltage = data/204.6;       //convert output to voltage

// Calculate co2 from log10 formula (see sensor datasheet)

  float power = ((voltage - v400ppm)/A) + B;
  float co2ppm = pow(10,power);
  co2 = co2ppm;
  Serial.print("CO2 (ppm): ");
  Serial.println (co2);
  delay(1000);

//send data to rapsberry
  if (Serial.available())
    {
        String Data_solar_temp=DTH_solar_temp + ","+ (float)DHT11.humidity;
        String Data_solar_hum=DTH_solar_humidity + "," + (float)DHT11.temperature;
        String Data_Solar_CO2=MG811_solarCO2 + "," + co2;
        char Data_Solar =(Data_solar_temp + "," + Data_solar_hum + "," + Data_Solar_CO2);
 
        Serial.write (Data_Solar);
 
     }

python

[code/]

-- coding: cp1252 --

##!/usr/bin/env python
#!c:\python27

--coding:Latin-1 -

--coding:Utf-8 --

##appel des librairies

import serial
import time
import datetime
import os
import pickle

##Ouverture du port##

##ser = serial.Serial(’/dev/AMA0’, 9600)
ser = serial.Serial(‘COM4’, 9600)

##Ecriture des données##

open(‘c:\Data_solar.csv’,‘a’)

Data_solar.write.ser.read()

ser.close

os.system(“pause”)

[code/]

bon j’ai modifié le code. il ya du progrès et des nuits blanches

Sur la partie arduino quand je mets un serial.read j’ai une erreur ligne 122
rheorthe_data.ino: In function ‘void loop()’:
rheorthe_data:122: error: incompatible types in assignment of ‘int’ to ‘char [6]’

J’ai rien si j’omets le serial read

la partie python foire complétement le fichier ne se crée pas ma

/*####################################################################
 FILE: sensor temperature, humidity and co2 salle solar venti
 VERSION: 0.4.5
 PURPOSE: Test DHT11 Temperature & Humidity Sensor library functions
 LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)

                 
 HISTORY:
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.0 (06/11/11)
 Mod by Rob Tillaart - Version 0.3 (28/03/2011)
 Mod by SimKard - Version 0.2 (24/11/2010)
 George Hadjikyriacou - Original version (??)
#######################################################################*/

#include<stdlib.h>

#include <dht11.h>

dht11 DHT11;

String (DTH_solar_temp)="Température salle Solar";
String (DTH_solar_humidity)="Humidité Salle Solar";
char DTH_solar_temp_f[10];
char DTH_solar_humidity_f[10];
/*

VEETECH CO2 Monitor and Data Logger
SKETCH 2 Operation 
Code by Martin Liddament

Used to determine:
- CO2 Concentration;
IMPORTANT

- For demonstration only;
- Not verified or guaranteed free of errors;
- Not suitable for critical applications;
- Use of this code is entirely at user's risk;
- Accurate calibration of the CO2 module is essential.

This code is in the public domain.
Copyright VEETECH Ltd 2013 www.veetech.co.uk.

*/

float co2 = 9999; // co2 is the co2 concentration. Preset value for code checking
// analog input

int analogPin = A0; // voltage input from sensor

String (MG811_solarCO2)="Taux CO2 solar";
char MG811_solarCO2_f[10];
// Setting Sensor Calibration Constants

 float v400ppm = 4.535;   //MUST BE SET ACCORDING TO CALIBRATION
 float v40000ppm = 3.206; //MUST BE SET ACCORDING TO CALIBRATION````````````````````````
 float deltavs = v400ppm - v40000ppm;
 float A = deltavs/(log10(400) - log10(40000));
 float B = log10(400);

void setup()
{
  DHT11.attach(2);
  Serial.begin(9600);
  pinMode(analogPin, INPUT);

}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read();

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }
  

  
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);
  dtostrf((float)DHT11.humidity, 6, 2, DTH_solar_temp_f);
  

  Serial.print("Temperature (°C): ");
  Serial.println((float)DHT11.temperature, 2);
  dtostrf((float)DHT11.temperature, 6, 2, DTH_solar_humidity_f);
  
  delay(2000);
  
  // Read co2 data from sensor
  
  int data = analogRead(analogPin); //digitise output from c02 sensor
  float voltage = data/204.6;       //convert output to voltage

// Calculate co2 from log10 formula (see sensor datasheet)

  float power = ((voltage - v400ppm)/A) + B;
  float co2ppm = pow(10,power);
  co2 = co2ppm;
  Serial.print("CO2 (ppm): ");
  Serial.println (co2);
  dtostrf(co2, 6, 2, DTH_solar_humidity_f);
  
  delay(1000);
  
  
  char Data_solar_Char []={'DTH_solar_temp','DTH_solar_temp_f','DTH_solar_humidity','DTH_solar_humidity_f', 'MG811_solarCO2','MG811_solarCO2_f'};



//send data to rapsberry
  if (Serial.available())
   {
      Data_solar_Char=Serial.read() ;
      Serial.write (Data_solar_Char);
 
    }
 }

bon j’ai modifié le code. il y a du progrès et des nuits blanches

Sur la partie arduino quand je mets un serial.read j’ai une erreur ligne 122
rheorthe_data.ino: In function ‘void loop()’:
rheorthe_data:122: error: incompatible types in assignment of ‘int’ to ‘char [6]’

J’ai rien si j’omets le serial read

la partie python foire complétement le fichier ne se crée pas mais cela n’indique pas d’erreur. je suppose qu’il faut retranscrire une fonction pour récupérer les float converties en string ?

je ne demande pas les codes complets tout faits mais des pistes histoires que je cherche aussi pour apprendre

merci

/*####################################################################
 FILE: sensor temperature, humidity and co2 salle solar venti
 VERSION: 0.4.5
 PURPOSE: Test DHT11 Temperature & Humidity Sensor library functions
 LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)

                 
 HISTORY:
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.0 (06/11/11)
 Mod by Rob Tillaart - Version 0.3 (28/03/2011)
 Mod by SimKard - Version 0.2 (24/11/2010)
 George Hadjikyriacou - Original version (??)
#######################################################################*/

#include<stdlib.h>

#include <dht11.h>

dht11 DHT11;

String (DTH_solar_temp)="Température salle Solar";
String (DTH_solar_humidity)="Humidité Salle Solar";
char DTH_solar_temp_f[10];
char DTH_solar_humidity_f[10];
/*

VEETECH CO2 Monitor and Data Logger
SKETCH 2 Operation 
Code by Martin Liddament

Used to determine:
- CO2 Concentration;
IMPORTANT

- For demonstration only;
- Not verified or guaranteed free of errors;
- Not suitable for critical applications;
- Use of this code is entirely at user's risk;
- Accurate calibration of the CO2 module is essential.

This code is in the public domain.
Copyright VEETECH Ltd 2013 www.veetech.co.uk.

*/

float co2 = 9999; // co2 is the co2 concentration. Preset value for code checking
// analog input

int analogPin = A0; // voltage input from sensor

String (MG811_solarCO2)="Taux CO2 solar";
char MG811_solarCO2_f[10];
// Setting Sensor Calibration Constants

 float v400ppm = 4.535;   //MUST BE SET ACCORDING TO CALIBRATION
 float v40000ppm = 3.206; //MUST BE SET ACCORDING TO CALIBRATION````````````````````````
 float deltavs = v400ppm - v40000ppm;
 float A = deltavs/(log10(400) - log10(40000));
 float B = log10(400);

void setup()
{
  DHT11.attach(2);
  Serial.begin(9600);
  pinMode(analogPin, INPUT);

}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read();

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }
  

  
  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);
  dtostrf((float)DHT11.humidity, 6, 2, DTH_solar_temp_f);
  

  Serial.print("Temperature (°C): ");
  Serial.println((float)DHT11.temperature, 2);
  dtostrf((float)DHT11.temperature, 6, 2, DTH_solar_humidity_f);
  
  delay(2000);
  
  // Read co2 data from sensor
  
  int data = analogRead(analogPin); //digitise output from c02 sensor
  float voltage = data/204.6;       //convert output to voltage

// Calculate co2 from log10 formula (see sensor datasheet)

  float power = ((voltage - v400ppm)/A) + B;
  float co2ppm = pow(10,power);
  co2 = co2ppm;
  Serial.print("CO2 (ppm): ");
  Serial.println (co2);
  dtostrf(co2, 6, 2, DTH_solar_humidity_f);
  
  delay(1000);
  
  
  char Data_solar_Char []={'DTH_solar_temp','DTH_solar_temp_f','DTH_solar_humidity','DTH_solar_humidity_f', 'MG811_solarCO2','MG811_solarCO2_f'};



//send data to rapsberry
  if (Serial.available())
   {
      Data_solar_Char=Serial.read() ;
      Serial.write (Data_solar_Char);
 
    }
 }

python

# -*- coding: cp1252 -*-
##!/usr/bin/env python
#!c:\python27

## -*-coding:Latin-1 -*
# -*-coding:Utf-8 -*-

##appel des librairies

import serial
import time
import datetime
import os
import pickle

##Ouverture du port##

##ser = serial.Serial('/dev/AMA0', 9600)
ser = serial.Serial('COM4', 9600)




##Ecriture des données##
while (1)
open('c:\Data_solar','a')
    
Data_solar.write.ser.read()

##ser.close


raw_input("Taper un mot : ")

Salut,

Bon vu que personne a l’air en mesure de t’aider je vais tenter le coup sachant que Python j’y connais rien. Déjà dans ton premier code je vois une erreur : tu ouvres et ferme ton port COM à chaque lecture ==> erreur

Un port série tu l’ouvres au lancement de ton programme et tu le fermes quand tu fermes ton programme. Visiblement tu as viré le ser.close dans ta dernière mouture.

Sinon pour te donner une meilleure vision de comment procéder :

  • côté Arduino : rassemble tes données et fait un envoi simple genre t’as trois capteur tu fais :
Serial.print(Capteur1);
Serial.print(',');
Serial.print(Capteur3);
Serial.print(',');
Serial.println(Capteur3);
  • côté pyton : utiliser inWaiting() et readline(). Je tente mais comme je t’ai ça peut ne rien valoir
open('c:\Data_solar','a')
while (1)
if( ser.inWaiting()) Data_solar.write.ser.readline()

Il ne reste plus qu’à utiliser .split pour séparer les 3 valeurs mais je suis un peut perdu avec la syntaxe Python …

merci comme je suis complétement paumé, le fait d'avoir des pistes me permet au moins de cibler mes recherches :blush:

Au pire puisque t'en es à apprendre le python, tu peux apprendre le VBA et coder directement dans excel. Non seulement ça te sera toujours utile (excel = le meilleur logiciel au monde :) ) mais en plus je pourrai t'aider xD en plus passer par du python pour du .csv ... VBA c'est plus naturel :)

Pas besoin de VBA pour convertir du CSV dans Excel: tu sélectionnes la colonne, onglet "Data", puis "Text to Colums" ;)

le pire c'est que vba, je maîtrise un peu pour avoir fait quelques programmes et bd access avec :D mais là c'est python à fond me suis pas taper 6 bouquins pour rien :0

XavierMiller: Pas besoin de VBA pour convertir du CSV dans Excel: tu sélectionnes la colonne, onglet "Data", puis "Text to Colums" ;)

On est bien d'accord, je dis juste "plus naturel" parce que le .csv la plupart du temps il va finir dans ... Excel, donc autant mettre ses données dans une feuille directement ;)