Nhận nhiệt độ PI bằng C


11

Tôi biết bạn có thể lấy nhiệt độ bằng công cụ vcgencmd nhưng tôi đã tự hỏi liệu có bất kỳ API nào tôi có thể sử dụng trong C để lấy nhiệt độ theo chương trình mà không cần đọc tiêu chuẩn của vcgencmd không?


Bạn có thể thấy điều này hữu ích: mjmwired.net/kernel/Documentation/sysfs-rules.txt
goldilocks

Câu trả lời:


13

Bạn có thể đọc các tập tin /sys/class/thermal/thermal_zone0/temp, như được chỉ định trong câu trả lời này . Có thông tin về việc đo từ dòng lệnh và tệp được đọc với cat. Nhưng bạn chỉ có thể mở tệp bằng C. Nhiệt độ được trả về tính bằng mili độ và dưới dạng số ASCII. Có lẽ như thế này, không được thử nghiệm :)

FILE *temperatureFile;
double T;
temperatureFile = fopen ("/sys/class/thermal/thermal_zone0/temp", "r");
if (temperatureFile == NULL)
  ; //print some message
fscanf (temperatureFile, "%lf", &T);
T /= 1000;
printf ("The temperature is %6.3f C.\n", T);
fclose (temperatureFile);

Kinh nghiệm đã khiến tôi tin rằng giao diện luồng cấp cao không đáng tin cậy trên các tệp Proc / sys, và bạn nên sử dụng open()read()thay vào đó - nhưng YMMV. Cũng có một "libsysfs", nhưng nó đã bị bỏ rơi và các nhà phát triển hạt nhân đã nói rõ ràng với mọi người tránh xa nó.
goldilocks

@goldilocks Thú vị! Tôi không biết điều này, nghĩ rằng nó chỉ hoạt động như bất kỳ tập tin. Bạn rất có thể đúng.
Frepa

2

Như @Frepa đã nói, hiện đã có trình điều khiển nhiệt nhân cho RaspberryPi, vì vậy cách dễ nhất là sử dụng nó. Theo như tôi biết, đó không phải là cách vgencmdlàm việc. Nó có thể đọc nhiệt độ ngay cả trước khi trình điều khiển hạt nhân nhiệt tồn tại. Nó đang sử dụng cơ chế giao tiếp đặc biệt có sẵn trên RaspberryPi được gọi mailboxđể giao tiếp với HĐH VideoCore chạy trên GPU. Nó là một phần tài liệu ở đây .


Các Baking Pi Tất nhiên có một số tài liệu mailbox hơn, tuy nhiên nó chỉ được sử dụng cho đồ họa.
Frepa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.