Значение температуры один из важнейших параметров в автоматизации бытовых приборов и умного дома. На микрокомпьютере Orange Pi организовать контроль температуры очень просто.

Допустим, нам достаточно отслеживать 28 уровней температуры. Для этого нам нужен датчик температуры и индикатор. В Orange Pi PC 2 есть встроенный датчик температуры и 28 GPIO ножек на разъеме 40 pin к которым мы подключим 28 светодиодов выстроенных в линию. Задача с другими сходными данными (измерение с более высокой точностью, использование любого другого датчика) может быть решена примерно так же.

Напишем программу контроля температуры на плате:

#!/bin/bash

## gpio0 PA0 pin 13
echo  0 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio0/direction
## gpio1 PA1 pin11
echo  1 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio1/direction
## gpio2 PA2 pin22
echo  2 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio2/direction
## gpio3 PA3 pin15
echo  3 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio3/direction
## gpio6 PA6 pin7
echo  6 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio6/direction
## gpio7 PA7 pin29
echo  7 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio7/direction
## gpio8 PA8 pin31
echo  8 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio8/direction
## gpio9 PA9 pin33
echo  9 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio9/direction
## gpio10 PA10 pin35
echo  10 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio10/direction
## gpio11 PA11 pin5
echo  11 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio11/direction
## gpio12 PA12 pin3
echo  12 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio12/direction
## gpio13 PA13 pin24
echo  13 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio13/direction
## gpio14 PA14 pin23
echo  14 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio14/direction
## gpio15 PA15 pin19
echo  15 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio15/direction
## gpio16 PA16 pin21
echo  16 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio16/direction
## gpio18 PA18 pin28
echo  18 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio18/direction
## gpio19 PA19 pin27
echo  19 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio19/direction
## gpio21 PA21 pin26
echo  21 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio21/direction
## gpio68 PC4 pin16
echo  68 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio68/direction
## gpio69 PC5 pin8
echo  69 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio69/direction
## gpio70 PC6 pin10
echo  70 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio70/direction
## gpio71 PC7 pin18
echo  71 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio71/direction
## gpio107 PD11 pin37
echo  107 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio107/direction
## gpio110 PD14 pin12
echo  110 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio110/direction
## gpio198 PG6 pin38
echo  198 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio198/direction
## gpio199 PG7 pin40
echo  199 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio199/direction
## gpio200 PG8 pin32
echo  200 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio200/direction
## gpio201 PG9 pin36
echo  201 > /sys/class/gpio/export
echo  out > /sys/class/gpio/gpio201/direction

