Сначала рассмотрим плату Intel Galileo. Intel Galileo — первый Arduino-совместимый микрокомпьютер на платформе Intel. Galileo полностью совместим с картами Arduino как с точки зрения ПО, так и по распиновке (все цифровые и аналоговые разьемы находятся на тех же местах, что и у Arduino Uno R3). Кроме того, Galileo имеет на борту полноразмерный слот mini-PCI Express, порт 100Mb Ethernet, слот Micro-SD, последовательный порт RS-232, USB хост и клиент, а также 8Мб NOR флеш.
Galileo собран на базе одноядерного х86 процессора Intel Quark X1000 с частотой 400 МГц. Процессор имеет 16 Кб L1 кеша и 512 Кб встроенной в чип памяти.
По сравнению с другими картами Arduino, Galileo имеет несколько особенностей, повышающих ее производительность.
- SD слот имеет собственный контроллер, обмен данными осуществляется без участия SPI;
- Ethernet порт также работает без помощи SPI;
- Впервые реализован полноценный PCI Express слот, позволяющий устанавливать карты расширения, такие как Wi-Fi, Bluetooth, 3G и т.д.
Программирование Galileo осуществляется с помощью ПО Arduino. Во флэш прошит минималистический Yocto Linux образ на ucLibc и busybox, который умеет, в основном, загружать и исполнять Arduino скетчи. Если вдруг разработчику захочется поставить более функциональный дистрибутив можно загрузить на microSD-карту образ диска IOT(Internet of Things) devkit для Intel Galileo, в который включены полезные драйверов и библиотеки для разработки на C/C++/Python/Node.js.
Помимо обычных средств программирования, в образе диска IOT devkit для Intel Galileo также содержится одно не совсем обычное. Румынский стартап Wyliodrin (см. рис. 15.1) (http://www.wyliodrin.com) разработал среду программирования на основе Blockly, облегчающая графическое программирование сенсоров/актуаторов на Intel Galileo, Edison и Raspberry Pi. Wyliodrin – это онлайн сервис, который позволяет программировать устройства, загружать программы и управлять устройствами прямо из браузера. При программировании встраиваемых устройств, как правило, необходимо подключить их к компьютеру. С Wyliodrin, устройство должно быть подключено только к Интернету. Если устройство подключено к Интернету, оно может быть в любом месте. Вы можете запрограммировать его, просто войдя в свой аккаунт Wyliodrin. Если у вас есть метеостанция или удаленное устройства автоматизации, вы можете запрограммировать и управлять ими из вашего дома или офиса. Программирование встраиваемых устройств обычно означает изучение C или C ++. С Wyliodrin вы можете выбрать язык, который вы любите от C / C ++, Java, Pascal, Shell Script, Perl, PHP, Objective-C, C #, Python, JavaScript. Если вы не знаете никакого языка программирования, вы можете использовать визуальную среду программирования, где построение программы осуществляется простым перетаскиванием блоков. Сервис позволяет строить графики, для отображения данных, получаемых с устройств.
Сервис Wyliodrin с 24.11.2014 по 24.12.2014 года проводит конкурс проектов, в качестве призов купоны для amazon.com и бесплатные аккаунты в сервисе Wyliodrin. О проекте узнал неделю назад, времени осталось совсем мало, но сделать что-то успел. Предлагаю вашему вниманию проект музыкально светового поздравления. Набираем на клавиатуре подключенной к Arduino/Raspbery Pi нотами в две октавы музыкальный фрагмент, он понотно передается через Интернет и сервис Wyliodrin на плату Intel Galileo, где проигрывается на динамике и кроме того на RGB-ленте воспроизводятся эти ноты в виде цвета.
Raspberry Pi (с Arduino на борту) и плата Intek Galileo подключены к сервису Wyliodrin
Для подключения необходимо создать аккаунт, добавить в профиле плату и загрузить на нее необходимое программное обеспечение.
Первая часть проекта — Отправка сообщений из Raspberry Pi на плату Intel Galileo через сервис Wyliodrin
Плата Arduino Uno подключена к Raspberry Pi
При нажатии на кнопки воспроизводится звук ноты и в последовательный порт /dev/ttyAMA0 выдается сообщение в формате JSON, которое скрипт на python в Raspberry Pi перенаправляет в сервис Wyliodrin плате Intel Galileo.
Скетч на Arduino
#include "Keypad.h" const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); char key; #include SoftwareSerial mySerial(2, 3); // RX, TX const int pinTone = 12; int tones[] = { 3830, 3400, 3038, 2864, 2550, 2272, 2028, 1915, 1700, 1519, 1432, 1275, 1136, 1014 }; void setup() { Serial.begin(9600); Serial.println("Project Wyliodrin"); mySerial.begin(9600); mySerial.println("Start Wylio send"); } void loop() { key = customKeypad.getKey(); if (key) { Serial.println(key); mySerial.print("{note:"); switch(key) { case '1': tone(pinTone,tones[0]);mySerial.print("C");mySerial.print(",id_note:"); mySerial.print("1");mySerial.println("}"); break; case '2': tone(pinTone,tones[1]);mySerial.print("D");mySerial.print(",id_note:"); mySerial.print("2");mySerial.println("}"); break; case '3': tone(pinTone,tones[2]);mySerial.print("E");mySerial.print(",id_note:"); mySerial.print("3");mySerial.println("}"); break; case 'A': tone(pinTone,tones[3]);mySerial.print("F");mySerial.print(",id_note:"); mySerial.print("4");mySerial.println("}"); break; case '4': tone(pinTone,tones[4]);mySerial.print("G");mySerial.print(",id_note:"); mySerial.print("5");mySerial.println("}"); break; case '5': tone(pinTone,tones[5]);mySerial.print("A");mySerial.print(",id_note:"); mySerial.print("6");mySerial.println("}"); break; case '6': tone(pinTone,tones[6]);mySerial.print("B");mySerial.print(",id_note:"); mySerial.print("7");mySerial.println("}"); break; case 'B': noTone(pinTone);mySerial.print("S");mySerial.print(",id_note:"); mySerial.print("8");mySerial.println("}"); break; case '7': tone(pinTone,tones[7]);mySerial.print("c");mySerial.print(",id_note:"); mySerial.print("9");mySerial.println("}"); break; case '8': tone(pinTone,tones[8]);mySerial.print("d");mySerial.print(",id_note:"); mySerial.print("10");mySerial.println("}"); break; case '9': tone(pinTone,tones[9]);mySerial.print("e");mySerial.print(",id_note:"); mySerial.print("11");mySerial.println("}"); break; case 'C': tone(pinTone,tones[10]);mySerial.print("f");mySerial.print(",id_note:"); mySerial.print("12");mySerial.println("}"); break; case '*': tone(pinTone,tones[11]);mySerial.print("g");mySerial.print(",id_note:"); mySerial.print("13");mySerial.println("}"); break; case '0': tone(pinTone,tones[12]);mySerial.print("a");mySerial.print(",id_note:"); mySerial.print("14");mySerial.println("}"); break; case '#': tone(pinTone,tones[13]);mySerial.print("b");mySerial.print(",id_note:"); mySerial.print("15");mySerial.println("}"); break; case 'D': noTone(pinTone);mySerial.print("S");mySerial.print(",id_note:"); mySerial.print("8");mySerial.println("}"); break; default: noTone(pinTone);mySerial.print("S");mySerial.print(",id_note:"); mySerial.print("8");mySerial.println("}"); break; } } }
Скрипт на Python пишется в сервисе Wyliodrin (My Applications)
и из приложения загружается на выполнения на плату Raspberry Pi
При нажатии клавиш воспроизводятся ноты и в сервис Wyliodrin отправляются сообщения в формате JSON.
Вторая часть проекта — Получение сообщений платой Intel Galileo через сервис Wyliodrin
Вторая часть проекта — получение платой Intel Galileo приходящих сообщений из сервиса Wyliodrin сообщений из, обработка сообщений, вывод звука приходящей ноты, и вывод цвета ноты на RGB-ленту.
Схема подключения элементов к плате Intel Galileo.
Код приложения для Intel Galileo пишем в визуальном редакторе Wyliodrin
Запускаем приложение на плату Intel Galileo, смотрим в мониторе вывод отладочных сообщений, а на плате происходит вывод звука и цвета для приходящих нот
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Arduino UNO | Плата Arduino | Arduino Uno | 1 | |||
Galileo | Плата Intel Galileo | 1 | ||||
Raspberry Pi | Микрокомпьютер | Raspberry Pi | 1 | |||
Converter | Преобразователь уровня сигнала | 1 | ||||
T1 | Биполярный транзистор | КТ503Е | 2 | |||
T2-T4 | Биполярный транзистор | TIP120 | 3 | |||
R1, R5 | Резистор | 510 Ом | 2 | |||
R2-R4 | Резистор | 200 Ом | 3 | |||
SP | Динамик | 8 Ом 1 Вт | 2 | |||
Клавиатура | матричная 4×4 | 1 | ||||
RGB-tape | RGB лента | 1 | ||||