Реле Tianbo - ресурс 10 млн переключений
РадиоЛоцман - Все об электронике

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne

myDevices Cayenne

Журнал РАДИОЛОЦМАН, январь 2017

Вадим Колесник, г. Тирасполь

Захватывающая, простая и быстрая разработка полнофункциональных устройств Интернета вещей на Arduino с помощью облачного сервиса myDevices Cayenne

Пленочные конденсаторы Hongfa для построения AC/DC- и DC/AC-преобразователей

Общие сведения

myDevices занимается разработкой программного обеспечения и приложений в сфере Интернета вещей (IoT) и является подразделением компании Avanquest. myDevices Cayenne [1] – первое drag-and-drop приложение и облачный сервис для упрощенной разработки IoT проектов на Raspberry Pi.

На портале Радиолоцман недавно публиковалась обзорная статья [2], в которой я постарался раскрыть основные преимущества и возможности системы при работе на одноплатном компьютере Raspberry Pi (RPi). Но проект Cayenne постоянно развивается, разработчики, опираясь на пожелания пользователей, постепенно добавляют новые функции, устраняют недочеты и ошибки.

На момент подготовки материала по RPi myDevices сообщила о сотрудничестве с Arduino и запустила в тестовом режиме аналогичную систему для разработки IoT устройств на платформе Arduino (Рисунок 1). Я принимал участие в ее тестировании и хочу поделиться своими впечатлениями от работы системы Cayenne, но уже на другой платформе. Как и предыдущая, эта статья тоже носит ознакомительный характер, но может быть полезной как новичкам, так и профессионалам в разработке IoT устройств.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 1. Cayenne – платформа и облачный сервис для упрощенного
создания IoT проектов на Raspberry Pi и Arduino.

Разработка IoT устройств на Arduino и Raspberry Pi при работе с Cayenne принципиально отличается. Относительно Raspberry Pi платформу Cayenne можно считать визуальной средой разработки: мы физически подключаем различную периферию к плате Raspberry Pi и дальше работаем только в онлайн среде Cayenne (настраиваем виджеты, обработку данных, пишем алгоритмы автоматизации).

Применительно к Arduino приборная панель Cayenne (dashboard) – это лишь набор виджетов и элементов управления, которые визуализируют получаемые данные от датчиков и передают пользовательские данные для управления тем или иным исполнительным устройствам. Непосредственно работа с датчиками, исполнительными устройствами, дополнительной периферией (например, дисплеем, второй клавиатурой), обработка условий автоматизации возлагается на микроконтроллер. Другими словами, все сводится к стандартной разработке устройства на Arduino; пользователь сам пишет программный код, но с интеграцией в проект гибких IoT функций Cayenne. Именно в этом и заключается, на мой взгляд, основное преимущество Cayenne: вы можете подключать к системе любые датчики и исполнительные механизмы, не ограничиваясь списком поддерживаемой периферии.

Пользовательский интерфейс и подготовка к работе

Что касается пользовательского интерфейса системы, ее настроек, способов управления и виджетов на приборной панели, все это остается аналогичным системе на Raspberry Pi, конечно, за исключением отдельных уникальных элементов, присущих последней (например, удаленный рабочий стол, состояние памяти, загрузка процессора). Поэтому для понимания основ работы с системой я рекомендую ознакомиться со статей [2]. Вся информация в статье актуальна как для веб-интерфейса системы, так и для интерфейса мобильного приложения. Также в статье указан список поддерживаемой периферии.

Далее в статье речь будет идти только о связке Arduino и Cayenne.

Для разработки IoT устройства или приложения нам необходимо:

  • Иметь свою учетную запись на сервисе myDevices Cayenne (можно использовать существующую);
  • Установить интегрированную среду разработки Arduino IDE;
  • Добавить библиотеку функций Cayenne в Arduino IDE;
  • Настроить Arduino IDE: выбрать плату и COM-порт, к которому она подключена;
  • Подключить к Arduino плату расширения Ethernet Shield или Wi-Fi Shield (или использовать плату Arduino с интегрированным сетевым интерфейсом).

