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

Arduino:Примеры/TemperatureWebPanel

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

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

Контакты:

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


Температурная веб-панель[1]

Этот пример показывает, как при помощи библиотеки Bridge и встроенного веб-сервера Arduino Yun отобразить данные, полученные от аналогового датчика.

Подготовьте вашу SD-карту, создав в ее корневой директории пустую папку под названием «arduino», а в ней подпапку под названием «www». Благодаря этому Yun создаст связь с SD-картой по пути «/mnt/sd».

В этой папке будет находиться простая веб-страница и копия zepto.js (мини-версии jQuery). Когда вы загрузите свой скетч, эти файлы будут размещены в папке «/arduino/www/TemperatureWebPanel» на вашей SD-карте.

Чтобы увидеть результат работы этого скетча, надо пройти по ссылке «http://arduino.local/sd/TemperatureWebPanel».

Во время работы Linux и скетча SD-карту можно вынуть, но не стоит делать этого в тот момент, когда система будет записывать на нее необходимые данные.

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

  • Плата Arduino Yun;
  • Температурный датчик TMP36;
  • SD-карта;

Цепь

Компьютер и Yun должны находиться в одной беспроводной сети. Температурный датчик подключите к 1-ому аналоговому контакту, а карту microSD вставьте в SD-слот на Yun.

Код

Подключаем библиотеки Bridge, YunServer и YunClient.

  1. #include <Bridge.h>
  2. #include <YunServer.h>
  3. #include <YunClient.h>

Инстанцинируем сервер, с помощью которого Yun будет «прослушивать» подключающихся клиентов.

  1. YunServer server;

Создаем строку, в которой будем хранить информацию о времени начала работы скетча, а также переменную, в которой будем хранить число, отображающее количество посещений страницы.

  1. String startString;
  2. long hits = 0;

В секции setup() начинаем последовательную передачу данных и инициализируем Bridge. Будет нелишним воспользоваться здесь встроенным светодиодом, оповещающим о начале и завершении активации Bridge.

  1. void setup() {
  2.   Serial.begin(9600);
  3.  
  4.   pinMode(13,OUTPUT);
  5.   digitalWrite(13, LOW);
  6.   Bridge.begin();
  7.   digitalWrite(13, HIGH);

Задаем 0-ой и 2-ой аналоговые контакты в качестве питающего и заземляющего контактов для датчика TMP36 (благодаря этому можно обойтись без макетной платы Breadboard).

  1. pinMode(A0, OUTPUT);
  2.   pinMode(A2, OUTPUT);
  3.   digitalWrite(A0, HIGH);
  4.   digitalWrite(A2, LOW);

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

  1. server.listenOnLocalhost();
  2.   server.begin();

Создаем экземпляр класса Process, с помощью которого будем получать информацию о времени начала скетча. Для этого запускаем команду date, а результат записываем созданную ранее строку.

  1. Process startTime;
  2.   startTime.runShellCommand("date");
  3.   while(startTime.available()) {
  4.     char c = startTime.read();
  5.     startString += c;
  6.   }
  7. }

В секции loop() инстанцинируем класс YunClient, чтобы получать информацию о клиентах, идущих от сервера.

  1. YunClient client = server.accept();

Если подключился новый клиент, то считываем присланную им команду, а затем выводим ее на Serial Monitor.

  1. if (client) {
  2.     String command = client.readString();
  3.     command.trim();        //удаляем пробельные символы
  4.     Serial.println(command);

Если команда – это «temperature», фиксируем время и считываем данные с температурного датчика.

  1. if (command == "temperature") {
  2.  
  3.       Process time;
  4.       time.runShellCommand("date");
  5.       String timeString = "";
  6.       while(time.available()) {
  7.         char c = time.read();
  8.         timeString += c;
  9.       }
  10.       Serial.println(timeString);
  11.       int sensorValue = analogRead(A1);

Конвертируем данные датчика в градусы Цельсия.

  1. // конвертируем считанные данные в милливольты:
  2.       float voltage = sensorValue *  (5000/ 1024);
  3.       // конвертируем милливольты в градусы Цельсия:
  4.       float temperature = (voltage - 500)/10;

Выводим на Serial Monitor данные о текущем времени, температуре, времени начала работы скетча и количестве посещений страницы – все это при помощи функции client.print().

  1. client.print("Current time on the Yun: "); // "Текущее время на Yun: "
  2.       client.println(timeString);
  3.       client.print("<br>Current temperature: "); // "<br>Температура сейчас: "
  4.       client.print(temperature);
  5.       client.print(" degrees C"); // " градусов Цельсия"
  6.       client.print("<br>This sketch has been running since "); // "<br>Этот скетч работает с "
  7.       client.print(startString);
  8.       client.print("<br>Hits so far: "); // "<br>Количество посещений страницы на данный момент: "
  9.       client.print(hits);
  10.     }

Закрываем соединение, чтобы освободить все неиспользованные ресурсы, а затем поднимаем значение счетчика посещений страницы.

  1. client.stop();
  2.     hits++;
  3.   }

