Skocz do zawartości

Kurs Raspberry Pi - #13 - PWM, wejścia, skrypty z kamerą


Pomocna odpowiedź

(edytowany)

@velsatis10 Witam na forum! 🙂 

Wydaje mi się, że masz starszą wersję wiring pi. Domyslnie jest zainstalowana ta kompatybilna z RPi 3 stąd masz ten błąd. Nową wersję możesz pobrać ręcznie poleceniami:

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

Jeżeli wszystko będzie ok to zainstaluje się wersja 2.52:

image.thumb.png.4a71a9c5fb4c15da23e588e69c018c71.png

A tu wynik gpio -v:

image.thumb.png.b8fa0e777c019927a9f6691fe4ed11bd.png

17 godzin temu, velsatis10 napisał:

na poprzedniej częsci kursu zapalenie diody się udało dopóki nie zacząłem próbować gpio

Masz na myśli, że polecenia na plikach działały ale polecenia gpio ... (z wiring pi) już nie? Program ten przestał być rozwijany i jeszcze "jako tako" działa, dlatego sugerowane jest przerzucenie się na inne biblioteki, np. pigpio albo gpio zero. Jeżeli będziesz miał problem z odczytem wejść (przyciskami) to myślę, że gpio zero może być pomocny.

Edytowano przez Gieneq
  • Lubię! 2
  • 1 miesiąc później...
(edytowany)

Mozesz cos przyblizyc na temat innych bibliotek obslugujacych chociazby zmiane wartosci pinow ktore aktualne gpio nie obsluguje?

Edytowano przez zbirek
  • Lubię! 1

Ok poradzilem sobie uzywajac polecenia raspi-gpio ale powstal drugi "problem" z buzzerem, mianowice jak ustawie pin na OUT buzzer automatycznie zaczyna piszczec i nie moge go wylaczyc zadnym poleceniem poza zmiana wartosci na in. W kursie jest mowa o zmianie wartosci value na 1 badz 0 aby sterowac buzzerem lecz u mnie te funkcje nie dzialaja

z gory serdeczne dzieki za odpowiedz

@zbirek choć wiringpi nie działa poprawnie to poprawnie działa z niego polecenie readall. Jeżeli faktycznie nic się nie ustawia to pewnie trzeba zmienić program.

Ostatnio polubiłem gpio-zero, póki co nie mam z tym problemów. 🙂 

  • 1 miesiąc później...
(edytowany)

Witam,

Mam problem z Uniwersalne wejścia w Raspberry Pi tj. zadanie z diodą oraz przyciskiem.
Nie ważne czy przed testem wydam polecenie gpio -g mode 26 up czy też nie, polecenie read zawsze odczytuje wartość "0" podczas gdy readall odczytuje czy na wejściu jest "1" czy "0".
Czy robię coś źle? Ma tutaj znaczenie tryb pinu ALT0? Próbowałem je zmienić używając polecenia gpio -g mode 26 in, lecz bez powodzenia.

W związku z tym nie działa również kolejna część zadania tj. z poleceniem gpio -g wfi 26 falling.

Poniżej wyniki z terminala:
1. Przy wyłączonym przycisku:

pi@raspberrypi:~ $ gpio -g read 26
0
pi@raspberrypi:~ $ gpio readall
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT5 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT5 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 0 | ALT0 | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+

2. Przy włączonym przycisku:

pi@raspberrypi:~ $ gpio -g read 26
0
pi@raspberrypi:~ $ gpio readall
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |   2 |   8 |   SDA.1 |   IN | 1 |  3 || 4  |   |      | 5v      |     |     |
 |   3 |   9 |   SCL.1 |   IN | 1 |  5 || 6  |   |      | 0v      |     |     |
 |   4 |   7 | GPIO. 7 |   IN | 1 |  7 || 8  | 1 | ALT5 | TxD     | 15  | 14  |
 |     |     |      0v |      |   |  9 || 10 | 1 | ALT5 | RxD     | 16  | 15  |
 |  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
 |  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
 |  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
 |  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
 |   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
 |  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
 |     |     |      0v |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
 |   0 |  30 |   SDA.0 |   IN | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
 |   5 |  21 | GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v      |     |     |
 |   6 |  22 | GPIO.22 |   IN | 1 | 31 || 32 | 1 | ALT0 | GPIO.26 | 26  | 12  |
 |  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
 |  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
 |  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
 |     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
pi@raspberrypi:~ $

 

Edytowano przez grucha532

