รับอุณหภูมิของ PI โดยใช้ C


11

ฉันรู้ว่าคุณสามารถรับอุณหภูมิโดยใช้เครื่องมือvcgencmdแต่ฉันสงสัยว่ามี API ใดที่ฉันสามารถใช้ใน C เพื่อให้ได้อุณหภูมิโดยทางโปรแกรมโดยไม่ต้องอ่าน stdout ของ vcgencmd?


คุณอาจพบว่ามีประโยชน์นี้: mjmwired.net/kernel/Documentation/sysfs-rules.txt
goldilocks

คำตอบ:


13

คุณสามารถอ่านไฟล์/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);

ประสบการณ์ทำให้ฉันเชื่อว่าอินเตอร์เฟสสตรีมระดับสูงไม่น่าเชื่อถือในไฟล์ proc / sys และคุณควรใช้open()และใช้read()แทน YMMV นอกจากนี้ยังมี "libsysfs" แต่มันก็ถูกปล่อยปละละเลยและเคอร์เนล devs ได้บอกผู้คนอย่างชัดเจนให้อยู่ห่างจากมัน
goldilocks

@goldilocks ที่น่าสนใจ! ฉันไม่ได้รู้เรื่องนี้คิดว่ามันจะทำงานเหมือนไฟล์ใด ๆ คุณอาจจะพูดถูก
Frepa

2

ดังที่ @Frepa กล่าวมีโปรแกรมควบคุมความร้อนเคอร์เนลสำหรับ RaspberryPi ในขณะนี้ดังนั้นวิธีที่ง่ายที่สุดคือการใช้งาน เท่าที่ฉันรู้นั่นไม่ใช่วิธีการvgencmdทำงาน มันสามารถอ่านอุณหภูมิได้แม้กระทั่งก่อนที่ไดรเวอร์เคอร์เนลความร้อนจะมีอยู่ มันใช้กลไกการสื่อสารพิเศษที่มีอยู่ใน RaspberryPi ที่เรียกว่าmailboxเพื่อสื่อสารกับ VideoCore OS ที่ทำงานบน GPU มันเป็นเอกสารบางส่วนที่นี่


เบเกอรี่ Pi แน่นอนมีวัสดุกล่องจดหมายบางมากขึ้น แต่มีมันจะใช้เฉพาะสำหรับกราฟิก
Frepa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.