Заметки на полях

Raspberry Pi и Flightradar24

20 апреля 2016, 22:52

Или как получить бесплатно премиум аккаунт на flightradar24.com.
Для этого нам потребуется любая плата Raspberry Pi и USB DVB-T приемник, о котором я уже неоднократно писал.

Принцип работы

Веб-сервис для слежения и получения информации о воздушных судах использует технологию ADS-B. Самолёт, оборудованный ADS-B-транспондером, во время всего полёта Mode [«S»], примерно каждую секунду генерирует и отправляет в эфир (на частоте 1090 МГц) широковещательное, открытое радиосообщение, в котором содержатся актуальные на момент отправления данные — свои точные координаты (определённые с помощью GPS), свою текущую скорость, высоту и другую информацию.
На данный момент ADS-B-транспондерами оборудуются все новые пассажирские и грузовые самолёты, а также частично устанавливаются на старые, и лишь малая часть установлена на военных и частных самолётах.
В конце 2015 года Flightradar24 использует около 9000 ADS-B приёмников, установленных по всему миру, которые получают информацию от самолётов и отправляют её на сервер Flightradar24.

Информация с сайта wikipedia.org.

Установка

Импортируем ключ:

$ gpg --keyserver pgp.mit.edu --recv-keys 40C430F5
$ gpg --armor --export 40C430F5 | sudo apt-key add -

Добавляем URL репозитория в /etc/apt/sources.list:

$ sudo nano /etc/apt/sources.list
deb http://repo.feed.flightradar24.com flightradar24 raspberrypi-stable

Обновляем кэш и устанавливаем fr24feed

$ sudo apt-get update
$ sudo apt-get install fr24feed

Запуск

После установки необходимо запустить fr24feed для ввода e-mail адреса, своих координат, высоты над уровнем моря, а так же выбрать тип приемника и т. д.

$ fr24feed --signup

После ответа на все вопросы на экране должен появиться ключ, на тот случай, если вы захотите переустановить fr24feed, его нужно будет ввести при настройке или добавить в файл /etc/fr24feed.ini.
Завершить этап настройки нужно перезапуском fr24feed:

$ sudo service fr24feed restart

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

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

После успешной настройки вы получите письме на e-mail указанный при регистрации с ключом и назначенным вам радар кодом.

Код радара можно увидеть в детальной информации при клике на самолет, на сайте flightradar24.com.
Если увидите код T-USPP15, знайте, кто предоставил информацию о самолете.

Formula 1

20 марта 2016, 17:59
Formula 1 app for Pebble watch

Вот и начался новый сезон Формулы 1. Прошел первый Гран При Австралии.
Обидно за Квята, что не смог стартовать, но в Бахрейне у него все получиться.

А теперь о приложении Formula 1 для часов Pebble. Уже второй год подряд вы можете наблюдать за результатами гонок, а также видеть оставшееся время до следующего Гран При.

С 2016 сезона приложение очень сильно изменилось, добавилась поддержка часов Pebble Time, появилась Timeline с уведомлениями о начале практики/квалификации/гонки. По сути это переписанное с нуля приложение. Скоро добавиться поддержка Pebble Time Round, и много всяких интересных вещей. В Timeline будут только напоминания о предстоящих событиях и никаких результатов, поэтому не переживайте за спойлеры!!!

Качайте и ставьте лайки.
Скачать

Читаем данные с беспроводного датчика от метеостанции

5 февраля 2016, 8:10

Многие беспроводные устройства для домашнего использования работают на частоте 433 МГц. Это могут быть пульты управления, охранные датчики, брелки автомобильных сигнализаций, беспроводные датчики от метеостанций и многое другое.
Если посмотреть эфир на этой частоте, то можно увидеть обилие передатчиков.

Сегодня поговорим, как с помощью usb радиоприемника на чипе RTL2832 получать данные от беспроводных датчиков метеостанций.

У меня есть метеостанция Ea2 BL508 с одним беспроводным датчиком, попробуем получить с него данные.

Для работы нам потребуется библиотека rtlsdr и приложение rtl_433.
Я пробовал запускать rtl_433 и на Mac OS X 10.11 и на Raspberry Pi с Raspbian GNU/Linux 8 (jessie), в обоих случаях все работало. Перед началом установки необходимо убедиться в наличии libusb1.0 и cmake в системе.

Установка rtl-sdr

git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig

Если все прошло успешно, переходим к следующему шагу.

Установка rtl_433

git clone https://github.com/merbanan/rtl_433.git
cd rtl_433/
mkdir build
cd build
cmake ../
make
sudo make install

Для Raspberry Pi еще потребовалось исключить модуль из ядра:

sudo modprobe -r dvb_usb_rtl28xxu

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

