Using Motion Sensor HC-SR501
-
I try a project using motion sensor.
if motion detected, turn on a LED.Program write in Python.
#!/usr/local/bin/python # -*- coding: utf-8 -*- import time import onionGpio from datetime import datetime # LED GPIO led_pin = 0 pir_pin = 9 sleeptime = 100000 led_light_up_time = 1 led = onionGpio.OnionGpio(led_pin) pir = onionGpio.OnionGpio(pir_pin) led.setOutputDirection(0) pir.setInputDirection() while True: value = pir.getValue().rstrip() if(value == "1"): print datetime.now(), print "motion_detected" led.setValue(1) time.sleep(led_light_up_time) led.setValue(0)
It seem work well.
but a problem is when press Ctrl-C to stop running,
then try run again, some time cause ”Resource busy“ error.root@Omega-6F83:~# python motion2.py Traceback (most recent call last): File "motion2.py", line 17, in <module> pir.setInputDirection() File "/usr/lib/python2.7/onionGpio.py", line 158, in setInputDirection ret = self._setDirection(_GPIO_INPUT_DIRECTION) File "/usr/lib/python2.7/onionGpio.py", line 134, in _setDirection status = self._initGpio() File "/usr/lib/python2.7/onionGpio.py", line 46, in _initGpio fd.close() IOError: [Errno 16] Resource busy root@Omega-6F83:~#
May be onionGpio not release some "Resource" after Ctrl-C.
How can I fix it?
-
Another amateur here, running in to the same issue.
For example here https://docs.onion.io/omega2-maker-kit/starter-kit-seven-segment-display.html, running the Python example, stopping it and trying to run again throws IOError.
Something needs to be freed, but what?
-
The IOError can happen if you Ctrl-C during a GPIO write/update operation before it unexports the GPIO (this is built-in). As mentioned in the tutorial, you can run a shell script like so:
echo 1 >/sys/class/gpio/unexport echo 2 >/sys/class/gpio/unexport echo 3 >/sys/class/gpio/unexport echo 11 >/sys/class/gpio/unexport echo 18 >/sys/class/gpio/unexport echo 19 >/sys/class/gpio/unexport echo 0 >/sys/class/gpio/unexport
Replace the pin #s with the GPIOs you want to free up for reuse.
Gabe
-
What am I missing? I get
echo 1 >/sys/class/gpio/unexport
-bash: echo: write error: Invalid argument
-
@Peter-Carr remove the space before and after ">" so:
echo 1>/sys/class/gpio/unexport
-
@Venet Removing the space converts that line to something completely different (and not working for the purpose)!
echo 1 >/sys/class/gpio/unexport
writes a letter
1
into the file /sys/class/gpio/unexport (which frees gpio1 for re-use, and that's what @Gabriel-Ongpauco wanted to show).whereas in
echo 1>/sys/class/gpio/unexport
the
1>
without a space means redirecting standard output (2>
would mean redirecting standard error output), and is eqivalent to justecho >/sys/class/gpio/unexport
(because both
1>
and>
mean redirecting standard output)
What this does is writing an empty line to /sys/class/gpio/unexport (with no effect regarding gpios at all)@Peter-Carr The "write error: Invalid argument" is because gpio1 was not exported in the first place, thus could not be unexported.
-
@luz you are right of course! I was trying for hours to setup arduino-dock (v.1) on my Omega2+ and getting that same error. Mistyped it without the spaces and that error disappeared. As expected arduino-dock still did not work