Главная » Arduino
Призовой фонд
на январь 2019 г.
1. 200 руб.
От пользователей

LattePanda

Данная статья является дополнением к размещенному на YouTube канале "Паяльник ТВ" видеообзору одноплатного компьютера LattePanda (работающего под управлением ОС Windows 10). Здесь можно подробно рассмотреть исходные коды и некоторые изображения, используемые в видео.

История одноплатных компьютеров началась в 1976-м с модели Dyna-Micro. Это сейчас Dyna-Micro нам кажется огромной, но в 76-м году это был действительно компактный и самое главное одноплатный компьютер.

На фото представлен прототип Dyna-Micro.

На следующем фото серийная модель Dyna-Micro.

Кстати, обратите внимание на макетную плату в левом нижнем углу. Так же обратите внимание на наклейку на макетной плате, да-да, это порты GPIO.

Так что распберри пай не был первым одноплатным компьютером, но распберии пай возродил идею одноплатных компьютеров, вдохнул в эту идею новую жизнь.
И понеслось...
На данный момент насчитывается уже более сотни моделей одноплатных компьютеров. Если есть желание, то рекомендую ознакомиться с обзором девяносто восьми одноплатных компьютеров, который опубликован на ЛинуксГизмо в 2016 году. Так же на хабре можно найти перевод этого обзора, но не полностью (ссылки в виде QR-кода приведены в видео).
При просмотре обзоров в глаза сразу же бросается наличие портов GPIO почти у всех одноплатных компьютеров. Я специально заостряю внимание на портах GPIO, потому что сделать обзор одноплатного компьютера с портами GPIO и не рассмотреть в нем работу с портами GPIO просто невозможно. Но обо всем по порядку.
Итак, разрешите представить, Панда, Латте Панда. Латте панда предоставлен на обзор магазином DFRobot.

Имеет следующие характеристики:

  •    64-битный процессор Intel Cherry Trail Z8350 Quad
  •    Оперативная память DDR3 объемом 2 Gb
  •    Встроенная флеш память: 32 Gb
  •    Bluetooth 4.0
  •    Wi-Fi 802.11 b/g/n
  •    Два USB 2.0 и один USB 3.0
  •    Ethernet 100 Mbit
  •    Расширение памяти при помощи Micro-SD
  •    Графически процессор Intel HD Graphics
  •    Видеовыход HDMI, возможность подключить дисплей по протоколу MIPI-DSI
  •    итак же возможно подключить тачскрин
  •    Вес 55 грамм
  •    Размер 110*94*30 мм
  •    Питание 5 вольт 2 ампера.
  •   Цена 89$

Так же существует модель с 4-мя гигабайтами оперативной и 64-мя гигабайтами постоянной памяти, остальные параметры не отличаются
Панда так же имеет порты GPIO, но...
В отличии от малины, у которые порты GPIO управляются непосредственно процессором, портами GPIO панды управляет микроконтроллер ATmega 32u4. Которая в свою очередь управляется через USB. Так же имеются порты GPIO, управляемые непосредственно с процессора, но их всего 6 и их логический уровень 1,8 вольт.
То есть на одной плате размещены компьютер и ардуино леонардо одновременно.

Распиновка всех разъемов панды приведена на следующем изображении.

Компьютер работает под управлением операционной системы Windows 10. Лично для меня это плюс. Операционная система, в отличии от малины, установлена во встроенную память, что так же вызывает у меня положительное мнение. Так же существуют панды под управлением убунту, но в магазине DFRobot они не продаются.
Для бесперебойной работы панды необходим источник питания с напряжением 5 вольт и силой тока не менее 2-х ампер. С питанием у меня возникли некоторые сложности. Дело в том, что я решил использовать 7" HDMI дисплей WaveShare с тачскрином (о котором я уже рассказывал в одном из видео на нашем канале). Тачскрин работает по USB и от того же разъема USB питается подсветка дисплея.Так вот панда отключалась при подключении дисплея. В тот момент я использовал сетевой адаптер 5 вольт 2 ампера. Подключил к повербанку 5 вольт 2,5 ампера - результат тот же. Тогда пустил в ход тяжелую артиллерию: блок питания 5 вольт 40 ампер. С ним проблемы с дисплеем почти прекратились, потому что иногда панда все таки выключается.
Версий у меня две: либо я использовал не качественный кабель для питания панды, либо подсветка дисплея потребляет слишком много по мнению панды и панда просто аварийно отключается. Замечу, что на юсб питание идет не напрямую с разъема питания.

