Lorsque j'ai essayé de gérer le capteur de température / humidité AM2302 sur le Raspberry Pi avec Python en utilisant le package Adafruit_DHT, une erreur s'est produite. L'erreur au moment de l'installation peut être évitée en effectuant une opération simple, mais comme l'erreur qui se produit lors de l'acquisition effective de la température et de l'humidité n'a pas pu être évitée, l'erreur a également été évitée.
J'ai confirmé que l'erreur s'est produite à la fois sur Raspberry Pi 4B / 4GB sur l'ordinateur, Raspbian lite sur le système d'exploitation et Ubuntu Server 20.04, et Python a installé 3.8.5 à partir de pyenv et utilisé Pipenv.
Tout d'abord, j'essaye d'installer à partir de pipenv docilement.
$ pipenv install Adafruit_DHT
Installing Adafruit_DHT…
Error: An error occurred while installing Adafruit_DHT!
Error text: Collecting adafruit_dht
Downloading Adafruit_DHT-1.4.0.tar.gz (15 kB)
Building wheels for collected packages: adafruit-dht
Building wheel for adafruit-dht (setup.py): started
Building wheel for adafruit-dht (setup.py): finished with status 'error'
Running setup.py clean for adafruit-dht
Failed to build adafruit-dht
Installing collected packages: adafruit-dht
Running setup.py install for adafruit-dht: started
Running setup.py install for adafruit-dht: finished with status 'error'
---
Omission
---
✘ Installation Failed
J'ai pu confirmer que l'installation a échoué. Ensuite, supprimez le package de GitHub, ajoutez un paramètre indiquant que l'appareil que vous utilisez est un Raspberry Pi et installez-le manuellement.
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ python setup.py install --force-pi
Finished processing dependencies for Adafruit-DHT==1.4.0
Après avoir confirmé que l'installation est terminée, obtenons la température.
$python
>>> import Adafruit_DHT
>>> Adafruit_DHT.read_retry(Adafruit_DHT.AM2302, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/pi/Projects/temp/Adafruit_Python_DHT/Adafruit_DHT/common.py", line 94, in read_retry
humidity, temperature = read(sensor, pin, platform)
File "/home/pi/Projects/temp/Adafruit_Python_DHT/Adafruit_DHT/common.py", line 80, in read
platform = get_platform()
File "/home/pi/Projects/temp/Adafruit_Python_DHT/Adafruit_DHT/common.py", line 63, in get_platform
raise RuntimeError('Unknown platform.')
RuntimeError: Unknown platform.
Sera.
Arrêtez d'utiliser Python 3.8.5 et utilisez Python 3.7.9.
Adafruit_DHT est une bibliothèque Python standard pour détecter la plate-forme sur laquelle le package est utilisé [Obtenir des informations de la plate-forme](https://github.com/adafruit/Adafruit_Python_DHT/blob/master/Adafruit_DHT/platform_detect.py # L47). Un des \ ('armv7l-with-debian', 'armv7l-with-ubuntu', 'armv7l-with-glibc2.4', 'armv7l-with-arch' ) dans les informations spécifiques à la plate-forme obtenues ici Fonctionne si est inclus. À ce moment, la différence entre les sorties de Python 3.8.5 et Python 3.7.9 était la cause de l'erreur.
Vous trouverez ci-dessous les informations de plate-forme réelles sur Raspbian lite confirmées à partir de chaque version de Python.
Python3.8.5
>>> import platform
>>> platforfm.platform()
'Linux-5.4.51-v7l+-armv7l-with-glibc2.28'
Python3.7.9
>>> import platform
>>> platforfm.platform()
'Linux-5.4.51-v7l+-armv7l-with-debian-10.4'
En premier lieu, l'appareil appelé Beaglebone Black est destiné à la détection, et Raspberry Pi est [un autre endroit](https://github.com/adafruit/Adafruit_Python_DHT/blob/master/Adafruit_DHT/platform_detect.py# Je vise la détection avec L40). Cependant, l'élément matériel répertorié dans / proc / cpuinfo sur le Raspberry Pi 4B est BCM2711, qui n'est pas détecté par ce programme.
En premier lieu, le référentiel Adafruit_Python_DHT était actuellement archivé et non maintenu. À la place, il existe un référentiel Adafruit_CircuitPython_DHT, veuillez donc l'utiliser. Pour cette personne, Python 3.8.5 pourrait être installé sans aucun problème. Cependant, veuillez noter que vous ne pouvez pas l'importer sauf si vous installez également le package RPi.GPIO lors de son utilisation. Pour l'utiliser, installez Adafruit_CircuitPython_DHT et RPi.GPIO avec la commande ci-dessous.
$ pip install adafruit-circuitpython-dht RPi.GPIO
Voici le cas lorsque vous essayez d'importer adafruit-circuitpython-dht dans un environnement où RPI.GPIO n'est pas installé.
>>> import adafruit_dht
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/pi/temp/.venv/lib/python3.8/site-packages/adafruit_dht.py", line 34, in <module>
from digitalio import DigitalInOut, Pull, Direction
File "/home/pi/temp/.venv/lib/python3.8/site-packages/digitalio.py", line 15, in <module>
from adafruit_blinka.microcontroller.bcm283x.pin import Pin
File "/home/pi/temp/.venv/lib/python3.8/site-packages/adafruit_blinka/microcontroller/bcm283x/pin.py", line 2, in <module>
import RPi.GPIO as GPIO
ModuleNotFoundError: No module named 'RPi'
Recommended Posts