2020-Desarrollo Plataforma Web
2020-Desarrollo Plataforma Web
2020-Desarrollo Plataforma Web
2
Este documento está dedicado a cada persona que quiera incursionar,
desarrollar y gestionar tecnología IoT, se espera que, para innovaciones futuras
en la Universidad Cooperativa de Colombia, sea tomado en cuenta como un
boceto, tanto para laboratorios virtuales de electrónica, como proyectos
complejos investigativos de desarrollo para las distintas ramas de la ingeniería
de la UCC.
3
CONTENIDO
4
LISTA DE ILUSTRACIONES
5
LISTA DE TABLAS
6
LISTA DE ANEXOS
7
RESUMEN
8
Palabras clave
Protocolo
Servidor
Broker
Arduino
IoT
9
ABSTRACT
10
Keywords
Protocol
Server
Broker
Arduino
IoT
11
Capitulo I. PLANTEAMIENTO DEL PROBLEMA
1. Planteamiento general
12
El internet es una herramienta indispensable en el trabajo de hoy en día; se
pretende en una finalidad de este caso de estudio, llegar a una aplicación
controlable desde cualquier dispositivo conectado a una red LAN, con lo cual
facilitaría procesos y el incentivo a generar más empleos, que, a distancias
lejanas del operador, pueden ser desarrollados y así evitar factores como alto
riesgo o por optimización de tiempos, como lo pueden ser:
- Industrias petrolíferas
- Industrias manufactureras
- Industria aeroespacial
- Industrias de telecomunicaciones
- Laboratorios para la educación a distancia.
- Desarrollo e implementaciones de tecnologías para la empresa o el
hogar.
¿Se puede hacer un montaje de control transmitido en una red a bajos costos,
que pueda aplicar alto estándares de tecnologías eficientes de comunicación,
al controlar hardware?
13
2. Justificación
14
3. Objetivos
Desarrollar una plataforma web para un sistema de control IOT sobre Arduino
y MQTT, a bajos costos, con un caso de estudio de un servo motor en lazo
abierto.
15
Capitulo II. DISEÑO INGENIERIL
16
Capitulo III. ANÁLISIS Y DISCUSIÓN
1 https://mqtt.org/
2 https://developer.mozilla.org/es/docs/Web/HTTP
17
aplicación para cubrir un rango de perfiles de dispositivos. Las aplicaciones
típicas incluyen dispositivos de intercambio, dispositivos de seguridad grandes
redes de control con E/S.3
3 https://es.wikipedia.org/wiki/DeviceNet
4 https://en.wikipedia.org/wiki/EtherNet/IP
5 https://es.wikipedia.org/wiki/Controlnet
6 https://www.ethercat.org/es/technology.html
18
Tabla 1. Cuadro Comparativo protocolos o tecnologías.7
En MQTT la autenticación
se puede realizar
En redes 3G es mediante identificador de
93 veces más cliente,
rápido, usa 8 usuario/contraseña o
veces menos Está enfocado al envío certificados x509.
tráfico y gasta de datos en aplicaciones
170 veces menos donde se requiere muy MQTT como HTTP La tecnología MQTT se
energía en los poco ancho de banda. pueden operar sobre TLS define a sí misma como
receptores. Además, sus o SSL, ya que esto forma La cabecera más un modelo de MQTT básicamente está
MQTT
7 Autoría propia
19
HTTP es un
protocolo basado en el
El protocolo HTTP es un principio de cliente-
La implementación de servido, petición -
protocolo ampliable y
HTTP es 20 este nodo es Adquirir respuesta
fácil de usar. Su
veces más lento relativamente simple certificados
estructura cliente-
que MQTT, entre sus puede ser HTTP puede operar sobre La cabecera más
servidor, junto con la
HTTP
necesita más características consta gratuito o TLS o SSL, ya que esto pequeña de
capacidad para usar
tráfico y de dos interfaces de red, costar forma parte del protocolo HTTP es de 26
cabeceras, permite a
energéticamente servidor DNS, servidor entre US$13. TCP/IP. Bytes.
este protocolo
consume mucho HTTP y 5 y US$15
evolucionar con las
más. FTP, ruteador (iptables), por año.
nuevas y futuras
servidor de voip.
aplicaciones en Internet.
20
Originalmente, el
protocolo Ethernet/IP no
implementaba ningún
mecanismo de seguridad, Es un protocolo de
ETHERNET/IP
21
Obtiene un
El protocolo es adecuado
No existe un límite No necesita un funcionamiento
para aplicaciones de
práctico para el número hardware completamente
Los telegramas seguridad con un nivel de
de nodos esclavos en especial. redundante con un
en un mensaje integridad de seguridad
una red EtherCAT Cualquier MAC cambio extremadamente
EtherCAT de hasta SIL 3 Los dispositivos maestros
rápido.
ETHERCAT
Ethernet servirá.
pueden tener simplemente emiten el
Dado que
hasta 60 KB, lo mensaje y reciben la
Open EtherCAT tiene
que significa que respuesta. Mensaje único
muy pocos
puede mover una entrante - mensaje único
La tecnología de recursos, Los mensajes EtherCAT
gran cantidad de saliente.
datos de un nodo los dispositivos esclavos seguridad EtherCAT ha tampoco necesita se pasan al siguiente
al maestro. necesitan incrustar un sido desarrollada según el un procesador de nodo del anillo antes de
ASIC de hardware estándar IEC 61508, comunicaciones ser procesados por ese
específico para cuenta con la certificación dedicado. nodo, lo que
implementar EtherCAT TÜV y está estandarizada proporciona a la red una
en IEC 61784-3 velocidad y eficiencia.
22
Se concluye del cuadro comparativo (Tabla 1. Cuadro Comparativo Protocolos o
tecnologías), y por ende la decisión como broker el protocolo MQTT:
Por la ligereza del protocolo MQTT requiere un ancho de banda mínimo, lo cual
es importante en redes inalámbricas, o conexiones con posibles problemas de
calidad.
23
Ilustración 1. Descripción Linux usado.8
24
Ilustración 3. Puertos abiertos Linux 2.10
Nginx
25
MySQL
26
Ilustración 7. BD. mqtt_user.14
PHP
Paneles de control montados, para una manipulación más intuitiva del servidor,
VESPA para control de tecnologías y permisos al servidor, y EMQ-X, para
MQTT.
VESTA
Usuario: admin
Contraseña: opPkSmQ5GK
27
Ilustración 9. Panel de ingreso VESTA.16
28
Ilustración 11. Info Base de datos desde VESTA.18
18 Autoría propia
29
Ilustración 12. Tecnologías usadas en el servidor.19
19 Autoría propia
30
Ilustración 13. Visualización de puertos abiertos en el panel VESTA.20
31
EMQ-X
Usuario: admin
Contraseña: public
32
Ilustración 17. Puertos que usa EMQ-X.24
phpMyAdmin
Usuario: admin_iot
Contraseña: 10uccpruebaelectro.bogota
33
Ilustración 19. Base de datos creada.26
Programación WEB
<!DOCTYPE html>
<html lang="es">
<head>
<title>UCC IOT</title>
<script src="https://unpkg.com/[email protected]/dist/mqtt.min.js"></script>
<script src="libs/jquery/jquery/dist/jquery.js"></script>
26 Autoría propia
34
<link rel="stylesheet" href="../assets/glyphicons/glyphicons.css" type="text/css" />
</head>
<body>
<a class="navbar-brand">
<a href="https://www.ucc.edu.co/formacion-continua/Paginas/seminario-de-profundizacion-en-
redes-de-telecomunicaciones-.aspx">
</a>
</a>
</div>
<small class="text-muted">Laboratorios</small>
</li>
<li>
<span class="nav-icon">
</span>
35
</a>
</li>
<li>
<a href="/views/page/blank.html">
<span class="nav-icon">
</span>
</a>
</li>
</ul>
</nav>
</div>
<div flex-no-shrink>
<div ui-include="'../views/blocks/aside.bottom.0.html'"></div>
</div>
</div>
</div>
<div class="app-footer">
</div>
<div class="nav">
</div>
</div>
</div>
36
- Cuerpo, recuadro central (Opciones principales de la aplicación).
<div class="padding">
<div class="margin">
</div>
<div class="row">
<div class="row">
<div class="col-sm-6">
</div>
<div class="clear">
<div class="text-muted">Angulo</div>
</div>
</div>
</div>
<div class="col-sm-6">
</div>
<div class="clear">
<div class="text-muted">Angulo</div>
</div>
</div>
</div>
37
<div class="col-sm-6">
</div>
<div class="clear">
<div class="text-muted">Angulo</div>
</div>
</div>
</div>
<div class="col-sm-6">
</div>
<div class="clear">
<div class="text-muted">Angulo</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-sm-8">
<div class="box-header">
<h3>Visualizacion Real</h3>
<center>
<script>
38
window.URL = window.URL || window.webkitURL;
navigator.getUserMedia({audio:false, video:true},function(vid){
document.querySelector('video').src = window.URL.createObjectURL(vid);
});
</script>
</center>
</div>
<div class="box-body">
data: [[1, 6.1], [2, 6.3], [3, 6.4], [4, 6.6], [5, 7.0], [6, 7.7], [7, 8.3]],
},
data: [[1, 5.5], [2, 5.7], [3, 6.4], [4, 7.0], [5, 7.2], [6, 7.3], [7, 7.5]],
],
colors: ['#0cc2aa','#fcc100'],
series: { shadowSize: 3 },
tooltip: true,
</div>
39
</div>
</div>
<div class="box-header">
<h3>Angulo Actual</h3>
</div>
<div class="box-body">
</div>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
// connect options
const options = {
connectTimeout: 4000,
// Authentication
clientId: 'iotucc',
// username: 'emqx',
// password: 'emqx',
keepalive: 60,
clean: true,
40
// TCP/TLS connect url
client.on('connect', () => {
//console.log('Conectado')
client.subscribe('angulo',{qos:0},(error)=>{
if(!error){
//console.log('Suscripcion exitosa')
else{
//console.log('Suscripcion errada')
})
})
client.on('message',(topico, message)=>{
process_msg(message);
})
})
})
function update_values(angulo){
$("#angulo_actual").html(angulo);
function process_msg(message){
var sp = msg.split(",");
update_values(angulo_actual);
41
}
function process_angulo_0(){
client.publish('angulo','0',(error)=>{
})
function process_angulo_45(){
client.publish('angulo','45',(error)=>{
})
function process_angulo_90(){
client.publish('angulo','90',(error)=>{
})
function process_angulo_180(){
client.publish('angulo','180',(error)=>{
})
//process_msg("90")
</script>
</body>
</html>
27 https://www.bejob.com/que-es-la-programacion-con-arduino-y-para-que-sirve/
42
- Declaración de librerías.
#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <esp32-hal-ledc.h>
#define TIMER_WIDTH 16
char msg[2];
int posm=0;
int angulo=0;
long lastMsg=0;
WiFiClient espClient;
PubSubClient client(espClient);
43
void setup_wifi(){
WiFi.begin(ssid, password);
IPAddress ip(192,168,1,250);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
//Serial.println("Conectado Wifi");
//Serial.println(WiFi.localIP());
++contconexion;
delay(300);
//Serial.print(".");
void reconnect(){
while(!client.connected()){
//Serial.println("");
String clientId="iotucc_";
if (client.connect(clientId.c_str(),mqtt_user,mqtt_pass)){
// Serial.println("Conectado");
client.subscribe("angulo");
else{
//Serial.print("Fallo de conexion");
//Serial.print(client.state());
delay(5000);
44
}
String incoming="";
//Serial.print(topic);
//Serial.println("");
incoming+= (char)payload[i];
incoming.trim();
if(incoming.equals("0")){
ledcWrite(1,2222);
if(incoming.equals("45")){
ledcWrite(1,3333);
if(incoming.equals("90")){
ledcWrite(1,4700);
if(incoming.equals("180")){
ledcWrite(1,7777);
45
}
/////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(115200);
setup_wifi();
ledcAttachPin(2, 1);
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
////////////////////////////////////////////////////////////////
void loop() {
if(!client.connected()){
reconnect();
client.loop();
long now=millis();
lastMsg=now;
// angulo=90;
// to_send.toCharArray(msg, 25);
// Serial.print("Publicamos mensaje");
// Serial.println(msg);
46
// client.publish("angulo",msg);
Evidencias de funcionamiento
47
Ilustración 22. Aplicación WEB responsiva No. 2.30
30 Autoría propia
48
Ilustración 23. Conexión Serial ESP WROOM - 32.31
49
Ilustración 25. Servo motor a 45°.33
50
Capitulo IV. CONCLUSIONES
Al elegir MQTT se elige el broker o protocolo más adecuado para poder enviar
eficientemente ordenes e información por medio de arreglos, en una trama muy
eficiente.
Usuario: [email protected]
Contraseña: 10uccpruebaelectro.bogota
51
REFERENCIAS BIBLIOGRÁFICAS
Jan Bartnitsky, (23 enero de 2018), HTTP vs MQTT performance tes, Flespi,
Recuperado de: https://flespi.com/blog/http-vs-mqtt-performance-tests
Aspl Hosting, (2 abril de 2019), MQTT para conectar una WEB online con un
backoffice remoto, Open expo europe, Recuperado de
https://openexpoeurope.com/es/mqtt-para-conectar-una-web-online-con-un-
backoffice-remoto-aspl/
52
Beckhoff EtherCAT components, Beckhoff, Recuperado de:
https://www.beckhoff.com/english.asp?highlights/ethercat/default.htm?id=3557
204338120?pk_campaign=AdWords-AdWordsSearch-
EtherCatEN_DynAd&pk_kwd=ethercat
53
ANEXOS
36 https://www.electronicoscaldas.com/datasheet/MG90S_Tower-Pro.pdf
54
Esquemático ESP WROOM - 32.
Para más características se recomienda consultar los datasheet ya sea en la página referenciada, o el documento se encuentra
en el Google Drive del proyecto.
37 https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf
54
Rendimiento y comportamiento el servidor.
55
Anexo 5. Rendimiento de consultas MySQL y peticiones en NGINX.40
40 Autoría propia
56