ฉันรู้ว่าคุณสามารถรับอุณหภูมิโดยใช้เครื่องมือvcgencmdแต่ฉันสงสัยว่ามี API ใดที่ฉันสามารถใช้ใน C เพื่อให้ได้อุณหภูมิโดยทางโปรแกรมโดยไม่ต้องอ่าน stdout ของ vcgencmd?
ฉันรู้ว่าคุณสามารถรับอุณหภูมิโดยใช้เครื่องมือvcgencmdแต่ฉันสงสัยว่ามี API ใดที่ฉันสามารถใช้ใน C เพื่อให้ได้อุณหภูมิโดยทางโปรแกรมโดยไม่ต้องอ่าน stdout ของ vcgencmd?
คำตอบ:
คุณสามารถอ่านไฟล์/sys/class/thermal/thermal_zone0/temp
ได้ตามที่ระบุไว้ในคำตอบนี้ cat
มีมันเกี่ยวกับการวัดจากบรรทัดคำสั่งและไฟล์จะถูกอ่านด้วย แต่คุณควรจะสามารถเปิดไฟล์ใน C อุณหภูมิจะถูกส่งกลับในหน่วยองศาเซลเซียสและเป็นตัวเลข ASCII อาจจะเป็นเช่นนี้ไม่ได้ทดสอบ :)
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()
และใช้read()
แทน YMMV นอกจากนี้ยังมี "libsysfs" แต่มันก็ถูกปล่อยปละละเลยและเคอร์เนล devs ได้บอกผู้คนอย่างชัดเจนให้อยู่ห่างจากมัน
ดังที่ @Frepa กล่าวมีโปรแกรมควบคุมความร้อนเคอร์เนลสำหรับ RaspberryPi ในขณะนี้ดังนั้นวิธีที่ง่ายที่สุดคือการใช้งาน เท่าที่ฉันรู้นั่นไม่ใช่วิธีการvgencmd
ทำงาน มันสามารถอ่านอุณหภูมิได้แม้กระทั่งก่อนที่ไดรเวอร์เคอร์เนลความร้อนจะมีอยู่ มันใช้กลไกการสื่อสารพิเศษที่มีอยู่ใน RaspberryPi ที่เรียกว่าmailbox
เพื่อสื่อสารกับ VideoCore OS ที่ทำงานบน GPU มันเป็นเอกสารบางส่วนที่นี่