22 заметки с тегом

raspberry pi

Ctrl + ↑ Позднее

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

Raspberry Pi и OneWire датчики

6 сентября 2015, 14:44

Рассмотрим пример подключения OneWire датчиков к Raspberry Pi на примере датчика температуры DS18B20. Применение этого датчика будет использоваться в следующих статьях.
Для подключения нам понадобиться: плата Raspberry Pi, датчик температуры DS18B20, сопротивление от 4.7 кОм до 10 кОм, макетная плата и немного проводов.
Необходимо собрать схему, как показано на изображении выше, после чего можно включать питание.

Настройка

Подключаемся к плате по SSH, и первым делом необходимо добавить поддержку OneWire в config.txt.
Открываем файл в текстовом редакторе nano:

sudo nano /boot/config.txt

И добавляем в конец файла следующую строчку:

dtoverlay=w1-gpio

Сохраняем изменения в файле и перезагружаем плату sudo reboot.
После перезагрузки приступим к проверке работоспособности датчика, для этого добавим модули w1-gpio и w1-therm в ядро следующими командами:

sudo modprobe w1-gpio
sudo modprobe w1-therm

Перейдем в каталог с устройствами OneWire и посмотрим доступные устройства

cd /sys/bus/w1/devices
ls

Должны увидеть следующие каталоги

pi@raspberrypi /sys/bus/w1/devices $ ls
10-0008019c26d2  w1_bus_master1

Каталог 10-0008019c26d2 и есть уникальный номер датчика DS18B20.
Перейдем в этот каталог

cd 10-0008019c26d2

И выведем содержимое файла w1_slave на экран

cat w1_slave

На экране должны появиться следующие 2 строчки:

pi@raspberrypi /sys/bus/w1/devices/10-0008019c26d2 $ cat w1_slave
2b 00 4b 46 ff ff 02 10 8a : crc=8a YES
2b 00 4b 46 ff ff 02 10 8a t=21625

Если в конце первой строчки будет YES, то в конце второй строчки будет температура в градусах Цельсия умноженная на 1000. В моем случае это 21.652 ℃.

Использование

Для удобства просмотра и дальнейшей обработки температуры удобно использовать скрипт на Python.
Создадим файл temperature.py:

nano temperature.py

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

import os
import glob
import time

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
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f

while True:
    print(read_temp())
    time.sleep(1)

Сохраним перед выходом и запусти командой:

sudo python temperature.py

На экране каждую секунду будет обновляться значение температуры, в первом столбце в градусах Цельсия, во втором в градусах Фаренгейта.

pi@raspberrypi ~ $ sudo python temperature.py
(21.5, 70.7)
(21.562, 70.8116)
(21.625, 70.925)
(22.687, 72.8366)
(23.937, 75.0866)
development   OneWire   raspberry pi

Медиаплеер Slice: установка жесткого диска

2 июня 2015, 22:05

В прошлой статье я выложил фотки распаковки Slice, а сегодня расскажу как установить жесткий диск.

Установка жесткого диска

Для установки подойдет 2.5″ SATA диск, высотой до 9,5 мм. У меня оказался под рукой диск от WD на 1Тб.

Первым делом нужно открутить 4 винта с нижней стороны, шестигранным ключом, который идет в комплекте. Открыв верхнюю крышку, мы увидим еще 4 болта с шляпкой под крестовую отвертку.

Открутив эти 4 болта достаем и переворачиваем плату.

В комплекте находим прокладку из картона под диск. Положим ее на свое место и сверху аккуратно вставляем в разъем жесткий диск.

После чего переворачиваем плату и заворачиваем 4 болта к жесткому диску.

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

Форматирование диска

После установки диска, необходимо подключить Slice к компьютеру с помощью USB — MicroUSB кабеля.
В OS X открыть Дисковую утилиту, выбрать новый диск и отформатировать в ExFAT.
В Windows открыть Мой компьютер, щелкнуть правой кнопкой мыши по новому диску и выбрать пункт меню Форматировать. В появившемся окне выбрать exFAT и нажать старт.
После окончания форматирования, отключаем Slice от компьютера и медиаплеер готов к работе.

raspberry pi   Slice

Медиаплеер Slice: распаковка

24 мая 2015, 13:45

Получил медиа плеер с kickstarter. Прошлым летом ребята из FiveNinjas собрали £227,480 из £90,000. Я стал обладателем расширенной предварительной версии за £114, которая отличается от последующих версий отсутствием жесткого диска.
Отправляют курьерской службой UPS, на руки я получил вот такой черный пакет довольно больших размеров.

Внутри находилась белая коробка плотно обмотанная пленкой с пупырками.

