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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<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">»)
 
Нет описания правки
Строка 13: Строка 13:
Доступ к '''REST API''' защищен паролем, поэтому вам нужно либо ввести его, либо вообще отключить получение доступа при помощи пароля. Сама же отправка сообщений осуществляется при помощи ссылок вроде этой:
Доступ к '''REST API''' защищен паролем, поэтому вам нужно либо ввести его, либо вообще отключить получение доступа при помощи пароля. Сама же отправка сообщений осуществляется при помощи ссылок вроде этой:


<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">
http://myArduinoYun.local/mailbox/hello
http://myArduinoYun.local/mailbox/hello
</syntaxhighlight>
</syntaxhighlight>
Строка 36: Строка 36:
Далее подключаем класс Mailbox, который автоматически подключит библиотеку Bridge.
Далее подключаем класс Mailbox, который автоматически подключит библиотеку Bridge.


<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">
#include <Mailbox.h>
#include <Mailbox.h>
</syntaxhighlight>
</syntaxhighlight>
Строка 42: Строка 42:
В секции setup() инициализируем последовательную передачу данных (в отладочных целях), а затем включаем встроенный светодиод, подключенный к '''13-ому цифровому контакту''', тем самым оповещая о начале активации библиотеки '''Bridge'''. Функция Bridge.begin() является блокирующей, а на ее выполнение уйдет '''2 секунды'''. По завершении активации '''Bridge''' выключаем светодиод. Затем вписываем функцию Mailbox.begin(), которая запускает на '''OpenWrt-Yun''' и процессоре работу '''«почтового ящика»'''.
В секции setup() инициализируем последовательную передачу данных (в отладочных целях), а затем включаем встроенный светодиод, подключенный к '''13-ому цифровому контакту''', тем самым оповещая о начале активации библиотеки '''Bridge'''. Функция Bridge.begin() является блокирующей, а на ее выполнение уйдет '''2 секунды'''. По завершении активации '''Bridge''' выключаем светодиод. Затем вписываем функцию Mailbox.begin(), которая запускает на '''OpenWrt-Yun''' и процессоре работу '''«почтового ящика»'''.


<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() {
   pinMode(13, OUTPUT);
   pinMode(13, OUTPUT);
Строка 64: Строка 64:
В секции loop() создаем строку, где будем хранить входящие сообщения, а затем вызываем функцию Mailbox.messageAvialable() для чтения сообщений, доступных в '''«почтовом ящике»'''.
В секции loop() создаем строку, где будем хранить входящие сообщения, а затем вызываем функцию Mailbox.messageAvialable() для чтения сообщений, доступных в '''«почтовом ящике»'''.


<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() {
   String message;
   String message;
Строка 75: Строка 75:
Если в '''«почтовом ящике»''' есть хотя бы одно сообщение, начинаем считывать доступные сообщения в очередь, а затем выводим их на '''Serial Monitor.'''
Если в '''«почтовом ящике»''' есть хотя бы одно сообщение, начинаем считывать доступные сообщения в очередь, а затем выводим их на '''Serial Monitor.'''


<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">
// считываем все сообщения в очередь
// считываем все сообщения в очередь
     while (Mailbox.messageAvailable())
     while (Mailbox.messageAvailable())
Строка 86: Строка 86:
Далее при помощи функции delay() делаем так, чтобы «почтовый ящик» проверялся каждые '''10 секунд'''. Кроме того, это должно продемонстрировать преимущества хранения данных на '''Linux'''-процессоре вместо того, чтобы забивать оперативную память процессора '''Arduino'''.
Далее при помощи функции delay() делаем так, чтобы «почтовый ящик» проверялся каждые '''10 секунд'''. Кроме того, это должно продемонстрировать преимущества хранения данных на '''Linux'''-процессоре вместо того, чтобы забивать оперативную память процессора '''Arduino'''.


<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">
Serial.println("Waiting 10 seconds before checking the Mailbox again");  // "Ждем 10 секунд до следующей проверки «почтового ящика»"
Serial.println("Waiting 10 seconds before checking the Mailbox again");  // "Ждем 10 секунд до следующей проверки «почтового ящика»"
   }
   }
Строка 97: Строка 97:
Весь код полностью – ниже:
Весь код полностью – ниже:


<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">
#include <Mailbox.h>
#include <Mailbox.h>



Версия от 18:19, 14 мая 2023

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


Чтение сообщений в «почтовом ящике» Yun[1]

Этот пример для Arduino Yun показывает, как использовать библиотеку Bridge, браузер и REST-запросы для отправки текстовых сообщений от Linux на AVR.

