greetins,Sonde de température ne fonctionne pas
J'ai récemment acheté un capteur d'humidité température & (aosong am2302). Je l'ai accroché à une râpe pi 3 et cela fonctionne comme le charme de la bibliothèque adafruit. Le problème vient quand j'essaie de le faire fonctionner sur une autre carte (décrit here). J'ai utilisé this library pour la lecture gpio. J'ai modifié le fichier de beaglebone pour le mapping gpio et c'est tout. Je cours les tests et ils fonctionnent, donc fondamentalement la lib ressemble à ça fonctionne. Donc après cela, je code le lecteur de capteur et ça ne marche pas et je ne sais pas pourquoi. Après avoir exécuté le lecteur de capteur, si je vérifie le système de fichiers, le fichier gpio est exporté.
Le capteur est installé comme ceci: -Alimentation à 5 V (aussi essayé avec 3.3v) -VCC à GPIO -Au à la masse.
et ici le code
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/wait.h>
#include <sys/time.h>
#include "libsoc_gpio.h" //library for gpio reading
#define MAXTIMINGS 10
#define SILENT 0
int bits[MAXTIMINGS+1],data[5];
int readDHT(int pin,int allowRetry);
int
main(int argc, char **argv)
{ int dhtpin;
if (argc>1)dhtpin=atoi(argv[1]);
else printf("Introduce pin");
if(SILENT < 1) {
printf("Using pin #%d\n", dhtpin);
}
readDHT(dhtpin,5);
return 0;
}
int
readDHT(int pin, int allowRetry)
{
int bitidx=0;
int counter = 0;
int i=0,j=0;
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
gpio *gpio_output = libsoc_gpio_request(pin, LS_SHARED); //export GPIO
if (gpio_output == NULL)
{
fprintf(stderr, "Failed to open GPIO %d\n", pin);
return -1;
}
libsoc_gpio_set_direction(gpio_output, OUTPUT);
if (libsoc_gpio_get_direction(gpio_output) != OUTPUT)
{
fprintf(stderr, "Failed to set direction to OUTPUT\n");
if (gpio_output)
{
libsoc_gpio_free(gpio_output);
}
return -1;
}
libsoc_gpio_set_level(gpio_output, LOW);
libsoc_gpio_set_level(gpio_output, HIGH);
libsoc_gpio_set_direction(gpio_output, INPUT);
/* Wait for pin to drop */
while (libsoc_gpio_get_level(gpio_output) == HIGH)
{
if(counter++>10000){
printf("ERROR: Pin never dropped\n");
return 1;
}
}
if (i<= MAXTIMINGS)
{
counter =0;
while (libsoc_gpio_get_level(gpio_output) == LOW){
if(counter++ == 1000)
break;
}
counter =0;
while(libsoc_gpio_get_level(gpio_output) == HIGH){
if (counter++==1000)
break;
}
bits[bitidx++] = counter;
i++;
}
/* read data */
for (i = 1; i < bitidx; i++) {
data[j/8] <<= 1;
if(bits[i]>200){
data[j/8] |= 1;
}
j++;
}
if(SILENT < 1) {
printf("Data (%d): 0x%x 0x%x 0x%x 0x%x 0x%x\n", j, data[0], data[1], data[2], data[3], data[4]);
}
if ((j >= 39) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF))) {
float f, h;
h = data[0] * 256 + data[1];
h /= 10;
f = (data[2] & 0x7F)* 256 + data[3];
f /= 10.0;
if (data[2] & 0x80) f *= -1;
printf("CTemp: %.1f\nFTemp: %.1f\nHum: %.1f%\n", f, ((f*9)/5)+32, h);
} else if(allowRetry > 0) {
sleep(1);
if(SILENT < 1) {
printf("Error getting information. Retrying\n");
}
return readDHT(pin, --allowRetry);
} else {
if(SILENT < 1) {
printf("Error getting information. Retries exhausted.\n");
}
return 1;
}
return 0;
if (gpio_output)
{
libsoc_gpio_free(gpio_output);
}
/* Check we got all the data and checksum matches */
}
Avec ce code, je reçois "Pin jamais laissé tomber", si la broche ne va jamais à 0 il doesnt les données du rapport. J'ai donc décidé d'essayer avec bash et de voir si la broche tombe à 0. J'ai codé la même chose que sur le code précédent mais dans bash et voir la valeur de la broche (toujours 1, ne pas tomber). En ce qui concerne ce point, je n'ai plus d'options, le capteur fonctionne (ce n'est pas cassé), la librairie fonctionne mais le capteur sur cette machine ne fonctionne pas. Toute idée ou idée sur la façon d'approcher pour trouver une solution?
Merci :)
La question peut être plus approprié pour https://raspberrypi.stackexchange.com/, surtout si elle est sur la différence entre les différents panneaux de framboise. – Lundin
Ce n'est pas un panneau de framboise celui que j'utilise. J'ai utilisé Rasp seulement pour confirmer que le capteur n'était pas cassé. – Lomezno
combien de temps ce signal reste-t-il faible? est-il assez long pour que votre matériel puisse le voir? –