J'ai créé un script python à l'aide de la bibliothèque RPi.GPIO. Je dois l'exécuter sans root mais j'obtiens cette erreur en l'exécutant avec "python ./script.py":
No access to /dev/mem. Try running as root!
J'ai lu dans de nombreux endroits que vous n'avez plus besoin de root avec la dernière version de la bibliothèque, mais le message d'erreur s'affiche toujours après la mise à jour. La version que j'ai est RPi.GPIO 0.6.0a3
Voici le code:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18,GPIO.OUT)
print "LED on"
GPIO.output(18,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(18,GPIO.LOW)
Et l'erreur complète:
pi@raspberrypi ~/Desktop/python $ python ./sensors.py
Traceback (most recent call last):
File "./sensors.py", line 5, in <module>
GPIO.setup(18,GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
Quand je le lance en tant que root, cela fonctionne.
Réponses:
Vous devez probablement exécuter Raspbian pour utiliser RPi.GPIO en tant qu’utilisateur non root, mais probablement aussi jessie.
/dev/gpiomem
Existe- t- il? Si tel est le cas, RPi.GPIO doit utiliser ce périphérique pour accéder au GPIO. Si/dev/gpiomem
n'existe pas, essayez:pour vous assurer que vous utilisez un noyau récent, et
pour vous assurer que vous utilisez un RPi.GPIO récent.
Vous devrez également vous assurer que vous êtes membre du
gpio
groupe:Édité pour ajouter
Le système Raspbian semble être dans un état de flux. Je ne sais pas s'il s'agit d'un problème de Raspbian ou (plus probablement) de Raspberrypi.org.
Vérifiez que / dev / gpiomem dispose des autorisations appropriées.
Si ce n'est pas le cas, définissez les autorisations appropriées comme suit
la source
id
pour répertorier les groupes actuels de votre shell. Si cegpio
n'est pas le cas, connectez-vous à nouveau ou redémarrez.J'ai eu ce problème tout de suite et résolu juste avec ceci:
Avec cela, l'utilisateur "my_new_user" est ajouté au groupe gpio. Tous les utilisateurs du groupe gpio peuvent donc accéder aux broches GPIO.
la source
Je peux répondre à cela.
Cela change le propriétaire et le groupe de
/dev/mem
àroot
etgpio
respectivement.puis donne au groupe un accès en lecture / écriture à cet
/dev/mem
objet.L'
/dev/mem
objet est essentiellement la totalité de l'espace mémoire sur le système. Cela signifie qu’à présent, le groupegpio
et tous ses membres peuvent lire et écrire dans l’espace mémoire.Maintenant, dans la mémoire, il y a beaucoup de choses, y compris les registres de la CPU. Lorsque vous basculez les broches GPIO, vous modifiez un bit dans l'un de ces registres. Le kicker est, vous devez être sûr de le faire correctement ou de mauvaises choses peuvent arriver à votre système.
Pour aider à protéger tout l’espace mémoire, les puissances à mapper se limitent aux parties de la mémoire sur lesquelles nous devons travailler avec les bits GPIO
/dev/gpiomem
. Cela masque / protège le reste de l’espace mémoire et ne permet qu’un accès aux bits GPIO. Cela permet d'accéder aux adresses de la mémoire GPIO et interdit toute autre partie de la mémoire, telle que la mémoire en cours d'utilisation par d'autres programmes.En fait, cela bloque les protections de sécurité et de stabilité du système pour permettre l'accès au contenu GPIO, ainsi qu'au reste de la mémoire, mais uniquement aux utilisateurs du groupe GPIO, dont Pi est membre.
À l’avenir, des pilotes tels que la
bcm2835
bibliothèquewiringPi
seront mis à jour davantage (certaines mises à jour sont déjà en cours) et les applications construites à partir de ces outils seront mises à jour, puis dans le futur, espérons-le disparaître.Jusque-là, vous avez deux choix: ouvrir le
/dev/mem
groupe togpio
en lecture / écriture ou exécuter en tant que root, qui dispose d'une écriture complète en lecture/dev/mem
.J'espère que cela a du sens.
Il y a encore de nombreux problèmes pour lesquels vous devez toujours vous lancer
root
. Par exemple, en utilisant lenode-red-contrib-dht-sensor
module, qui dépend denode-dht-sensor
, qui dépend de BCM2835. Il commet des fautes/dev/gpiomem
car il y a encore des bugs dansnode-dht-sensor
ou dans/dev/gpiomem
la manière dont ils travaillent ensemble. Je ne sais pas quel est le cas, mais ça finira par être réglé. Lorsque le BCM2835 s'exécute en tant que "non-root" et qu'il/dev/gpiomem
existe, il essaie de l'utiliser/dev/gpiomem
au lieu de/dev/mem
, de sorte que l'ouverture du/dev/mem
groupe àgpio
n'aide pas. Bummer.la source
Utilisez simplement la commande suivante dans le terminal:
la source
/dev/mem
et/dev/gpiomem
?/dev/mem
à/dev/gpiomem
cela vous obtenir la même autorisation d'utilisation/dev/mem
que vous avez avec/dev/gpiomem
Aucune des réponses ci-dessus n'inclut toutes les étapes. Je devais effectuer les étapes suivantes pour obtenir un accès non root aux broches GPIO. Je devais créer un nouveau groupe, ajouter mon utilisateur à ce groupe, puis modifier les autorisations (comme dans les messages précédents).
la source
Si vous construisez dans geany, changez simplement les commandes de construction.
Les commandes Java à compiler doivent être
et la commande execute devrait être
la source