Теперь, когда все установлено и вы знаете модель своего датчика, а модели датчиков поддерживаемые приложением rtl_433 можно посмотреть тут, можно запускать сканер:

rtl_433 -R 31

В ответ получим следующее:

Registering protocol "TFA-Twin-Plus-30.3049 and Ea2 BL999"
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Exact sample rate is: 250000.000414 Hz
[R82XX] PLL not locked!
Sample rate set to 250000.
Bit detection level set to 8000.
Tuner gain set to Auto.
Reading samples in async mode...
Tuned to 433920000 Hz.
2016-01-31 20:14:04 TFA-Twin-Plus-30.3049 Sensor 24: battery OK, channel 1, temperature -2.0 C / 28.4 F, humidity 80%
2016-01-31 20:14:36 TFA-Twin-Plus-30.3049 Sensor 24: battery OK, channel 1, temperature -2.0 C / 28.4 F, humidity 80%

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

Но что делать если у вас нет такого датчика, а вы живете в многоквартирном доме? Не беда, у кого нибудь из ваших соседей присутствует метеостанция с беспроводными датчиками. Попробуем поискать.
Для этого нужно запустить в режиме обнаружения всех известных датчиков:

rtl_433

И вы будете удивлены количеству таких датчиков:

2016-01-31 20:23:37 Prologue sensor 5 159: Channel 4, Battery OK, Button 1, Temperature -42.00 C, Humidity 0 %
2016-01-31 20:24:25 Digitech XC0348 weather station 162: Temperature -3.700000, Humidity 70, Wind direction N, Wind speed 4.400000
2016-01-31 20:25:16 TFA-Twin-Plus-30.3049 Sensor 24: battery OK, channel 1, temperature -2.1 C / 28.2 F, humidity 81%
Sensor        = Temperature and rain event
Device        = 164
Temp          = -2.100000
Rain          = 237
checksum      = 01==01
Received Data = A4 B0 FE ED 01
2016-01-31 20:37:05 Thermo Sensor THN132N: House Code 34, Channel 1, Battery OK, Temperature -2.50 C

Имея в быту приемник на чипе RTL2832 сколько различных применений можно для него найти.
Подписывайтесь и узнаете много всего интересного.

SDR на Android

31 января 2016, 0:07

В продолжении статей SDR на Mac OS X и SDR на Raspberry Pi сегодня поговорим о SDR на Android.

У меня завалялось устройство iMito MX1 с Android 4.4 на борту. К нему я и буду подключать SDR приемник на чипе RTL2832U. Для этого в вашем устройстве должен быть USB-OTG порт и root доступ, если версия Android 3.1 и ниже.

Поискав в Google Play приложения для данной цели, было найдено всего одно, о котором и пойдет речь ниже. Приложение называется SDR Touch и драйвер к нему RTL2832U driver.

Первые впечатления

При запуске приложения необходимо подтвердить доступ драйверу к USB-устройству:

Главный экран приложения. Слева скрыто меню с сохраненными радиостанциями, справа скрыто меню с основными функциями:

Выбор типа сигнала | Поддержка RDS | Шумоподавитель | Ввод частоты | Смещение | Усиление:

Главное окно настроек | Ширина спектра | Квадратурная оцифровка | Шаг настройки (100 Гц — 1 МГц) | Ширина фильтра:

Если у вас слабое устройство, то можно отключить спектр:

Так же есть возможность записывать эфир в файл. Ниже можно прослушать качество записи.

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

Снимаем time-lapse видео на Raspberry Pi

12 декабря 2015, 18:43

Сегодня поговорим, как сделать вот такое time-lapse видео.

А сделать его очень просто. Нам потребуется Raspberry Pi, модуль камеры вот такой и как можно больше по объему карту памяти. От объема карты памяти зависит продолжительность полученного видео. Я использовал карту на 8 Гб и снимал с интервалом раз в минуту, свободного места хватило на 3 суток съемки.
Одна из малинок у меня всегда подключена к камере и выполняет роль веб-камеры. На нее установлено Raspbian и RPi-Cam-Web-Interface. О установке последнего рассказывать не буду, т. к. все подробно описано по ссылке выше. Скажу только, что это очень гибкий инструмент с большими возможностями, с помощью которого можно очень просто создать сложные вещи.

Настройка

Определимся с размеров видео, если хотим HD то выставляем Image res. 1280х720 и нажимаем ОК, для FullHD же выставим 1920х1080 px. Следующий немаловажный параметр — это интервал между снимками, я использовал 60 секунд. В итоге получал за сутки 1440 снимков. Остальные настройки оставил по умолчанию.
Для начала записи time-lapse видео необходимо нажать кнопку timelapse start и дождаться терпения, останавливать этой же кнопкой timelapse stop.

