Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/YunSerialTerminal

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Доступ к терминалу 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;

Цепь

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

Код

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

  1. long linuxBaud = 250000;
  2. boolean commandMode = false;

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

  1. void setup() {
  2.   Serial.begin(115200);    
  3.   Serial1.begin(linuxBaud);
  4. }

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

  1. void loop() {
  2.   // копируем информацию с USB-соединения на UART и наоборот
  3.   if (Serial.available()) {           // есть ли какая-нибудь информация от USB-соединения?
  4.     char c = (char)Serial.read();     // считываем ее
  5.     if (commandMode == false) {       // если мы не находимся в командном режиме...
  6.       if (c == '~') {                 // если нажата клавиша «~»...
  7.         commandMode = true;           // то входим в командный режим
  8.       } else {
  9.         Serial1.write(c);             // в противном случае передаем символ на Linux
  10.       }
  11.     } else {                          // если мы находимся в командном режиме...
  12.       if (c == '0') {                 // если нажата клавиша «0»...
  13.         Serial1.begin(57600);         // то устанавливаем скорость в 57600 бод
  14.         Serial.println("Speed set to 57600");  // "Скорость установлена в 57500"
  15.       } else if (c == '1') {          // если нажата клавиша «1»...
  16.         Serial1.begin(115200);        // то устанавливаем скорость в 115200 бод
  17.         Serial.println("Speed set to 115200");  // "Скорость установлена в 115200"
  18.       } else if (c == '2') {          // если нажата клавиша «2»...
  19.         Serial1.begin(250000);        // то устанавливаем скорость в 250000 бод
  20.         Serial.println("Speed set to 250000");  // "Скорость установлена в 250000"
  21.       } else if (c == '3') {          // если нажата клавиша «3»...
  22.         Serial1.begin(500000);        // то устанавливаем скорость в 50000 бод
  23.         Serial.println("Speed set to 500000");  // "Скорость установлена в 500000"
  24.       } else if (c == '~') {
  25.         Serial1.write((uint8_t *)"\xff\0\0\x05XXXXX\x0d\xaf", 11);
  26.         Serial.println("Sending bridge's shutdown command");  // "Отсылаем команду разрыва соединения"
  27.       } else {                        // нажата ли какая-нибудь другая клавиша?
  28.         Serial1.write('~');           // передаем на Linux «~»
  29.         Serial1.write(c);             // передаем символ на Linux
  30.       }
  31.       commandMode = false;            // в любом случае выходим из командного режима
  32.     }
  33.   }
  34.   if (Serial1.available()) {          // есть ли какая-нибудь информация от Linux?        
  35.     char c = (char)Serial1.read();    // считываем ее  
  36.     Serial.write(c);                  // передаем на USB-соединение
  37.   }
  38. }

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

  1. /*
  2. Передача информации с последовательного соединения на Linux (Yun)
  3.  
  4. Позволяет использовать Yun’овский процессор 32U4 в качестве терминала для последовательной передачи данных в работе c Linux-процессором.
  5.  
  6. Загрузите этот скетч на Arduino Yun через последовательный порт (не через WiFi),
  7. а затем откройте Serial Monitor на скорости 115200,
  8. чтобы увидеть процесс начальной загрузки процессора Linux.
  9. Кроме того, в этом скетчеSerial Monitor можно использовать
  10. в качестве базового интерфейса командной строки для Linux.
  11.  
  12. Скетч настроен таким образом, что через Serial Monitor можно было давать следующие команды:
  13.  
  14. «~», а затем «0» ---> Выставляем скорость работы UART в 57 600 бод.
  15. «~», а затем «1» ---> Выставляем скорость работы UART в 115 200 бод.
  16. «~», а затем «2» ---> Выставляем скорость работы UART в 250 000 бод.
  17. «~», а затем «3» ---> Выставляем скорость работы UART в 500 000 бод.
  18. «~», а затем «~» ---> Отправляем команду разрыва соединения.
  19.  
  20. Цепь:
  21. * Плата Arduino Yun
  22.  
  23. Создан в марте 2013 Массимо Банци (Massimo Banzi),
  24. модифицирован Кристианом Мэгли (Cristian Maglie).
  25.  
  26. Этот код не защищен авторским правом.
  27.  
  28. */
  29.  
  30. long linuxBaud = 250000;
  31.  
  32. void setup() {
  33.   Serial.begin(115200);      // запускаем последовательную передачу данных через последовательный порт
  34.   Serial1.begin(linuxBaud); // запускаем последовательную передачу данных на Linux
  35. }
  36.  
  37. boolean commandMode = false;
  38.  
  39. void loop() {
  40.   // копируем информацию с USB-соединения на UART и наоборот
  41.   if (Serial.available()) {           // есть ли какая-нибудь информация от USB-соединения?
  42.     char c = (char)Serial.read();     // считываем ее
  43.     if (commandMode == false) {       // если мы не находимся в командном режиме...
  44.       if (c == '~') {                 // если нажата клавиша «~»...
  45.         commandMode = true;           // то входим в командный режим
  46.       } else {
  47.         Serial1.write(c);             // в противном случае передаем символ на Linux
  48.       }
  49.     } else {                          // если мы находимся в командном режиме...
  50.       if (c == '0') {                 // если нажата клавиша «0»...
  51.         Serial1.begin(57600);         // то устанавливаем скорость в 57600 бод
  52.         Serial.println("Speed set to 57600");  // "Скорость установлена в 57500"
  53.       } else if (c == '1') {          // если нажата клавиша «1»...
  54.         Serial1.begin(115200);        // то устанавливаем скорость в 115200 бод
  55.         Serial.println("Speed set to 115200");  // "Скорость установлена в 115200"
  56.       } else if (c == '2') {          // если нажата клавиша «2»...
  57.         Serial1.begin(250000);        // то устанавливаем скорость в 250000 бод
  58.         Serial.println("Speed set to 250000");  // "Скорость установлена в 250000"
  59.       } else if (c == '3') {          // если нажата клавиша «3»...
  60.         Serial1.begin(500000);        // то устанавливаем скорость в 50000 бод
  61.         Serial.println("Speed set to 500000");  // "Скорость установлена в 500000"
  62.       } else if (c == '~') {
  63.         Serial1.write((uint8_t *)"\xff\0\0\x05XXXXX\x0d\xaf", 11);
  64.         Serial.println("Sending bridge's shutdown command");  // "Отсылаем команду разрыва соединения"
  65.       } else {                        // нажата ли какая-нибудь другая клавиша?
  66.         Serial1.write('~');           // передаем на Linux «~»
  67.         Serial1.write(c);             // передаем символ на Linux
  68.       }
  69.       commandMode = false;            // в любом случае выходим из командного режима
  70.     }
  71.   }
  72.   if (Serial1.available()) {          // есть ли какая-нибудь информация от Linux?        
  73.     char c = (char)Serial1.read();    // считываем ее  
  74.     Serial.write(c);                  // передаем на USB-соединение
  75.   }
  76. }

См.также

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

  1. Arduino - Yún Serial Terminal