При запуске этого скетча убедитесь, что ваш компьютер находится в той же сети, что и Yun.

Загрузив скетч, начинайте добавлять сообщения в «почтовый ящик» Yun (он будет создан при помощи класса Mailbox). Этот «почтовый ящик» будет проверятся каждые 10 секунд, после чего присланные сообщения будут выводиться на Serial Monitor.

Доступ к REST API защищен паролем, поэтому вам нужно либо ввести его, либо вообще отключить получение доступа при помощи пароля. Сама же отправка сообщений осуществляется при помощи ссылок вроде этой:

http://myArduinoYun.local/mailbox/hello

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

  • Плата Arduino Yun;
  • Компьютер и Yun должны находиться в одной и той же сети (в проводной или беспроводной – неважно);

Необходимое ПО

  • Веб-браузер;

Цепь

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

Код

Этот скетч демонстрирует возможность использования REST-запросов для передачи сообщений от Linux на AVR. Эти сообщения будут записываться в строку (на Linux-процессоре), а затем посредством вызова функции readMessage() считываться AVR’ом.

Далее подключаем класс Mailbox, который автоматически подключит библиотеку Bridge.

#include <Mailbox.h>

В секции setup() инициализируем последовательную передачу данных (в отладочных целях), а затем включаем встроенный светодиод, подключенный к 13-ому цифровому контакту, тем самым оповещая о начале активации библиотеки Bridge. Функция Bridge.begin() является блокирующей, а на ее выполнение уйдет 2 секунды. По завершении активации Bridge выключаем светодиод. Затем вписываем функцию Mailbox.begin(), которая запускает на OpenWrt-Yun и процессоре работу «почтового ящика».

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  // Инициализируем Bridge и Mailbox:
  Bridge.begin();
  Mailbox.begin();
  digitalWrite(13, HIGH);

  // Инициализируем последовательную передачу данных:
  Serial.begin(9600);

  // Ждем подключения Serial Monitor:
  while (!Serial);

  Serial.println("Mailbox Read Message\n");  // "Чтение сообщений в «почтовом ящике» Yun\n"
  Serial.println("The Mailbox is checked every 10 seconds. The incoming messages will be shown below.\n");  // "«Почтовый ящик» проверяется каждые 10 секунд. Входящие сообщения будут показаны ниже.\n"
}

В секции loop() создаем строку, где будем хранить входящие сообщения, а затем вызываем функцию Mailbox.messageAvialable() для чтения сообщений, доступных в «почтовом ящике».

void loop() {
  String message;

  // есть ли в «почтовом ящике» какие-нибудь сообщения?
  if (Mailbox.messageAvailable())
  {

Если в «почтовом ящике» есть хотя бы одно сообщение, начинаем считывать доступные сообщения в очередь, а затем выводим их на Serial Monitor.

// считываем все сообщения в очередь
    while (Mailbox.messageAvailable())
    {
      Mailbox.readMessage(message);
      Serial.println(message);
    }

Далее при помощи функции delay() делаем так, чтобы «почтовый ящик» проверялся каждые 10 секунд. Кроме того, это должно продемонстрировать преимущества хранения данных на Linux-процессоре вместо того, чтобы забивать оперативную память процессора Arduino.

Serial.println("Waiting 10 seconds before checking the Mailbox again");  // "Ждем 10 секунд до следующей проверки «почтового ящика»"
  }

  // ждем 10 секунд
  delay(10000);
}

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

#include <Mailbox.h>

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  // Инициализируем Bridge и Mailbox:
  Bridge.begin();
  Mailbox.begin();
  digitalWrite(13, HIGH);

  // Инициализируем последовательную передачу данных:
  Serial.begin(9600);

  // Ждем подключения Serial Monitor:
  while (!Serial);

  Serial.println("Mailbox Read Message\n");  // "Чтение сообщений в «почтовом ящике» Yun\n"
  Serial.println("The Mailbox is checked every 10 seconds. The incoming messages will be shown below.\n");  // "«Почтовый ящик» проверяется каждые 10 секунд. Входящие сообщения будут показаны ниже.\n"
}

void loop() {
  String message;

  // есть ли в «почтовом ящике» какие-нибудь сообщения?
  if (Mailbox.messageAvailable())
  {
  // считываем все сообщения в очередь:
    while (Mailbox.messageAvailable())
    {
      Mailbox.readMessage(message);
      Serial.println(message);
    }

    Serial.println("Waiting 10 seconds before checking the Mailbox again");  // "Ждем 10 секунд до следующей проверки «почтового ящика»"
  }

  // ждем 10 секунд
  delay(10000);
}

См.также

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