Думаю, процесс установки среды разработки Arduino IDE, а также выбор платы и порта в пояснениях не нуждаются, и мы перейдем к основному.

Библиотека Cayenne для Arduino просто и быстро устанавливается с помощью менеджера библиотек (Рисунок 2).

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 2. Установка библиотеки Cayenne в Arduino IDE.

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

Выполнив подготовительные операции, настройку среды разработки и подключение платы расширения Ethernet Shield, можно приступать к разработке IoT устройства.

Плату Arduino подключаем к компьютеру по USB, в Ethernet Shield подключаем сетевой кабель локальной сети. В Интернет-браузере выполняем вход в учетную запись Cayenne, и в панели управления добавляем новое устройство – Arduino. Далее выбираем тип платы, способ подключения к сети Интернет (достаточно много вариантов), обращаем внимание на уникальный ключ авторизации для нашего устройства и ждем подключения платы Arduino к Cayenne (Рисунок 3).

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 3. Заключительный этап подключения Arduino к серверу Cayenne.

Ключ авторизации – уникальный идентификатор устройства, который указывается как константа в исходном коде:

// Ключ авторизации Cayenne для устройства
char token[] = "640c9oedi4";

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

Как только вы выберете способ подключения к сети, появится окно с исходным кодом программы микроконтроллера. Это необходимый минимум для подключения устройства к облачному сервису. Обратите внимание, что в тексте программы уже указан ваш ключ авторизации и подключена библиотека, соответствующая выбранному способу подключения к сети (Рисунок 4). Копируем этот код в Arduino IDE, компилируем и загружаем в плату. Если все было правильно настроено, то в панели управления Cayenne появится новое активное устройство и приборная панель, где вы сможете теперь добавлять виджеты и элементы управления. Более того, уже на данном этапе вы можете удаленно контролировать доступные цифровые и аналоговые порты Arduino, не написав ни единой строчки кода – на приборной панели добавьте виджет-кнопку, укажите тип порта (цифровой), его имя на плате и сохраните виджет. Теперь, нажимая на кнопку в браузере, вы будете менять логическое состояние порта. Также просто, добавив соответствующие виджеты, можно управлять ШИМ выходами, получать «сырые» данные с аналоговых входов Arduino, контролировать состояние цифровых входов.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 4. Окно с минимальным скетчем для загрузки в плату. Код автоматически
генерируется Cayenne и содержит необходимые параметры
для подключения к серверу.

Разработка устройства на конкретном примере

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

  • Плата Arduino Uno;
  • Плата расширения Ethernet Shield на контролере WIZnet W5100;
  • Датчик температуры DS18B20;
  • Фоторезистор;
  • Терморезистор;
  • Несколько светодиодов;
  • OLED дисплей на контроллере SSD1306.

OLED дисплей я добавил только для демонстрации возможностей работы Arduino с различной периферией, однако на этапе отладки использовал его для отображения значений датчиков.

Принципиальная схема подключения датчиков и светодиодов к Arduino изображена на Рисунке 5.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 5. Принципиальная схема подключения периферии к плате Arduino.

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

Думаю, что по поводу подключения светодиодов, цифрового датчика температуры и OLED дисплея вопросов не возникнет. Аналоговые датчики освещенности и температуры подключаются к аналоговым входам по схеме резистивного делителя. При этом для цепи терморезистора необходимо знать точное сопротивление резистора R6, это значение будет использоваться в исходном коде при расчетах.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 6. Установка виджета для управления светодиодом D1.

После подключения указанных на схеме элементов напишем скетч Arduino, а затем установим необходимые виджеты на приборной панели Cayenne. На данный момент в плату Arduino уже загружен минимальный скетч и плата определяется в приборной панели Cayenne. Как я сказал выше, на этом этапе мы можем добавить виджеты  для управления светодиодами D1, D2, а также получать «сырые» данные с аналоговых входов, к которым подключены терморезистор и фоторезистор (Рисунки 6, 7).

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 7. Установка виджета для отображения «сырых» данных с аналогового
входа Arduino, к которому подключен фоторезистор.