Разорвав пленку показалась коробка с наклейкой Slice Preview Unit. Сбоку наклейка с содержимым внутри. Как видно я заказывал черную версию без жесткого диска.

Открываем коробку и видим письмо от создателей, по установке жесткого диска и первоначальной настройке и включению.

Коробка состоит из двух отсеков. В первом лежат блок питания на 2А с разнообразными вилками, пульт дистанционного управления, внешний usb wi-fi адаптер, hdmi и usb кабели и ключ с болтами для разбора и установки жесткого диска. Во втором отсеке, закрытый со всех сторон материалом, похожим на пенопласт лежит сам плеер.

Slice и все что с ним идет в комплекте.

Сам плеер выглядит очень солидно. Корпус состоит из 2х алюминиевых крышек покрашенных в черный цвет, а между ними по периметру вставлена полоска из матового пластика, за которой располагаются светодиоды.

Крышки между собой прикручены четырьмя болтами с шляпками под шестигранник, в комплекте так же идет ключ.

В следующей части покажу что находится внутри и как установить жесткий диск.

raspberry pi   Slice   unboxing

SDR на Raspberry Pi

15 апреля 2015, 21:34

Несколько статей назад я рассказывал как подключить 2.8″ PiTFT дисплей к Raspberry Pi.
В прошлой статье я рассказал с помощью какого софта можно принимать радио в Mac OS.
Сегодня мы рассмотрим как это легко сделать с Raspberry Pi.
Для этого нам понадобится сама плата Raspberry Pi, 2.8″ PiTFT дисплей с разрешением 320х240 px и usb RTL-SDR приемник.
Для работы PiTFT в качестве автономного дисплея требуется поддержка ядра, в первой части будет рассказано, как установить дисплей, во второй части будут установлены необходимые утилиты для работы приемника.

Установка PiTFT

Есть 2 способа установить дисплей. Первый и самый простой, скачать готовый образ и распаковать его на SD карту. Этот способ может не подойти, если у вас уже есть рабочая система и требуется только добавить поддержку дисплея.
Рассмотрим второй вариант, с установкой вручную.
Добавим репозиторий apt.adafruit.com в список локальных репозиториев и установим необходимый софт.

curl -SLs https://apt.adafruit.com/add | sudo bash
sudo apt-get install -y adafruit-pitft-helper

Укажем тип нашего дисплея: 2.8″ и резистивный тачскрин

sudo adafruit-pitft-helper -t 28r

И перезагрузимся:

sudo reboot

В момент загрузки можно видеть текстовую консоль на экране, для работы X требуется отредактировать файл ~/.profile:

sudo nano ~/.profile

Добавив в него строчку:

export FRAMEBUFFER=/dev/fb1

И после этого добавим автозагрузку X, нужно добавить в файл:

sudo nano /usr/share/X11/xorg.conf.d/99-pitft.conf

Следующее содержимое и сохранить:

Section "Device"
  Identifier "Adafruit PiTFT"
  Driver "fbdev"
  Option "fbdev" "/dev/fb1"
EndSection

Далее необходимо утилитой raspi-config разрешить загрузку рабочего стола или Scratch.
После перезагрузки на экране должен появится привычный рабочий стол Raspbian.

Установка RTL-SDR

Для работы нам потребуются следующие пакеты:

sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev python-numpy git

А также нужно скачать и установить RTL-SDR библиотеку:

cd ~
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
make
sudo make install
sudo ldconfig

И еще потребуется установить обертку библиотеки RTL-SDR для Python:

sudo pip install pyrtlsdr

Весь необходимый софт установили, перейдем к установке утилиты FreqShow (утилита с открытым исходным кодом, написанная на Python) в которой и будем наблюдать за эфиром:

cd ~
git clone https://github.com/adafruit/FreqShow.git
cd FreqShow

Запускается утилита командой:

sudo python freqshow.py

Посмотреть возможности можно на видео.
Единственный и жирный минус всего, это невозможность услышать сам эфир.
Но и из этой ситуации есть выход. С помощью маленькой утилиты rtl_fm из проекта RTL-SDR можно слушать радио, например:

rtl_fm -f 104.7М -M wbfm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE

Подробнее о утилите rtl_fm можно узнать на сайте.
Осталось приобрести аккумулятор большой емкости и можно отправляться подслушивать врага.

ILI9341   PiTFT   raspberry pi   RTL2832   SDR

Подключение PiTFT 2.8″ к Raspberry Pi

2 апреля 2015, 23:54

Сегодня рассмотрим работу Raspberry Pi с резистивным сенсорным дисплеем PiTFT 2.8″ на чипе ILI9341.
Существует 2 способа задействовать этот дисплей: первый, более сложный, пропатчить ядро, запустить X сервер с выводом на дисплей, и второй способ, установить библиотеку для вывода картинок, текста, различных фигур. Второй способ, как более простой для ознакомления и рассмотрим, работу с сенсором в этой статье затронута не будет.
Приступим к установке.

