2017-01-21 17 views
6

Chcę być w stanie wykryć, kiedy czujnik peryferyjny NIE jest podłączony do mojego Raspberry Pi 3.Jak mogę sprawdzić, czy urządzenie peryferyjne jest podłączone do GPIO?

Na przykład, jeśli mam pasywny czujnik podczerwieni GPIO.

mogę uzyskać wszystkie porty GPIO jak to:

PeripheralManagerService manager = new PeripheralManagerService(); 
List<String> portList = manager.getGpioList(); 
if (portList.isEmpty()) { 
    Log.i(TAG, "No GPIO port available on this device."); 
} else { 
    Log.i(TAG, "List of available ports: " + portList); 
} 

Następnie można podłączyć do portu jak ten:

try { 
    Gpio pir = new PeripheralManagerService().openGpio("BCM4") 
    } catch (IOException e) { 
     // not thrown in the case of an empty pin 
    } 

Jednak nawet jeśli pin jest pusty mogę jeszcze połączyć to (, co technicznie ma sens, ponieważ gpio jest tylko binarne włączone lub wyłączone). Wygląda na to, że nie ma żadnych api, i nie mogę logicznie myśleć o tym, jak odróżnić pin z podłączonym czujnikiem peryferyjnym od "pustego".

W tej chwili nie ma możliwości, aby programowo potwierdzić, że moje czujniki i obwód są poprawnie skonfigurowane.

Ktoś ma jakieś pomysły? Czy to nawet możliwe z elektronicznego punktu widzenia?

odniesienia docs:

https://developer.android.com/things/sdk/pio/gpio.html

Odpowiedz

6

Istnieje wiele sposobów na „wykrywanie obecności” elektrycznie, ale nic, co znajdziesz samoistnie w SoC. Zwykle nie prosiłbyś o pinezkę GPIO, gdyby coś było załączone - nie byłby w stanie ci tego powiedzieć.

Dodatkowe szpilki GPIO są często używane do wykrywania, czy urządzenie peryferyjne jest podłączone do złącza. Wtyczka dla niektórych czujników może zawierać linię "wykrywającą", która jest zwarta do masy i pobiera GPIO na niskim poziomie, gdy czujnik jest podłączony, na przykład. USB i SDIO robią coś podobnego dzięki dedykowanym obwodom w interfejsie.

Można również zbudować bardziej skomplikowane obwody detekcyjne wykorzystując takie rzeczy jak aktualne wykrywanie, ale nieuchronnie będą musiały wydobyć sygnał binarny, który przechwycisz przez dedykowane GPIO.

Jest to łatwiejsze do osiągnięcia dla szeregowych urządzeń peryferyjnych, ponieważ zazwyczaj można wysłać podstawowe polecenie i sprawdzić, czy otrzymujesz odpowiedź.

2

Wykrywanie wyłącznie za pomocą linii wejściowej może być trudne. Po pierwsze, chcesz zawęzić zakres problemu. Traktuj jako nieobecny stan czujnika, który nie jest podłączony, czujnik jest podłączony, ale nie odpowiada, lub czujnik reaguje w nietypowy sposób.

Tak więc, jeśli jest to czujnik cyfrowy, to komunikacja z czujnikiem może być wystarczająca do stwierdzenia, czy jest obecny, czy nie (szczególnie, jeśli są zaangażowane sumy kontrolne lub bity parzystości). Niektóre czujniki analogowe mają również specyfikację działania po wyzwoleniu. Możesz wykorzystać odchylenie od tych specyfikacji, aby określić, czy czujnik nie jest obecny.

Jeśli masz czujnik cyfrowy bez sprawdzania błędów na jego wyjściu, gdzie masz dane z zegara (więc wszystkie 0 lub wszystkie 1 są ważne) lub jest to tylko binarna 1 lub 0 dla wyjścia, to potrzebować pomocy zewnętrznej. To samo dotyczy większości czujników analogowych.

Ta pomoc zewnętrzna byłaby czymś, w czym umieścisz system w znanym sterowanym stanie, naciśnij przycisk, a następnie sprawdzi czujniki pod kątem wydajności w określonym zakresie. Aby być absolutnie pewnym, potrzebujesz co najmniej dwóch różnych stanów, aby upewnić się, że twoje wejścia cyfrowe lub analogowe nie utknęły w prawidłowym stanie do testu.

Prawie każda inna metoda byłaby zewnętrzna dla systemu. Wykorzystanie dodatkowego IO do "wykrycia" czujnika może pomóc zwiększyć pewność, że czujnik istnieje, ale możesz uzyskać fałszywe alarmy tam, gdzie wszystko, czego się nauczyłeś, to to, że "coś" jest - niekoniecznie czujnik, którego oczekujesz.

Powiązane problemy