Estoy tratando de usar un DHT21 con un Lamobo R1 , también conocido como Banana PI R1 para leer la temperatura y la humedad, con Armbian/Jessie y un kernel 4.5.2. Un Lamobo R1 es básicamente una placa A20 compatible con raspberry pi, con un bus raspberry pi 2 compatible invertido.
Lo configuré en GPIO5, pin raspberry compatible 24, WirinPi 5, pin físico 18, según una tabla aquí , más los pines GND y +5V.
Traté de leer la temperatura y la humedad con y sin la resistencia recomendada. Si bien la lectura de la temperatura es buena, y también está corroborada por un sensor DS18b20 conectado a GPIO2, la humedad siempre está al 99,9 %.
He instalado la biblioteca compatible con WiringPi del repositorio de WiringBP.
Sin embargo, al usar, por ejemplo , DHT21-AM2301 o lol_dht22 , siempre obtuve la salida de humedad como 99.9% o 99.90%.
Un módulo kernel personalizado para este chip, am2301 , simplemente cuelga la máquina.
Lo que he encontrado hasta ahora es:
¿Alguien tiene algo más que agregar?
Notas adicionales según comentarios:
la salida de
gpio readall
es
+----------+-Rev3-+------+--------+------+-------+
| wiringPi | GPIO | Phys | Name | Mode | Value |
+----------+------+------+--------+------+-------+
| 0 | 17 | 11 | GPIO 0 | IN | Low |
| 1 | 18 | 12 | GPIO 1 | IN | High |
| 2 | 27 | 13 | GPIO 2 | IN | Low |
| 3 | 22 | 15 | GPIO 3 | IN | Low |
| 4 | 23 | 16 | GPIO 4 | IN | Low |
| 5 | 24 | 18 | GPIO 5 | OUT | High |
| 6 | 25 | 22 | GPIO 6 | IN | Low |
| 7 | 4 | 7 | GPIO 7 | IN | Low |
| 8 | 2 | 3 | SDA | ALT5 | High |
| 9 | 3 | 5 | SCL | ALT5 | High |
| 10 | 8 | 24 | CE0 | IN | Low |
| 11 | 7 | 26 | CE1 | IN | Low |
| 12 | 10 | 19 | MOSI | ALT5 | Low |
| 13 | 9 | 21 | MISO | ALT5 | Low |
| 14 | 11 | 23 | SCLK | ALT5 | Low |
| 15 | 14 | 8 | TxD | ALT0 | Low |
| 16 | 15 | 10 | RxD | ALT0 | Low |
| 17 | 28 | 3 | GPIO 8 | IN | Low |
| 18 | 29 | 4 | GPIO 9 | ALT4 | Low |
| 19 | 30 | 5 | GPIO10 | OUT | High |
| 20 | 31 | 6 | GPIO11 | ALT4 | Low |
+----------+------+------+--------+------+-------+
Según la hoja de datos , los tiempos de DHT21 son más cortos con 3,3 V y más largos con 5 V. Lo cambié de 5V a 3.3V y ahora lee la humedad correctamente. Parece que mientras que en el Arduino lo tiene a 5V, el lado del software/rutinas para el banana pi y la frambuesa asumen que está conectado a 3.3V.
Del software mencionado en la pregunta, el más rápido parece ser lol_dht22. Estoy usando una versión ligeramente modificada (por mí mismo), que crea archivos en /var/run aproximadamente cada 9-10 segundos para alimentar rpimonitor .
Como @ChrisStratton dice correctamente, este método de sondeo/sondeo de bits es muy propenso a errores, especialmente cuando se ejecuta en la tierra del usuario.
La suma de verificación de protocolo simple implementada por DHT21 claramente no es lo suficientemente fuerte como para eliminar la mayoría de los errores/picos (y hay muchos). Tuve que agregar rutinas de corrección de software simples para ignorar los valores fuera de lugar, e incluso entonces hay picos.
El código para leer los sensores DHT11/DHT21/DHT22 está en mi github https://github.com/ruyrybeyro/rdht .
También tenía dudas sobre si tendría que tocar la configuración del árbol de dispositivos R1, como hice para configurar el protocolo 1Wire con otro sensor de temperatura. No fue necesario.
Como nota adicional, se debe tener cuidado al seguir ciegamente los esquemas en línea. Mientras que el bus Arduino opera a +5V, raspberry y compatibles operan a +3V; aunque aparentemente no es el caso del DHT21 (resalto aparentemente porque el bus R1 es más resistente que el bus rpi), la alimentación aleatoria de dispositivos/sensores de +5 V conectados a un bus rpi puede ser potencialmente perjudicial para su SBC.
La(s) temperatura(s) medida(s) también parece(n) ser consistentemente más alta(s) +2 Celsius de lo que debería ser, y estas inconsistencias de temperatura son reportadas por muchos otros que usan dispositivos DHT21.
La lectura de humedad es del 99,9 % cuando alimenta el sensor con 5 V. Prueba a alimentarlo con 3,3V y funcionará. Probé un circuito con una MCU en 5V y solo cuando el AM2301 está en 3,3V, funciona como se esperaba.
Creo que el problema principal no es sobre el voltaje de la fuente de alimentación o cualquier resistencia adicional. El principal problema es el tiempo de retraso. los documentos dicen
- El período de recolección debe ser: >1.7 segundos.
entonces, si agrega un tiempo de retraso de 5000 ms, mi problema se solucionó. He probado con dht21
chris stratton
chris stratton
chris stratton
Rui F Ribeiro