Не написав ни единой строчки кода Arduino, мы уже получили простую систему удаленного управления и контроля (Рисунок 8).

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 8. На базе минимального скетча Cayenne позволяет контролировать цифровые
порты ввода/вывода и получать данные с аналоговых входов Arduino.

Чтобы задействовать цифровые датчики температуры, терморезистор, ШИМ, например, для управления светодиодом D2, потребуется дописать минимальный скетч. Для начала определим необходимые библиотеки.

#include < CayenneEthernet.h>            // используем плату расширения Ethernet Shield
#include < CayenneTemperature.h>         // функции преобразования данных с терморезистора
#include < OneWire.h>                    // функции для работы с шиной 1-Wire
#include < DallasTemperature.h>          // функции для работы с цифровыми датчиками температуры
#include < Arduino.h>                    // стандартные константы и переменные языка Arduino
#include < U8x8lib.h>                    // библиотека для работы с OLED дисплеем в текстовом режиме
#include < Wire.h>                       // поддержка аппаратного интерфейса I2C

Далее необходимо определить так называемые виртуальные каналы ввода/вывода (Virtual Pins), а также, если необходимо, реальные порты для управления дополнительной периферией.

#define VIRTUAL_PIN_1 V0            // виртуальный канал для датчика DS18B20
#define VIRTUAL_PIN_2 V1            // -- для термистора
#define VIRTUAL_PIN_3 V2            // -- для светодиода D2, по этому каналу будем принимать данные о значении ШИМ
#define LED2_PWM 6                  // реальный порт Arduino, к которому подключен светодиод D2

Виртуальные каналы – это не цифровые, и не аналоговые порты ввода/вывода. При непосредственном чтении аналоговых входов пользователь получает данные с 10-разрядного АЦП микроконтроллера. Значения, возвращаемые АЦП, лежат в диапазоне 0 … 1023 и пропорциональны напряжению на этом входе. Другими словами, если подключить датчик температуры к аналоговому входу Arduino, вы не получите значение температуры, потребуются дополнительные преобразования и математические вычисления для преобразования напряжения – температура.

Для упрощения преобразования данных, их форматирования и обработки предназначены виртуальные каналы. Это довольно мощный инструмент, который используется для обмена между Arduino и Cayenne, а также для простого форматирования данных с целью их понятной визуализации на приборной доске. Запомните, виртуальные каналы не имеют физических параметров.

Cayenne.virtualWrite(V1, 123)      // передача целочисленного значения по виртуальному каналу V1
Cayenne.virtualWrite(V2, 12.34)    // передача значений с плавающей запятой по виртуальному каналу V2

Например, выполнив чтение аналогового датчика температуры, мы сможем одной строчкой кода преобразовать значение в градусы Цельсия и передать это значение на приборную панель. Кроме того, виртуальные каналы позволяют реализовать управление любой периферией, подключенной к аналоговым или цифровым портам Arduino, без необходимости писать какой-либо дополнительный код. На данный момент поддерживаются два типа данных, с которым работают виртуальные каналы: целочисленные (integer) и с плавающей точкой (float). В дальнейшем планируется поддержка символьных типов и массивов. На приборной панели по виртуальному каналу можно подключить и настроить по типу принимаемых данных пользовательский виджет для визуализации.

Далее в скетче инициализируем цифровой датчик температуры, шину 1-Wire, определяем порт подключения терморезистора и значение резистора R6 в Омах, а также проверяем ключ авторизации:

// Цифровой порт, к которому будут подключаться датчики DS18B20. Не использовать порты Arduino 0 и 1 (Rx/Tx).
const int ds18b20_Pin = 2;
// Аналоговый порт, к которому подключен терморезистор.
const int thermistorPin = 0;
// Сопротивление постоянного резистора (9 кОм), включен последовательно с терморезистором на землю.
const float resistance = 9000;
// Ключ авторизации Cayenne. Найти его можно в веб-интерфейсе Cayenne на вкладке настройки устройства.
char token[] = "640c9oedi4";
OneWire oneWire(ds18b20_Pin);
DallasTemperature sensors(&oneWire);
Thermistor thermistor(thermistorPin, resistance);

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

