[Réglé] Raspberry Pi <-> 2 Xbee(Base & récépteur)

Bonjour, je cherche à intérragire avec une arduino mega 2560 et un Raspberry Pi (type B).

Le but est très simple, je voudrais lire une valeur dans une base de donnée sql ce trouvant sur mon Raspberry Pi et lire cette donnée qui sera interprété par mon arduino.

Exemple : J'ai ma table "Etat", si dans ma base de donnée l'état de ma lampe est a 1, ma led s'allume, si elle est a 0 la led est éteinte.

Donc je voudrais pouvoir lire une BDD SQL depuis mon arduino relié en USB a mon Raspberry et réciproquement je voudrais par la suite lui renvoyer l’état de ma lampe.

Pouvez vous m'aidée ?

Bonjour,

A ta place, je ferais une communication série entre les deux. Je pense qu'il y a pas mal de tutoriels sur le Net à ce sujet.

Avec une liaison série ne suis pas limité pour le nombre de données ?

Car mon atmega est relié a 12 led que je veux alumué adépendement les unes des autres donc je ne sais pas si le port série sera convenable pour envoyer de strame d'info.

Ca dépend surtout de la fréquence d’extinction / allumage. Tu as des infos sur le sujet ? En gros, si tu veux allumer ou éteindre tes leds toutes les secondes, il n’y aura pas de problème.

bonjour, pourquoi ne pas se servir directement des pins IO du rasp pour tes leds? il y a assez de pins pour tes 12 leds

Pour la fréquence, je ne vais pas les allumé et éteindre a une fréquence très élevé, 1s sera déjà un miracle. Je ne me sert pas des pin direct car si je veux en conecté plus sa va posez problème. Je ne me sert pas des pin aussi car je relie mes leds a la carte via Xbee c'est aussi pour sa que je fait ainsi.

D'après ce que j'ai pue trouver, je peu me passer d'un module arduino et donc connecté directement un xbee au raspb. et communiquer via le port série, est-ce vraiment possible/fiable ?

pas la même chose de connecter via un cable et via sans fil.

connecter plus de leds, pas de soucis, une recherche sur le forum, j'ai plus le nom en tête.

VOilà, je vais réimposais mon problème.

J'ai ma raspberry Pi à laquel je connecte un xbee et je voudrais pouvoir allumer une led en communiquent avec l'xbee récepteur (qui se trouve a la led) et l'allumer et l'éteindre en fonction de l'état logique enregistré dans ma base de donnée sql. Je doit connecté l'xbee via USB ou GPIO ? En quoi dois-je codé pour faire cela ?

Voici un shéma simplifier de ce que je cherche a faire :

Bonjour, je fais exactement ce que tu souhaites faire, dans ton 1er post.

J'ai mon raspberry (serveur web, bdd,..) relié en usb à la carte arduino. Si dans ma base de donnée l’état passe à 1, la lampe s'allume, si 0 s’éteint.

Si tu as besoin d'aide n’hésite pas.

Bon, j'arrive à allumer et éteindre une LED en filaire en lisant l'état dans une base de données SQL, mais pour le sans fil en Xbee je bloque toujours. Avais vous une solution a m'apporter ?

Bon, j'ai quasiment trouver la solution, je la posterais lorsqu'elle fonctionnera parfaitement car actuellement, la commande est bien envoyer, mais pas reçus par mon esclave.

Bonjour à tous, aujourd’hui je vous propose une solution de mon problème, que j’ai trouver seul du coup ^^

Ci-join, vous trouverez un schéma de montage en utilisant le GPIO (pour m’a part j’ai relier l’Xbee au RPI via une platine USB), vous trouverz aussi la configuration de mes 2 xbee et le programme permettant de faire varier l’intensité de la led (ou dans mon cas, d’une lampe en 12V avec un montage que je présenterais dans un prochain topique):

Vous trouverez, ci-join, les configuration des 2Xbee (Base & recepteur) XCTU portant leur nom.

Quand au code, le voici :

import serial
#Connexion entre 2 Xbee

        #Add ,9600 if problems
ser = serial.Serial('/dev/ttyUSB0', 9600)

#Variable for Xbee
#Poste in HEX
#poste = 0x02

#Definition des variables
var = 0 #consigne en lux
var_mli = var * 1023 / 800 #rapport consigne <-> quantum
var_hexa = "{0:0>4X}".format(var_mli) #conversion en Hexa (4 octets)

ser.open()
#while True:
#Bytes Start
#ser.write()
ser.write(b'\x7E')
#Digi part of lengh (always 0)
ser.write(b'\x00')
ser.write(b'\x11')

#Instruction
ser.write(b'\x17')
ser.write(b'\x01')
#ID of dest.
ser.write(b'\x00')
ser.write(b'\x00')
ser.write(b'\x00')
ser.write(b'\x00')
ser.write(b'\x00')
ser.write(b'\x00')
ser.write(b'\x00')
ser.write(b'\x00')
#Destinataire
ser.write(b'\x00')
ser.write(b'\x02')
ser.write(b'\x02')
#Commande ASCII : M1 (PWM)
ser.write(b'\x4D')
ser.write(b'\x31')
#Command Data
ser.write(var_hexa[:2].decode("hex")) #On recuper la premier valeur hexa (les 2 premiers octets)
ser.write(var_hexa[2:].decode("hex")) #On recuper la dernier valeur hexa (les 2 derniers octets)
#Checksum Calculator
cons1 = "0x" + var_hexa[:2]
cons2 = "0x" + var_hexa[2:]
sum = 0x17 + 0x01 + 0x02 + 0x02 + 0x4D + 0x31 + int(cons1, 16) + int(cons2, 16)
checksum = 0xFF - (sum & 0xFF)
hexa = hex(checksum)
print(sum)
print(checksum)
#Envoie du checksum
ser.write(str(chr(checksum)))
print(str(chr(checksum)))
#Fin de notre requete
ser.close()

base.xml (2.56 KB)

recepteur.xml (2.56 KB)

wireless.py (1.41 KB)