» »

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:
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)?

Zgodovina sprememb…

  • spremenilo: xardas ()

mlamat ::

A si dal kaj pavze vmes med true in false, ali pa obrnil?

poweroff ::

xardas je izjavil:

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...
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).

noraguta ::

Zakva točno napajaš rele prek kontrolerja?
Pust' ot pobyedy k pobyedye vyedyot!

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?

Zgodovina sprememb…

  • spremenil: nikjozo ()

          ::

nikjozo je izjavil:

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?


Če ima rele priključke vcc, gnd in vhod za signal, potem tuljave ne napajaš preko gpio pina.

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???
sudo poweroff

noraguta ::

Napajanje loč posebi. Sicer ne veš kaj te zeza.
Pust' ot pobyedy k pobyedye vyedyot!

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...
sudo poweroff

noraguta ::

??? ni rečen je pa dost možnosti.
Pust' ot pobyedy k pobyedye vyedyot!

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:
<?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 ::

Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

poweroff ::

In fact. Treba je bilo dodati v sudoerse:

%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 ::

noraguta je izjavil:

Napajanje loč posebi. Sicer ne veš kaj te zeza.


Saj napajanje je loceno. Rele se napaja iz 5V in GND pina na RPi, in potem se vklaplja in izklaplja glede na signal, ki pride iz GPIO na RPi.

BigWhale ::

poweroff je izjavil:

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.

poweroff ::

Ne, so na 3.3 in na 5V. Jaz sem priklopil na 5V.
sudo poweroff

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.

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?

poweroff ::

 RPi3 GPIO pini

RPi3 GPIO pini



Tule se vidi (zgoraj), da daje ven 3.3 in 5 V - odvisno kam priklopiš.
sudo poweroff

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.

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)?
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.

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.

>>> 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 ()

poweroff ::

Saj pravim - verjetno je problem v kvaliteti mojega releja.
sudo poweroff

blay44 ::

Samo, a ni bolj pravilno
GPIO.output(7,HIGH/LOW)
?
True/False pa nam funkcija vrne, ko imamo pin deklariran kot vhodni in iz njega beremo.

LP

Zgodovina sprememb…

          ::

BigWhale je izjavil:

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.
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?

BigWhale ::

Verjetno so samo pini drugace razporejeni?

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).

poweroff ::

Zakaj je pa četrti pin?
sudo poweroff

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.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

3-barvna LED dioda na RaspberryPi

Oddelek: Elektrotehnika in elektronika
201420 (909) Ahim
»

Štoparica z RPi (+arduino?)

Oddelek: Strojna oprema
131289 (1008) GupeM
»

Električno stikalo z oddaljenim nadzorom

Oddelek: Elektrotehnika in elektronika
131368 (887) Torx
»

LED RPi (strani: 1 2 )

Oddelek: Elektrotehnika in elektronika
6813623 (9647) salcadoo
»

Arduino in luči (strani: 1 2 )

Oddelek: Elektrotehnika in elektronika
9812029 (9655) FX6300B

Več podobnih tem