При этом можно работать при питании панды и дисплея от различных источников питания, что я и делаю если панда начинает чудить. Но о тачскрине в таком случае придется забыть.
Немного об операционной системе.
Установлена ось Windows 10, в моем случае не активированная, о чем постоянно напоминает надпись в правом нижнем углу. Версия панды с активированной Windows 10 стоит на 30$ дороже. Замечу, что активация панды через магазин приложений стоит 10 тысяч рублей. Так что берите активированную. И кстати, приходит панда все равно с неактивированной Windows 10, но в коробке лежит стрейч-карта с кодом активации.

На мой взгляд ресурсов панды хватает на Windows 10, мне удалось даже запустить ряд некоторых требовательных программ и игр. Например Компас-3D v.16 и PhotoShop CS6 x64
Но на многое не рассчитывайте, особенно на игры, потому что видеопамяти, как показала программа AIDA64, всего 1 гигабайт.

Видео воспроизводит хорошо, до разрешения 1280*720 пикселей. Видео с разрешением 1920*1080 может воспроизводить с заиканиями звука, но это связано с малой скоростью чтения информации с флеш накопителя и битрейтом видео (в моем случае 10989 кбит в секунду воспроизводилось с прерываниями звука).

Так же я проверил работу программ для управления станком под управлением GRBL. Так как изначально я планировал использовать панду для управления станком. 
Candle заработал без нареканий, другим программам понадобился .NET, с установкой которого винда "артачилась". Она вообще "артачилась" насчет любой установки из сети, обновления ОС и прочего. Проблема с установкой .NET была исправлена через командную строку, рекомендую этот способ. В итоге я проверил программы Candle , LaserGRBl и NC Corrector - самые востребованные мной программы для работы со станком ЧПУ под управлением GRBL. Как я уже говорил, панду я планирую использовать для управления станком ЧПУ, поэтому список программ ещё будет пополняться.
Ну и тестирование панды различными программами для тестирования ПК. В тестовой версии AIDA64 я создал отчет, которой приложил под статьей. Отчет подробный, все характеристики Панды там указаны. Отмечу температуру при не сильной нагрузке - процессор 66 градусов, при этом работает одно ядро из четырех на 33 процента. Охлаждение принудительное необходимо, но изначально оно не предусмотрено. Придется придумывать что-то самостоятельно, 5 вольтовые кулеры подойдут отлично, к тому же на плате есть 2 вывода для их питания.

Температура без использования активного охлаждения:

Температура с использованием активного охлаждения в виде 2 кулеров 40*40 мм (5 вольт, 0,4 ампера) без радиаторов:

Через эти выводы так же можно подать питание для работы панды, 5 вольт и минимум 2 ампера. Существует новая версия панды - альфа, у которой активное охлаждение установлено изначально. Вообще альфа по многим параметрам круче панды во много раз, но цена на середину ноября 2018 года - $358.

В целом впечатления о панде как о ПК положительные.

Плюсы, минусы и особенности:
Греется, даже при простой нагрузке ощутимо греется, необходимо принудительное охлаждение. Греются даже расположенные на плате разъемы USB и Ethernet. Возможно таким образом реализовано отведение тепла при отсутствии активного охлаждения, но горячий USB разъем настораживает.
Плата придирчива к питанию. Я так и не выяснил что стало причиной сбоев при подключении дисплея с тачскрином. Сейчас я использую короткий кабель и чрезмерно мощный блок питания и проблема с самостоятельным отключением возникает редко.

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

Как я уже упоминал, портами GPIO управляет микроконтроллер ATMega32u4 с бутлодером Arduino Leonardo. Замечу, что на плате так же выведены порты GPIO с процессора, но никакой информации как работать с этими портами в документации к панде нет. Расположение выводов микроконтроллера не совпадает с платами Arduino, так что об использовании шилдов сразу забудьте.

Микроконтроллер умеет подключаться к USB компьютера напрямую, без преобразователей USB-UART. Таким образом связь между ПК и микроконтроллером осуществляется по асинхронному протоколу через виртуальный serial-порт. Очевидно, что процессор ПК ни коим образом не может управлять портами GPIO микроконтроллера напрямую. Необходима прошивка микроконтроллера, которая будет получать данные по асинхронному протоколу от процессора, обрабатывать их и на основе этих данные управлять портами GPIO. Так же эта прошивка должна уметь и обратное - получать данные с портов GPIO и отправлять их по асинхронному протоколу в процессор. 

Сейчас я буду рассматривать компьютерную часть панды и микроконтроллерную часть отдельно друг от друга. То есть когда я пишу ПК, я имею ввиду панду без использования микроконтроллера. Когда я пишу микроконтроллер я имею ввиду установленный на плате панды микроконтроллер. Это то же самое, что подключить к ПК Arduino Leonardo при помощи кабеля USB и использовать их так, но в нашем случае микроконтроллер установлен на одной плате с ПК.

Популярным решением является библиотека Firmata для Arduino. В ней реализована работа всех поддерживаемых микроконтроллером аппаратно протоколов передачи данных (I2C, SPI, UART), прямая работа с цифровыми и аналоговыми портами, работа с ШИМ и так далее. При этом, если вам необходимо управлять дисплеем, то необходимо будет отправлять данные на дисплей в сыром виде. Не просто print("Hello, World"), а байт за байтом отсылать управляющие команды и данные. Потому что Firmata является просто мостом, посредником между ПК и портами GPIO микроконтроллера. В лучшем случае придется писать свои библиотеки для того языка программирования, на котором вы пишете программу на ПК. Писать придется, ибо они ещё не написаны.

Вторым вариантом будет написание узкоспециализированной прошивки под конкретные нужды. В этом случае связь между ПК и микроконтроллером так же будет осуществляться по асинхронному протоколу, но без использования библиотеки Firmata, но с использованием библиотеки Serial.

Например, вам необходимо вывести на дисплей показатель загруженности процессора и оперативной памяти. На ПК установлена программа, которая получает данные загруженности процессора и оперативной памяти и передает их по асинхронному протоколу. Формат данных придется изобретать самостоятельно. Например, перед данными загруженности процессора будет идти буква "P", P50 - означает что загруженность процессора составляет 50%.Для обозначения загруженности оперативной памяти будем использовать букву "M", M34 - означает загруженность оперативной памяти на 34%. Микроконтроллер "парсит" полученную строку, а конкретно первый символ полученной строки, и таким образом узнает что за данные были переданы.

Таким образом есть два варианта связи ПК и микроконтроллера: связь по асинхронному протоколу с использованием Firmata и прямая связь по асинхронному протоколу без использования Firmata.

Плюсы и минусы каждого из способов:

  • (минус Firmata) поскольку прошивка Firmata является мостом между ПК и портами GPIO, то придется "изобретать велосипеды" в виде библиотек под какие-то конкретные датчики и исполнительные устройства;
  • (плюс Firmata) при этом можно не беспокоиться о доступной под прошивку памяти микроконтроллера, прошивка Firmata просто будет гонять данные туда-обратно, расти же будет только объем программы для ПК;
  • (плюс Firmata) из предыдущего так же следует, что если вы решите работать с микроконтроллером напрямую, вы будете зависеть от объема памяти микроконтроллера;
  • (плюс Firmata) библиотека Firmata изначально создавалась для языка программирования Processing, но так же была портирована на некоторые другие языки программирования (Python, JS, .NET, Java, PHP);
  • (минус Firmata) но при этом не все языки программирования имеют библиотеку Firmata, но большее их количество поддерживают работу с COM-портом. 

Плюсов в пользу Firmata казалось бы больше, но я выбрал второй вариант - работать с микроконтроллером напрямую, без Firmata. Но рассмотрю я оба варианта. Программы для ПК будут написаны на Processing, потому что это родственный Arduino язык программирования, да и Firmata изначально создавалась для языка программирования Processing. Исходные коды были найдены в интернет, поскольку в Processing я раньше никогда не программировал.

Пример первый: работа через Firmata. Код для микроконтроллера приводить не буду, потому что используется стандартный скетч StandardFirmata библиотеки Firmata.

Код для Processing.

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;

color off = color(4, 79, 111);
color on = color(84, 145, 158);

int[] values = { Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
 Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW,
 Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW, Arduino.LOW };

void setup() {
  size(470, 100);
  
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  
  for (int i = 0; i <= 13; i++)
    arduino.pinMode(i, Arduino.OUTPUT);
}

void draw() {
  background(off);
  stroke(on);
  
  for (int i = 0; i <= 13; i++) {
    if (values[i] == Arduino.HIGH)
      fill(on);
    else
      fill(off);
      
    rect(420 - i * 30, 30, 20, 20);
  }
}

void mousePressed()
{
  int pin = (450 - mouseX) / 30;
  
  if (values[pin] == Arduino.LOW) {
    arduino.digitalWrite(pin, Arduino.HIGH);
    values[pin] = Arduino.HIGH;
  } else {
    arduino.digitalWrite(pin, Arduino.LOW);
    values[pin] = Arduino.LOW;
  }
}

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