В разделе инициализации мы укажем следующие функции:

void setup()
{
Cayenne.begin(token);                      // подключение к Cayenne с указанным ключом авторизации
sensors.begin();                           // инициализация цифровых датчиков температуры
u8x8.begin();                              // инициализация и вывод текстовой информации на OLED дисплей

u8x8.setPowerSave(0);
u8x8.setFont(u8x8_font_torussansbold8_r);
u8x8.drawString(2,0,"Cayenne Test");
u8x8.drawString(1,2,"System Running");
}

В основном цикле программы у нас будет лишь одна функция:

void loop()
{
Cayenne.run();
}

Весь обмен данными с приборной панелью Cayenne выполняется с помощью нескольких функций:

CAYENNE_IN (Virtual_Pin) – определяет функцию, которая вызывается при получении устройством обновленных данных по виртуальному каналу от сервера Cayenne.

CAYENNE_OUT (Virtual_Pin) – определяет функцию, которая вызывается, когда требуется отправить обновленные данные с устройства на сервер Cayenne.

CAYENNE_CONNECTED () – функция выполняется каждый раз при подключении устройства к серверу Cayenne. В общем случае, эта функция используется для синхронизации.

Cayenne.syncAll() – функция, формирующая запрос на сервер Cayenne для синхронизации всех виджетов. Состояние аналоговых и цифровых портов Arduino будет восстановлено, и каждый виртуальный канал сгенерирует событие CAYENNE_IN.

Cayenne.syncVirtual(Virtual_Pin) – синхронизация по указанному виртуальному каналу. Как результат выполнения, вызывается соответствующая обработчик CAYENNE_IN.

В моей схеме светодиод D2 подключен к цифровому порту D6 Arduino. У этого порта есть альтернативная функция – выход ШИМ. Для реализации удаленного управления этими светодиодом в режиме ШИМ нам потребуется принимать данные с приборной панели. Для этого напишем функцию, которая будет выполняться при обновлении данных по виртуальному каналу V2:

CAYENNE_IN(V2)
{
// получаем данные о значении ШИМ с приборной панели (слайдер)
int PWMValue = getValue.asInt();           // значение в диапазоне 0 - 1023
analogWrite(LED2_PWM, PWMValue / 4);       // для ШИМ значение должно быть в диапазоне 0 - 255
}

Теперь на приборной панели добавим виджет «Слайдер» с именем LED_2 ШИМ (PWM), и в его настройках укажем, что он работает через виртуальный канал 2 (Рисунок 9).

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 9. Установка и настройка слайдера на приборной панели Cayenne
для ШИМ управления светодиодом D2.

Загрузив скетч в плату, вы сможете с помощью слайдера на приборной панели Cayenne управлять яркостью свечения светодиода D2. Все очень быстро и просто…

Далее также просто настроить передачу данных с цифрового и аналогового датчиков температуры на сервер Cayenne. Для этого в наш скетч добавляем следующую функцию:

CAYENNE_OUT(V0)
{
sensors.requestTemperatures();           // получаем данные с цифровых датчиков температуры.
    // преобразуем данные с терморезистора, форматируем их и отправляем на сервер по виртуальному каналу V1
Cayenne.celsiusWrite(V1, thermistor.getCelsius());
    //форматируем данные с цифрового датчика температуры и отправляем их на сервер по виртуальному каналу V0
Cayenne.celsiusWrite(V0, sensors.getTempCByIndex(0));
}

Благодаря использованию виртуальных каналов, весь код функции для передачи абсолютно разных данных состоит из двух строк. На приборной панели добавляем виджеты для датчика температуры DS18B20 и терморезистора (они есть готовые в панели управления). Настраиваем виджеты, загружаем скетч в плату, и… готово (Рисунки 10а, 10б)!

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 10. Вид приборной панели Cayenne для управления Arduino (датчики температуры,
освещенности, управление светодиодом D1, ШИМ управление светодиодом D2):
а) веб-интерфейс, б) мобильное приложение.

