Forum » Programiranje » Programiranje GPIO na RaspberryPi 3
Programiranje GPIO na RaspberryPi 3
poweroff ::
Torej, na RaspberryPi 3 (ja, trojka) sem priklopil en enostaven kitajski rele.
Rele ima oznake VCC, GND in IN.
Zadevo povežem takole (glej shematiko pinov na RPi):
- GND na pin 6 (Ground)
- VCC na pin 2 (5.0 VDC Power)
- IN na PIN 7 (GPIO04, GPIO_GCLK)
Poženem Python in rečem:
Na tej točki reke klikne in preklopi na izhodu (torej rele dela).
Tukaj sem uporabil GPIO.setmode(GPIO.BOARD) (in NE BCM), se pravi je na oni zgornji shemi treba gledati zunanje cifre z oznakami pinov.
Zdaj pa rečem:
...in ne zgodi se nič. Načeloma bi moral vklapljati in izklapljati, ampak ne dela ničesar. Any idea?
Isto sem skušal tudi s pinom 3 (GPIO02, SDA1, I2C), pa True in False ravno tako ne delata ničesar.
Če pa dupont kabel ročno priklapljam in izklapljam na pin 7 (oz. pin 3), rele lepo klika.
Rele ima oznake VCC, GND in IN.
Zadevo povežem takole (glej shematiko pinov na RPi):
- GND na pin 6 (Ground)
- VCC na pin 2 (5.0 VDC Power)
- IN na PIN 7 (GPIO04, GPIO_GCLK)
Poženem Python in rečem:
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT)
Na tej točki reke klikne in preklopi na izhodu (torej rele dela).
Tukaj sem uporabil GPIO.setmode(GPIO.BOARD) (in NE BCM), se pravi je na oni zgornji shemi treba gledati zunanje cifre z oznakami pinov.
Zdaj pa rečem:
GPIO.output(7, True) GPIO.output(7, False)
...in ne zgodi se nič. Načeloma bi moral vklapljati in izklapljati, ampak ne dela ničesar. Any idea?
Isto sem skušal tudi s pinom 3 (GPIO02, SDA1, I2C), pa True in False ravno tako ne delata ničesar.
Če pa dupont kabel ročno priklapljam in izklapljam na pin 7 (oz. pin 3), rele lepo klika.
sudo poweroff
xardas ::
Voltmeter in pomeriš voltažo na pinu? Najverjetneje si res samo zamešal številko pina. Mogoče poskusiš gornji dva ukaza poganjati v zanki (z določeno zakasnitvijo).
Kaj se zgodi pa po izvedbi GPIO.output(4, True)?
Kaj se zgodi pa po izvedbi GPIO.output(4, True)?
Zgodovina sprememb…
- spremenilo: xardas ()
poweroff ::
Kaj se zgodi pa po izvedbi GPIO.output(4, True)?
Traceback (most recent call last):
File "stdin", line 1, in module
ValueError: The channel sent is invalid on a Raspberry Pi
4-ka je v bistvu ground (če je GPIO.setmode(GPIO.BOARD)).
Pavzo dam vmes (v bistvu ročno tipkam ukaze v Python).
Sem pa v rasbpi-config dal ARM I2C interface enabled... in je isto.
sudo poweroff
xardas ::
I2C tukaj ne igra vloge, ker samo upravljaš digitalni izhod. Enako bi bilo, če bi namesto releja prižigal in ugašal led diodo. Verjetno bo najhitreje, če poskusiš še z zanko (in loviš omenjene izjeme).
poweroff ::
Se pravi tole dam v zanko:
GPIO.output(7, True)
GPIO.output(7, False)
Ne razumem kakšne izjeme?
Oziroma, če mi po GPIO.setup(7, GPIO.OUT) rele klikne, sklepam, da sem uporabil pravi pin. Če dam kakšen drug pin rele namreč ne klikne...
GPIO.output(7, True)
GPIO.output(7, False)
Ne razumem kakšne izjeme?
Oziroma, če mi po GPIO.setup(7, GPIO.OUT) rele klikne, sklepam, da sem uporabil pravi pin. Če dam kakšen drug pin rele namreč ne klikne...
sudo poweroff
Zgodovina sprememb…
- spremenilo: poweroff ()
Ribič ::
Čudno se mi tole zdi. Praviloma, ko pin nastaviš na output, se nebi smelo zgoditi nič - Pin bi moral ostati na LOW. Potem pa ga v Pythonu vklopiš in izklopiš s že omenjenim načinom (GPIO.output(...)).
Lahko malo pomeriš napetost na izhodnem pinu, ko rele ni priklopljen? Zanima me kakšna je napetost, ko RPi prižgeš, ko zaženeš ukaz GPIO.setup(7, GPIO.OUT) in ko pin vklopiš GPIO.output(7, True) ter izklopiš GPIO.output(7, False).
Lahko malo pomeriš napetost na izhodnem pinu, ko rele ni priklopljen? Zanima me kakšna je napetost, ko RPi prižgeš, ko zaženeš ukaz GPIO.setup(7, GPIO.OUT) in ko pin vklopiš GPIO.output(7, True) ter izklopiš GPIO.output(7, False).
nikjozo ::
Si siguren da ti RPi pin daje dovolj toka za tvoj rele?
a lahko namestom releja zvežeš LEDico, seveda s preduporom, da vidiš če je omejitev v toku?
a lahko namestom releja zvežeš LEDico, seveda s preduporom, da vidiš če je omejitev v toku?
Zgodovina sprememb…
- spremenil: nikjozo ()
poweroff ::
Rele je 5V. Ne napaja se preko RPi, pač pa ga RPi samo vklopi. Ima tudi zaščito (zener dioda, itd.) tako da naj ne bi bilo skrbi, da se kaj skuri. Fotka releja je v prvem postu.
sudo poweroff
poweroff ::
Zdaj sem isto poskusil s pinom 37 (to je GPIO 26, predzadnji spodaj levo). Ko rečem GPIO.setup(37, GPIO.OUT), klikne.
A je mogoče, da bi moral na releju zamenjati VCC in IN???
A je mogoče, da bi moral na releju zamenjati VCC in IN???
sudo poweroff
poweroff ::
Hmm, fu*ing China!
Zdaj sem poskusil priklopiti drug rele - 8 kanalni. In dela kot predvideno. Očitno je z onim, enokanalnim nekaj narobe...
Zdaj sem poskusil priklopiti drug rele - 8 kanalni. In dela kot predvideno. Očitno je z onim, enokanalnim nekaj narobe...
sudo poweroff
poweroff ::
Še eno trapasto vprašanje...
Naredil sem 4 skripte:
- lampon.py in lampoff.py, ki vsebujeta Python kodo za vklop in izklop luči
- lampon.php in lampoff.php, ki vsebujeta:
oziroma
Ko zadevo poženem iz konzole:
Se rele aktivira.
Ko pa jo poženem iz brskalnika:
oz. oddaljeno:
...se pa ne zgodi nič. Nginx laufa, access.log pravi da se je skripta izvedla, error log je prazen...
Naredil sem 4 skripte:
- lampon.py in lampoff.py, ki vsebujeta Python kodo za vklop in izklop luči
- lampon.php in lampoff.php, ki vsebujeta:
<?php system("echo raspberry | sudo -S python /var/www/html/lampon.py") ; ?>
oziroma
<?php system("echo raspberry | sudo -S python /var/www/html/lampoff.py") ; ?>
Ko zadevo poženem iz konzole:
php lampon.php
Se rele aktivira.
Ko pa jo poženem iz brskalnika:
curl http://localhost/html/lampon.php
oz. oddaljeno:
http://xx.xx.xxx.xxx/html/lampon.php
...se pa ne zgodi nič. Nginx laufa, access.log pravi da se je skripta izvedla, error log je prazen...
sudo poweroff
Yacked2 ::
Meni je pomagalo tole:
http://raspberrypi.stackexchange.com/qu...
http://raspberrypi.stackexchange.com/qu...
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!
poweroff ::
In fact. Treba je bilo dodati v sudoerse:
Hvala. Ful hvala.
%www-data ALL=(ALL) NOPASSWD: /usr/bin/python /var/www/html/lampon.py %www-data ALL=(ALL) NOPASSWD: /usr/bin/python /var/www/html/lampoff.py
Hvala. Ful hvala.
sudo poweroff
BigWhale ::
BigWhale ::
Rele je 5V. Ne napaja se preko RPi, pač pa ga RPi samo vklopi. Ima tudi zaščito (zener dioda, itd.) tako da naj ne bi bilo skrbi, da se kaj skuri. Fotka releja je v prvem postu.
Ce se prav spomnim je GPIO na RPi 3.3V. Torej, ko nek pin assignas kot output in ga das v HIGH state bos imel tam 3.3V. Ce imas rele, ki dela na 5V verjetno ne bo delal na RPiju. Teh 3.3V moras dvigniti na 5V. To lahko storis na vec nacinov. Ce imas samo en rele potem lahko to naredis z enim preprostim tranzistorjem (BC548). Ce imas vec relejev ali pa morda se kaksno drugo rec, ki rabi 5V, potem se pa ze splaca pogledati za kak Darlington array (ULN2803), ker bo lazja vezava.
Previden moras biti tudi z vsemi ostalimi senzorji, ki jih priklapljas na RPi. Ce delajo na 5V in nanje pripeljes 5V, bo tudi output senzorja v tem rangu, ce to potem pripeljes na GPIO pin na RPi, se ne zgodi nic dobrega. Tukaj pa naredis en voltage divider in s tem znizas napetost.
Brane22 ::
Poglej na slikco releja. Tam je že tranzistor z vsem potrebnim.
Vse, kar mora spremeniti, je eden upor na tiskanini.
Vse, kar mora spremeniti, je eden upor na tiskanini.
Brane22 ::
Njegova stvar ima samo vhod, torej ni to problem.
Če ni crknjena, je problem v tem, da je padla iz tolerance in da pričakuje višjo logično "1".
Sicer mnoge od teh stvari naj bi bile 5V TTL kao združljive samo kitajska "1" ima očitno neko svojo vrednost.
Če je to slučaj, potem bi bilo fajn bodisi zmontirati not en N-MOSFET z zadosti nizko kolensko napetostjo in mogoče odstraniti enega od uporov ali pa zmanjšati vrednost baznega predupora, bodisi z zamenjavo ali pa z nalotanjem ekstra upora nanj.
Če ni crknjena, je problem v tem, da je padla iz tolerance in da pričakuje višjo logično "1".
Sicer mnoge od teh stvari naj bi bile 5V TTL kao združljive samo kitajska "1" ima očitno neko svojo vrednost.
Če je to slučaj, potem bi bilo fajn bodisi zmontirati not en N-MOSFET z zadosti nizko kolensko napetostjo in mogoče odstraniti enega od uporov ali pa zmanjšati vrednost baznega predupora, bodisi z zamenjavo ali pa z nalotanjem ekstra upora nanj.
Zgodovina sprememb…
- spremenilo: Brane22 ()
::
Disclaimer: nisem električar, zato mogoče brcam v temo.
Ali je mogoče, da rele deluje na 5V nivoje, ker pa RPi daje 3v3 pa ne deluje? Ali bi mogoče v tem primeru lahko zadevo rešil s pull-up uporom?
Ali je mogoče, da rele deluje na 5V nivoje, ker pa RPi daje 3v3 pa ne deluje? Ali bi mogoče v tem primeru lahko zadevo rešil s pull-up uporom?
Brane22 ::
Daje _napajanje_ 3.3 oz 5V.
Signali so pa verjetno 3V CMOS,ki pa lahko mogoče dosežejo potrebe 5V TTL ( logična enka nad 2.4V) je pa vprašanje, če so 5V-tolerant ( ali torej prenesejo 5V na vhodu) , kot je že nekdo zajamral o smrti RPi, sklepam da niso, vsaj ne vsi.
Signali so pa verjetno 3V CMOS,ki pa lahko mogoče dosežejo potrebe 5V TTL ( logična enka nad 2.4V) je pa vprašanje, če so 5V-tolerant ( ali torej prenesejo 5V na vhodu) , kot je že nekdo zajamral o smrti RPi, sklepam da niso, vsaj ne vsi.
poweroff ::
Glede na to, da nisem električar/elektronik, bom verjetno vprašal bedarijo, ampak vseeno: ali je rešitev, da kupim rele (z vezjem), ki ni 5V, ampak recimo 3V? Tako obstajajo?
Po drugi strani pa - zakaj se je pa rele vseeno aktiviral ob ukazu GPIO.setup(7, GPIO.OUT)?
Po drugi strani pa - zakaj se je pa rele vseeno aktiviral ob ukazu GPIO.setup(7, GPIO.OUT)?
sudo poweroff
Brane22 ::
Glede RPI internih zadev- ne vem.
Glede releja, brez veze.
Prvič, 3V releji so najbrž redki in temu ustrezno dragi.
Drugič, s 3V se napaja CPU ( vsaj I/O linije) in tam ni pametno delat piz** s takimi bremeni. Če ti zaradi releja štucne 5V linija, big deal. Itak se za vso občutljivo logiko ( kar je pri teh zadevah praktično vsa) napetost dodatno stabilizira z LDO linearci.
Tretjič, eno nima bistvene veze z drugim. Stvar se sicer napaj s 5V ampak pri kateri napetosti se bo tranzistor vklopil, je pa odvisno več ali manj od enega upora. Zamenjaš upor in si premaknil točko vklopa.
Glede releja, brez veze.
Prvič, 3V releji so najbrž redki in temu ustrezno dragi.
Drugič, s 3V se napaja CPU ( vsaj I/O linije) in tam ni pametno delat piz** s takimi bremeni. Če ti zaradi releja štucne 5V linija, big deal. Itak se za vso občutljivo logiko ( kar je pri teh zadevah praktično vsa) napetost dodatno stabilizira z LDO linearci.
Tretjič, eno nima bistvene veze z drugim. Stvar se sicer napaj s 5V ampak pri kateri napetosti se bo tranzistor vklopil, je pa odvisno več ali manj od enega upora. Zamenjaš upor in si premaknil točko vklopa.
BigWhale ::
Hm, jaz sem zdaj priklopil nek random kitajski rele na RPi2 in deluje. Zgleda, da je 3.3V dovolj za aktiviranje releja. Vsaj tega, ki ga imam ja. Povezava je pa taksna, kot jo je opisal Matthai.
5V in GND, potem pa se signal na GPIO7.
Tole deluje brez tezav.
PS: Verjetno bi se pa splacalo razmisliti o posebnem napajanju za 5V stvari, vprasanje je kak tok je na voljo na RPi. Kolikor vidim ljudje kar delajo z externim napajanjem. Ampak za preklapljanje nekaj relejev po mojem ne bi smelo biti tezav.
5V in GND, potem pa se signal na GPIO7.
>>> import RPi.GPIO as GPIO >>> GPIO.setmode(GPIO.BOARD) >>> GPIO.setup(7, GPIO.OUT) >>> GPIO.output(7, True) >>> GPIO.output(7, False)
Tole deluje brez tezav.
PS: Verjetno bi se pa splacalo razmisliti o posebnem napajanju za 5V stvari, vprasanje je kak tok je na voljo na RPi. Kolikor vidim ljudje kar delajo z externim napajanjem. Ampak za preklapljanje nekaj relejev po mojem ne bi smelo biti tezav.
Zgodovina sprememb…
- spremenil: BigWhale ()
blay44 ::
Samo, a ni bolj pravilno
True/False pa nam funkcija vrne, ko imamo pin deklariran kot vhodni in iz njega beremo.
LP
GPIO.output(7,HIGH/LOW)?
True/False pa nam funkcija vrne, ko imamo pin deklariran kot vhodni in iz njega beremo.
LP
Zgodovina sprememb…
- spremenilo: c0dehunter ()
::
PS: Verjetno bi se pa splacalo razmisliti o posebnem napajanju za 5V stvari, vprasanje je kak tok je na voljo na RPi. Kolikor vidim ljudje kar delajo z externim napajanjem. Ampak za preklapljanje nekaj relejev po mojem ne bi smelo biti tezav.
Pri parih relejih ne bo težav, če jih imaš več, pa lahko naletiš na probleme. Tile kitajski releji lahko vlečejo tudi do 80~100mA na rele in ko jih imaš 10 je ločeno napajanje nujno. Tukaj imaš potem več možnosti. Ena je ta, da na relejih uporabiš ločeno napajanje. Kitajski moduli z 8 releji imajo običajno za ta namen poseben pin (ki je privzeto s skakačem povezan na nožico Vcc). Druga možnost je, da namesto relejev uporabiš triake, ampak potem izgubiš možnost preklapljanja. Tretje možnost, ki se jo poslužujem sam, pa je uporaba shift registra (74HC595) in driverja (ULN2803), ki hkrati pomeni tudi to, da lahko praktično poljubno relejev krmilim s samo tremi GPIO pini.
noraguta ::
Rele v tokokrogu ni povsem nedolžna reč ima le svojo induktivnost. Usb napajanje prek kontrolerja je pa tudi bolj tako, tako. Moduli naj bi sicer večji del porihtal in jih samo navesiš v shemo, ampak često ne, kitajski so pa sploh fenomen. Zato je dobr imet vsaj za testirat ne lab psu, da ne ugibaš preveč.
Sicer pa 3v releje ni noben problem dobit.
Songle so mislim da kar solidni ampak potem je še odvisno od samega modula.
Sicer pa 3v releje ni noben problem dobit.
Songle so mislim da kar solidni ampak potem je še odvisno od samega modula.
Pust' ot pobyedy k pobyedye vyedyot!
slodreamer ::
Imam Raspberry Pi 3 in želim sprogramirat DHT22 senzor.
Imam 2 takšna senzorja (naročena pri različnih prodajalcih) in pa enega takega.
Uporabljam Adafruit Phyton DHT knjižico. In stvar je taka, da drugi senzor (s 4 pini - od katerih priklopim samo 3) deluje in lepo vrača vrednosti, tista 2 s tremi pini pa ne delujeta in ukaz dht.read_retry vrača samo None.
Dokler sem imel samo enega, sem bil prepričan da je pokvarjen, sedaj pa imam 2 enaka in nobeden ne deluje, pa mi je že malo sumljivo. Ima kdo kako idejo?
Imam 2 takšna senzorja (naročena pri različnih prodajalcih) in pa enega takega.
Uporabljam Adafruit Phyton DHT knjižico. In stvar je taka, da drugi senzor (s 4 pini - od katerih priklopim samo 3) deluje in lepo vrača vrednosti, tista 2 s tremi pini pa ne delujeta in ukaz dht.read_retry vrača samo None.
Dokler sem imel samo enega, sem bil prepričan da je pokvarjen, sedaj pa imam 2 enaka in nobeden ne deluje, pa mi je že malo sumljivo. Ima kdo kako idejo?
poweroff ::
Če boš rešil, tudi mene zanima. Ker ravno razmišljam o nabavi tega senzorja...
sudo poweroff
slodreamer ::
En je začel delat kar na lepem, mogoče sem malo kable drezal :) Je pa najprej kazalo temperaturo pravilno, vlago pa ves čas "1", potem pa sem + iz 5V premaknil na 3.3V pa je začelo delovat.
Tako da sedaj oni s 4 pini deluje na 5V, eden s 3 pini deluje na 3.3V (in vračata pribljižno iste vrednosti), en pa ne deluje - ta je verjetno res fuč.
Vseeno pa bolj priporočam tega s 4 pini (povežeš pa samo 3).
Tako da sedaj oni s 4 pini deluje na 5V, eden s 3 pini deluje na 3.3V (in vračata pribljižno iste vrednosti), en pa ne deluje - ta je verjetno res fuč.
Vseeno pa bolj priporočam tega s 4 pini (povežeš pa samo 3).
slodreamer ::
AM2302 modul ima 4 pine in potrebno je povezati data pin s tem 4. pinom in dati vmes primeren rezistor, mislim da potem služi za zahtevanje vrednosti od senzorja.
Vglavnem na zgoraj omenjenih senzorjih je to že urejeno na vključenih ploščicah.
Vglavnem na zgoraj omenjenih senzorjih je to že urejeno na vključenih ploščicah.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | 3-barvna LED dioda na RaspberryPiOddelek: Elektrotehnika in elektronika | 1434 (923) | Ahim |
» | Štoparica z RPi (+arduino?)Oddelek: Strojna oprema | 1306 (1025) | GupeM |
» | Električno stikalo z oddaljenim nadzoromOddelek: Elektrotehnika in elektronika | 1388 (907) | Torx |
» | LED RPi (strani: 1 2 )Oddelek: Elektrotehnika in elektronika | 13761 (9785) | salcadoo |
» | Arduino in luči (strani: 1 2 )Oddelek: Elektrotehnika in elektronika | 12174 (9800) | FX6300B |