2012-11-18 21 views
5

Jakiej biblioteki powinienem używać?Jak mogę wysłać ciągi danych do XBee z biblioteką Pythona?

Python XBee wydaje się być w stanie wysyłać polecenia tylko w trybie API i nie mogę znaleźć przykładu użycia go do wysłania ciągu znaków. Być może nie rozumiem, co to jest tryb API, ale nie mogę znaleźć ładunku w dokumentacji ...

Czy Digi's Python Socket extensions zapiekano w Pythonie? Nie mogę uzyskać żadnej z stałych, które według niej zdefiniowano w moim Pythonie (2.7.3rc2), ani nie mogę znaleźć wzmianki o tym, jak uzyskać te rozszerzenia na swojej stronie. Wygląda na to, że może to być sposób na przekazywanie ciągów, ale jak z tego korzystać?

Odpowiedz

8

Jeśli Xbee jest podłączony do komputera jako urządzenie szeregowe, możesz po prostu użyć biblioteki szeregowej, takiej jak pySerial. Oto kilka fragmentów kodu z projektu, który właśnie skończyłem.

# Connect to Xbee 
self.ser = serial.Serial(port, baud, timeout=timeout) 

# Send data (a string) 
self.ser.write(packet) 

# Read data 
self.data += self.ser.read() 

używaliśmy Xbees w trybie transparentnym - każdy bajt piszesz na jednym końcu jest widoczny na drugim końcu odczytu. Nie było potrzeby posiadania specjalnej biblioteki Xbee.

+0

Więc xbee na port szeregowy będzie powtórzyć ten ciąg do sieci XBee, a także napisać wszystkie dane otrzymane z odległych XBees do szeregowego? Zakładam, że oba XBee muszą być w trybie transparentnym? –

+0

Pracowałem tylko z dwoma Xbeami komunikującymi się bezpośrednio, nigdy z większą siecią. Jeśli oba są w trybie transparentnym niż jakikolwiek bajt, napisanie na jednym końcu pojawi się na drugim końcu, tak jak normalny serial. – Tim

7

Polecam również używanie pySerial, jeśli masz bardzo prostą konfigurację i tylko dwa XBees, ale jeśli masz coś bardziej skomplikowanego, to lepiej z biblioteką.

Biblioteka Pythona-Xbee jest dość prosta w użyciu, ale brakuje jej obszernej dokumentacji. Aby wysyłać i odbierać proste przesłanie go używać:

from xbee import XBee 
from serial import Serial 

PORT = '/dev/ttyUSB0' 
BAUD = 9600 

ser = Serial(PORT, BAUD) 

xbee = XBee(ser) 
# Send the string 'Hello World' to the module with MY set to 1 
xbee.tx(dest_addr='\x00\x01', data='Hello World') 

# Wait for and get the response 
print(xbee.wait_read_frame()) 

ser.close() 

można wysyłać komendy AT wykonując:

xbee.at(frame_id='A', command='MY') 
reply = xbee.wait_read_frame() 
print(reply) 

# Getting the integer value out of reply 
import struct  
print(struct.unpack('>h', reply['parameter'])[0]) 

Można ustawić frame_id do dowolnego łańcucha i jest używany do identyfikacji prawidłową odpowiedź.

+0

Niedawno przejąłem zarządzanie python-xbee (ten, który instalujesz pip), ponieważ nie był aktualizowany od lat. Cieszę się, że mogę akceptować prośby o ściąganie, które ulepszają dokumentację! https://github.com/nioinnovation/python-xbee/blob/master/docs/source/index.rst – hansmosh

0
ser = serial.Serial(SERIAL_PORT, 9600) 
bee = ZigBee(ser) # <-- 

Spróbuj użyć ZigBee zamiast XBee, jeśli się nie powiedzie.

0

Pierwsze pytanie brzmi: "Czy na pewno urządzenia są w trybie API?". Widzisz ten błąd, ponieważ odbierający koniec widzi ramkę typu "tx" (typ 0x01). Chociaż jest to ramka, o którą prosiłeś, aby ją wysłać, wierzę, że oczekiwałabyś, że zostanie odebrana jako typ 'rx '(typ 0x81) przez koniec odbierający.

Jeśli spojrzysz na kod w /xbee/ieee.py zobaczysz dwie listy: * api_commands = Wychodzące: Nigdy nie spodziewałbyś się, że któryś z tych typów ram przychodzi. * api_responses = Przychodzące: Powinieneś widzieć tylko te typy ramek przychodzące.

Jeśli biblioteka wykrywa jeden z api_commands przychodzące będzie rzucać błąd zobaczyc: "Incoming frame with id 1 looks like a command frame of type 'tx' (these should not be received). Are you sure your devices are in API mode?"

nie jestem 100% pewien swojej sytuacji, ale wygląda na to twój towarzyski „TX” rama nie jest tłumaczona do przychodzącej ramki "rx" na drugim końcu - prawdopodobnie tryb API nie jest włączony na wszystkich XBees?

zobaczyć również https://github.com/nioinnovation/python-xbee/issues/44

Powiązane problemy