Widziałem wiele przykładów używania jednego czujnika temperatury z Raspberry Pi, jednak jak mogę multipleksować 5-6 czujników temperatury z Raspberry Pi? Chcę odczytać temperaturę z kilku źródeł jednocześnie.
Czy mogę po prostu przypisać styki GPIO na Raspberry Pi do odczytu z każdego czujnika, zasadniczo replikując tę samą konfigurację dla jednego czujnika, czy też potrzebuję jakiegoś multipleksera, do którego podłączałyby się wszystkie czujniki, a następnie przesyłałoby dane równolegle do Raspberry Pi?
gpio
sensor
temperature
jc303
źródło
źródło
Odpowiedzi:
Biorąc pod uwagę, że twoim czujnikiem jest DS18B20 i jest to obwód 1-przewodowy, a ten 1-drut jest protokołem, który może wykonywać wiele adresów na tej samej magistrali i że moduł 1-przewodowego jądra temperatury może odczytać aż 10 czujników temperatury w tym samym autobusie. (sprawdź wiersz 49 kodu źródłowego sterownika ).
Jeśli po prostu podłączysz 10 czujników do tych samych 3 pinów (3v3, GND i 1-żyłowy pin IO - który jest pinem 4 na złączu (jest to zakodowane w sterowniku!) I odczytasz ich wyjścia z / sys / bus / w1 / devices / 28 * / w1_slave gdzie 28 * to indywidualny unikalny adres 1-przewodowy. Sprawdź doskonały poradnik adafruita . Nie zapomnij o oporniku 4K7 wyciągającym pin danych (numer 4 - TYLKO JEDEN!) , ponieważ wewnętrzne podniesienie pi daje około 50 KB, a to za dużo dla czujnika, więc będziesz potrzebować tego dodatkowego komponentu.
Powinieneś tylko upewnić się, że nie próbujesz użyć pasożytniczej mocy. Jeśli podłączysz 3 piny wszystkich urządzeń, wszystko powinno być w porządku.
źródło
You should just make sure you are not trying to use parasitic power.
Co przez to rozumiesz? Czy muszę korzystać z zewnętrznego źródła zasilania zamiast 3,3 V z pinu 1 w GPIO Pi? Czy może jest to pasożytnicza moc, jeśli używam tylko danych GND +, a nie 3V3? - odmówił linku do twojej nazwy użytkownika :-(this is hardcoded in the driver
czy to oznacza, że podłączenie czujników temperatury do innego pinu GPIO (lub wielu pinów GPIO) nie będzie działać?Dla odniesienia, oto krótki fragment Pythona do bitbang 1-przewodowego GPIO i zwrócenia odczytu temperatury pierwszego czujnika. Powinno być wystarczająco proste, aby zmodyfikować, aby zwracać temperatury dla wszystkich podłączonych czujników jako listę lub coś podobnego.
źródło
Rozmawianie przez 1-żyłowy autobus może być bolesne. Bez względu na to, czy rozmawiasz z 1 czujnikiem, czy z 100, musisz pomyśleć o czasie. Kilka lat temu napisałem kod do DS18B20, ale jest on w asemblerze. Jeśli ma to jakiekolwiek zastosowanie, tutaj:
źródło
Jeśli jesteś zainteresowany, oto przewodnik, który napisałem o używaniu czujnika temperatury DS18B20 (który, jak wspomniano powyżej, może być połączony z dowolną liczbą pinów GPIO na Pi) z Raspberry Pi i kodem Pyhton, który umieszcza go na Usługa RESTful, która agreguje i wyświetla temperatury na wykresach i diagramach w witrynie internetowej. Cały kod publiczny na określonym koncie GitHub. http://macgyverdev.blogspot.se/2014/01/weather-station-using-raspberry-pi.html
źródło
Jakiego rodzaju czujnika temperatury używasz? Jeśli masz coś w rodzaju DS18B20, możesz połączyć do 18446744073709551615 czujników, jeśli masz ich tyle.
źródło
Odpowiedzieć:
Istnieją dodatkowe moduły, które można uzyskać, które mają kilka magistrali do podłączenia do pi.
Ten film porównuje ich prędkości: https://www.youtube.com/watch?v=YbWidNBycls W końcu używa przekompilowanego jądra, aby osiągnąć wiele komunikacji GPIO z wieloma czujnikami. Nie opublikował swoich wyników na temat tego, jak je uzyskał. Ale można go multipleksować zamiast używać tylko jednego pinu.
Aktualizacja. Wysłał teraz. Podłączył 81 czujników do 9 osobnych GPIO i był w stanie uzyskać wszystkie temperatury w mniej niż 3 sekundy: https://www.youtube.com/watch?v=JW9wzbp35w8
źródło
idealnym sposobem na odczyt wielu czujników jest użycie czujników I2C.
jest to jedyny sposób, aby połączyć wiele czujników razem lub możesz użyć czujników analogowych, ale one zajmą wiele analogowych pinów, ale i2c użyje tylko 2 linii. Powiedzmy, że używasz Pi2 / 3, a następnie zasugeruję, aby uzyskać kapelusz Raspberry Pi, który ma port I2C, abyś mógł połączyć wszystkie urządzenia i2c z Pi w ciągu kilku sekund i upewni się, że twój sprzęt jest poprawny.
teraz masz Pi z adapterem I2C, który pozwala poruszać się po części czujnika. TI, AD, NXP, freescale i wiele innych firm produkuje czujnik temperatury z I2C, ale chcesz podłączyć więcej niż jeden czujnik, więc są dwie opcje.
uzyskaj 6 różnych czujników I2C o różnych adresach I2C, jeśli masz dwa czujniki o tym samym adresie, to nie będzie działać.
możesz uzyskać czujniki z linią adresową i po prostu zmienić adres, a także połączyć je za pomocą Pi bez konfliktu adresu. zasugeruję użycie tego czujnika TMP 100. Wolę ten, ponieważ ma on 2 linie adresowe z obsługą pływającej linii adresowej, dzięki czemu można podłączyć 6 czujników za pomocą jednej linii i2c.
zaletą korzystania z tych samych czujników jest to, że nie musisz czytać 6 arkusza danych, aby napisać kod, musisz przestudiować jeden arkusz danych i napisać kod w prosty sposób. jeśli wszystkie czujniki są takie same, będziesz mieć lepsze wyniki do porównania.
źródło