Activation et vérification de l'I2C sur le Raspberry Pi en utilisant la ligne de commande pour vos propres scripts
La plupart des gens savent que vous pouvez activer le port I2C en utilisant raspi-config.
raspi-config offre également un mode non interactif, dans lequel vous pouvez piloter ses fonctionnalités en utilisant des paramètres de ligne de commande.
Lecture de l'état actuel du port I2C sur le Raspberry Pi
Voici comment lire l'état actuel du port I2C :
sudo raspi-config nonint get_i2c
Cette commande renverra :
- 1 si le port est désactivé
- 0 si le port est activé
Attention : dans ce cas, la logique est un script bash ! "0 signifie vrai ou pas d'erreur, et tous les autres chiffres signifient un code d'erreur". Cela m'a fait perdre la tête au début !
Note : nonint signifie "non interactif".
Activation de l'I2C sur le Raspberry Pi à l'aide d'une simple commande
Encore une fois, en utilisant raspi-config, nous pouvons définir l'état du port I2C. L'utilisation de raspi-config a l'avantage de prendre en charge de nombreuses choses supplémentaires pour vous, et devrait être compatible avec les versions ultérieures. En coulisses, raspi-config éditera /boot/config.txt pour vous, par exemple, et mettra également à jour l'arbre des périphériques.
Voici comment activer le port I2C :
sudo raspi-config nonint do_i2c 0
Encore une fois, notez que 0 signifie vrai / sur ici!
Voici comment désactiver le port I2C :
sudo raspi-config nonint do_i2c 1
1 signifie "faux" ou désactivé à cette fin.
Vérification de l'activation de l'I2C
raspi-config en mode non interactif
comme mentionné ci-dessus, vous pouvez lire l'état du port I2C avec
sudo raspi-config nonint get_i2c
La capture d'écran montre la sortie lorsque le port I2C est activé (0 = vrai).
Nœud du dispositif I2C
Lorsque I2C est activé sur le Raspberry Pi, vous verrez également un nœud /dev pour celui-ci :
ls /dev/i2*
/dev/i2c-1
Note : sur les premiers modèles de Raspberry Pi le port I2C exposé aux utilisateurs était I2C 0, donc on s'attendrait à /dev/i2c-0
La capture d'écran montre que le noeud i2c-1 existe dans /dev
gpio readall
Voici la sortie de
sudo gpio readall
Pour BCM 2 et 3, vous voyez "SDA1" (données I2C) et "SCL1" (horloge I2C) sous Nom. Le mode est également ALT0, ce qui correspond à la fonction I2C sur ces broches particulières (GPIO2, GPIO3).
Notez que BCM 2 et 3 est la numérotation Broadcom, pas le brochage GPIO. La position de la broche GPIO est la première colonne dans "Physical" (broches 3 et 5).
(Vous pouvez vous référer à ce document, page 102(pour un aperçu des différents modes de fonctionnement des broches GPIO, si vous êtes intéressé)
lsmod
lsmod vous montrera les modules I2C qui sont chargés :
lsmod | grep i2c
i2c_bcm2835 16384 0
i2c_dev 20480 0
donc aucune différence avec la désactivation de l'I2C.
i2cdetect :
Un dernier test consiste à lancer i2cdetect pour scanner la plage d'adresses. Pour les Pis modernes, vous devrez spécifier 1 comme port :
sudo i2cdetect -y 1
ceci produira un tableau des périphériques I2C actuellement détectés.
note : comme, dans mon cas, aucun périphérique I2C n'était attaché, aucun périphérique I2C n'apparaît - cette sortie est attendue.
Vérification de la désactivation de l'I2C
raspi-config en mode non interactif
comme mentionné ci-dessus, vous pouvez lire l'état du port I2C avec
sudo raspi-config nonint get_i2c
La capture d'écran montre la sortie lorsque le port I2C est désactivé (1 = faux).
Nœud du dispositif I2C
Lorsque I2C est désactivé sur le Raspberry Pi, vous ne verrez pas de nœud /dev pour lui :
ls /dev/i2*
ls : impossible d'accéder à '/dev/i2*' : Aucun fichier ou répertoire de ce type
La capture d'écran montre qu'aucun nœud i2c n'existe dans /dev.
gpio readall
Voici la sortie de
sudo gpio readall
Pour BCM 2 et 3, vous voyez "SDA1" (données I2C) et "SCL1" (horloge I2C) sous Nom.
Contrairement à la version activée, cependant (voir ci-dessus), le mode est IN, la broche est maintenant une entrée GPIO.
Notez que BCM 2 et 3 est la numérotation Broadcom, pas le brochage GPIO.
(Vous pouvez vous référer à ce document, page 102(pour un aperçu des différents modes de fonctionnement des broches GPIO, si vous êtes intéressé)
lsmod
lsmod vous montrera les modules I2C qui sont chargés :
lsmod | grep i2c
i2c_bcm2835 16384 0
i2c_dev 20480 0
donc aucune différence avec l'activation de l'I2C. ne peut pas utilisez ceci comme un test.
i2cdetect :
Un dernier test consiste à lancer i2cdetect pour scanner la plage d'adresses. Pour les Pis modernes, vous devrez spécifier 1 comme port :
sudo i2cdetect -y 1
si l'I2C est désactivé, une erreur sera affichée :
Erreur : Impossible d'ouvrir le fichier `/dev/i2c-1′ ou `/dev/i2c/1′ : Aucun fichier ou répertoire de ce type
Pièges et problèmes avec le port I2C, FAQ
Un redémarrage est-il nécessaire pour activer le port I2C ?
De mon point de vue, un redémarrage est pas nécessaire. J'ai regardé le code de raspi-config, et ils demandent le redémarrage pour les autres ports (par exemple UART), mais pas pour le port I2C.
De plus, lors de la commutation dynamique de l'état I2C on/off, vous pourrez vérifier que le nœud de périphérique est créé et que la plage I2C peut être scannée à l'aide de i2cdetect sans redémarrage.
Si tout le reste échoue, essayez de redémarrer l'ordinateur - cela pourrait aider à résoudre d'autres problèmes.
Existe-t-il d'autres possibilités pour piloter raspi-config, par exemple pour les ports UART et SPI, pour SSH, etc.
Bien sûr - raspi-config supporte une large gamme d'options différentes en mode non-interactif.
toutes ces commandes sont exécutées en utilisant
raspi-config nonint
Vous pouvez jeter un coup d'œil à la code source de raspi-configou se référer à ce post utile dans le forum Raspberry Pi.
encore une fois, notez la convention (déroutante pour certains développeurs) que 0 = vrai / on et 1 = faux / off
i2cdetect ne peut pas scanner
Si vous obtenez l'erreur suivante :
Erreur : Impossible d'ouvrir le fichier `/dev/i2c-1′ ou `/dev/i2c/1′ : Aucun fichier ou répertoire de ce type
I2C est très probablement désactivé. Essayez de l'activer, en utilisant le mode d'emploi de cet article ou en utilisant raspi-config, puis essayez à nouveau de scanner le port I2C.
Vous pouvez utiliser les méthodes présentées dans cet article pour vérifier l'état du port I2C de votre Raspberry Pi.
gpio readall incapable de déterminer le type de carte
si vous obtenez ce message en essayant d'exécuter gpio readall sur un Raspberry Pi 4 :
13:01:19 pi@Avalon:/dev $ sudo gpio readall
Oups - impossible de déterminer le type de carte... modèle : 17
Vous devez installer une version plus récente de wiringpi de l'auteur (elle n'est pas encore dans les dépôts amont). Cet article décrit comment le faire.
Voici la version courte :
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb