Использование цвета при выводе в последовательный порт

31 июля 2016

Наверняка, многие видели файловые менеджеры Norton Commander, Midnight Commander и другие, которые работают в консоли с выводом цвета. Обычно это происходит по SSH. Поискав информацию в Интернете, обнаружил, что такое работает и при подключении через последовательный порт. Возникает вопрос: а возможно ли использовать цвет при выводе в последовательный порт с Arduino?

Оказывается, это вполне реально. Для этого необходимо использовать escape-последовательности.

Такие последовательности начинаются с символов ESC[ , где ESC — символ с кодом 27. Для того, чтобы поменять цвет вывода, нужно отправить последовательность вида:

ESC[Value;…;Valuem где Value — код цвета или атрибута.

Вот их значения:

Атрибуты:

  • 0 — Обычный
  • 1 — Полужирный
  • 4 — Подчёркнутый (только в монохромном режиме)
  • 5 — Мигающий
  • 7 — Реверсивный
  • 8 — Зачёркнутый
Цвет Код для текста Код для фона
Чёрный 30 40
Красный 31 41
Зелёный 32 42
Жёлтый 33 43
Синий 34 44
Пурпурный 35 45
Голубой 36 46
Белый 37 47

Допустим, нам нужно сделать красные символы на чёрном фоне. Тогда последовательность будет выглядеть так:

ESC[31;40m

Вот так это будет выглядеть в коде:

Serial.write(27);
Serial.print("[31;40m");
Serial.println("I am red string.");

Если нужно сделать текст полужирным, то добавится «1»:

ESC[1;31;40m

Ну и примерчик для полного перебора всех цветов:

color-uart.ino
void setup() 
{ 
  Serial.begin(9600); 
  Serial.println("Test 123"); 
 
  //Serial.write(27);
  //Serial.print("[31;42m");
} 
 
void loop() 
{ 
  for (int i=30; i<38; i++)
  {
    for (int j=40; j<48; j++)
    {
      Serial.write(27);
      Serial.print("[");
      Serial.print(i);
      Serial.print(";");
      Serial.print(j);
      Serial.print("m");
 
      Serial.print("String line ");
      Serial.print(i);
      Serial.print(" ");
      Serial.println(j);
    }
  } 
 
  while(1);
} 

Обратите внимание, что для работать в обычном мониторе порта Arduino IDE это не будет. Нужен терминал, который умеет работать с escape-последовательностями, например, Putty. Для этого в его настройках указываем работу по Serial-соединению, вписываем COM-порт и скорость:

После этого нажимаем «Open» и видим результат:

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

  • arduino/ispolzovanie_cveta_pri_vyvode_v_posledovatelnyj_port.txt
  • Последнее изменение: 08.01.2026 12:41
  • r0wbh