2017-08-11 4 views
0

Je voudrais utiliser Digi XStick2 ZB (connecté via USB et visible comme interface série sur /dev/ttyUSB0) comme un contrôleur ZigBee pour un groupe de capteurs et actionneurs ZigBee (température et humidité, capteur de contact, fuite d'eau, prise d'alimentation, ...) . En d'autres termes, je cherche le moyen de configurer un réseau maillé et de communiquer avec des capteurs/actionneurs.Quel est le protocole pour les commandes envoyées via xbee.send()?

J'ai trouvé python xbee et a écrit un script python simple pour communiquer avec la clé USB:

#!/usr/bin/python 
import serial 
import time 
from xbee import ZigBee 

def print_data(data): 
    print "Data received:", data 

serial_port=serial.Serial('/dev/ttyUSB0', 9600) 
zbee = ZigBee(serial_port, callback=print_data) 

print "Sending some command" 
zbee.send("at", frame='A', command='MY', parameter=None) 
print "Waiting..." 
while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

zbee.halt() 
serial_port.close() 

Il fonctionne, et je reçois une réponse à ma commande:

$ ./test.py 
Sending some command 
Waiting... 
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x00', 'command': 'MY', 'id': 'at_response'} 

Mais je peux » t trouver quelque chose sur le protocole utilisé (à savoir, le contenu des messages que je peux envoyer) - y a-t-il une référence de commande ou une définition de protocole que je peux utiliser?

Alternativement, existe-t-il un moyen plus simple (bibliothèque de niveau supérieur?) De contrôler les capteurs via une clé USB?

Répondre

0

Comme d'habitude, je trouve la réponse peu après avoir demandé ... Je ressemble XBee ZB prend en charge deux modes:

Pour citation:

Cet exemple illustre l'opération XBee en mode AT. Le mode AT est synonyme de mode "Transparent". En mode AT, toutes les données envoyées au module XBee sont immédiatement envoyées au module distant identifié par l'adresse de destination en mémoire. Lorsque le module est en mode AT, il peut être configuré par l'utilisateur ou un microcontrôleur hôte en plaçant d'abord le module en mode de commande puis en envoyant des commandes AT prédéfinies via le port UART. Ce mode est utile lorsque vous n'avez pas besoin de pour changer les adresses de destination très souvent, ou vous avez un réseau très simple , ou une simple communication point à point. Pour les plus grands réseaux qui impliquent des nœuds en communication avec plusieurs cibles, le mode API est plus utile. En mode API, plutôt que d'envoyer des commandes AT en série, les paquets de données sont assemblés avec l'adresse de destination. Le mode API vous permet de modifier l'adresse de destination beaucoup plus rapidement car le mode de commande n'a pas besoin d'être entré. Le mode API est également utile si l'utilisateur doit modifier la configuration d'un module distant. Ce projet se concentre sur le fonctionnement en mode AT.

articles contiennent le lien vers la documentation pour les deux modes: https://eewiki.net/download/attachments/24313921/XBee_ZB_User_Guide.pdf?version=1&modificationDate=1380318639117&api=v2


Un court exemple de travail est maintenant:

#!/usr/bin/python 
import serial 
import time 
from xbee import ZigBee 

def print_data(data): 
    print "Data received:", data 

serial_port=serial.Serial('/dev/ttyUSB0', 9600) 
xbee = ZigBee(serial_port, callback=print_data) 

xbee.send("at", frame='A', command='SH', parameter=None) 
xbee.send("at", frame='A', command='SL', parameter=None) 
while True: 
    try: 
     time.sleep(0.001) 
    except KeyboardInterrupt: 
     break 

xbee.halt() 
serial_port.close() 

Sortie:

Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x00\x01\x02\x03', 'command': 'SH', 'id': 'at_response'} 
Data received: {'status': '\x00', 'frame_id': '\x01', 'parameter': '\x04\x05\x07\x07', 'command': 'SL', 'id': 'at_response'} 

Cette récupère série numéro du contrôleur (01020304050607 dans ce cas).

Espérons que cela aide quelqu'un.