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

development

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 сможет найти что то интересное для себя. Подключайтесь и экспериментируйте.

arduino   development   galileo   raspberry pi   wyliodrin

Pebble Time Round

12 октября 2015, 23:48

Компания Pebble представила новую линейку наручных часов Pebble Time Round. Да, да, экран теперь ввиде круга. Изменениям подвергся только экран, теперь он имеет разрешение 180х180 пикселей, против 144х168 в предыдущих версиях, но срезан по углам. В остальном железная начинка ничем не отличается от версии Pebble Time.

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

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

Space Time состоят из одного окна и двух слоев, вся адаптация заключается в изменении размеров элементов на экране. Так как предыдущие модели часов имели прямоугольный экран, планеты двигались по эллиптической орбите, то в Pebble Time Round это будет лишним. Но в круглых часах немного увеличилось разрешение экрана, и чтобы его полностью заполнить, немного увеличим размеры планет.

Начиная с версии SDK 3.6 появились новые условные директивы PBL_ROUND, PBL_RECT и PBL_PLATFORM_CHALK. Кстати, новая платформа получила имя «Chalk», что в переводе означает мел. Также
С помощью новых директив можно быстро адаптировать свое приложение под все платформы.
Например различие классических Pebble от моделей с цветным экраном:

#ifdef PBL_BW
    // Pebble с ч/б экраном
#elif PBL_COLOR
    // С цветным экраном
#endif

Или различие Pebble с квадратным и круглым экраном:

#ifdef PBL_RECT
    // Квадратный экран
#elif PBL_ROUND
    // Круглый экран
#endif

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

Но различия в этом не заканчиваются, на портале разработчика можно прочитать про новые элементы доступные для Pebble Time Round, с помощью которых можно создавать приложения не похожие на приложения для моделей с квадратными экранами. После релиза версии 3.6 появятся много новых и интересных приложений в appstore для Pebble Time Round.

development   Pebble

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

Pebble Time уже сегодня

8 марта 2015, 0:03

Ребята из Pebble пришли на Kickstarter с новой версией часов и бьют все рекорды.
А все потому, что в новой версии появится цветной экран, но это еще не все, технические характеристики в сравнении с прошлой версией:

Pebble/Pebble Steel Pebble Time
Имя платформы Aplite Basalt
Частоты CPU 64 MHz 100MHz
Макс. размер ресурсов 96 kb 256 kb
Макс. размер приложения 24 kb 64 kb
Разрешение дисплея 144 х 168 144 х 168
Количество цветов дисплея 2 64
Сенсоры акселерометр, компас акселерометр, компас
Кнопки 4 4
Микрофон нет есть
Порт для зарядки только питание питание + аксессуары

О них можно говорить много, но сегодня я покажу, как уже сейчас начать разрабатывать приложение и как отлаживать на эмуляторе.
Все действия ниже описанные были проделаны с SDK 3.0 dp2 в Mac OS X 10.10.2.

Установка

Установка Pebble SDK

Установим Xcode Command Line Tools если еще не установлено.
Скачаем последнюю версию SDK.
Создадим директорию куда хотим установить все необходимые утилиты и распакуем в нее скаченный SDK:

mkdir ~/pebble-dev/
cd ~/pebble-dev/
tar -zxf ~/Downloads/PebbleSDK-3.0-dp2.tar.gz

Добавим путь к SDK в настройки терминала:

echo 'export PATH=~/pebble-dev/PebbleSDK-3.0-dp2/bin:$PATH' >> ~/.bash_profile
. ~/.bash_profile

Установка Pebble ARM тулчейна

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

cd ~/pebble-dev/PebbleSDK-3.0-dp2
tar -zxf ~/Downloads/arm-cs-tools-macos-universal-static.tar.gz

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

Для конвертирования шрифтов и изображений в ресурсы Pebble необходимы Python библиотеки. Для их установки нам потребуется менеджер пакетов pip.
Установим pip и virtualenv:

sudo easy_install pip
sudo pip install virtualenv

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

cd ~/pebble-dev/PebbleSDK-3.0-dp2
virtualenv --no-site-packages .env
source .env/bin/activate
CFLAGS="" pip install -r requirements.txt
deactivate

Установка freetype

Для работы со шрифтами необходима библиотека freetype, для ее установки нам потребуется менеджер пакетов homebrew.

brew update
brew install freetype

Установка эмулятора

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

brew install boost-python
brew install glib
brew install pixman

Разработка

Введение

Мы установили Pebble SDK и все необходимые утилиты и библиотеки, теперь перейдем к написанию приложения.
Если вы уже представляете с чего начать и работали с SDK 2.x, то прочитайте о нововведениях в SDK 3.0 или если вы в этом деле новичок, то прочитайте статьи о самых основных моментах.

Работа с эмулятором

Первые модели Pebble Time своих владельцев достигнут еще не скоро, а ознакомиться со всеми возможностями уже не терпится, поэтому будем использовать эмулятор.
Скачаем какой нибудь пример приложения с github использующий возможности SDK 3.0.

git clone https://github.com/pebble-hacks/isotime
cd isotime

Скомпилируем приложение:

pebble build

И запустим на эмуляторе Pebble Time:

pebble install --emulator basalt

Ключ эмулятора basalt как раз и указывает какую версию часов запускать, если указать aplite, то запуститься эмулятор Pebble предыдущей версии.
После запуска эмулятора мы можем наблюдать, как будет выглядеть наше приложение:

После такого трудно устоять и не пойти на Kickstarter и не заказать новые часы.
В новых часах гораздо больше идей можно будет реализовать и приложения будут выглядеть намного приятнее, чем текущие черно-белые.
Ждем Pebble Time!

development   Pebble