@grucha532 a czy gdy ustawiasz GPIO jako samo wejście (bez pullup) to jest lepiej?

Dla testu sprawdź jeszcze czy jak ustawisz pullup przy pomocy plików (tak jak na początku kursu) to polecenie readall zarejestruje zmianę.

WiringPi (gpio) jest wciąż użyteczne i sam chętnie stosuję ale jest kilka rzeczy na które trzeba zwracać uwagę, głównie jeżeli chodzi o pullup - pozostałe funkcje powinny działać bez zarzutów. 

  • Lubię! 1

A mógłbyś dać wskazówkę jak ustawić pullup przy pomocy plików? "1" logiczną mogę dać tylko na wyjście, na wejście niestety nie.

pi@raspberrypi:~ $ echo 1 > /sys/class/gpio/gpio12/value
-bash: echo: write error: Operation not permitted

Dzięki z góry!

Dzięki za próbę pomocy lecz niestety nie:

pi@raspberrypi:~ $ sudo bash -c 'echo 1 > /sys/class/gpio/gpio12/value'
bash: line 0: echo: write error: Operation not permitted
pi@raspberrypi:~ $ sudo bash -c echo 1 > /sys/class/gpio/gpio12/value
1: line 0: echo: write error: Operation not permitted

 

  • 4 tygodnie później...
(edytowany)

Ok, na RPi4 możesz spróbować użyć raspi-gpio, który pozwala na ustawienie pull-up i sprawdzenie stanu pinu

raspi-gpio set 26 pu
raspi-gpio get 26

Nie jestem pewien, ale używając sysfs chyba nie można ustawić 1 używając pliku value, jeżeli pin jest w trybie IN. Aby ustawić 1 trzeba użyć echo 1 do active_low, ale jak dla mnie niestety to rozwiązanie nie działa

echo 1 > /sys/class/gpio/gpio26/active_low

na wersji gpio 2.52 mi również nie działała obsługa pinów w trybie wejść (IN). Niestety stan pinu nie zmienia się niezależnie od tego czy przycisk wciśnięty czy nie, przynajmniej sprawdzając przez plik value jak i gpio readall.

Edytowano przez ststag
Poprawa literówki, active_low nie działa, wyprowadzenie z błędu

@ststag Pullup z programem gpio dla RPi4 nie działa poprawnie na niektórych pinach, choć zdecydowana większość funkcji programu działa i się przydaje np. readall. Sam jak piszę jakiś program z wykorzystaniem GPIO to korzystam z kilku programów, gdyż każdy ma swoje mocne strony.

Przy kolejnej rewizji kursu zostanie to uwzględnione, a na razie możesz spróbować podziałać z programem pigpio i modułami Pythona np. gpio zero.

  • Lubię! 2
  • 1 miesiąc później...

Pytanie.
Mam podłączone diody jak do symulatora światłem. Mam wspólną szynę GND na pinie34 dla wszystkich diod (plus buzzer). Dioda zielona i żółta są podłączone do pinów PWM (IO 18 i IO 12). Gdy wysteruję dowolną z nich wyjściem PWM to obie diody (zielona i żółta) zapalają się z taką samą mocą ( czerwona nie reaguje).  Gdy wysteruję IO 18 na wartość 1024 to obie się zapalną a następnie IO 12 na 0 to obie zgasną.
Ktoś wie czemu tak się dzieje i jak to naprawić ? jest sprzężenie sprzętowe dla obu PWM'ów? 

(edytowany)

Wrzucę skrypt który używam teraz do wyzwolenia kamery za pomocą przycisku. W czasie oczekiwania obie diody są zgaszone. Gdy klikam przycisk to na sekundę obie się zapalają. 
 

#!/bin/sh
gpio -g mode 4 up	#przycisk
gpio -g mode 18 pwm	#dioda zielone
gpio -g mode 12 pwm 	#dioda zolta
gpio -g mode 20 out	#buzzer
gpio -g mode 21 out	#dioda czerwona
while true
do
	gpio -g write 21 0
	gpio -g pwm 18 1024
	gpio -g pwm 12 0
	gpio -g write 20 1
	if gpio -g wfi 4 falling 
		then
		gpio -g pwm 18 0
		gpio -g pwm 12 1024
		gpio -g write 21 1
		gpio -g write 20 0
		sleep 1
		raspistill -t 200 -n -o 'zdjecie-%d.jpg' -dt 
	fi
done

Restart RPI nic nie dał. 

EDIT: Czy możliwym powodem błędu jest wspólny GND?

Edytowano przez Jan3k

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...