Как стать автором
Обновить
0
Jelastic
Jelastic DevOps PaaS для хостеров и ISV

Arduino сенсоры в Jelastic Cloud

Время на прочтение13 мин
Количество просмотров8.9K
Arduino in Jelastic Cloud Появление новой всеохватывающей сети Internet of Things (IoT) теперь стало возможным в связи с развитием облачных вычислений. В IoT реальные объекты имеют виртуальное представление, что позволяет нам взаимодействовать с ними через Интернет. Соответствующие ресурсы в IoT предоставляются с помощью облачных вычислений. Связь устройств друг с другом и с Интернетом позволяет управлять своими данными удаленно.
Для этого требуются приложения, которые:
  • предоставляют легкий, открытый и простой пользовательский интерфейс для обмена данными с устройствами;
  • могут обрабатывать частые запросы многочисленных устройств, которые участвуют в сети IоT;
  • могут легко расширяться для обеспечения новых функций.
Jelastic PaaS — одна из наиболее подходящих платформ для размещения веб-приложений, которые обслуживают IоT сети. Она предоставляет веб-разработчикам все, что нужно для быстрого и легкого развертывание масштабируемых приложений, которые управляют данными с датчиков online. Платформа Jelastic – это лучшее решение данной задачи, потому что она предоставляет полный доступ к окружению приложения, возможность создавать и использовать вашу собственную базу данных и даже доступ к локальной файловой системе (в отличии от Google App Engine).


Давайте рассмотрим простой пример создания и развертывания веб-приложения, которое получает и визуализирует данные с датчика.

Cоздание окружения на Jelastic

  1. Во-первых, вы должны создать и сконфигурировать окружение для вашего приложения. Для целей получения и визуализации данных с датчиков, нам понадобится сервер приложений (Tomcat 6) и сервера баз данных (MySQL 5.0)
    image

    Через несколько минут окружение будет создано. Также вы получите подтверждение на электронную почту, которое будет включать логин и пароль для вашей базы данных и ссылку на админ страницу MySQL.
  2. Зайдите на админ страницу MySQL и создайте новую базу данных для данных датчика (не беспокойтесь о сортировке, мы будем использовать базу данных для обработки простых данных).
    image

    Для этого примера нам понадобится две таблицы: одна для информации о датчике (например, название или id) и вторая для данных с датчика.
    image

    image


    Вы также можете создать нового пользователя со всеми привилегиями, но для нашего случая можно воспользоваться дефолтовым пользователем.
    Теперь ваше окружение полноценное и сконфигурированное под ваше приложение и ваши данные.

Создание Java сервлета