Не забывайте, что эти же функции управления и контроля доступны и в мобильном приложении. Все виджеты, установленные в веб-интерфейсе, вы увидите в мобильном приложении (Рисунок 10б).

Внешний вид устройства с подключенной периферией показан на Рисунке 11.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 11. Arduino Uno с Ethernet Shield и подключенной периферией
работает с сервером Cayenne.

Возможность разработки беспроводных IoT устройств

Вы могли заметить, что на некоторых скриншотах видна моя панель управления, где помимо Arduino Uno и Raspberry Pi имеется устройство с именем ESP8266-1. Все верно, это дополнительное устройство на хорошо известном модуле ESP-12 (ESP8266), которое подключено к серверу Cayenne по Wi-Fi и имеет свою отдельную приборную панель (Рисунки 12а, 12б). Такое устройство представляет собой беспроводной узел контроля и управления. К модулю подключены два светодиода (один подключен к выходу ШИМ ESP8266) и цифровой датчик температуры DS18B20.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 12. Приборная панель для беспроводного устройства на модуле ESP-12:
а) веб-интерфейс, б) мобильное приложение.

Благодаря поддержке ядра ESP8266 средой Arduino IDE, реализация беспроводных IoT устройств с Cayenne ничем не отличается от разработки на Arduino. Другими словами, любой модуль на чипе ESP8266 – это Arduino плата с Wi-Fi интерфейсом. Для данного Wi-Fi модуля мы пишем подобный скетч, используем те же библиотеки для работы с датчиками, нам доступны цифровые и аналоговые порты ввода/вывода. По этому модулю накоплено огромное количество информации, различной документации и наработок.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 13. Схема подключения светодиодов и датчика температуры
к модулю ESP-12 (ESP8266).

Схема подключения периферии к модулю ESP8266 изображена на Рисунке 13. Я использовал отдельный модуль ESP-12 без переходной платы с интегрированной схемой питания и интерфейсом программирования, что сильно усложнило работу на этапе загрузки скетча. Оптимальным вариантом будет использование готового модуля типа nodeMCU v3, который выполнен в форм-факторе Arduino и имеет схему согласования интерфейса. (Очень важный момент при программировании модуля). Внешний вид модуля с подключенными светодиодами и датчиком температуры показан на Рисунке 14.

Разработка IoT устройств на Arduino с помощью сервиса myDevices Cayenne
Рисунок 14. Беспроводное IoT устройство на Wi-Fi модуле ESP-12,
подключенное к серверу Cayenne.

Что касается подключения к серверу Cayenne и обмена данными, то здесь все как для Arduino. Сохраняются все понятия о виртуальных каналах, используются те же функции, также используется уникальный ключ авторизации. Отличие лишь на этапе подключения модуля к сети Интернет.

Для подключения устройства на модуле ESP8266 мы действуем аналогично добавлению любой платы Arduino и доходим до этапа ожидания подключения устройства к Cayenne, где будет сгенерирован минимальный скетч.

Этот скетч нам необходимо изменить. Подключаем следующие библиотеки:

#include "CayenneDefines.h"        // константы и переменные Cayenne
#include "BlynkSimpleEsp8266.h"    // функции для работы с ESP8266
#include "CayenneWiFiClient.h"     // функции для реализации Wi-Fi клиента

Теперь нужно указать ключ авторизации и параметры беспроводной сети, к которой будет подключаться Wi-Fi модуль (SSID и пароль):

char token[] = "3yj62u9ogi";
char ssid[] = "Network_SSID";      // SSID и пароль для вашей Wi-Fi сети.
char password[] = "Network_Password";

В секции инициализации добавляем строку:

Cayenne.begin(token, ssid, password);

