Skip to main content
Chemistry LibreTexts

5.9: Monitoring your Raspberry Pi

  • Page ID
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Monitoring Clock Frequency, Voltage and Temperature

    Using the vcgencmd command we can get some useful information about our Raspberry Pis.

    Open Terminal and type the following commands:

    vcgencmd measure_clock core
    vcgencmd measure_volts core
    vcgencmd measure_temp

    The output should look close to this one:

    Figure \(\PageIndex{1}\): Sample output

    According to Raspberry Pi Documentation, the official operating CPU temperature limit is 85°C. When the core temperature reaches 80°C you will see a warning icon with a half-filled thermometer.

    Figure \(\PageIndex{2}\): This icon indicates temperatures between 80°C and 85°C

    At this point various frequencies and sometimes voltages used on the chip (ARM*, GPU**) are reduced. It is necessary to reduce the amount of heat generated and keep the CPU temperature down.

    If the CPU temperature reaches 85°C the ARM cores and the GPU will be throttled back. You will see another warning icon - a fully filled thermometer.

    Figure \(\PageIndex{3}\): This icon indicates temperatures of 85°C and higher


    Using get_throttled Command

    Now let’s look at another parameter we need. In your terminal type the following command and hit enter

    vcgencmd get_throttled

    You should see something like this (the numbers you get might be different)

    Figure \(\PageIndex{4}\): get_throttled command and output


    But what does this mean? Let's check Raspberry Pi Documentation where we can find this information.

    Table \(\PageIndex{1}\): Bit Pattern
    Bit Meaning
    0 Under-voltage detected
    1 Arm frequency capped
    2 Currently throttled
    3 Soft temperature limit active
    16 Under-voltage has occurred
    17 Arm frequency capping has occurred
    18 Throttling has occurred
    19 Soft temperature limit has occurred

    It helped some, but it is still not clear what those numbers mean and how to use this table. We need to look deeper. We are going to use Python to convert this value to an integer (it is a string by default) and then to a binary number.

    1. Open Thonny

    2. Convert the string you have to an integer

    a=int('0x80000', 16) # base set to 16 for hexadecimal
    print ('a =',a)

     In this code 16 is a base we need to use to let Python know that it is a hexadecimal. You can also set the base to 0 and let Python figure it out based on the 0x in the number.

    b=int('0x80000', 0) # base set to 0 for Python to figure it out
    print ('b =',b)

    Both numbers will be the same, so you can choose which way is more convenient for you. We will use the first example.

    3. Now it’s time to convert the number we have to a binary number. Here is the full code:

    a=int('0x80000', 16)
    print ('a =',a)
    binary = bin(a)
    print(a, '=', binary)


    4. The output will differ depending on the original value, but here is the output for our example:

    Figure \(\PageIndex{5}\): Binary number

    To interpret this value we need to number the bits. Remember that numbering starts with zero and goes right to left (ignore 0b):

    Figure \(\PageIndex{6}\): Number the bits

    It is clear now that bit 19 is set (1 means on, 0 means off), which according to Table 1 indicates that Soft Temperature Limit has occurred at some point. The bits chart below was found in one of the Raspberry Pi firmware commit comment on GitHub. It illustrates the meaning of each bit and might be easier to use.

    Figure \(\PageIndex{7}\): Bits Chart

    Soft Temperature Limit was introduced for the Raspberry Pi 3B+ Model. When the temperature reaches 60°C (default Soft Temperature Limit) the clock speed goes from 1.4GHz to 1.2GHz and the operating voltage is also reduced slightly. It is necessary to reduce the rate at which the temperature is increasing. Basically, you are trading a shorter period at 1.4GHz for a longer period at 1.2GHz. This gives you more time before the Raspberry Pi reaches the hard limit of 85°C.


    *ARM - Advanced RISC Machine.

    **GPU - Graphics Processing Unit. 

    Contributors and Attributions

    • Elena Lisitsyna 

    5.9: Monitoring your Raspberry Pi is shared under a not declared license and was authored, remixed, and/or curated by LibreTexts.

    • Was this article helpful?