Второй шаг включает разработку Java приложения, которое будет получать информацию от датчика и визуализировать ее. Для этого случая нам понадобится два сервлета: один для получения данных от датчика и второй для ее визуализации.
  1. Запустите Eclipce IDE и создайте новый Dynamic Web Project (например, JelasticSensorArduino), выберите Tomcat в качестве сервера приложений.
  2. Откройте проект и создайте соответствующий класс сервлета (предлагаем вам создать иерархию пакета первой). Создайте класс JelasticArduinoServlet и добавьте в него следующий код:

    1. import java.io.IOException;
    2. import java.util.Date;
    3. import javax.servlet.http.*;
    4. import java.sql.Connection;
    5. import java.sql.DriverManager;
    6. import java.sql.ResultSet;
    7. import java.sql.Statement;
    8.  
    9. @SuppressWarnings("serial")
    10. public class JelasticArduinoServlet extends HttpServlet {
    11. public void doGet(HttpServletRequest req, HttpServletResponse resp)
    12. throws IOException {
    13. resp.setContentType("text/plain");
    14.  
    15. //Retrieve the sensor name and value from the GET requests
    16. String SensorName = req.getParameter("sensor");
    17.          String value = req.getParameter("value");
    18.          //Create a new date object for retrieving date values from the server
    19.          Date date = new Date();
    20.  
    21.          //Create the connection string to the MySQL DB hosted on Jelastic
    22.          String url="jdbc:mysql://mysql.arduinocloud.jelastic.servint.net:3306/sensor";
    23.          //User your credential for connecting to the DB
    24.          String user = "DBUSERNAME";
    25.          String password = "DBPASSWORD";
    26.  
    27.          Connection con = null;
    28.          Statement st = null;
    29.          ResultSet rs = null;
    30.  
    31.          boolean exists = false;
    32.          int id = 0;
    33.          //Make the connection to the server 
    34.          try {
    35.              con = DriverManager.getConnection(url, user, password);
    36.               st = con.createStatement();
    37.     //Execute the query for retrieving the sensor id  
    38.              rs = st.executeQuery("SELECT id from sensor where name='"+SensorName+"';");
    39.  
    40.              if (rs.next()) {
    41.                  exists = true;
    42.                  id = rs.getInt(1);
    43.              }
    44.              //If there is an ID for the given sensor name update the value 
    45.              if(exists) {
    46.              st.executeUpdate("Insert into data(sensorid, date, value) VALUES ('"+id+"','"+date+"','"+value+"');");
    47.             }
    48.  
    49.              resp.getWriter().println("Sensor data updated!");
    50.  
    51.              con.close();
    52.  
    53.          }catch (Exception ex) {
    54.          resp.getWriter().println(ex.toString());
    55.         }
    56.  
    57. }
    58. }
    59.  

    Это код сервлета, обрабатывающего обновления значений датчика. Он может быть вызван с помощью Arduino или вашего браузера:
    http://server.ip/servletname?sensor=sensorname&value=sensorvalue
    Сначала он обращается к базе данных датчика и получает ее ID. Затем ID обновляет данные таблицы соответственно.
  3. Давайте перейдем к JSP-файлу, который будет визуализировать данные с датчика. JSP-файл должен быть создан в папке WebContent в структуре вашего проекта. Создайте новый файл (например, sensorgraph.jsp):

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ page import="java.util.List" %>
    3. <%@ page import="java.sql.Connection" %>
    4. <%@ page import="java.sql.DriverManager" %>
    5. <%@ page import="java.sql.ResultSet" %>
    6. <%@ page import="java.sql.Statement" %>
    7.  
    8. <html>
    9.   <head>
    10.     <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
    11.     <script type="text/javascript" src="www.google.com/jsapi"></script>
    12.     <script type="text/javascript">
    13.       google.load("visualization""1"{packages:["corechart"]});
    14.       google.setOnLoadCallback(drawChart);
    15.       function drawChart() {
    16.         var data = new google.visualization.DataTable();
    17.         data.addColumn('string''Time');
    18.         data.addColumn('number''<%=request.getParameter("sensor")%>');
    19.         <%
    20.         int counter=1;
    21.         String SensorName = request.getParameter("sensor");
    22.         if (SensorName == null) {
    23.          SensorName = "temp";
    24.         }
    25.  
    26.         String url = "jdbc:mysql://mysql.arduinocloud.jelastic.servint.net:3306/sensor";
    27.         String user = "DBUSERNAME";
    28.         String password = "DBPASSWORD";
    29.  
    30.         Connection con = null;
    31.         Statement st = null;
    32.         ResultSet rs = null;
    33.  
    34.         boolean exists = false;
    35.         int id = 0;
    36.  
    37.           try {
    38.             con = DriverManager.getConnection(url, user, password);
    39.             st = con.createStatement();
    40.             rs = st.executeQuery("SELECT id from sensor where name='"+SensorName+"';");
    41.  
    42.             if (rs.next()) {
    43.                 exists = true;
    44.                 id = rs.getInt(1);
    45.             }
    46.  
    47.             if(exists) {
    48.              rs = st.executeQuery("SELECT value from data where sensorid="+id);
    49.  
    50.              while (rs.next()) {
    51.              counter++;
    52.              }
    53.              %>
    54.                 data.addRows(<%=counter%>);
    55.                 <%
    56. rs = st.executeQuery("SELECT date, value from data where sensorid="+id);
    57.              counter = 0;
    58.              while (rs.next()) {
    59.  
    60.              %>
    61.                     data.setValue(<%=counter%>0'<%= rs.getString(1) %>');
    62.                     data.setValue(<%=counter%>1<%= rs.getString(2) %>);
    63.                     <%
    64.              counter++;
    65.              }
    66.  
    67.             }
    68.             con.close();
    69.         }catch (Exception ex) {ex.printStackTrace();}
    70.  
    71.     %>
    72.  
    73.         var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    74.         chart.draw(data, {width: 600, height: 240, title: 'My Arduino <%=SensorName%> Sensor Readings'});
    75.       }
    76.     </script>
    77.   </head>
    78.   <body>
    79.     <p></p>
    80.     <div id="chart_div"></div>
    81.  
    82.   </body>
    83. </html>
    84.  


    JSP использует Google Chart API для визуализации данных (элемент chart_div). Для этого ему необходимо заполнить поля данными для диаграммы путем извлечения значений из базы данных.
    Вы могли заметить, что в начале HTML код использует определенный стиль CSS, включенный в файл с именем main.css. Чтобы включить такой файл в ваш проект, просто создайте новую папку в разделе WebContent/stylesheets вашего проекта.

    body {
    font-family: Verdana, Helvetica, sans-serif;
    background-color: #FFFFFF;
    }

  4. И последнее, но не менее важное, вам необходимо отредактировать файл web.xml (папка WEB-INF) и создать соответствующий сервлет «имя-отображение», чтобы связать сервлеты с JSP-файлом. Замените содержимое web.xml на следующее:

    1. <?xml version=“1.0″ encoding=“UTF-8″?>
    2.  
    3. <web-app xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns=“http://java.sun.com/xml/ns/javaee” xmlns:web=“http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” id=“WebApp_ID” version=“2.5″>
    4.  
    5. <display-name>JelasticSensorArduino</display-name>
    6.  
    7. <servlet>
    8.  
    9. <servlet-name>JelasticArduino</servlet-name>
    10.  
    11. <servlet-class>doukas.jelastic.arduino.JelasticArduinoServlet</servlet-class>
    12.  
    13. </servlet>
    14.  
    15. <servlet-mapping>
    16.  
    17. <servlet-name>JelasticArduino</servlet-name>
    18.  
    19. <url-pattern>/jelasticarduino</url-pattern>
    20.  
    21. </servlet-mapping>
    22.  
    23. <welcome-file-list>
    24.  
    25. <welcome-file>sensorgraph.jsp</welcome-file>
    26.  
    27. </welcome-file-list>
    28.  
    29. <servlet>
    30.  
    31. <servlet-name>add</servlet-name>
    32.  
    33. <servlet-class>doukas.jelastic.arduino.JelasticArduinoServlet</servlet-class>
    34.  
    35. </servlet>
    36.  
    37. <servlet-mapping>
    38.  
    39. <servlet-name>add</servlet-name>
    40.  
    41. <url-pattern>/add</url-pattern>
    42.  
    43. </servlet-mapping>
    44.  
    45. </web-app>