Подготовка

После окончания записи нажимаем кнопку Download Videos and Images и выбираем превью с tima-lapse.

Можно собрать видео прямо на малинке, но не советую, т. к. это выйдет очень долго, лучше выкачать фотки на компьютер. Это можно сделать тоже несколькими способами.
Первый, нажать Download, но в этом случае будет создан архив со всеми фотографиями, а это тоже занимает продолжительное время, и к тому же необходимо в 2 раза больше свободного места на карте памяти. Второй, подключиться с помощью любого удобного способа (FTP, SFTP, SSH, USB Flash, ...) к Raspberry Pi и выкачать все фотографии.
После копирования необходимо запустить скрипт для переименовывания фотографий:

#! /usr/bin/env bash
i=0
for file in *.jpg
do
    printf -v counter "%05d" $i
    mv $file photo$counter.jpg
    i=$((i+1))
done

Создание

Собирать видео из полученных фотографий будем с помощью FFmpeg.
С какой частотой кадров в секунду собирать видео? Тут все зависит от общего количества фотографий, картинки, которую вы хотите получить и устройства на котором это видео смотреть.
Все свои фотографии за 3 дня я собрал в видео с 50 кадрами в секунду, пробовал и 30 и 12, но больше всего понравилось 50. А сделать это можно всего одной строчкой:

ffmpeg -r 50 -i photo%05d.jpg -s hd1080 -vcodec libx264 -crf 25 output.mp4

В результате, у меня кодирование 4500 фотографий заняло всего несколько минут, вы получите файл output.mp4. Мой результат можете посмотреть в начале статьи.
Экспериментируйте и делитесь своими результатами.

Wyliodrin: все что вы хотели знать

6 декабря 2015, 21:57

Wyliodrin — это веб IDE для программирования embedded устройств. Она удобна тем, что поддерживает огромное количество языков программирования C, C/C++, Java, Pascal, Shell Script, Perl, PHP, Objective-C, C#, Python, Javascript, а также программирование с помощью блоков node-red и scratch.
Список поддерживаемых плат тоже впечатляет, это и платы от Intel, Edison и Galileo, Raspberry Pi, Beaglebone Black, Arduino.
Все эксперименты я проводил на Intel Galileo gen 2, опишу что из этого вышло.

Настройка платы

  • Регистрируемся на wyliodrin.com;
  • В личном кабинете добавляем новую плату:
  • Скачиваем образ для SD карты;
  • Распаковываем образ и записываем на SD карту, по инструкции из прошлой статьи;
  • Загружаем файл wyliodrin.json из личного кабинета:
  • Подключаем SD карту к компьютеру и записываем в корень файл wyliodrin.json:
  • Вставляем карту в Galileo, подключаем питание и патчкорд, ждем загрузку системы. В личном кабинете напротив добавленной платы должен появиться статус online:
  • В выпадающем меню выбираем пункты меню Extra Libraries и Update Streams для обновления библиотек, также рекомендуется сделать Update Image, но у меня после этого плата не появлялась онлайн:

После этих действий плата готова к программированию.

Моргаем светодиодом

Как я уже писал выше, нам доступно большое количество языков программирования.
Рассмотрим 2 примера, один на языке С, другой на языке визуального программирования (scratch). В обоих случаях будем моргать бортовым светодиодом подключенным на 13 пин платы.
Приложения создаются очень просто, необходимо нажать кнопку Create new application и в списке Programming Language выбрать New Project под соответствующим заголовком языка или выбрать готовый пример.

Пример на C

Пример на C выглядит похожим на скетчи для Arduino написанные на wiring.

#include <stdio.h>
#include <Wyliodrin.h>

// define the pin number that has the LED connected
#define LED_PIN 13

int main()
{
    printf ("Led on pin %d should blink\n", LED_PIN);

    // Setup the pin in output mode, so that we can write a value on it
    pinMode(LED_PIN, OUTPUT);

    printf ("Press the Stop button to stop\n");
    // Loop forever until, we press stop
    while(1)
    {
        // Write the value 1 (HIGH) on the pin so that the LED turns on
        digitalWrite(LED_PIN, HIGH);
        // wait 500 ms
        delay(500);
        // Write the value 0 (LOW) on the pin so that the LED turns off
        digitalWrite(LED_PIN, LOW);
        // wait 500 ms
        delay(500);
    }
    return 0;
}

Необходимо только указать LED_PIN 13 и можно запускать нажатием на кнопку:

После загрузки и компиляции вы должны увидеть сообщение:

./Led_Blink_-_C                                                                     
Led on pin 13 should blink                                                          
Press the Stop button to stop

И если посмотреть на плату, то светодиод моргает каждые 500 мс. Остановить приложение можно кнопкой Stop.