Делаем небольшую паузу перед тем, как начать снова.

  1. delay(50); // пауза в 50 миллисекунд
  2. }

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

  1. /*
  2. Температурный веб-интерфейс
  3. Этот пример показывает, как посредством библиотеки Bridge и встроенного веб-сервиса Yun обрабатывать данные от аналогового датчика.
  4. Цепь:
  5.  * Температурный датчик TMP36 подключен к 1-ому аналоговому контакту
  6.  * SD-карта, подсоединенная к SD-слоту Arduino Yún
  7.  
  8. Подготовьте SD-карту, создав в корневой директории
  9. пустую папку под названием «arduino» и подпапку под названием «www».
  10. Благодаря этому Yun создаст связь с SD-картой по пути «/mnt/sd».
  11.  
  12. В этой папке будет находиться простая веб-страница и копия zepto.js (мини-версии jQuery).
  13. Когда вы загрузите скетч, эти файлы будут размещены в папке «/arduino/www/TemperatureWebPanel» на SD-карте.
  14.  
  15. Чтобы увидеть результат работы скетча, пройдите по ссылке http://arduino.local/sd/TemperatureWebPanel.
  16.  
  17. Во время работы Linux и скетча SD-карту можно вынуть, но не стоит делать этого в тот момент, когда система будет записывать на нее необходимые данные.
  18. Создан 6 июля 2013 Томом Иго (Tom Igoe).
  19. Этот код не защищен авторским правом.
  20.  
  21.  */
  22. #include <Bridge.h>
  23. #include <YunServer.h>
  24. #include <YunClient.h>
  25.  
  26. // Прослушиваем порт 5555 (это порт по умолчанию).
  27. // Веб-сервер Yun будет перенаправлять туда все HTTP-запросы.
  28. YunServer server;
  29. String startString;
  30. long hits = 0;
  31.  
  32. void setup() {
  33.   Serial.begin(9600);
  34.  
  35.   // Инициализируем Bridge
  36.   pinMode(13,OUTPUT);
  37.   digitalWrite(13, LOW);
  38.   Bridge.begin();
  39.   digitalWrite(13, HIGH);
  40.  
  41.   // Делаем 0-ой и 2-ой аналоговые контакты питанием и «землей» для датчика TMP36:
  42.   pinMode(A0, OUTPUT);
  43.   pinMode(A2, OUTPUT);
  44.   digitalWrite(A0, HIGH);
  45.   digitalWrite(A2, LOW);
  46.  
  47.   // Делаем так, чтобы прослушивать только те входящие соединения,
  48.   // которые идут от локального хоста (т.е. не от внешней сети):
  49.   server.listenOnLocalhost();
  50.   server.begin();
  51.  
  52.   // Фиксируем время начала работы скетча:
  53.   Process startTime;
  54.   startTime.runShellCommand("date");
  55.   while(startTime.available()) {
  56.     char c = startTime.read();
  57.     startString += c;
  58.   }
  59. }
  60.  
  61. void loop() {
  62.   // «Берем» клиентов, идущих от сервера:
  63.   YunClient client = server.accept();
  64.  
  65.   // Есть ли новый клиент?
  66.   if (client) {
  67.     // Считываем команду
  68.     String command = client.readString();
  69.     command.trim();        // удаляем пробельные символы
  70.     Serial.println(command);
  71.     // Эта команда – «temperature»?
  72.     if (command == "temperature") {
  73.  
  74.       // Запрашиваем у сервера и фиксируем текущее время:
  75.       Process time;
  76.       time.runShellCommand("date");
  77.       String timeString = "";
  78.       while(time.available()) {
  79.         char c = time.read();
  80.         timeString += c;
  81.       }
  82.       Serial.println(timeString);
  83.       int sensorValue = analogRead(A1);
  84.       // конвертируем считанные данные в милливольты:
  85.       float voltage = sensorValue *  (5000/ 1024);
  86.       // конвертируем милливольты в градусы Цельсия:
  87.       float temperature = (voltage - 500)/10;
  88.       // Выводим данные на Serial Monitor:
  89.       client.print("Current time on the Yun: ");  // "Текущее время на Yun: "
  90.       client.println(timeString);
  91.       client.print("<br>Current temperature: ");  // "<br>Температура сейчас: "
  92.       client.print(temperature);
  93.       client.print(" degrees C");  // " градусов Цельсия"
  94.       client.print("<br>This sketch has been running since ");
  95.       client.print(startString);  // "<br>Этот скетч работает с "
  96.       client.print("<br>Hits so far: ");  // "<br>Количество посещений страницы на данный момент: "
  97.       client.print(hits);
  98.     }
  99.  
  100.     // Закрываем соединение и высвобождаем ресурсы:
  101.     client.stop();
  102.     hits++;
  103.   }
  104.  
  105.   delay(50); // Пауза каждые 50 миллисекунд
  106. }

См.также

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

  1. Arduino - Temperature Web Panel