Датчик влажности Raspberry Pi неопределенная ссылка «pinMode», среди прочего

Мне дали задание найти командную строку для получения данных с датчика влажности DHT11, установленного на Raspberry Pi (первого поколения).

Я следовал указаниям на этой странице и сохранил следующий код в каталоге /wiringPi.

#include <wiringPi.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <stdint.h>  
#define MAX_TIME 85  
#define DHT11PIN 7  
int dht11_val[5]={0,0,0,0,0};  

void dht11_read_val()  
{  
  uint8_t lststate=HIGH;  
  uint8_t counter=0;  
  uint8_t j=0,i;  
  float farenheit;  
  for(i=0;i<5;i++)  
     dht11_val[i]=0;  
  pinMode(DHT11PIN,OUTPUT);  
  digitalWrite(DHT11PIN,LOW);  
  delay(18);  
  digitalWrite(DHT11PIN,HIGH);  
  delayMicroseconds(40);  
  pinMode(DHT11PIN,INPUT);  
  for(i=0;i<MAX_TIME;i++)  
  {  
    counter=0;  
    while(digitalRead(DHT11PIN)==lststate){  
      counter++;  
      delayMicroseconds(1);  
      if(counter==255)  
        break;  
    }  
    lststate=digitalRead(DHT11PIN);  
    if(counter==255)  
       break;  
    // top 3 transistions are ignored  
    if((i>=4)&&(i%2==0)){  
      dht11_val[j/8]<<=1;  
      if(counter>16)  
        dht11_val[j/8]|=1;  
      j++;  
    }  
  }  
  // verify cheksum and print the verified data  
  if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)))  
  {  
    farenheit=dht11_val[2]*9./5.+32;  
    printf("Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F)\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3],farenheit);  
  }  
  else  
    printf("Invalid Data!!\n");  
}  

int main(void)  
{  
  printf("Interfacing Temperature and Humidity Sensor (DHT11) With Raspberry Pi\n");  
  if(wiringPiSetup()==-1)  
    exit(1);  
  while(1)  
  {  
     dht11_read_val();  
     delay(3000);  
  }  
  return 0;  
} 

Во-первых... это Python или просто команды Linux? Если нет, то на каком языке? (Просто любопытно)

Самое главное, когда я компилирую этот код в соответствии с инструкциями на указанной странице, я получаю следующее:

неопределенная ссылка на «pinMode», а также на другие, такие как: «digitalWrite», «delay», «delayMicroseconds», «digitalread» и «wiringPiSetup».

Может ли кто-нибудь указать мне правильное направление?

Возможно, есть более простая команда терминала Linux, которая будет извлекать данные с датчика?


person ProfRose    schedule 25.03.2015    source источник
comment
Язык этого кода — C. Вы, вероятно, не сможете легко получить нужные данные прямо из команды Linux.   -  person J Richard Snape    schedule 25.03.2015
comment
Были ли у вас какие-либо ошибки, когда вы выполняли команду ./build после cd wirePi, следуя инструкциям по вашей ссылке? Мне интересно, неправильно ли построена проводка Pi   -  person J Richard Snape    schedule 25.03.2015
comment
Никаких ошибок с командой ./build, просто примечание в конце: чтобы скомпилировать программы с помощью wirePi, вам нужно добавить: -lwiringPi к вашим строкам компиляции. Чтобы использовать код Gertboard, MaxDetect и т. д. (devLib), вам нужно чтобы также добавить: -lwiringPiDev к вашим строкам компиляции   -  person ProfRose    schedule 25.03.2015
comment
Ваши ошибки не предваряются чем-то, говорящим, что компилятор не может найти wirepi.h ? Возможно, вам придется опубликовать весь вывод компилятора, чтобы диагностировать это. По сути, он говорит вам, что не знает, что это за функции, и они должны быть определены с помощью wireingpi.   -  person J Richard Snape    schedule 25.03.2015
comment
Спасибо. У меня есть член команды старшего уровня. Оказывается, это не первый раз, когда у них возникают проблемы с этой малиной. Спасибо за помощь!   -  person ProfRose    schedule 25.03.2015
comment
Нет проблем, похоже, это может быть время установки свежего Linux (или даже свежего R-Pi) :)   -  person J Richard Snape    schedule 25.03.2015


Ответы (2)


Это код C. Скомпилируйте с помощью команды fisrt line и запустите следующую строку...

gcc yourfilename.c -o outputfile -lwiringPi
./outputfile

.. и вы можете видеть показания влажности и температуры .. (но будьте осторожны с подключением датчика dht11)

Пожалуйста, посетите этот адрес: http://www.uugear.com/portfolio/dht11-humidity-temperature-sensor-module/

person Ismail Gungor    schedule 04.04.2017
comment
большое спасибо. это сработало. но чтобы увидеть результаты, вы должны запустить выходной файл в терминале. - person Valona; 19.07.2018

Во-первых, это язык c, а не python. Функция pinmode является частью разводки pi. Так что, по-видимому, wirepi установлен неправильно.

person rfkortekaas    schedule 25.03.2015
comment
Спасибо. Я уточню у членов моей команды. - person ProfRose; 25.03.2015