Arduino:Примеры/YunSerialTerminal

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

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

См.также

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