Arduino:Примеры/YunSerialTerminal: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 29: Строка 29:
Создаем две переменные. В первой будем хранить информацию о скорости передачи данных между процессорами, а во второй – о том, вошли ли мы в командный режим  (т.е. режим прямого ввода команд) или нет.
Создаем две переменные. В первой будем хранить информацию о скорости передачи данных между процессорами, а во второй – о том, вошли ли мы в командный режим  (т.е. режим прямого ввода команд) или нет.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
long linuxBaud = 250000;
long linuxBaud = 250000;
boolean commandMode = false;
boolean commandMode = false;
Строка 36: Строка 36:
В секции setup() инициализируем последовательное соединение с компьютером и '''Linux'''.
В секции setup() инициализируем последовательное соединение с компьютером и '''Linux'''.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void setup() {
void setup() {
   Serial.begin(115200);     
   Serial.begin(115200);     
Строка 45: Строка 45:
В секции loop() копируем данные из одного последовательного соединения в другое. Если нажата клавиша '''«~»''', включаем командный режим.
В секции loop() копируем данные из одного последовательного соединения в другое. Если нажата клавиша '''«~»''', включаем командный режим.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void loop() {
void loop() {
   // копируем информацию с USB-соединения на UART и наоборот
   // копируем информацию с USB-соединения на UART и наоборот
Строка 88: Строка 88:
Весь код полностью – ниже:
Весь код полностью – ниже:


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
Передача информации с последовательного соединения на Linux (Yun)
Передача информации с последовательного соединения на Linux (Yun)
Строка 172: Строка 172:


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}
[[Категория:Пример]]
[[Категория:Пример]]
[[Категория:Примеры]]
[[Категория:Примеры]]
[[Категория:Пример программирования Arduino]]
[[Категория:Пример программирования Arduino]]
[[Категория:Примеры программирования Arduino]]
[[Категория:Примеры программирования Arduino]]

Текущая версия от 12:39, 8 июля 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Доступ к терминалу Linux через Serial Monitor (на Arduino Yun)[1]

Благодаря этому примеру вы научитесь использовать Yun’овский процессор 32U4 в качестве терминала для последовательной передачи данных в работе c Linux-процессором.

Загрузите этот скетч на Arduino Yun через USB (не через WiFi), а затем запустите последовательную передачу данных со скоростью 115200 бит/с, чтобы увидеть процесс начальной загрузки процессора Linux. Кроме того, в этом скетче Serial Monitor можно использовать в роли основного интерфейса командной строки для Linux.

Через Serial Monitor можно отправлять следующие команды:

  • «~», а затем «0» ---> Выставляем скорость работы UART в 57 600 бод.
  • «~», а затем «1» ---> Выставляем скорость работы UART в 115 200 бод.
  • «~», а затем «2» ---> Выставляем скорость работы UART в 250 000 бод.
  • «~», а затем «3» ---> Выставляем скорость работы UART в 500 000 бод.
  • «~», а затем «~» ---> Отправляем команду разрыва соединения.

Необходимое оборудование

  • Плата Arduino Yun;

Цепь

Для этого примера цепи строить не нужно.

Код

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

long linuxBaud = 250000;
boolean commandMode = false;

В секции setup() инициализируем последовательное соединение с компьютером и Linux.

void setup() {
  Serial.begin(115200);     
  Serial1.begin(linuxBaud); 
}

В секции loop() копируем данные из одного последовательного соединения в другое. Если нажата клавиша «~», включаем командный режим.

void loop() {
  // копируем информацию с USB-соединения на UART и наоборот
  if (Serial.available()) {           // есть ли какая-нибудь информация от USB-соединения? 
    char c = (char)Serial.read();     // считываем ее
    if (commandMode == false) {       // если мы не находимся в командном режиме...
      if (c == '~') {                 // если нажата клавиша «~»...
        commandMode = true;           // то входим в командный режим
      } else {
        Serial1.write(c);             // в противном случае передаем символ на Linux
      }
    } else {                          // если мы находимся в командном режиме...
      if (c == '0') {                 // если нажата клавиша «0»...
        Serial1.begin(57600);         // то устанавливаем скорость в 57600 бод
        Serial.println("Speed set to 57600");  // "Скорость установлена в 57500"
      } else if (c == '1') {          // если нажата клавиша «1»...
        Serial1.begin(115200);        // то устанавливаем скорость в 115200 бод
        Serial.println("Speed set to 115200");  // "Скорость установлена в 115200"
      } else if (c == '2') {          // если нажата клавиша «2»...
        Serial1.begin(250000);        // то устанавливаем скорость в 250000 бод
        Serial.println("Speed set to 250000");  // "Скорость установлена в 250000"
      } else if (c == '3') {          // если нажата клавиша «3»...
        Serial1.begin(500000);        // то устанавливаем скорость в 50000 бод
        Serial.println("Speed set to 500000");  // "Скорость установлена в 500000"
      } else if (c == '~') {
        Serial1.write((uint8_t *)"\xff\0\0\x05XXXXX\x0d\xaf", 11);
        Serial.println("Sending bridge's shutdown command");  // "Отсылаем команду разрыва соединения"
      } else {                        // нажата ли какая-нибудь другая клавиша?
        Serial1.write('~');           // передаем на Linux «~»
        Serial1.write(c);             // передаем символ на Linux
      }
      commandMode = false;            // в любом случае выходим из командного режима
    }
  }
  if (Serial1.available()) {          // есть ли какая-нибудь информация от Linux?         
    char c = (char)Serial1.read();    // считываем ее  
    Serial.write(c);                  // передаем на USB-соединение
  }
}

Весь код полностью – ниже:

/*
Передача информации с последовательного соединения на Linux (Yun)

Позволяет использовать Yun’овский процессор 32U4 в качестве терминала для последовательной передачи данных в работе c Linux-процессором.

Загрузите этот скетч на Arduino Yun через последовательный порт (не через WiFi),
а затем откройте Serial Monitor на скорости 115200, 
чтобы увидеть процесс начальной загрузки процессора Linux. 
Кроме того, в этом скетчеSerial Monitor можно использовать 
в качестве базового интерфейса командной строки для Linux.

Скетч настроен таким образом, что через Serial Monitor можно было давать следующие команды:

«~», а затем «0» ---> Выставляем скорость работы UART в 57 600 бод.
«~», а затем «1» ---> Выставляем скорость работы UART в 115 200 бод.
«~», а затем «2» ---> Выставляем скорость работы UART в 250 000 бод.
«~», а затем «3» ---> Выставляем скорость работы UART в 500 000 бод.
«~», а затем «~» ---> Отправляем команду разрыва соединения.

Цепь:
* Плата Arduino Yun

Создан в марте 2013 Массимо Банци (Massimo Banzi),
модифицирован Кристианом Мэгли (Cristian Maglie).

Этот код не защищен авторским правом.

*/

long linuxBaud = 250000;

void setup() {
  Serial.begin(115200);      // запускаем последовательную передачу данных через последовательный порт
  Serial1.begin(linuxBaud); // запускаем последовательную передачу данных на Linux
}

boolean commandMode = false;

void loop() {
  // копируем информацию с USB-соединения на UART и наоборот
  if (Serial.available()) {           // есть ли какая-нибудь информация от USB-соединения? 
    char c = (char)Serial.read();     // считываем ее
    if (commandMode == false) {       // если мы не находимся в командном режиме...
      if (c == '~') {                 // если нажата клавиша «~»...
        commandMode = true;           // то входим в командный режим
      } else {
        Serial1.write(c);             // в противном случае передаем символ на Linux
      }
    } else {                          // если мы находимся в командном режиме...
      if (c == '0') {                 // если нажата клавиша «0»...
        Serial1.begin(57600);         // то устанавливаем скорость в 57600 бод
        Serial.println("Speed set to 57600");  // "Скорость установлена в 57500"
      } else if (c == '1') {          // если нажата клавиша «1»...
        Serial1.begin(115200);        // то устанавливаем скорость в 115200 бод
        Serial.println("Speed set to 115200");  // "Скорость установлена в 115200"
      } else if (c == '2') {          // если нажата клавиша «2»...
        Serial1.begin(250000);        // то устанавливаем скорость в 250000 бод
        Serial.println("Speed set to 250000");  // "Скорость установлена в 250000"
      } else if (c == '3') {          // если нажата клавиша «3»...
        Serial1.begin(500000);        // то устанавливаем скорость в 50000 бод
        Serial.println("Speed set to 500000");  // "Скорость установлена в 500000"
      } else if (c == '~') {
        Serial1.write((uint8_t *)"\xff\0\0\x05XXXXX\x0d\xaf", 11);
        Serial.println("Sending bridge's shutdown command");  // "Отсылаем команду разрыва соединения"
      } else {                        // нажата ли какая-нибудь другая клавиша?
        Serial1.write('~');           // передаем на Linux «~»
        Serial1.write(c);             // передаем символ на Linux
      }
      commandMode = false;            // в любом случае выходим из командного режима
    }
  }
  if (Serial1.available()) {          // есть ли какая-нибудь информация от Linux?         
    char c = (char)Serial1.read();    // считываем ее  
    Serial.write(c);                  // передаем на USB-соединение
  }
}

См.также

Внешние ссылки