1 заметка с тегом

Adafruit IO

Adafruit IO: что это такое?

17 сентября 2015, 22:39

«Adafruit IO — это система, которая делает данные полезными.» Другими словами, система сбора, хранения и отображения большого количества данных с минимальным знанием языков программирования. Все подробности работы с системой можно прочитать в описании. В прошлой статье мы подключали OneWire датчик DS18b20 к Raspberry Pi. Сегодня рассмотрим пример передачи значений температуры в Adafruit IO и отображение накопленных данных в виде графика.

Настройка Raspberry Pi

Для облегчения обмена данных существует библиотека для Arduino и для таких языков программирования, как: Ruby, Python, Node.js. Так как Python мне ближе, опишу реализацию на этом языке.
Клонируем репозиторий с библиотекой:

git clone https://github.com/adafruit/io-client-python.git
cd io-client-python

Устанавливаем библиотеку:

sudo python setup.py install

Теперь, когда мы установили библиотеку, рассмотрим простой пример передачи и приема данных в Adafruit IO.

# Импортируем библиотеку и создаем инстанс REST клиента
from Adafruit_IO import Client
aio = Client('YOUR ADAFRUIT IO KEY')

# Отправляем значение 100 в канал с названием 'Foo'
aio.send('Foo', 100)

# Получаем последнее значение из канал 'Foo'
data = aio.receive('Foo')
print('Received value: {0}'.format(data.value))

С помощью пары строк можно отправлять с определенным интервалом данные для хранения, например, температуру, влажность, давление, а получать обратно по запросу массив данных и строить графики. Выглядит очень интересно, попробуем отправлять температуру с датчика DS18b20 с интервалом раз в минуту.

Панель управления Adafruit IO

Подготовим канал для хранения значений температуры, для этого в личном кабинете на странице Your Feeds.

В имени канала необходимо указать название Temperatura.
Теперь создадим панель для отображения значений температуры, пройдем на страницу Your Dashboards.

Добавим 2 блока на панель, это график и прогресс бар с текущим отображением значения.

Теперь перейдем в настройки и посмотрим свой ADAFRUIT IO KEY, он потребуется чуть позже.
Перейдем к написанию программы для отправки данных.
Создадим новый файл:

nano temperatura.py

И вставим в него следующее содержимое:

import os
import glob
import time

from Adafruit_IO import Client

aio = Client('YOUR ADAFRUIT IO KEY')

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '10*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
        f = open(device_file, 'r')
        lines = f.readlines()
        f.close()
        return lines

def read_temp():
        lines = read_temp_raw()
        while lines[0].strip()[-3:] != 'YES':
                time.sleep(0.2)
                lines = read_temp_raw()
        equals_pos = lines[1].find('t=')
        if equals_pos != -1:
                temp_string = lines[1][equals_pos+2:]
                temp_c = float(temp_string) / 1000.0
                return temp_c

while True:
        aio.send('Temperatura', read_temp())
        time.sleep(60)

Не забываем вставить свой ключ вместо YOUR ADAFRUIT IO KEY.
Когда все готово, пробуем запустить:

sudo python temperatura.py &

Если все сделали правильно, то на сайте в панели которую мы до этого создали, каждую минуту будет обновляться график и текущее значение температуры.
Так же просто можно добавить множество других параметров для отслеживания, но об этом в следующих статьях.

Adafruit IO   development   OneWire   raspberry pi