Установка

Необходимо установить необходимые пакеты для работы:

sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip python-imaging python-numpy

Также для работы потребуется библиотека для работы с GPIO:

sudo pip install RPi.GPIO

Теперь приступим к установке самой библиотеки для работы с чипом ILI9341.
Скачиваем репозиторий библиотеки с Github и устанавливаем:

git clone https://github.com/adafruit/Adafruit_Python_ILI9341.git
cd Adafruit_Python_ILI9341
sudo python setup.py install

Использование

Вместе с библиотекой поставляются несколько примеров работы библиотеки. Запустим один из них, для этого зайдем в папку examples и запустим пример:

cd examples
sudo python image.py

После чего вы должны увидеть котика как на картинке выше.
Приведу код этого примера (image.py):

# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola

import Image

import Adafruit_ILI9341 as TFT
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.SPI as SPI

# Raspberry Pi configuration.
DC = 18
RST = 23
SPI_PORT = 0
SPI_DEVICE = 0

# Create TFT LCD display class.
disp = TFT.ILI9341(DC, rst=RST, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=64000000))

# Initialize display.
disp.begin()

# Load an image.
print 'Loading image...'
image = Image.open('cat.jpg')

# Resize the image and rotate it so it's 240x320 pixels.
image = image.rotate(90).resize((240, 320))

# Draw the image on the display hardware.
print 'Drawing image'
disp.display(image)

Как видно из примера, смысл заключается поместить на некий image изображение с котиком и отправить его на дисплей, для работы с image используется библиотека PIL (Python Imaging Library).
В другом примере (shapes.py) рассматривается работа с выводом на экран текста и различных фигур.
Описание работы с библиотекой PIL можно найти на следующем ресурсе.
В следующей статье рассмотрим работу с GPIO.

ILI9341   PiTFT   raspberry pi

Raspberry Pi и WhatsApp

19 марта 2015, 22:28

В прошлый раз мы устанавливали Telegram на Raspberry Pi, сегодня покажу, как с такой же легкостью установить WhatsApp. Приступим.

Установка

Обновляем пакеты:

sudo apt-get update
sudo apt-get upgrade

Устанавливаем необходимые библиотеки:

sudo apt-get install python-dateutil python-setuptools python-dev libevent-dev ncurses-dev

Клонируем репозиторий из github и устанавливаем:

git clone git://github.com/tgalal/yowsup.git
cd yowsup
sudo python setup.py install

На этом процесс установки закончен, следующий не менее важный этап — это регистрация.

Регистрация

Регистрация состоит из 2х шагов. Первый — это запрос регистрационного кода по смс и второй — подтверждение.
Выполним запрос регистрационного кода, для этого напишем:

python yowsup-cli registration --requestcode sms --phone 7xxxxxxxxxx --cc 7 --mcc 250 --mnc 01

где phone: номер телефона на который придем смс,
cc: код страны,
mcc и mnc: мобильный код страны и мобильный код сети можно посмотреть на википедии.
Через некоторое время вам придем смс с кодом в формате xxx-xxx, его нужно ввести для завершения регистрации:

python yowsup-cli registration --register xxx-xxx --phone 7xxxxxxxxxx --cc 7

Если все прошло успешно, то вы должны увидеть следующие строки:

status: ok
kind: free
pw: xxxxxxxxxxxxxxxxxx=
price: 33,00 руб.
price_expiration: 1429453999
currency: RUB
cost: 33.00
expiration: 1450342821
login: 7xxxxxxxxxxx
type: existing

Регистрация завершена, перейдем непосредственно к клиенту.

Использование

Для удобства использования создадим конфигурационный файл, чтобы каждый раз не вводить свой номер телефона и пароль:

nano /home/pi/yowsup/config

И вставим туда код страны, номер телефона и пароль, который мы получили выше:

cc=7
phone=7xxxxxxxxxx
password=xxxxxxxxxxxxxxx=

После чего запустим клиент, используя наш конфиг:

cd /home/pi/yowsup
yowsup-cli demos --yowsup --config config

И увидим следующее:

Чтобы посмотреть полный список команд, наберем /help:

Для логина используем команду /L и видим как состояние с [offline] меняется на [connected].
Теперь можно отправлять сообщения, а также принимать входящие сообщения.
Чтобы отправить сообщение напишем:

/message send 7xxxxxxxxxx "Это сообщение отправлено из Raspberry Pi"

Мы получили аналогичные функции, что и при установке клиента для Telegram.
Надеюсь статья была вам полезна.

raspberry pi   WhatsApp
Ctrl + ↓ Ранее