Пример визуального программирования

Аналогичное поведение светодиода будет выглядеть следующим образом:

В свойствах проекта можно указать в какой язык транслировать приложение:

На языке Python это будет выглядеть следующим образом:

from wyliodrin import *
from time import *

pinMode (13, 1)

print('Led on pin 13 should blink')
print('Press the Stop button to stop')
while True:
  digitalWrite (13, 1)
  sleep ((500)/1000.0)
  digitalWrite (13, 0)
  sleep ((500)/1000.0)

Запускается приложение аналогично.

Не все примеры работают как хотелось бы. Я не смог запустить ни один пример на node.js, надеюсь в будущем поправят. Каждый в wyliodrin сможет найти что то интересное для себя. Подключайтесь и экспериментируйте.

Raspberry Pi и датчик атмосферного давления BMP085

15 ноября 2015, 18:07

В прошлых статьях мы рассматривали как подключить датчик для измерения температуры и датчик измерения влажности. Сегодня расскажу как подключить датчик измерения атмосферного давления BMP085 по интерфейсу I2C.
Для этого нам потребуется любая плата Raspberry Pi с Raspbian Linux, сам датчик атмосферного давления BMP085 или BMP180, макетная плата и немного соединительных проводов.
Подключаем датчик как показано ниже на рисунке:

Настройка I2C

Установим утилиту для работы с I2C:

sudo apt-get update
sudo apt-get install python-smbus
sudo apt-get install i2c-tools

Добавим в ядро поддержку интерфейса I2C. Для этого добавим в файл /etc/modules:

sudo nano /etc/modules

следующие 2 строчки:

i2c-bcm2708
i2c-dev

Если у вас версия ядра 3.18 и выше, то необходимо добавить в файл /boot/config.txt:

sudo nano /boot/config.txt

следующие 2 строчки:

dtparam=i2c1=on
dtparam=i2c_arm=on

После этих изменений перезагружаем плату:

sudo reboot

Проверка I2C

Теперь можем проверить все ли правильно мы настроили. С помощью утилиты i2cdetect можно узнать на какой адрес подключен наш датчик давления.
Если у вас модель с 256 Мб RAM, то с помощью команды:

sudo i2cdetect -y 0

Для всех остальных моделей:

sudo i2cdetect -y 1

В результате мы должны увидеть следующую информацию:

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77

Из этих данных следует, что датчик подключен на адрес 0x77, осталось только опросить из него данные.

Установка Adafruit BMP библиотеки для Python

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

sudo apt-get install git build-essential python-dev

Клонируем репозиторий с исходными данными с Github:

git clone https://github.com/adafruit/Adafruit_Python_BMP.git
cd Adafruit_Python_BMP

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

sudo python setup.py install

В директории examples уже есть пример simpletest.py для работы с датчиком:

#!/usr/bin/python
# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# Can enable debug output by uncommenting:
#import logging
#logging.basicConfig(level=logging.DEBUG)

import Adafruit_BMP.BMP085 as BMP085

# Default constructor will pick a default I2C bus.
#
# For the Raspberry Pi this means you should hook up to the only exposed I2C bus
# from the main GPIO header and the library will figure out the bus number based
# on the Pi's revision.
#
# For the Beaglebone Black the library will assume bus 1 by default, which is
# exposed with SCL = P9_19 and SDA = P9_20.
sensor = BMP085.BMP085()

# Optionally you can override the bus number:
#sensor = BMP085.BMP085(busnum=2)

# You can also optionally change the BMP085 mode to one of BMP085_ULTRALOWPOWER, 
# BMP085_STANDARD, BMP085_HIGHRES, or BMP085_ULTRAHIGHRES.  See the BMP085
# datasheet for more details on the meanings of each mode (accuracy and power
# consumption are primarily the differences).  The default mode is STANDARD.
#sensor = BMP085.BMP085(mode=BMP085.BMP085_ULTRAHIGHRES)

print 'Temp = {0:0.2f} *C'.format(sensor.read_temperature())
print 'Pressure = {0:0.2f} Pa'.format(sensor.read_pressure())
print 'Altitude = {0:0.2f} m'.format(sensor.read_altitude())
print 'Sealevel Pressure = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure())

Датчик показывает температуру воздуха в градусах Цельсия, атмосферное давление в Паскалях и высоту над уровнем моря в метрах (вычисленную из давления).
Чтобы увидеть давление в привычных нам миллиметрах ртутного столба, необходимо разделить давление в Па на 133.332, или заменить строчку с выводом давления, на строчку:

print 'Pressure = {0:0.1f} mm Hg'.format(sensor.read_pressure()/133.322)

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

Ctrl + ↓ Ранее