2013-03-17 37 views
5

Próbuję przeprowadzić komunikację szeregową pomiędzy Ubuntu 12.04 a modułem Bluetooth bluetooth JY-MCU podłączonym do Arduino.Jak skonfigurować komunikację szeregową w Processing to/dev/rfcomm0

Stworzyłem tę konfigurację w pliku /etc/bluetooth/rfcomm.conf

rfcomm0 { 
# # Automatically bind the device at startup 
    bind yes; 
# 
# # Bluetooth address of the device  
    device 00:12:11:19:08:54 
# # RFCOMM channel for the connection 
    channel 1; 
# # Description of the connection 
    comment "Linvor Bluetooth Module"; 
} 

mogę używać kit do komunikowania się z rfcomm0 port szeregowy/dev/i to działa doskonale.

Jednak pomimo wielu prób po prostu nie mogę zobaczyć, jak utworzyć port szeregowy w przetwarzaniu, który działa w jakikolwiek sposób.

Na przykład:

println(Serial.list()); 

drukuje nic.

Gdybym wykonać:

String portName = "/dev/rfcomm0"; 
myPort = new Serial(this, portName, 9600); 
println(myPort); 

widzę to na monitorze:

[email protected] 

Ale gdybym wtedy zadzwonić:

myPort.write('9'); 

uzyskać wyjątek:

java.lang.NullPointerException 
    at processing.serial.Serial.write(Serial.java:572) 
    ... 

Nie mogę zrozumieć, dlaczego to się nie udaje. Postępowałem zgodnie ze wszystkimi instrukcjami zawartymi w książce "Making Things Talk" Toma Igoe, ale to po prostu nie działa tak, jak mówi ...

Każda pomoc byłaby świetna!

Dzięki,

Bob

+0

Czy można debugować, jeśli naprawdę utworzono myPort? Może coś wewnątrz myPort ma wartość zerową i daje wyjątek, gdy chcesz coś napisać. Spróbuj też użyć terminala po obu stronach, więc wiesz, że połączenie jest ustawione prawidłowo. Po stronie arduino możesz użyć innego urządzenia linuksowego, jeśli masz dostępne. –

+0

Naprawdę nie mam pojęcia o przetwarzaniu ... Mogę komunikować się z Arduino, jeśli piszę rutynę w pythonie lub poprzez putty, ale po prostu w przetwarzaniu, co jest moim celem ... – gratefulfrog

+0

Wydaje się, że jest to przetwarzanie, więc nie z tym niestety, niestety. Potrzebujesz uprawnień sudo/admin? Domyślam się, że wcześniej byłby to błąd, gdybyś tak zrobił. –

Odpowiedz

0

tylko coś pojawiło się w mojej głowie. Mam podobne problemy, które zostały spowodowane z powodu kanału 1 jest już używany. Jeśli powiążesz kanał, który już jest w użyciu, mogą się zdarzyć złe rzeczy.

sdptool browse local 

Użyj tego polecenia, aby sprawdzić, które kanały są dostępne na twoim urządzeniu Ubuntu.

+0

Dzięki, ale to nadal nie pomaga. Widzę urządzenie rfcomm0 z Putty, lub przez pakiet python bluethooth bluez, ale nie z przetwarzania ... Jestem prawie pewien, że to moja własna ignorancja, ale nie widzę możliwości ... – gratefulfrog

8

Po poszukiwaniach wysokich i niskich wykonałem tę pracę.

Kluczową kwestią jest to, że przetwarzanie wykorzystuje bibliotekę rxtx java (RXTX-2.1-7) do komunikacji szeregowej.

RXTX wiki mówi:

„RxTx próbuje wykryć porty poprzez skanowanie/dev plików pasujących żadnego zestawu znanych-Good prefiksów, takich jak 'ttyS', 'ttym' i od 2,2 „ttyUSB” i tak dalej ".

a ponieważ urządzenie Bluetooth jest nazwany rfcomm* nie może być wykryty.

Sztuką jest stworzyć link sym oszukać RxTx (użyć urządzenia ttyS że nie jest jeszcze przypisany):

$ sudo ln -s /dev/rfcomm0 /dev/ttyS99 

Następnie połączyć:

$ sudo rfcomm connect 0 
Connected /dev/rfcomm0 to 00:12:11:19:08:54 on channel 1 
Press CTRL-C for hangup 

W tym momencie czerwona doprowadziło na JY-MCU staje się stały i przetwarzanie może go wykryć:

println(Serial.list()); 

wyjście jest:

[0] "/dev/ttyACM0" 
[1] "/dev/ttyS99" 

Tak, komunikacja szeregowa może działać.

Podsumowując, następujący proces pozwoli skrypt przetwarzający do komunikowania się poprzez port szeregowy z urządzeniem JY-MCU w ramach linux BlueZ

jednym ustawieniu czas:

  1. moc w górę JY-MCU,

  2. użyć następującego polecenia, aby uzyskać swój adres sprzętowy, kopalnia jest 00: 12: 11: 19: 08: 54

    $ hcitool scan 
    
  3. użyj tego, aby utworzyć plik /etc/bluetooth/rfcomm.conf; będziesz pamiętać, że wybrałem 0 dla urządzenia rfcomm, musimy, że dla związku późniejszym:

    $ cat /etc/bluetooth/rfcomm.conf 
    rfcomm0 { 
        bind yes; 
        device 00:12:11:19:08:54; 
        channel 1; 
        comment "Linvor Bluetooth Module"; 
    } 
    
  4. użycie Blueman sparować JY-MCU.

każdym razem, gdy chcesz użyć JY-MCU

  1. utworzyć link sym:

    $ sudo ln -s /dev/rfcomm0 /dev/ttyS99 
    
  2. podłączyć do JY-MCU:

    $ sudo rfcomm connect 0 
        Connected /dev/rfcomm0 to 00:12:11:19:08:54 on channel 1 
        Press CTRL-C for hangup 
    
  3. możesz teraz uruchomić proces essing skrypt i połączyć się z JY-MCU z kod:

    String portName = "/dev/ttyS99"; 
    myPort = new Serial(this, portName, 9600); 
    
  4. po uruchomieniu skryptu przetwarzania, należy CTRL-C w wierszu poleceń odłączyć JY-MCU.

To powinno wystarczyć! Ciao, Bob

+0

Dzięki za zgłoszenie tego! :) –

+0

Dzięki, podążyłem za Twoimi krokami. Mogę raz uruchomić szkic przetwarzania, a następnie utracono komunikację i za każdym razem, gdy ponownie uruchomię program, otrzymuję wyjątek Port Busy. Jakakolwiek rada? – UserK