Компилируем, загружаем в модуль (занимает больше времени, чем загрузка в плату Arduino), ожидаем подключения и активации нового устройства в приборной панели Cayenne. Далее, все как для Arduino: добавляем функции для работы с датчиками и портами ввода/вывода, добавляем виджеты на приборную панель. Просто восхитительно, не правда ли?!

Заключение

По итогам работы с Cayenne на Raspberry Pi и Arduino я могу однозначно сказать, что Raspberry Pi не стоит использовать для разработки устройств Интернета вещей, даже с Cayenne. Чего не скажешь об Arduino – несмотря на ограниченность ресурсов, отсутствие многозадачности, низкую вычислительная мощность (хотя, это спорный момент, учитывая характеристики новых плат Arduino на процессорах ARM), она идеально подходит для разработки простых IoT устройств и систем домашней автоматизации.

Кроме того, в этом контексте основным преимуществом Arduino, как я заметил выше, является возможность самостоятельной разработки устройства, изучения схемотехники, написания кода, развития навыков программирования, несмотря на доводы профессиональных программистов, что с Arduino нельзя научиться программировать. Возможно, но… По отношению к Arduino платформа Cayenne обеспечивает только графический пользовательский интерфейс и некоторые упрощения в обработке данных. Все остальное вы должны разработать самостоятельно, включая первичную обработку данных от сенсоров, подсистему обработки событий, а также условия и алгоритмы автоматизации. А теперь добавьте к Arduino простоту разработки беспроводных IoT устройств на Wi-Fi модуле ESP8266 и уже официальную поддержку (хоть и не полную) новейшего чипа ESP32, имеющего на борту богатую периферию, и перед вами открываются огромные возможности для разработки принципиально новых устройств и привлечения к этому процессу не только любителей, но и профессионалов.

На момент подготовки статьи Cayenne не сообщала об официальной поддержке модулей на чипе ESP8266. Изначально это заслуга сообщества – любители и инженеры, которые работают или используют Arduino IDE и знают о поддержке ESP8266, с помощью библиотек Cayenne смогли подключить и использовать ESP8266. Но даже в то время на форумах сообщества Cayenne уже можно было ознакомиться с большим количеством различных проектов беспроводных IoT устройств.

После длительного тестирования своих устройств на Arduino и ESP8266 могу сказать, что последнее работает очень стабильно. Несколько низкая надежность Arduino с Ethernet Shield обусловлена известной проблемой зависания контроллера W5100, однако существует несколько способов ее решения, как аппаратных, так и программных. Могу предположить, что это не касается плат Arduino с интегрированными Ethernet или Wi-Fi.

С момента подготовки статьи по Raspberry Pi и Cayenne прошло не так уж много времени, но новых функций и поддерживаемой периферии стало значительно больше. Помимо наличия огромного выбора различных плат расширения, датчиков и исполнительных устройств, соответствующих библиотек, проектов и примеров для Arduino, теперь в Cayenne пользователям доступны устройства, сети и сервисы LoRa, библиотеки поддержки сетевого протокола MQTT для Arduino, C, C++, mBed, библиотеки для работы с MQTT брокером mosquito. Однозначно, для разработки устройств Интернета вещей и систем домашней автоматизации на Arduino я бы рекомендовал сервисы Cayenne.

Ссылки

Материалы по теме

Загрузки

  1. Архив с исходными кодами (скетч) для Arduino Uno и ESP-12 - скачать
Спортивное компьютерное кресло TopChairs Cayenne зеленое предназначено для долгой работы или игры за компьютером на даче, дома, а также в офисах....
Фильтр салона для а/м VW Touareg/Porsche Cayenne -2010 Riginal240 ₽
Оптулс
Россия
4032 JTC Натяжитель цепи ГРМ PORSCHE Cayenne 4.5/4.8 AUDI Q7 пневматический4 100 ₽
Энтеро
Россия, Белоруссия, Казахстан
Cayenne зеленое12 990 ₽
Akcel
Весь мир
CAYENNE BATTERY (CAYENNE BATTERY)по запросу
Электронные компоненты. Скидки, кэшбэк и бесплатная доставка от ТМ Электроникс
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя