IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

RF433Mhz - Communication Arduino-Pi


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Par défaut RF433Mhz - Communication Arduino-Pi
    Bonjour à tous,

    Je me suis lancé dans un petit projet ludique qui consiste à récupérer la température de quelques pièces de ma maison ainsi que la température extérieure.
    Pour cela j'ai en ma possession :
    - des arduino UNO
    - Un PI 3 model B+
    - plusieurs capteur DHT22 pour relever la température
    - des émetteurs et des récepteurs 433 Mhz


    J'ai suivi plusieurs tuto sur le net, notamment celui-ci :
    Lien

    Pour le moment je réalise mes tests avec un seul capteur de température et un Arduino.
    Les mesures relevés par le capteur me semblent OK.

    Mon problème se situe dans l'envoie des données et dans la récupération via le PI.

    Le code ARDUINO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #include <VirtualWire.h>
    #include <DHT.h>
     
    #define PIN 8
    #define TYPE DHT22
    DHT dht(PIN, TYPE);
     
     
    void setup()
    {
      Serial.begin(9600);
      dht.begin();
     
      vw_set_ptt_inverted(true);
      vw_setup(2000); 
      vw_set_tx_pin(10);
    }
     
     
     
     
     
    void loop()
    {
     // LECTURE DES DONNEES
     float h = dht.readHumidity();
     float t = dht.readTemperature();
     
     if (isnan(h) || isnan(t))
       {
        Serial.println("Echec de lecture !");
        return;
       }
      Serial.print("Humidite: "); 
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: "); 
      Serial.print(t);
      Serial.print(" *C ");
      Serial.print("\n");
     
     
      //TRANSMISSION DES DONNEES
     
      vw_send((uint8_t *)&t, sizeof t);
      vw_wait_tx();
      //delay(60000); // 1 minute
      delay(2000);
    }

    Le code du script sur le PI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    import time
    import pigpio
    import vw
    import MySQLdb
    import datetime
     
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    RX=26
    BPS=2000
    pi = pigpio.pi()
    rx = vw.rx(pi, RX, BPS)
    start = time.time()
     
    print ("debut reception mesure")
     
    while (1):
     while rx.ready():
     
     
      msg = rx.get()
      print(msg)
     
    rx.cancel()
    pi.stop()

    J'ai plusieurs problèmes :
    - Comment passer des float via VirtualWire ? J'ai essayé de feinter en séparant la partie entière et la partie décimale mais ça n'a pas l'air de fonctionner
    - Je n'arrive pas à récupérer les données proprement sur le PI. L’exécution du script m'affiche pour la variable msg : [51, 51, 207, 65]

    Est-ce que quelqu'un peut me venir en aide ?

    Merci d'avance,


    Merci d'avance,

    Evo

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Par défaut
    Je rajoute un point.

    Si dans le script python je fais :

    J'obtiens en sortie "NONE"

    Peut-être qu'en fait je ne reçois rien du tout ?

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2018
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Mars 2018
    Messages : 38
    Par défaut
    J'ai réussi à envoyer avec le code suivant sur l'ARDUINO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #include <VirtualWire.h>
    #include <DHT.h>
    #include <stdio.h>
    #include <string.h>
     
    #define PIN 8
    #define TYPE DHT22
    DHT dht(PIN, TYPE);
     
     
     
    const char *msgT = "Temperature =   ";
    const char *msgH = "Humidite    =   ";
    char Temp[VW_MAX_MESSAGE_LEN];
    char Humi[VW_MAX_MESSAGE_LEN];
    char Temp2[VW_MAX_MESSAGE_LEN];
    char Humi2[VW_MAX_MESSAGE_LEN];
    char message[VW_MAX_MESSAGE_LEN]; 
     
    void setup()
    {
      Serial.begin(9600);
      dht.begin();
     
      //vw_set_tx_pin(12);
      vw_setup(2000); 
    }
     
     
     
     
     
    void loop()
    {
     // LECTURE DES DONNEES
     float h = dht.readHumidity();
     float t = dht.readTemperature();
     
     
     
     if (isnan(h) || isnan(t))
       {
        Serial.println("Echec de lecture !");
        return;
       }
      Serial.print("Humidite: "); 
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: "); 
      Serial.print(t);
      Serial.print(" *C ");
      Serial.print("\n");
     
     
     // Conversion en tableau de chars
      int t1;
      int t2;
      int h1;
      int h2;
      t1 = (int)t;
      t2 = (int)((t - t1) * 100);
      h1 = (int)h;
      h2 = (int)((h - h1) * 100);
     
      itoa(t1,Temp,10); // 10 car décimal
      itoa(h1,Humi,10); // 10 car décimal
     
      itoa(t2,Temp2,10); // 10 car décimal
      itoa(h2,Humi2,10); // 10 car décimal
     
     
      strcpy (message, msgT);
      strcat(message,Temp);
      strcat(message,".");
      strcat(message,Temp2);
      //strcat(message,"-");
      strcat(message,msgH);
      strcat(message,Humi);
      strcat(message,".");
      strcat(message,Humi2);
     
      //TRANSMISSION DES DONNEES 
     
      //vw_send((uint8_t *)&t, sizeof (t));
      vw_send((uint8_t *)message, strlen(message));
      vw_wait_tx();
     
      //delay(60000); // 1 minute
      delay(2000);
    }


    Le script Python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    import time
    import pigpio
    import vw
    import MySQLdb
    import datetime
     
     
    #!/usr/bin/env python
    # -*- coding: latin-1 -*-
     
    RX=26
    BPS=2000
    pi = pigpio.pi()
    rx = vw.rx(pi, RX, BPS)
     
     
     
    print ("reception mesure")
     
     
     
    while (1):
     while rx.ready():
      print("".join(chr (c) for c in rx.get()))
     
     
    rx.cancel()
    pi.stop()
    Affiche sur le PI :
    Temperature = 25.89Humidite = 51.90

    Ce point est ok.

    Ma prochaine question :

    Comment je récupère les valeurs 25.89 et 51.90 dans des variables dans le script python ?

    Merci d'avance,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication arduino et VISUAL STUDIO
    Par Sana1994 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 15/05/2018, 02h05
  2. Communication Arduino Proccesing
    Par trycuz dans le forum Arduino
    Réponses: 1
    Dernier message: 27/03/2018, 08h33
  3. [WD17] communication arduino et windev
    Par fredcatlou dans le forum WinDev
    Réponses: 29
    Dernier message: 25/07/2016, 10h32
  4. Communication arduino avec VB.net
    Par chrifi dans le forum Arduino
    Réponses: 1
    Dernier message: 24/05/2013, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo