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?
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?
Câu trả lời:
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);
open()
và 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ó.
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 vgencmd
là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 .