while true
do
  temp=`cat /sys/class/thermal/thermal_zone0/temp`
  if [[ $temp -gt 26000 ]]
    then
      echo 1 > /sys/class/gpio/gpio0/value
    else
      echo 0 > /sys/class/gpio/gpio0/value
  fi
  if [[ $temp -gt 28000 ]]
    then
      echo 1 > /sys/class/gpio/gpio1/value
    else
      echo 0 > /sys/class/gpio/gpio1/value
  fi
  if [[ $temp -gt 30000 ]]
    then
      echo 1 > /sys/class/gpio/gpio2/value
    else
      echo 0 > /sys/class/gpio/gpio2/value
  fi
  if [[ $temp -gt 32000 ]]
    then
      echo 1 > /sys/class/gpio/gpio3/value
    else
      echo 0 > /sys/class/gpio/gpio3/value
  fi
  if [[ $temp -gt 34000 ]]
    then
      echo 1 > /sys/class/gpio/gpio6/value
    else
      echo 0 > /sys/class/gpio/gpio6/value
  fi
  if [[ $temp -gt 36000 ]]
    then
      echo 1 > /sys/class/gpio/gpio7/value
    else
      echo 0 > /sys/class/gpio/gpio7/value
  fi
  if [[ $temp -gt 38000 ]]
    then
      echo 1 > /sys/class/gpio/gpio8/value
    else
      echo 0 > /sys/class/gpio/gpio8/value
  fi
  if [[ $temp -gt 40000 ]]
    then
      echo 1 > /sys/class/gpio/gpio9/value
    else
      echo 0 > /sys/class/gpio/gpio9/value
  fi
  if [[ $temp -gt 42000 ]]
    then
      echo 1 > /sys/class/gpio/gpio10/value
    else
      echo 0 > /sys/class/gpio/gpio10/value
  fi
  if [[ $temp -gt 44000 ]]
    then
      echo 1 > /sys/class/gpio/gpio11/value
    else
      echo 0 > /sys/class/gpio/gpio11/value
  fi
  if [[ $temp -gt 46000 ]]
    then
      echo 1 > /sys/class/gpio/gpio12/value
    else
      echo 0 > /sys/class/gpio/gpio12/value
  fi
  if [[ $temp -gt 48000 ]]
    then
      echo 1 > /sys/class/gpio/gpio13/value
    else
      echo 0 > /sys/class/gpio/gpio13/value
  fi
  if [[ $temp -gt 50000 ]]
    then
      echo 1 > /sys/class/gpio/gpio14/value
    else
      echo 0 > /sys/class/gpio/gpio14/value
  fi
  if [[ $temp -gt 52000 ]]
    then
      echo 1 > /sys/class/gpio/gpio15/value
    else
      echo 0 > /sys/class/gpio/gpio15/value
  fi
  if [[ $temp -gt 54000 ]]
    then
      echo 1 > /sys/class/gpio/gpio16/value
    else
      echo 0 > /sys/class/gpio/gpio16/value
  fi
  if [[ $temp -gt 56000 ]]
    then
      echo 1 > /sys/class/gpio/gpio18/value
    else
      echo 0 > /sys/class/gpio/gpio18/value
  fi
  if [[ $temp -gt 58000 ]]
    then
      echo 1 > /sys/class/gpio/gpio19/value
    else
      echo 0 > /sys/class/gpio/gpio19/value
  fi
  if [[ $temp -gt 60000 ]]
    then
      echo 1 > /sys/class/gpio/gpio21/value
    else
      echo 0 > /sys/class/gpio/gpio21/value
  fi
  if [[ $temp -gt 62000 ]]
    then
      echo 1 > /sys/class/gpio/gpio68/value
    else
      echo 0 > /sys/class/gpio/gpio68/value
  fi
  if [[ $temp -gt 64000 ]]
    then
      echo 1 > /sys/class/gpio/gpio69/value
    else
      echo 0 > /sys/class/gpio/gpio69/value
  fi
  if [[ $temp -gt 66000 ]]
    then
      echo 1 > /sys/class/gpio/gpio70/value
    else
      echo 0 > /sys/class/gpio/gpio70/value
  fi
  if [[ $temp -gt 68000 ]]
    then
      echo 1 > /sys/class/gpio/gpio71/value
    else
      echo 0 > /sys/class/gpio/gpio71/value
  fi
  if [[ $temp -gt 70000 ]]
    then
      echo 1 > /sys/class/gpio/gpio107/value
    else
      echo 0 > /sys/class/gpio/gpio107/value
  fi
  if [[ $temp -gt 72000 ]]
    then
      echo 1 > /sys/class/gpio/gpio110/value
    else
      echo 0 > /sys/class/gpio/gpio110/value
  fi
  if [[ $temp -gt 74000 ]]
    then
      echo 1 > /sys/class/gpio/gpio198/value
    else
      echo 0 > /sys/class/gpio/gpio198/value
  fi
  if [[ $temp -gt 76000 ]]
    then
      echo 1 > /sys/class/gpio/gpio199/value
    else
      echo 0 > /sys/class/gpio/gpio199/value
  fi
  if [[ $temp -gt 78000 ]]
    then
      echo 1 > /sys/class/gpio/gpio200/value
    else
      echo 0 > /sys/class/gpio/gpio200/value
  fi
  if [[ $temp -gt 80000 ]]
    then
      echo 1 > /sys/class/gpio/gpio201/value
    else
      echo 0 > /sys/class/gpio/gpio201/value
  fi
  sleep 0.5
done

Обратите внимание, в первой половине программы, где происходит инициализация GPIO, имеются комментарии, которые помогут Вам подключить светодиоды к плате Orange Pi. Аноды светодиодов подключайте к GPIO разъему, а катоды светодиодов через резистор в 1 кОм подключите к общему проводу.

Дайте программе права на выполнение и запускайте ее от суперпользователя.

root@orangepipc2:/home/dior# ./thermometer &

По ссылке на Youtub Вы можете посмотреть видео с нашим градусником из Orange Pi.