В данном примере Processing принимает данные (строку) от микроконтроллера и выводит в консоль.

Код для Processing/

import processing.serial.*;

Serial myPort;

String val;

void setup() {

  String portName = Serial.list()[0];

  myPort = new Serial(this, portName, 9600);
}

void draw() {

  if ( myPort.available() > 0) { 
    val = myPort.readStringUntil('\n'); 
    println(val); //вывод в консоль
  }
}

Код для Arduino.

unsigned long x=0;

void setup() 
{
Serial.begin(9600);
}

void loop() 
{
Serial.print("Hello, cxem.net! ");
Serial.println(x);
x++;
delay(1000); 
}

В следующем примере рассмотрена передача данных от ПК к микроконтроллеру: Processing создает пустое окно, если щелкнуть мышью внутри окна - загорится светодиод, отпустили кнопку мыши - светодиод погас.

Код для Processing.

import processing.serial.*; 
Serial myPort; 

void setup() {

  size(200, 200); 

  String portName = Serial.list()[0]; 

  myPort = new Serial(this, portName, 9600);
}

void draw() {

  if (mousePressed == true) { 
    myPort.write('1'); 

    println("1");
  } else { 

    myPort.write('0');
    println("0");
  }
  delay(100);
}

Код для Arduino.

char val;

int ledPin = 13;

void setup() 
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  if (Serial.available()) 
  {
    val = Serial.read();
  }
  if (val == '1') 
  {
    digitalWrite(ledPin, HIGH);
  }
  else 
  {
    digitalWrite(ledPin, LOW);
  }
  delay(10);
}

Третий пример: взаимный обмен данными: так же окно, если щелкнуть внутри окна, то данные с пк отправляются в микроконтроллер, микроконтроллер принимает данные и отсылает данные в ответ. В примере это просто строка "Hello, cxem.net!", но можно передать данные с какого-либо датчика.

Код для Processing.

import processing.serial.*;

Serial myPort;
String val;
boolean firstContact = false;

void setup() 
{
  size(200, 200);
  myPort = new Serial(this, Serial.list()[0], 9600);
  myPort.bufferUntil('\n');
}

void draw() {
}

void serialEvent( Serial myPort) 
{
  val = myPort.readStringUntil('\n'); 
  if (val != null) 
  {
    val = trim(val);
    println(val);
    if (firstContact == false) 
    {
      if (val.equals("A")) 
      {
        myPort.clear();
        firstContact = true;
        myPort.write("A");
        println("contact");
      }
    } else 
    {
      println(val);
     if (mousePressed == true) 
     {
        myPort.write('1'); 
        println("1");
      } 
      myPort.write("A");
    }
  }
}

Код для Arduino.

char val;
int ledPin = 13;
boolean ledState = LOW;

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  establishContact();
}

void loop()
{
  if (Serial.available() > 0)
  {
    val = Serial.read();
    if (val == '1')
    {
      ledState = !ledState;
      digitalWrite(ledPin, ledState);
    }
    delay(100);
  }
  else
  {
    Serial.println("Hello, cxem.net!");
    delay(50);
  }
}

void establishContact()
{
  while (Serial.available() <= 0)
  {
    Serial.println("A"); // отсылает заглавную A
    delay(300);
  }
}

Что дальше?

Взаимной пересылкой данных между ПК и микроконтроллером всё не ограничивается. Не забывайте, что панда - полноценный компьютер, с сетевыми функциями и BlueTooth, с возможностью подключить камеру, принтер и многое другое. Поэтому полученные микроконтроллером данные можно передавать на какое-либо облако интернета вещей, с web-камеры получать изображение и обрабатывать его при помощи openCV -кодовый замок с распознаванием лица, так и напрашивается. Возможностей много, впрочем как и у распберри пай. По большому счету, у панды и малины много общего, они могут выполнять одинаковые задачи, разница в подходе к портам GPIO. И нестандартный подход к управлению портами GPIO у панды дает некоторые преимущества перед малиной: в то время как ПК отключен, микроконтроллер продолжает работу, при условии того что подано питание. 

Ну и немного сравнения малины и панды.

Отдельная благодарность магазину http://www.dfrobot.com за предоставленный на обзор ПК Latte Panda.

Ссылка на товар: https://www.dfrobot.com/product-1498.html

Официальный сайт производителя: https://www.lattepanda.com/

Документация: http://docs.lattepanda.com/

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 18.12.2018 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Pauk #
А цена нехилая, есть варианты подешевле?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Ветрогенератор USB-реле (2 канала)
вверх