Развертывание и тестирование приложения

Теперь вы за один шаг от того, чтобы увидеть, как ваше приложение получает и визуализирует данные с датчика.
  1. Во-первых, вам понадобится создать WAR архив с вашими сервлетами, чтобы развернуть приложение в окружении Jelastic.
  2. Загрузите ваш WAR-архив в Deployment Manager.
    image
  3. Разверните ваше приложение.
    image
  4. Еще одна маленькая деталь: необходимо загрузить mysql-connector jar файл.
    image

    image
  5. Давайте протестируем наше приложение.

    Для этого проследуйте по следующей ссылке (sensorcloud – имя окружения):
    http://sensorcloud.jelastic.servint.net/add?sensor=temp&value=20
    Вы увидите сообщение: «Sensor data updated!». Если это не так (очень маловероятно, если вы выполнили все шаги правильно), увидите сообщение об ошибке. Добавьте несколько значений датчика, используя предыдущую ссылку. Потом перейдите по следующей ссылке, чтобы увидеть визуализированные данные в виде графика:
    http://sensorcloud.jelastic.servint.net/?sensor=temp
    image
  6. Теперь осталось добавить код который будет считывать данные с датчика и сохранять их в базу.
    Следующий Си код считывает данные с датчика подключенного по Ethernet и сохраняет их в базе вашего окружения:

    1. #include <SPI.h>
    2.  
    3. #include <Ethernet.h>
    4.  
    5. // Enter a MAC address for your controller below.
    6. byte mac[] = {  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
    7. char serverName[] ="sensorcloud.jelastic.servint.net";
    8. // Initialize the Ethernet client library
    9. EthernetClient client;
    10.  
    11. void setup() {
    12. // start the serial library:
    13. Serial.begin(57600);
    14. //start the Ethernet connection:
    15. if (Ethernet.begin(mac) == 0) {
    16. Serial.println("Failed to configure Ethernet using DHCP");
    17. }
    18.  
    19. }
    20.  
    21. void loop() {
    22.  
    23. int temperature = analogRead(0);
    24. String s = String(temperature,DEC);
    25.  
    26. if (client.connect(serverName, 80)) {
    27. // Make a HTTP request:
    28. client.println("GET /add?sensor=temp&value="+s+" HTTP/1.0");
    29. client.println("Host:sensorcloud.jelastic.servint.net");
    30. client.println();
    31. client.stop();
    32. }
    33.  
    34. delay(60000);
    35. }
    36.  


Приложения такого типа предоставляют вам прямой и доступный способ загрузки показаний датчиков. Все, что вам нужно, это сетевой микроконтроллер, такой как Arduino, который может легко получить доступ к URL-адресам.

Очень важно, что Jelastic позволяет сконцентрироваться на функциональности приложения и не беспокоится о количестве одновременных запросов для обновления значений датчиков и настройке серверной среды для создания резервных копий ваших данных. Jelastic устраняет все дополнительные хлопоты и позволяет легко развертывать и масштабировать ваши приложения.

При подготовке использовалась статья Charalampos Doukas, автора книги «Arduino, Sensors and the Cloud», Using Jelastic for the Internet of Things.
Теги:
Хабы:
Всего голосов 16: ↑13 и ↓3+10
Комментарии3

Публикации

Информация

Сайт
jelastic.com
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
США

Истории