Arduino Python MultiCapteur 2.4G aevc un Raspberry PI 3 Arduino Python MultiCapteur 2.4G aevc un Raspberry PI 3
Menu

Arduino Python Multi-Capteur 2.4Ghz avec un Raspberry PI 3

9 avril 2016 - Arduino, Domotique, Python, Raspberry Pi
Arduino Python Multi-Capteur 2.4Ghz avec un Raspberry PI 3

Un capteur de température intérieur, un capteur de température extérieur, un capteur d’humidité et un capteur de pression le tout connecté à un Arduino et les valeurs transférées par un émetteur en 2.4Ghz. Et pour la réception Raspberry, récepteur 2.4Ghz et du python. Voilà l’objet de ce petit tuto.

Le matériel :

Voila pour le matériel. En fait il n’y a pas de capteur de température intérieur vu que deux capteur (humidité et pression) donne la température.

Pour le montage de l’émetteur voici le schéma. Rien de très compliqué mais il y y beaucoup de fil :

Bien penser aux résistances de 4.7K sur le récepteur de température et d’humidité. Et surtout attention l’émetteur 2.4Ghz fonctionne sous 3.3V.

Pour la programmation de l’Arduino il faut quelques biblio :

Pour le programme de l’Arduino je vais pas le mettre ici en intégral mais vous pouvez le trouver sur mon GitHub  

Par contre quelques informations sur son fonctionnement. Les données à envoyer sont préparées avant l’envoie dans un tableau de char de cette façon :

On crée le char avec une valeur de départ :

 char SendPayload[32]  = "RS1 :";

Ensuite on ajoute le valeurs. Chaque valeur est précédé et suivie d’une lettre permettant à la réception son repérage. Par exemple pour la température :

strcat(SendPayload, "T");
  dtostrf(txbuffer[0],2,2,tempstr); 
  strcat(SendPayload,tempstr); 
  strcat(SendPayload, "T"); 

Et ensuite le char complet est envoyé  :

bool ok = radio.write(&SendPayload,sizeof(SendPayload));

Mais comme il y a trop de donnée et que le nombre de caractère est au maximum de 32 il faut faire deux char envoyés à la suite. Chaque char sera repéré à la réception par son numéro « RS1 » et « RS2 ».

Pour la réception nous avons un montage plus simple. Un raspberry pi et un récepteur en 2.4Ghz : Recepteur-Raspi-2_4Ghz_bb

Il faut configurer le Raspberry Pi pour le récepteur tout est dans ce fichier : Config Raspberry et Récepteur 2.4Ghz

Et pour finir un fichier en Python pour la réception et l’enregistrement des données dans une base de données.

Pour la réception je lui fait faire deux boucles pour avoir mes deux char qui sont décortiqués pour à la fin des deux boucles avoir toutes le données qui sont, pour finir envoyer dans la base.

Le programme en Python : multi_capteurs-NF24.py. Pour fonctionner il lui faut un programme de config en xlm pour les données de connxion à la base : config

Et le sql pour créer la table dans votre base de donnée : Table SQL

Voilà. Bon bricolage. La suite sera un affichage sur mon DashScreen des données collectées.

Vous trouverez tous les documents et codes sur GitHub

  • Laurent

    Bonjour, j’ai cette erreur
    pi@raspberrypi:~/Multi-capteur-Arduino-avec-emetteur-2.4Ghz $ sudo python multi_capteurs-NF24.py -v

    Attente réception du capteur

    Traceback (most recent call last):
    File « multi_capteurs-NF24.py », line 79, in
    temper=extract(out,’T’,’T’)
    File « multi_capteurs-NF24.py », line 50, in extract
    start = raw_string.index(start_marker) + len(start_marker)
    ValueError: substring not found
    pi@raspberrypi:~/Multi-capteur-Arduino-avec-emetteur-2.4Ghz $

    • La fonction extract(out,’T’,’T’) recherche la valeur entre les deux T. Et là il ne trouve pas les T. Donc je pense que votre réception n’est pas bonne.
      Il faudrait ajouter après cette ligne : out =  ».join(chr(i) for i in recv_buffer)#création d’une variable blobage avec les valeurs du tableu buffer
      un print (out) pour voir la valeur reçu

      • Laurent

        je vais essayé ça, la liaison entre l’Arduino et le Raspberry fonctionne bien , car avec le lecture-capteurRF24.py ça marche .

  • Laurent

    Bonjour, j’ai mon Arduino qui envois pas bien le RS2:
    RS1 :T29.70TH63.00H
    RS2 :E29.50E
    RS1 :T29.70TH63.10H
    RS2 :
    le RS2: passe une fois sur deux

  • Laurent

    Bonsoir,
    j’ai un petit bug sur le RS1 et RS2
    RS1 :T29.20TH59.60H
    RS2 :E29.06E
    RS1 :T29.10TH59.60H
    RS2 :
    RS1 :T29.20TH59.60H
    RS2 :E29.06E
    RS1 :T29.10TH59.60H
    RS2 :

    le RS2 une fois sur deux il bug donc le scripte python du PI crash

    merci

    • Oui j’avais eu ce problème aussi mais je sais plus pourquoi le RS2 est vide une fois sur deux. Surement à cause du capteur qui n’est pas prêt. C’est quoi le capteur ?
      J’avais corrigé ce problème à la réception en ajoutant une vérification avec cette condition : if out[21] ==’E’: Dans votre cas il faut vérifier s’il y a bien un E dans la ligne à la place 4 donc if out[4] ==’E’:

      • Laurent

        bon tout marche impeccable , merci a toi pour tes conseil. reste plus a intégré tout ça dans le Dash_Screen

        • Super !!!
          Maintenant que les données sont sur la base il sera simple de les lires. Reste à faire un bel affichage 🙂
          N’hésite pas à me contacter