Como crear un tunel ssh para acceder a una BBDD Oracle


En una presentación de krisrice y thatjeffsmith en KScope15, Jeff señaló algunas nuevas características, incluyendo una para crear túneles SSH usando el programa gratuito que ofrece Oracle para manejar cualquier BBDD ORacle :  el   SQL Developer.

SQL Developer es un entorno de desarrollo de uso general (y gratuito) para la base de datos Oracle. Esta característica parece que debería funcionar independientemente de si realmente desea conectarse a una base de datos Oracle

Sí, puede crear túneles SSH de la forma tradicional utilizando su cliente de línea de comandos SSH favorito   tambien deberia poderse hacer de un ambiente mas potente   como es el entorno de SQL Developer. Este post no es un pros / contras, es sólo una introducción a la función.

Si usted necesita a veces crear túneles de SSH  para lanzar  SQL entonces usted puede encontrar esto interesante.

En esta  introducción se hacen los siguientes supuestos::

  • Tiene un servidor remoto que tiene SSH en ejecución y admite la autenticación basada en claves.
  • Ya tiene sus claves públicas y privadas SSH generadas y correctamente instaladas en el servidor remoto.
  • Debe enviar las solicitudes a cualquier servicio que se ejecute en un puerto del servidor remoto que pueda estar bloqueado por un servidor de seguridad o, de lo contrario, sólo es accesible una vez que haya iniciado sesión en ese servidor remoto. Para este último punto,  se supone que se cuenta con una instancia de una base de datos Oracle que se ejecuta detrás de un firewall en un servidor remoto y el único puerto accesible a los hosts externos es el puerto TCP 22 (predeterminado para SSH). Usando un túnel SSH con reenvío de puertos, puede obtener SQL Developer para arriba y corriendo en su PCl para que pueda conectarse a su instancia de base de datos remota de Oracle. 

Aquí está el  modo  de hacerlo:

  • En primer lugar, si no lo tiene todavía tendrá que descargar SQL Developer versión 4.1 o posterior (en la versión 4.0  esta característica aún no estaba disponible)

 

  • A continuación, abra SQL Developer y elija View > SSH que abrirá el panel de conexiones SSH.
  • En el panel SSH, haga clic con el botón derecho en Hosts SSH y seleccione Nuevo host SSH …
  • Rellene el cuadro de diálogo con sus datos de conexión según sea necesario y pulse OK. Nota: si especifica el puerto incorrecto (como lo hice) en el servidor remoto o desea especificar el puerto TCP para enlazar sus conexiones locales, puede editar las conexiones posteriormente.

 

 

 

  • En este ejemplo,se  esta utilizando claves SSH para conectarse al servidor remoto. Esta es la práctica recomendada y también eliminará el paso de tener que ingresar una contraseña en el futuro. Nota: La clave que especifique en este cuadro de diálogo debe ser su clave privada y su clave pública ya debe estar configurada en el servidor remoto con los permisos correctos para que esto funcione correctamente.
  • El primer puerto especificado es el puerto del servicio (Oracle DB) que se ejecuta en el servidor remoto y el segundo (puerto local) puede ser cualquier puerto disponible en su máquina que desee utilizar. Este túnel enviará el tráfico de su máquina en el puerto local al servidor remoto. En este caso, probablemente recomendaría usar el mismo puerto que el servidor remoto a menos que tenga varios túneles ejecutándose a servidores remotos al mismo tiempo.

 

  • En el panel SSH debe aparecer su nueva conexión. Haga clic con el botón derecho en la conexión y elija Connect .
  • En este punto, si su conexión tiene éxito usted no necesariamente recibe ninguna retroalimentación positiva. Puede comprobar si está conectado al pasar el ratón sobre el túnel SSH con su ratón o haciendo clic con el botón Disconnect en él de nuevo para ver si se le pide que Disconnect .
  • Por último, debe tener un túnel SSH que se ejecute en su máquina local que puede utilizar para acceder a su base de datos remota de Oracle mediante la conexión a localhost:<local port> que reenvía su solicitud de conexión y todos los otros SQL Developer TCP tráfico Al servidor remoto en el puerto TCP que ha especificado. Excepto para el nombre de host y el número de puerto TCP, debe especificar todos los demás detalles de conexión como de costumbre.

 

 

Desde  luego era  una característica muy demandada por la comunidad de usuarios de BBDD Oracle que necesitan conectarse  en un ambiente de host .  Espero que haya encontrado esta visión general de la creación de túneles SSH en Oracle SQL Developer  útil y que le ayude en el camino.

 

 

 

Anuncios

Soporte multilenguaje en Android Studio


Android se ejecutará en muchos dispositivos en muchas regiones. Para llegar a la mayoría de los usuarios, su aplicación debe manejar texto, archivos de audio, números, moneda y gráficos de manera apropiada a los locales donde se utilizará su aplicación.

 

En realidad al escribir una app ya se debe tener un conocimiento práctico de Java y estar familiarizado con la carga de recursos de Android, la declaración de elementos de la interfaz de usuario en XML, consideraciones de desarrollo como el ciclo de vida de la actividad y los principios generales de internacionalización y localización.

Es una buena práctica usar el marco de recursos de Android para separar los aspectos localizados de su aplicación tanto como sea posible de la funcionalidad básica de Java:

  • Puede poner la mayor parte o la totalidad del contenido de la interfaz de usuario de su aplicación en archivos de recursos, tal como se describe en este documento y en Proporcionar recursos .
  • El comportamiento de la interfaz de usuario, por otra parte, es impulsado por su código Java. Por ejemplo, si los usuarios introducen datos que deben formatearse o clasificarse de forma diferente dependiendo de la configuración regional, utilizarían Java para manejar los datos mediante programación. Este documento no cubre cómo localizar su código Java

Siempre es una buena práctica extraer strings de IU del código de tu app y conservarlas en un archivo externo. Android facilita esta tarea con un directorio de recursos en cada proyecto del sistema operativo.

Si creo su proyecto con herramientas del Android SDK (lea Cómo crear un proyecto en Android), las herramientas crean un directorio res/ en el nivel superior del proyecto. El directorio res/ contiene subdirectorios para varios tipos de recursos. También hay algunos archivos predeterminados, como res/values/strings.xml, que contiene los valores de tu string.

Agregar los valores de string para cada configuración regional en el archivo correspondiente.

En tiempo de ejecución, el sistema Android usa un conjunto correspondiente de recursos de string basado en la configuración regional actual del dispositivo del usuario.

Por ejemplo, a continuación se indican algunos archivos diferentes de recursos de strings para distintos idiomas.

Inglés (configuración regional predeterminada), /values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>

    <string name="title">My Application
    <string name="hello_world">Hello World!

Español, /values-es/strings.xml:

<?xml version="1.0" encoding="utf-8"?>

    <string name="title">Mi Aplicación
    <string name="hello_world">Hola Mundo!

Nota: Puede usar un calificador de configuración regional (o cualquier calificador de configuración) en cualquier tipo de recurso, como lo harías si deseas proporcionar versiones localizadas del elemento de diseño de tu mapa de bits. Para más información, consulta Localización.

Usar los recursos de string

Puede hacer referencia a sus recursos de string en el código fuente y en otros archivos XML usando el nombre del recurso definido por el atributo namedel elemento .

En su código fuente, puede hacer referencia a un recurso de string con la sintaxis R.string.. Existen diferentes métodos disponibles que aceptan un recurso de string de esta manera.

Por ejemplo:

// Get a string resource from your app's Resources String hello = getResources().getString(R.string.hello_world); // Or supply a string resource to a method that requires a string TextView textView = new TextView(this); textView.setText(R.string.hello_world);

En otros archivos XML, puedes hacer referencia a un recurso de string con la sintaxis @string/ siempre que el atributo XML acepte un valor de string.

Por ejemplo:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />
Paso 1:

Crear un nuevo proyecto Hello World.

Paso 2:
Abrir el archivo main_activity.xml y personalice el texto como desee.

Utilice la pestaña Diseño y cree una nueva traducción haciendo clic en el botón globo.

Paso 3:

Ahora Android Studio genera un nuevo archivo xml en esta ruta de acceso: res / values / strings.

Resultados.

Por qué los recursos predeterminados son importantes

Siempre que la aplicación se ejecute en una configuración regional para la que no haya proporcionado texto específico de la configuración regional, Android cargará las cadenas res/values/strings.xml de res/values/strings.xml . Si este archivo predeterminado está ausente o si falta una cadena que su aplicación necesita, su aplicación no se ejecutará y mostrará un error. El ejemplo siguiente ilustra lo que puede suceder cuando el archivo de texto predeterminado está incompleto.

Ejemplo:

El código Java de una aplicación se refiere a sólo dos cadenas, text_a y text_b . Esta aplicación incluye un archivo de recursos localizados ( res/values-en/strings.xml ) que define text_a y text_b en inglés. Esta aplicación también incluye un archivo de recursos predeterminado ( res/values/strings.xml ) que incluye una definición para text_a , pero no para text_b :

Cuando esta aplicación se inicia en un dispositivo con la configuración regional en inglés, la aplicación puede ejecutarse sin ningún problema, porque res/values-en/strings.xml contiene ambas cadenas de texto res/values-en/strings.xml .
Sin embargo, el usuario verá un mensaje de error y un botón de cierre de la fuerza cuando esta aplicación se inicia en un dispositivo establecido en un idioma que no sea el inglés. La aplicación no se cargará.
Para evitar esta situación, asegúrese de que existe un archivo res/values/strings.xml y que define cada cadena res/values/strings.xml . La situación se aplica a todos los tipos de recursos, no sólo a las cadenas: Debe crear un conjunto de archivos de recursos predeterminados que contengan todos los recursos que su aplicación requiere: diseños, dibujos, animaciones, etc. Recursos .

 

 

Android de Como ENCUENTRA el recurso de coincidencia Óptima

Cuando  solicita  un recurso para el cual sea proporciona Alternativas, Android selecciona qué recurso alternativo ,como utilizar en Tiempo de ejecucion, según la configuración del dispositivo real. Para demostrar como Android selecciona un recurso alternativo, suponga que cadauino de los siguientes elementos de diseño contienen versiones diferentes de las mismas imágenes:

dibujable /
dibujable-es /
dibujable-fr-RCA /
dibujable-en-puerto /
dibujable-en-NoTouch-12key /
dibujable-puerto-LDPI /
dibujable-puerto-NoTouch-12key /

Y suponga que la configuracion del dispositivo es la siguiente:

Configuracion regional = en-GB
Orientación de la Pantalla = port
densidad de píxeles de la Pantalla = hdpi
tipo de pantalla táctil = notouch
director Método de entrada de texto =12key

Al comparar la configuracion del Dispositivo con los Recursos Alternativos Disponibles, Android Selecciona Elementos de Diseño de drawable-en-port.

Para Decidir Qué Recursos Como utilizar, El Sistema se basa en la siguiente lógica:

Figura 2: Diagrama de Flujo de la forma en la cual sea ENCUENTRA Android el recurso de coincidencia Óptima.

  1. Eliminar os Archivos de recursos que se contradicen con la configuración del Dispositivo.El Directorio drawable-fr-rCA/se elimina porque se contradice con la configuración regional en-GB.
    dibujable /
    dibujable-es /
    dibujable-fr-RCA /
    dibujable-en-puerto /
    dibujable-en-NoTouch-12key /
    dibujable-puerto-LDPI /
    dibujable-puerto-NoTouch-12key /
    

    Excepción: La densidad de píxeles de la Pantalla es el unico calificador Que No se Elimina DEBIDO A una contradicción. AUNQUE la densidad de la Pantalla del Dispositivo es IPAP, drawable-port-ldpi/no se Elimina Porque TODAS LAS densidades de Pantalla se consideran Como una coincidencia En Este punto.

  2. Elegir el (Próximo) calificador de alcalde precedencia de la Lista ( tabla 2 ). (Comenzar con MCC y continuar en forma descendente).
  3. ¿Alguno de los Directorios de recursos INCLUYE Este calificador?
    • La Respuesta Si es que no, volver al paso 2 y examinar · el siguiente calificador. (In the example, La Respuesta es “no” Hasta Que se Alcanza el calificador de idioma).
    • Si La Respuesta es sí, continuar con el paso 4.
  4. ELIMINAR los Directorios de recursos Que No INCLUYEN Este calificador. En the example, El Sistema Elimina Todos Los Que No Directorios INCLUYEN UN calificador de idioma:
dibujable /
dibujable-es /
dibujable-en-puerto /
dibujable-en-NoTouch-12key /
dibujable-puerto-LDPI / 
dibujable-puerto-NoTouch-12key /

Excepción: Si el calificador en cuestión f es la densidad de píxeles de la Pantalla, Android slecciona la opción que más coincida con la densidad de la Pantalla del Dispositivo. En general, Aandroid reduce  su preferecica a  una imagen original, en la directiva más grande antes que ampliar una imagen mas pequeña que las originales.

  1. Volver y repetir los Pasos 2, 3 y 4 Hasta Que Quede solitario Directorio de la ONU. En el ejemplo, la Orientación de la Pantalla Es El Próximo calificador para el cual sea existen coincidencias. Por lo del tanto, se eliminan los Recursos Que No se especifican Una Orientación de Pantalla:
    dibujable-es /
    dibujable-en-puerto /
    dibujable-en-NoTouch-12key /
    

    El Directorio Que Queda es drawable-en-port.

Si bien este procedimiento se ejecuta párrafo cada recurso: solicitado, el  Sistema Optimiza algunos adj: Aún más: aspectos. Un example of this Optimización Es Que Una Vez Que se conoce la configuration del Dispositivo, El Sistema podria ELIMINAR los Recursos Alternativos Que Nunca coinciden. EJEMPLO Por, si el idioma de configuration es inglés ( “en”), los Directorios de recursos Que Tienen ONU calificador de idioma establecido en Otro idioma ¿Que hay mar ingles Nunca de INCLUYEN en el conjunto de recursos comprobados (sin embargo, la ONU Directorio de Recursos pecado el calificador de idioma sí se includes).

Cuando Se seleccionan Recursos SEGÚN los calificadores del Tamaño de la Pantalla, El Sistema utilizará los Recursos Diseñados Para Una Pantalla Más Pequeña Que la Pantalla SI real sin EXISTEN Recursos Que coincidan mejor (por Ejemplo, Una Pantalla de Tamaño Grande utilizará Recursos De Una Pantalla de Tamaño normal de Si es Necesario). Sin embargo, si Los Únicos Recursos Disponibles Presentan ONU Tamaño superiores al de la Pantalla real, El Sistema sin los Usara y tu application fallará si ningún Otro recurso que coincidiera con la configuration del Dispositivo (POR EJEMPLO, SI Todos Los Recursos de Diseño estan etiquetados con el calificador xlarge, Pero el Dispositivo es Una Pantalla de Tamaño normal).

Nota: La precedencia del calificador (en la tabla 2 ) es mas Importante Que la Cantidad de calificadores que coinciden exactamente con el Dispositivo. Por Ejemplo, en el paso 4 mencionado anteriormente, la última Opción de la Lista INCLUYE tres calificadores que coinciden exactamente con el Dispositivo (orientation, tipo de pantalla táctil y Método de entrada), MIENTRAS Que drawable-enTiene Un solitario PARÁMETRO Que coinciden (idioma). Sin embargo, el idioma Tiene alcalde precedencia Que ESTOS Otros calificadores, por lo del tanto, drawable-port-notouch-12keyse Elimina.

Alarma con estación meteorológica


También decidió utilizar un servidor MQTT para subir esta información en la web por lo que se puede desde cualquier lugar, tener un vistazo a la información meteorológica captada por este prototipo.

Elementos del montaje:

  1. nodeMCU (regulador Micro,  versión 0.9)
  2. Pantalla LCD – 16 x 2
  3. Botones – 3
  4. Sensor de temperatura DHT11
  5. Timbre o zumbador
  6. Placa de prototipos tamaño  mini
  7. Cables de puente
  8. Resistencia de 1000 Ω – 3
  9. Caja de madera para montar todas las cosas dentro.

Asignación de pines y planificación

Bien, así que vamos a hablar acerca de cómo tenía que distribuir los pasadores entre todos los componentes.

La pantalla LCD

La pantalla LCD,  necesita al menos 6 pines de I/O interfaz con el microcontrolador. Puede darse como sigue: Habilitar, register select, D04, D05, D06 D07.

  • Enable – pin I/O digital 0
  • Seleccione Registro – pin I/O digital 1
  • D04 – pin I/O digital 2
  • D05 – pin I/O digital 3
  • D06 – pin I/O digital 4
  • D07 – pin I/O digital 5

Los botones

Hay tres botones que vamos a usar, por lo queo bviamente  necesitaríamos tres pins de I/O digitales,

  • LeftButton – pin I/O digital 6
  • CenterButton – pin I/O digital 7
  • RightButton – pin I/O digital 8

El zumbador

El puede ser conectado al pin I/O digital 9.

El sensor de temperatura DHT11

Este sensor tiene un pin de salida y sigue para el pin de I/O digital 10

 

Ensamblaje

En una caja de madera ser practican agujeros para el lcd  y lo botones y entonces es hora de montar todo dentro de esa caja.

  1. Creo que tenemos que empezar con los botones. Usé un palito de helado estrecho para hacer una base para los botones.
  2. Luego tomar el nodeMCU y las placa de prototipos y pegarloo a la base de la caja con cinta de doble cara.
  3. Entonces conectar los botones a los pines de I/O digitales apropiados.
  4. En tercer lugar, colocar  la pantalla LCD y luego agarrarla bien a la caja con algunas cintas desde el interior. .
  5. Hacer las conexiones de la pantalla LCD.
  6. Luego conectar el timbre o buzzer en el interior de la caja con cinta de doble cara y conectar su terminal positivo al pin digital 9
  7. El sensor DHT11 tiene tres piness: 5v, gnd y la salida. Por lo tanto el pin de salida irá al pin digital 10 de la nodeMCU . 5v y tierra son obvias dónde deben ir.
  8. También para agregar, DHT11 es lo único que se quedará fuera de la caja para detectar la temperatura exterior. .

 

El código

El código qeu ha escrito Techovator0819      es cerca de 450 líneas de longitud. y cuenta  con  algunas bibliotecas importantes que se necesitan para descargar  asi que lo primero es asegúrarse de tener el IDE de Arduino instalado asi como tener los drivers del  esp8266 instaladas también. Si no lo ha hecho, haga clic aquí.

El primer paso antes de ver  el código, es entender la funcionalidad de nuestro dispositivo y el código en consecuencia:

  • Nestro WB(weather box)  accede a internet y recupera la información de tiempo apropiado a través de una llamada a la API.
  • También  tomara  la temperatura del medio ambiente  con un sensor propio y enviara esa información a un corredor de MQTT.
  • También podría mantener alarmas y temporizadores para usted.
  • También es capaz de mostrar hora y fecha.

Todo , esto significa que necesitamos integrar todas estas funciones bajo un título o código.

¿Cuáles son las bibliotecas que necesitamos?

  1. Librería LiquidCrystal . Como estamos usando una pantalla LCD como la principal interfaz entre usted y el NodeMCU, esta biblioteca es indispensable. Paranuestra comodidad, esta biblioteca, por defecto, es una biblioteca integrada en el IDE de Arduino.
  2. Biblioteca de ESP8266WiFi . Esta biblioteca permite el ESP8266 conectar con el Wifi y tener acceso a internet. Esta librería viene en un paquete que debe descargar durante la instalación del ESP8266 en el administrador de la placa.
  3. Biblioteca de ArduinoJson . Cuando se llama a la API, los datos que usted recibirá estaran en formato JSON (JavaScript Object Notation). Así que si quiere convertirlo a un formato utilizable, necesita analizarlo. Y la biblioteca de ArduinoJson lo hace por nosotros.
  4. Biblioteca para el sensor DHT11.
  5. Biblioteca en tiempo de. Para mantener a nuestro tiempo. Las funciones de biblioteca se enumeran aquí.
  6. Biblioteca de TimeAlarms . Se utiliza para que nos establezcan alarmas y temporizadores. Las funciones de biblioteca se enumeran aquí.

Las dos últimas bibliotecas deben utilizarse juntos. Puede usar la biblioteca en tiempo de forma independiente pero no de la biblioteca de TimeAlarms.


La llamada de API

 

The API Call

 

 

 

 

Lo más importante es una llamada a la API es la API key. Estoy conectando a la página web openweathermap.org para obtener toda la información de tiempo. Así que hay que seguir el procedimiento para abrir una cuenta allí y obtener un API key y es absolutamente gratis. Para llamar a la API key,
El primer paso es conectarse al servidor.

En segundo lugar, usted necesita utilizar su API key en la URL.Usted deberá utilizar el método GET para recuperar los datos de la URL.

Para hacer los datos disponibles en un formato utilizable,necesita para luego almacenar los datos en una cadena.

Los datos que reciba serán en formato JSON. Así que hay que analizarlo.

Y luego, se almacenan la información deseada en algunas variables globales que se pueden utilizar en cualquier lugar en el código.

     El siguiente es un ejemplo de código  para demostrar cómo funciona. Esta parte básicamente declara las bibliotecas utilizadas, crea las variables y objetos de la biblioteca a consultar.

include <ArduinoJson.h>
#include <ESP8266WiFi.h>
String result; 
// la cadena en la que se almacenarán los datos después de la llamada a la API
char servername[]="api.openweathermap.org"; //mombre servidor
String APIKEY = "YOUR_API_KEY"; //el API key
String CityID = "1264527"; //el  ID de la ciudad

//Asignación de sus variables globales para almacenar la información meteorológica recibida
String Description;
String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client; >

Código de configuración básica.

void setup()

{

// Ponga su código de configuración aquí, para ejecutar una vez:
Serial.begin(9600);
WiFi.begin(“your ssid”, “your password”);

//empieza  conexion WIFI
while(WiFi.status() != WL_CONNECTED)

{

// espera hasta que se establezca la conexión
Serial.print(“.”);
delay(500);
}
Serial.println(“Connectado!”);
Serial.println(WiFi.localIP());   //imprime direccion  IP
}<

Código para crear una función que obtiene los datos.

void weatherData(){

if (client.connect(servername, 80)) {

// inicia la conexión del cliente, comprueba la conexión
client.println(“GET /data/2.5/weather?id=”+CityID+”&units=metric&APPID=”+APIKEY);

//// llama a la api usando el método get antes de la URL. Nota: La URL utiliza la clave api.
Serial.println(“Server esta accesible”);
client.println();
}
else { //  si el servidor no esta disponible
Serial.println(“fallo de conexion  “); //mensaje de errorsi no esta conectado el cliente
Serial.println();
}
result = “”;

//Hace que la cadena nula de cualquier dato almacenado previamente para almacenar nuevos datos
while (client.available()) { //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
Serial.println(result);
result.replace(“[“, ” “);

//Estoy enfrentando un error. Sólo para evitarlo, tengo que escribir esto
result.replace(“]”, ” “);

//y esto tambien.
client.stop(); //para  cliente
Serial.println(“Recieved”);

//Analiza la cadena llamada resultado

StaticJsonBuffer<1024> jbuff;

JsonObject &root = jbuff.parseObject(result);
if (!root.success())
{
Serial.println(“parseObject() failed”);
}

// almacena toda la información deseada en variables temporales.
String location = root[“name”];
float temperature = root[“main”][“temp”];
float humidity = root[“main”][“humidity”];
String description = root[“weather”][“description”];
float wind = root[“wind”][“speed”];

//Transfiere toda la información de las variables temporales a variables globales a las //que puede acceder en cualquier parte del código.
Place = location;
Temperature = temperature;
Humidity = humidity;
w = wind * 3.6;
Description = description;
}

La función de bucle para mostrar todo lo que te quieren en el monitor serie.

void loop() {

weatherData(); //Llama a la función que hemos discutido anteriormente
Serial.println(Temperature);
Serial.println(Place);
Serial.print(“H: “);
Serial.println(Humidity);
Serial.print(w);
Serial.println(” kmph”);
Serial.println(Description);
delay(8000); //retardo de  8 segundos
}

Como vemos  es un ejemplo básico de una llamada a la API y el análisis de datos JSON.

 

MQTT cliente y agente

 

MQTT Client and Broker

 

 

Como hemos visto en este blog el autor h aoptado  por el frameworl Cayyene de MyDevices para salvar la informacion procedente del sensor DHT11

one.jpg

 

 

two.jpg

 

 

 

 

four.jpg

 

 

five.jpg

 

 

Como vemos va  subiendo nuestros datos de los sensores a un corredor de MQTT en internet por lo que podemos ver desde cualquier lugar.
Pesonalmente pienso que el tablero de instrumentos del Cayenne es el más conveniente así queno me sorprende que el autor lo hay usado
Resumidamente esto son los pasos  para usar el servicio
  • En primer lugar, debe crear una cuenta.
  • Después de haber conectado la placa a Cayena se le dirigirá automáticamente a la consola donde se pueden utilizar los widgets personalizados disponibles.
  • Asegúrese de especificar correctamente el canal y corresponden a ese canal para enviar datos en el código.
  • Después de que hayas hecho eso, cree un nuevo proyecto y arrastrar y soltar widgets como de sus dispositivos.
  • El siguiente es un código de ejemplo para que comprendas cómo Protocolo MQTT. También utilizaremos la biblioteca Cayena-MQTT-ESP8266 para hacer las cosas mucho más fácil para nosotros.
    <#include 
    
    char ssid[] = "ssid";
    char wifiPassword[] = "wifiPassword";
    
    char username[] = "MQTT_USERNAME";
    
    char password[] = "MQTT_PASSWORD";
    char clientID[] = "CLIENT_ID";
    
    void setup() {
    
      Serial.begin(9600);
      Cayenne.begin(username, password, clientID, ssid, wifiPassword);
    }
    
    void loop() {
    
     Cayenne.loop(); //this function must be called regularly to keep the connection stable
      float sensorInfo = analogRead(A0);
      Cayenne.virtualWrite(0, sensorInfo); //virtualWrite(channel, data) is function with two parameters. Channel - you want to send the data to and second parameter is the data itself.
    }
  • Después de eso, usted será capaz de enviar y recibir datos sin problemas. Para este , se ha usado sólo dos widgets icono es decir ‘temperatura’ y ‘humedad’.
  • Después de crear una cuenta, haga clic en ‘Add New’.
  • A continuación, haga clic en ‘Dispositivo/Widget’Haga clic en “Traiga su propia cosa”, que es en la parte inferior.Una nueva página aparecerá indicando su nombre de usuario MQTT, contraseña y el ID de cliente que son únicas para usted. Estos se aplicarán en el código para identificar el dispositivo.

Estructura del código final

La longitud total del código es alrededor de 550 líneas.

El código está dividido en dos secciones. Una PageDisplay y otra DecMaker (abreviatura de decisiones). Cada vez que usted pulsa cualquier botón, basado en que (derecha o izquierda), la pantalla mostrará esa página. Cuando en página y el centerButton, el código se moverá a la DecMaker. Dentro de la función DecMaker y basado en qué página estaba finalmente abierta, ejecutará las acciones correspondientes. Puede recibir datos meteorológicos, sensores, alarmas y temporizadores.

Las páginas se muestran según los modos. Los modos son cuatro. Pueden ser,

  1. Inicio modo: para obtener los datos meteorológicos y visualizarlos. Así como percibir el entorno.
  2. Modo set timer – establecer temporizadores para usted
  3. Modo de programar la alarma – establecer alarmas para que usted
  4. Panel de control – cuando tu no en cualquiera de los modos, prefiere podría quedarse en el tablero de instrumentos.

A continuación, vamos a hablar sobre el sketch principal 

Paso 9: El código principal

El siguiente es el código principal.

Para descargar el código, haga clic aquí.

LiquidCrystal lcd(16, 5, 4, 0, 2, 14);
#define rightButton 13
#define centerButton 15
#define leftButton 12
#define buzz 3
int page = 1;
byte leftArrow[8]
{ B00000,
 B00010,
 B00110,
 B01110,
 B11110,
 B01110,
 B00110,
 B00010
};
byte rightArrow[8]{
 B00000,
 B01000,
 B01100,
 B01110,
 B01111,
 B01110,
 B01100,
 B01000
};
byte line[8]
 { B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110,
 B00110
};
String result;
char servername[]="api.openweathermap.org";
String APIKEY = "Your Api key";
String CityID = "Your city ID";</p><p>String Description;<br>String Place;
float Temperature;
float Humidity;
float w;
WiFiClient client;
dht DHT;#define pin 1
int set=1; // for configuring the alarm
int a, b, c; // used to denote the hour, minute and second while setting an alarm</p>
char username[] = "MQTT_username";<br>char password[] = "MQTT_password";
char clientID[] = "Client ID";

void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 WiFi.begin("ssid", "password");
 lcd.print("Weather box");
 delay(2000);
 lcd.clear();
 if (WiFi.status() == WL_CONNECTED){
 Cayenne.begin(username, password, clientID);
 lcd.print("Connected!");
 delay(3000);
 lcd.clear();
 Serial.println(WiFi.localIP());
 } else {
 lcd.print("Not conn");
 delay(3500);
 }
 lcd.clear();
 lcd.begin(16, 2);
 lcd.createChar(0, leftArrow);
 lcd.createChar(1, rightArrow);
 lcd.createChar(3, line);
 
 pinMode(rightButton, INPUT);
 pinMode(centerButton, INPUT);
 pinMode(leftButton, INPUT);
 pinMode(buzz, OUTPUT);
 digitalWrite(buzz, LOW);
 
 setTime(15, 12, 50, 25, 5, 17);
 delay(1000);
}
int val = 1;
int x,y; //for setting timer minutes and seconds
int trig; //for coniguring the timer
int counter = 0;
void loop() {
 // put your main code here, to run repeatedly:
 while(val == 1){
 if (digitalRead(leftButton)==HIGH)
 { val = 0;}
 lcd.clear();
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.write(byte(3));
 lcd.print("WiFi:");
 if (WiFi.status() == WL_CONNECTED){
 lcd.print("conn"); } 
 else {
 lcd.print("Nconn");} 
 lcd.setCursor(0, 1);
 lcd.write(byte(0));
 lcd.print("Menu");
 lcd.write(byte(3));
 
 if (digitalRead(centerButton)){
 DHT.read11(pin);
 lcd.print("T:");
 int a = DHT.temperature; //converting float to int
 lcd.print(a);
 int b = DHT.humidity; // converting float to int
 lcd.print(" H:");
 lcd.print(b);
 delay(3000);
 }else {
 date();
 }
 counter++;
 if (counter == 60){
 if (WiFi.status()==WL_CONNECTED){
 Cayenne.loop(); 
 DHT.read11(pin); 
 Cayenne.virtualWrite(1, DHT.temperature);
 Cayenne.virtualWrite(2, DHT.humidity); 
 } 
 counter = 0;
 }
 delay(50);
 }
 while (val != 1){
 delay(200);
 pageDisplay();
 if (digitalRead(rightButton)){
 if (page == 4){
 page = page;
 } else {
 page++;
 }
 pageDisplay();
 
 } else if (digitalRead(leftButton)){
 if (page == 1){
 page = page;
 } else {
 page--;
 }
 pageDisplay();
 
 } else if (digitalRead(centerButton)== HIGH){
 decMaker();
 }
 }
}
void pageDisplay()
{ switch(page){
 case 1:
 lcd.clear();
 lcd.setCursor(6, 0);
 lcd.print("Home");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 2:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Timer");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 3: 
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Set Alarm");
 lcd.setCursor(15, 0);
 lcd.write(byte(1));
 break;
 case 4:
 lcd.clear();
 lcd.write(byte(0));
 lcd.setCursor(3, 0);
 lcd.print("Dash Board");
 break;
 default:
 lcd.clear();
 lcd.print("Error 002");
 break;
 }
}
void date(){
 lcd.print(day());
 lcd.print(" ");
 int a = month();
 switch(a){
 case 1:
 lcd.print("Jan");
 break;
 case 2:
 lcd.print("Feb");
 break;
 case 3:
 lcd.print("Mar");
 break;
 case 4:
 lcd.print("Apr");
 break;
 case 5:
 lcd.print("May");
 break;
 case 6:
 lcd.print("Jun");
 break;
 case 7:
 lcd.print("Jul");
 break;
 case 8:
 lcd.print("Aug");
 break;
 case 9: 
 lcd.print("Sep");
 break;
 case 10:
 lcd.print("Oct");
 break;
 case 11:
 lcd.print("Nov");
 break;
 case 12:
 lcd.print("Dec");
 break;
 default:
 lcd.print("005");
 }
 if (day()<10){
 lcd.print(" ");
 }
 lcd.print(year());
 }
void decMaker(){
 switch(page){
 case 1:
 lcd.clear();
 lcd.print(". . .");
 weatherData(); 
 lcd.clear();
 while (digitalRead(leftButton) == LOW){
 weatherData();
 digitalRead(leftButton);
 lcd.setCursor(6, 0);
 lcd.print("IST:");
 lcd.setCursor(5, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 delay(3000);
 lcd.clear();
 lcd.print("Wthr in ");
 lcd.print(Place);
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(Temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(Humidity);
 delay(3000);
 lcd.clear();
 digitalRead(leftButton);
 lcd.print("Wind: ");
 lcd.print(w);
 lcd.print("kmph");
 lcd.setCursor(0, 1);
 lcd.print(Description);
 delay(2000);
 lcd.clear();
 DHT.read11(pin);
 lcd.print("Room: ");
 lcd.setCursor(0, 1);
 lcd.print("T:");
 lcd.print(DHT.temperature);
 lcd.setCursor(9, 1);
 lcd.print("H:");
 lcd.print(DHT.humidity);
 delay(2000);
 lcd.clear();
 }
 lcd.begin(16, 2); // In my case the lcd doesn't work without this. But don't know why.
 break;
 case 2:
 setTimer();
 break;
 case 3:
 setAlarm();
 Serial.print("THREE");
 lcd.begin(16, 2);
 break;
 case 4:
 Serial.print("FOUR");
 val = 1;
 break;
 default:
 Serial.print("not a valid entry");
 lcd.clear();
 lcd.print("error 001");
 break;
 }
}
void weatherData()
{ if (client.connect(servername, 80)) 
{ //starts client connection, checks for connection
 client.println("GET /data/2.5/weather?id="+CityID+"&units=metric&APPID="+APIKEY);
 Serial.println("Server is accessable");
 client.println();
 } 
 else {
 Serial.println("connection failed"); //error message if no client connect
 Serial.println();
 }
 result = "";
 while (client.available()) { //connected or data available
 char c = client.read(); //gets byte from ethernet buffer
 result = result+c;
 }
 result.replace("[", " ");
 result.replace("]", " ");
 client.stop(); //stop client
 Serial.println("Recieved");
 
 StaticJsonBuffer<1024> jbuff;
 JsonObject &root = jbuff.parseObject(result);
 if (!root.success())
 {
 Serial.println("parseObject() failed");
 }
String location = root["name"];
 float temperature = root["main"]["temp"];
 float humidity = root["main"]["humidity"];
 String description = root["weather"]["description"];
 float wind = root["wind"]["speed"];
Place = location;
 Temperature = temperature;
 Humidity = humidity;
 w = wind * 3.6;
 Description = description;
}
void alarm()
{ Serial.println("Alarm activated");
 lcd.clear();
 lcd.print("Wake up, Lazy");
 for (int i = 0; i <= 10; i++){
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(80);
 digitalWrite(buzz, HIGH);
 delay(80);
 digitalWrite(buzz, LOW);
 delay(800);
 }
 digitalWrite(buzz, LOW);
 set = 0;
}
void setAlarm(){
 set = 1;
 int pos = 1;
 a, b, c = 0;
 repeat:
 //timeDisplay();
 lcd.clear(); 
 lcd.setCursor(0, 0); 
 lcd.print(a); 
 lcd.print(":");
 lcd.print(b); 
 lcd.print(":");
 lcd.print(c); 
 lcd.setCursor(0, 1);
 if (pos == 1){ lcd.print("hours");}
 else if (pos == 2){ lcd.print("minutes");}
 else if (pos == 3){lcd.print("seconds");}
 delay(200);
 if (digitalRead(leftButton)){//leftButton
 if (pos == 3)
 {pos = 1;}
 else 
 {pos++;}
 } else if (digitalRead(rightButton)){
 switch (pos){
 case 1:
 if (a == 23){ a = 0;}
 else {a++;}
 break;
 case 2:
 if (b == 59){ b = 0;}
 else {b++;}
 break;
 case 3:
 if (c == 59){ c = 0;}
 else {c++;}
 break;
 }
 } else if (digitalRead(centerButton)){
 confirmAlarm();
 } 
 if (set == 0){
 goto endIt;
 }
 goto repeat;
 endIt:
 Serial.println("Alarm executed successfully");
}

void confirmAlarm()
{ lcd.clear();
 Alarm.alarmOnce(a, b, c, alarm);
 up:
 lcd.setCursor(1, 0);
 lcd.print("Alarm Running");
 lcd.setCursor(3, 1);
 lcd.print(hour());
 lcd.print(":");
 lcd.print(minute());
 lcd.print(":");
 lcd.print(second());
 Alarm.delay(200);
 delay(1);
 lcd.clear();
 //timeDisplay();
 Serial.println("...");
 if (set == 0||digitalRead(centerButton)){goto down;}
 goto up;
 down:
 set = 0;
}
void setTimer(){
 int cur = 1;
 x, y = 0;
 trig = 1;
 roof:
 lcd.clear();
 lcd.setCursor(2, 0);
 lcd.print("minutes: ");
 lcd.print(x);
 lcd.setCursor(2, 1);
 lcd.print("seconds: ");
 lcd.print(y);
 if (cur == true){lcd.setCursor(0, 0); lcd.write(byte(1));}
 else {lcd.setCursor(0, 1); lcd.write(byte(1));}
 delay(200);
 if (digitalRead(rightButton)){
 switch(cur){
 case 1:
 if (x == 20){x=0;}
 else {x++;}
 break;
 case 2:
 if (y == 59){y = 0;}
 else {y++;}
 break;
 default: 
 lcd.clear();
 lcd.print("ERROR 003");
 }
 } else if (digitalRead(leftButton)){
 if (cur == 2){cur = 1;}
 else {cur++;}
 }
 if (digitalRead(centerButton)){
 confirmTimer();
 } else {
 goto roof;
 }
 trig = 0;
 lcd.setCursor(0, 0);
 lcd.print("Timer successful");
 delay(2000);
 lcd.clear();
}</p><p>void confirmTimer(){<br> int z;
 z = x*60 + y;
 Alarm.timerOnce(z, timer);
 lcd.clear();
 
 sky:
 Serial.println(".");
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("CountDown Timer");
 lcd.setCursor(7, 1);
 lcd.print(z);
 z--;
 Alarm.delay(999);
 delay(1);
 if (trig == 0||digitalRead(centerButton)==HIGH){goto ground;}
 goto sky;
 ground:
 trig = 0;
 lcd.clear();
}
void timer(){
 Serial.println("Boom, timer is on!! :)");
 lcd.clear();
 lcd.setCursor(3, 0);
 lcd.print("Time's Up!");
 for (int i = 0; i<=10; i++){
 for (int j = 0; j<=3; j++){
 digitalWrite(buzz, HIGH);
 delay(70);
 digitalWrite(buzz, LOW);
 delay(70);
 }
 delay(700);
 }
 trig = 0;
}

Mas información en http://www.instructables.com/id/IoT-Weather-Box-with-Custom-Alarms-Timers/

Router home-station como servidor de impresion


Es habitual que al migrar el servicio ADSL  a FTTH  el operador  nos deje como medida de cortesía  , el viejo router de ADSL  en casa del cliente , así que probablemente el  viejo router haya quedado  en el olvido en un cajón sin saber muy bien que hacer con el.

Por otra parte, también hay personas que optan por comprar un router de mayor calidad, por lo que es probable que se mantenga también el de su proveedor de Internet en casa.

En cualquier caso ,sea por el motivo que sea, es relativamente   habitual tener  en casa o la oficina un viejo router inalámbrico que no se está utilizando, sin saber muy bien que hacer con este así que es es el momento de sacarle partido  como por ejemplo  para ampliar la cobertura wifi  o por necesitar mayor numero de puertos ethernet  como vimos en este post ,  o en el caso de que sea un home-station usarlo como nas-server  o un servidor de impresión

Un Servidor de Impresión es un equipo o concentrador, o modernamente  un servidor, que conecta una impresora a la red lan interior , para que cualquier equipo pueda acceder a ella e imprimir trabajos, sin depender de otro ordenador para poder utilizarla, como es el caso de las impresoras compartidas.

Veamos  como convertir un  Home-Station modelo Observa  como servidor de impresión :

En primer lugar entendemos habra  los siguintes pasos comentados en un post anterior
es decir  cambiar  la ip de acceso por defecto ( para que no haya colisiones con la ip del router principal)   y desactivar el DHCP
En el caso de querer implementar una impresora de red , aparte de conectar la toma usb de la impresora a la toma usb del Home-Station , tan solo necesitaremos  ir al menú Advanced ->Network Tools –>Printer   y activar ( check enable )
printer
Observe  que la url( http://192.168.1.100:631/printers/Printer) sera la que necesitaremos para añadir la impresora de red desde nuestro ordenador.
Asimismo es interesante   ,si se desea,  asociar un  nombre  que sugiera el tipo de impresora  a la que  nos conectaremos y finalmente pulsar Apply
cabon

Lo primero obviamente, es conectar la impresora al puerto USB del router y encenderla. En el equipo con Windows nos dirigiremos a Panel de Control – Impresoras y haremos clic en Agregar una impresora.

printer1

 

Seleccionaremos Agregar una impresora de Red y no esperaremos a que intente encontrarla, seleccionaremos directamente la opción La impresora no está en la lista .

En la siguiente pantalla pulsaremos la opción Seleccionar una impresora compartida por nombre  y  justo ahí   introduciremos los datos que configuremos  en el  paso anterior  (en el ejemplo  http://192.168.1.100:631/printers/Canon MG2550)

Después de intentar comunicarse con la impresora mediante la dirección http  que le hemos especificado, si la comunicación es correcta    , pedirá información adicional  de  marca  y  modelo .

Si en el equipo no tiene los drivers de la impresora puede  hacer clic en Usar disco e introducir el CD de la impresora en el equipo o en su defecto descargar los drivers desde la página web del fabricante seleccionando Marca y modelo directamente via windows update.

printercanon

 

Tras la instalación, podremos lanzar una página de prueba y comprobar que imprime correctamente.

 

printerprueba.PNG

 

En el caso de ser una multifunción, no es posible  escanear, sólo es posible imprimir.,pero para eso esta siempre la opción de desenchufar la impresora del Home-Sation  y volverlo conectar al pc para esa eventualidad

 

NOTA: Existen diferentes modelos de router Homestation, por lo que si no funciona de esta manera, recomiendo visitar el foro de Movistar,

Cómo conseguir tomas de red extra con un router reciclado


Es habitual que al migrar el servicio ADSL  a FTTH  el operador  nos deje como medida de cortesía  , el viejo router de ADSL  en casa del cliente , así que probablemente el  viejo router haya quedado  en el olvido en un cajón sin saber muy bien que hacer con el.

Por otra parte, también hay personas que optan por comprar un router de mayor calidad, por lo que es probable que se mantenga también el de su proveedor de Internet en casa.

En cualquier caso ,sea por el motivo que sea, es relativamente   habitual tener  en casa o la oficina un viejo router inalámbrico que no se está utilizando, sin saber muy bien que hacer con este, pues bien en algunos momentos  podríamos necesitar usar dos routers para ampliar la cobertura wifi  o por necesitar mayor numero de puertos ethernet  ,para lo cual  necesitaremos conectar ambos físicamente   bien por cable ethernet  o bien por wifi  y de este modo aprovechar ese router olvidado  y ofrecerle una segunda oportunidad! .

Veamos en profundidad como es el proceso:

EXPANSIÓN DE CONEXIONES DE UN VIDEOBRIDGE o de un PLC

Un videobrige (existen al menos dos  modelos: netgear y  observa telecom ) es un “antiguo” producto de  Movistar usado para distribuir  una conexión de alto rendimiento sin  el  uso de  cable, de modo que cuando se usa con un HGU no deja se ser  un receptor  wifi + (en la frecuencia de 5ghz) con dos conexiones Ethernet disponibles  (aunque recientemente los  VideoBridge  han evolucionado a lo que se llama  Movistar Base Port el cual   ademas de hacer de receptores  wifi+ permiten crear tambien una red WiFi de alto rendimiento asimismo   sin tener que usar un cable de red para conectarlos.)

Ademas de los videbridge , en  el caso de que  la distancia fuera bastante  mas grande  y no poder usar cable de red  también podemos  utilizar dos  PLC ( “Power Line Communications” ) los cuales  al usar nuestra propia instalación eléctrica tienen la ventaja de que no estar sometida a las interferencias de las redes WIFI de otros vecinos  equivaliendo prácticamente a un cable de red ethernet convencional si bien no ofrecen un ancho de banda tan alto.

Tanto los videobridge, como los Movistar Base  o los Plc’s   disponen de una o como máximo dos salidas ethernet   de modo que  no admiten más conexiones Ethernet,lo  cual  a veces es muy necesario

Para evitar  este inconveniente   podemos usar nuestro viejo router  como router secundario, ya que conectado físicamente a uno de las tomas ethernet de estos dispositivos  nos ofrecerá 3 nuevas conexiones para acceder a Internet por cable  así como también una nueva red wifi  si los deseamos para aprovechar la máxima velocidad de conexión.

Ademas de conectar por cable ambos dispositivo también  tendremos que deshabilitar la opción DHCP.

 

Al usar dos routers  ambos deberán tener el mismo rango de red por ejemplo 192.168.1.X , siendo el Router principal  el que nos de acceso a internet  (por estar conectado directamente a la roseta telefónica sin microfiltro y de ahí a la central telefónica) y deberá estar en  modo routing (generalmente ya vienen así por defecto pero no está de más comprobarlo) y el router secundario sería el que pediría al principal los datos que necesitase para conectarse a internet o para conectarse a nivel local con las maquinas que estén conectadas al router principal y que deberemos cambiar a modo bridge y con el DHCP desabilitado.

En nuestro caso vamos  a ver como ofrecer una segunda oportunidad al router Home-Station  Modelo Observa ,pero el método   empleado puede utilizarse para otros modelos de  routers Home-Station de un modo muy similar

 

 

Veamos los pasos a realizar:

 

  • En primer lugar  y el router  ,introduciremos un objeto punzante en el orificio de reset  y seguidamente   apretaremos ahi durante al menos  10 segundos hasta provocar el reset total del router con objeto de que este retome la pwd por defecto

IMG_20170604_201759[1].jpg

 

  • Ahora toca acceder al router para lo cual desactivaremos la wifi de nuestro ordenador y conectaremos un cable ethernet entre nuestro ordenador  y una de las tomas ethernet de nuestro Home-Station
  • Ahora  iremos al navegador  y escribiremos  : http://192.168.1.1:8000  ( login 1234 pwd 1234)observa.png
  • Veremos que podemos seguir un wizard donde puede configurar el router para la nueva configuración

 

setup.png

  • Aceptaremos la  configuración por defecto  especialmente del protocolo ( dinámico ip)  del paso 2

 

step2.png

  • También aceptaremos la  configuración por defecto del paso 3 , aunque si  no nos gusta la clave WPA ,si vamos a usar el router como repetidor wifi ,es el momento de cambiarlo:

step3.png

  • Ya solo nos queda aceptar los cambios pulsando el botón “Apply”   y reiniciar el router

step4.png

  • Lo siguiente es cambiar la IP por defecto (192.168.1.1) en el Local Network  por otra  IP  que deseemos  nosotros para  que no haya interferencias con el router principal ( en el ejemplo se ha cambiado a 192.168.1.100). Asimismo  muy importante es desactivar el DHCP  en el mismo apartado mas abajo:

dhcp

Por ultimo , ya solo queda conectar un cable ethernet entre una de las salidas del videobrige o plc   hacia preferentemente la  primera  toma del   router Home-Station ( en la imagen es el cable azul)

IMG_20170604_201857[1].jpg

A partir de este momento tendríamos disponibles tres tomas ethernet operativas ademas de  una segunda red wifi  cuyas credenciales  podremos ajustar cuando nos interese

EXPANSIÓN DE CONEXIONES DEL ROUTER PRINCIPAL

Si simplemente su router principal ya no admite más conexiones Ethernet y dispone de un  router secundario sin   suso , también  podemos  conectado al principal directamente  ofreciéndonos así   3 nuevas conexiones para acceder a Internet por cable y aprovechar la máxima velocidad de conexión. Para ello, una vez más, tendremos que deshabilitar la opción DHCP. No necesitaremos modificar más aspectos de la configuración para, sin necesidad de comprar hardware extra, conseguir nuevas conexiones Ethernet a partir de un router que manteníamos en desuso.

No repetimos los pasos pues son idénticos  a los descritos en el apartado anterior

 

 

SOPORTE  DE UNA IMPRESORA DE RED

Realizados todos los pasos anteriores es posible  gracias a la toma USB  bien de una impresora de red o bien un disco NAS  conectando estos
En el caso de querer implementar una impresora de red , aparte de conectar la toma usb de la impresora a la toma usb del Home-Station , tan solo necesitaremos  ir al menú Advanced ->Network Tools –>Printer   y activar ( check enable )
printer
Observe  que la url( http://192.168.1.100:631/printers/Printer) sera la que necesitaremos para añadir la impresora de red desde nuestro ordenador
Asimismo es interesante   ,si se desea,  asociar un  nombre  que sugiera el tipo de impresora  a la que  nos conectaremos y finalmente pulsaremos Apply

EXPANSIÓN DE CONEXIONES por WIFI

En el caso  de querer conectar  dos routers por  WIFI normal ( no wifi+)  ambos deben soportar ambos  WDS (Wireless Distribution System), que significa Sistema de Distribución Inalámbrico.
La  función WDS no es habitual en todos los routers WIFI (por ejemplo en el caso del famoso fabricante Zyxel,solo el modelo 660hw-t1 v3 lo es)   pero afortunadamente lo es en todos los Home-Station   y por supuesto el  HGU  si  son compatibles pero diferirá  el modo de cambiar la configuración  según el  fabricante del Home-Station (Amper o Adb)
Una vez ambos routers estén conectados podemos seguir los pasos anteriores para poder usar las conexiones ethernet del Home-Station ( en este caso serán 4 tomas )

Motorización de forma sostenible de su embarcación de recreo


Por poco razonable  que nos pueda resultar, la movilidad eléctrica ha llegado por sus innegables ventajas frente a los  clásicos motores de combustión interna , como puede ser la ausencia de emisiones contaminantes, nulo mantenimiento  ,altísima  fiabilidad ,ni  una  sóla pieza móvil (nada de correas, filtros, etc que complican la vida), no generan manchas de aceite, no generan gases de escape,sin ruido ni vibraciones, no hay mantenimiento,no hay monóxido de carbono,no hay depósito de combustible ( que  por cierto  seguirá aumentando de precio)  ,etc.   

Dentro de la movilidad marina , es normal  que el “movimiento a lo  eléctrico” también sea seguido con interés   por idénticos motivos , en las que como es normal destaca la mayor fiabilidad y el coste de cada milla recorrida frente a los sistemas  convencionales ,pero sin olvidar  que estaremos ayudando claramente a nuestro planeta  siempre que usemos métodos sostenibles para cargar las baterías .

En efecto las bondades de los motores electricos marinos las conocen bien los aficionados a la pesca  ya que son indispensables para desplazarse con una embarcación sin ruidos que asusten a peces ,pero la tendencia es tan clara  que no solo existen motores para maniobra eléctricos o para pesacar , sino que tambien existen motores marinos completamente operativos para reemplazar  todos los motores marinos( es decir  tanto  intraborda como fueraborda).

Hoy en día  ya de hecho  existen muchos motores  intraborda marinos que se pueden encontrar comercialmente   , normalmente para altas potencias  diseñados para reemplazar los viejos motores de  combustión diesel.

motor

En cuanto a motores intraborda resumidamente estas son algunas de  sus características:

  • Potencias :desde  6  a 100 HP
  • Alimentación : desde 36v hasta 144V
  • Corriente : desde 70 hasta 270Amps

Igualmente también existen motores fueraborda eléctricos en un abanico muchísimo mas amplio que los intraborda  dada su gran versatilidad . Como característica llamativa suelen  incorporar el controlador del motor( normalmente del tipo bruslless )  dentro de la propia carcasa y también suelen ser de menor potencia que los motores  intraborda. Incluso hay modelos que incluyen la bateria dentro del propio cuerpo del motor

La  potencia de propulsión de estos  motores  se suele medir  en empuje (Fuerza sobre el barco x velocidad del barco)   normalmente expresada en libras, siendo lo normal  valores desde  las 20 libras hasta las 90 libras o más.

Ademas del empuje medido en la hélice , es muy interesante  saber otras formas de medir la potencia:

  • Potencia de entrada:es la  potencia consumida por el motor  en watios siguiendo la fórmula de la potencia eléctrica P=V*I (intensidad x tensión) .  Para motores fueraborda de gasolina y motores fueraborda eléctricos convencionales no se suele indicar la potencia de propulsión pero este parámetro también puede determinarse para los motores fueraborda de gasolina (volumen de paso de gasolina x energía contenida en el combustible).
  • Potencia en el eje : es la potencia medida en el eje de la hélice .De hecho una  medida muy parecida usada  para la indicación de potencia de los motores fueraborda de gasolina  es el par motor x velocidad angular que se expresa en CV o en kW. No contempla las pérdidas de la hélice, que pueden oscilar entre el 30 y el 80%
  • Potencia de propulsión:indicación de la potencia en grandes embarcaciones (empuje x velocidad). Se expresa en CV o en kW  y contempla todas las pérdidas(incluidas las de la hélice), por lo que indica la potencia efectiva de un motor.

Una gran diferencia frente a los motores térmicos es que los motores eléctricos son capaces de alcanzar la misma potencia de propulsión que los de combustión con una potencia en el eje considerablemente menor porque  pueden propulsar las hélices de forma más eficiente debido a que ofrecen una excelente curva del par motor  en un intervalo más amplio del régimen de giro , por lo que son ideales para propulsar hélices con eficacia incluso en categorías bajas.
Esta cualidad permite a los motores eléctricos accionar las hélices –incluso en las gamas de potencia más bajas– de manera mucho más eficiente que los motores de combustión. Como consecuencia, es posible que el empuje de la hélice en las categorías bajas de CV sea el triple que el de un fueraborda de gasolina.

Sobre el modo  de calcular   la equivalencia en CV  aplicaremos la   formula de la potencia , dividiendo por el   equivalente a 1CV(763W)   ,multiplicando el resultado pro el rendimiento ( si se conoce)

Es decir por ejemplo para un motor de 12V que consume como máximo 80Amp, su potencia en CV seria:

P= V*I= 12 V x 80 A = 960 W

P(CV)=  960 W / 736 W/CV = 1,3 CV

Ese ultimo resultado se multiplicaría  por el rendimiento del conjunto el cual depende claramente de marca modelo del motor:

  • 44-56%  = motores eléctricos de alta eficiencia
  • 30-35%= motores eléctricos fueraborda convencionales
  • 18-22% =motores de pesca
  • 5-15% =motores fueraborda de gasolina

Elección de  la Batería

No se deben  usar  baterías de arranque de automóvil convencionales con  los  motores eléctricos  fueraborda pues las baterías de arranque están diseñadas para entregar la energía almacenada en breves descargas de alta intensidad  que se realizan de manera muy espaciada (justo en el arranque) . Si a una batería de arranque le solicitamos una entrega de por ejemplo, 25 A de manera continuada, esta batería no será capaz de entregarnos la energía que tiene acumulada (los amperios-hora) ya que esta entrega continuada la “asfixia” al cabo de un rato.

En   lugar  de usar  baterías convencionales de Pb , se deben usar  baterías de gel de plomo  o, mucho mejor de ciclo profundo, a ser posible de tecnología AGM, diseñadas para este tipo de trabajo,las cuales  sí serán capaces de entregar la intensidad     solicitada durante el tiempo previsto y durarán muchos ciclos de carga-descarga, las cuales las hace ideales para instalaciones solares  y para embarcaciones de recreo.

51AO+9H+NTL

Para calcular la intensidad en  amperios que consume su motor, se puede  usar la siguiente fórmula:

Empuje en libras / Voltaje del motor x 12 = Amperios que consume.

Por ejemplo para motores de 55 libras de empuje alimentados  a las tensiones de 12, 24 o 36  voltios  respectivamente  tendremos:

  • 55 libras de empuje /12 Voltios x 12 = 55 Amperios
  • 55 libras de empuje /24 Voltios x 12 = 27,5 Amperios
  • 55 libras de empuje /36 Voltios x 12 = 18,3 Amperios

Observe de estos datos una característica muy  interesante : para igual empuje si usamos tensiones mas altas  de alimentación  el consumo será menor

Es interesante destacar en este punto que aunque tengamos un motor de 55 libras de empuje, probablemente no lo vamos a usar continuamente al 100% de potencia, por lo que deberemos estimar el % de potencia media usada.

Asimismo en función del número de horas continuadas  que desea de autonomía,se puede calcular la batería necesaria siguiendo la siguiente formula:

Batería necesaria = consumo en amperios x % de potencia x horas de funcionamiento x 1,3

Por ejemplo: Con un motor que consume 55 Amperios, que usaremos a una media del 75% de su potencia y deseamos una autonomía de 3 horas necesitaremos una bateria de la siguiente capacidad:.

Capacidad= 55 A x 0,75 x 3 h x 1,3 = 160,88 Ah

Una ultima nota : Para mantener la capacidad de la batería y evitar estropearla, es importante recargar la batería antes de que se haya agotado completamente.

Elección del motor fueraborda electrico

A grandes rasgos , diremos que para mover una pequeña neumática de menos de cuatro metros,   con un motor eléctrico de hasta 40 libras nos bastaría. Podremos movernos con soltura incluso cargando la embarcación. Si la embarcación es mayor  como un velero de 6 o metros  o es una clásica de fibra, necesitamos los de mayores potencias para moverla sin problemas ( a mayor peso, más libras de empuje).

  • Motor de empuje de 18 libras es ideal para kayaks, canoas y bote a 6 ‘y se moverán
    a 3 o 4 mph en la mayoría de las condiciones
  • Motores de  40 libras  son ideales para el pescador en los barcos en lugares protegidos .Moverá la mayoría de los barcos pesqueros del tipo de la pesca en 3 a 4 mph en condiciones razonables
  • Motores  de 55 lb es na opción popular para los pescadores en aguas más grandes y da ese poquito extra de poder que puede ser requerido si el viento pica .Debe mover la mayoría de los barcos de tipo de pesca de tamañol 12 a 16 con una velocidad entre 4 o 5 mph en condiciones razonables
  • Motores de  62  lb es un nuevo tamaño de fueraborda y es  ideal para las aguas más grandes, el mar y la pesca más grande en barcos
  •  Los motores de 86  lb suelen ser de 24 voltios (2 baterias de 12 voltios en serie) y tienen un rango de usos comerciales y puede mover barcos grandes

Jago – Motor fueraborda eléctrico 86 lb – 2.050 kg

Como   ejemplo de motor fueraborda  de gran potencia a  un precio ajustado (140€en   Amazon)destaca  el modelo   86 LBS ETBM04-1BP  del fabricante Jago destacando por una gran  potencia de propulsión de aprox. 2050 kg( 86 libras ) .

La batería con el mismo rendimiento dura más tiempo gracias a la alta eficiencia energética del motor  ,el cual ademas puede ser monitorizado fácilmente gracias a que  lleva integrado un voltímetro con 10 LED .

El motor tiene 5 marchas hacia delante y 3 hacia atrás y se puede usar en aguas saladas pero es necesario limpiarlo minuciosamente después del uso .La hélice con profundidad de inmersión es  regulable y  la presión de la dirección también es regulable (la caja de control giratoria  rota 360º ).

También este motor  incluye sistema de inclinación rápida con  10 niveles de inclinación, ajusta el ángulo o eleva el motor sobre el agua

Resumiendo esta son las características mas destacables:

  • Tamaño (L/An/Alt): aprox. 58/19/130 cm
  • Tamaño del eje (L): aprox. 1016 mm
  • Peso: aprox. 10,27 kg
  • Voltaje: aprox. 24 V  
  • Propulsión/potencia: hasta aprox. 1.164 kW /aprox. 39,4 CV 
  • Potencia de propulsión: aprox. 2.050 kg
  • Caja de control: rota hasta aprox. 360º
  • 5 marchas hacia delante y 3 hacia atrás 
  • la velocidad de este motor se puede ajustar con más precisión que la del motor de combustión

Jilong  ETM 55 LBS 

Hablamos de un  potente motor eléctrico fueraborda   de un precio contenido ( su fabricación china lo delata) ,muy  ligero (unos 9kg ) , ideal para todas las embarcaciones de hasta 1800 kg de peso ( es decir valdria  para embarcacion  de 6 a 7mt)

Funciona con una batería de vehículo de 12 V AGM  (recomendación: mín. 80 Ah)

Cuenta con  5 marchas hacia adelante y 3 hacia atrás

Su punto fuerte es  una fuerza de empuje de 55 lbs (25 kp / 245 N)  con la que alcanzará su objetivo fácilmente

El bloqueo se lleva a cabo con 2 tornillos de tope y 2 tuercas de mariposa grande, de modo que no se precisa de herramientas para el montaje

yilon.png

Aunque puede ser discutible algunos aspectos  lo que es innegable que este modelo para la potencia que desarrollo pocos modelos encontremos en el mercado por ese precio pues este  modelo se puede conseguir  por  unos 250€ con gastos de envio incluidos  en Amazon.

Resumiendo esta son las características mas destacables:

  • Alimentación: 12 voltios
  • Consumo (potencia de entrada): 53 A
  • Potencia (potencia de salida): 636 vatio
  • Línea de producto: Jilong Watercraft
  • Potencia / fuerza de empuje:: 55 lbs
  • Control: One Hand Tiller Twist
  • Marchas: 5 hacia adelante / 3 hacia atrás

vidaXL  P37 86 libras (39 kg)

Este motor de arrastre es casi completamente silencioso y no contamina. Cada vez son más las áreas que permiten sólo a los barcos con motores eléctricos, por lo tanto, un motor eléctrico es la mejor opción.

Este silencioso motor fuera de borda tiene un empuje de 86 libras (39kg)  y una longitud del eje de 101,6 cm.

Se puede conectar fácilmente a la embarcación y conectado a una batería (no incluida) de  2 x 12V / 80A (gel o AGM), que será adecuada para unas 3-4 horas de navegación 

El motor cuenta con luces indicadoras de la batería, pudiendo ver cuando la batería está a punto de descargarse.

Otro aspecto es que el motor puede girar a 360 ° y tiene 8 velocidades diferentes, 3 de ellas inversas. Incluso para evitar problemas en aguas poco profundas, es posible plegar el motor, siendo ademas el mango de dirección ajustable.

vidaxl.png

Este modelo es uno de los mas caros de esta comparativa ( casi 300€) pero es importante destacar el acabado que  es  de los mas  destacado junto con su alta potencia de empuje

Resumiendo esta son las características mas destacables:

  • Longitud del eje: 101,6 cm
  • Fuerza de empuje: 86 libras (39 kg)
  • Motor giratorio a 360 grados: si
  • Número de velocidades de avance: 5
  • Número de velocidades inversas: 3
  • Potencia máx: 1152 W
  • Resistente a aguas saladas: si
  • Indicadores de batería: si
  • Conexión: 24 voltios

Bison –  (62 ft / lb 12v)

Este modelo aunque es de relativa media potencia  destaca  por su calidad  y  por incluir  2 hélices ( es decir lleva una hélice  de repuesto)

Cuenta con 5 marchas adelante y 3 marcha atrás sin engranajes.

Presume de estar fabricado en UK de modo que según el fabricante hablan de que es  prácticamente indestructible gracias a la  composición del eje más fuerte que el acero y que ademas flexiona en caso de impacto

Incluye un tratamiento de anticorrosión

Sobre el soporte del motor lleva e bloqueo de la palanca duradero (NO se   rompe, no se retuerce ni se oxida)  dos veces más fuerte que los soportes convencionales.

Cuenta con la función ” soower Prop”   de  diseño patentado que sirve pora alejar embolsamientos o malas hierbas sin agotar la valiosa energía.bison.png
Resumiendo esta son las características mas destacables

  • Mount: Bloqueo de la palanca soporte espejo de popa ajustable
  • Control: ext Twist timón
  • Empuje Max: 62Lb/28 kg)
  • Max Amp Draw: 58 Amperio
  •  Tension alimentacion s: 12 V
  • Marchas: 5 adelante y 3 marcha atrás
  •  Peso: 12 kg

Y por cierto en este vídeo se puede ver el motor en acción

Electrónica de una CNC


Cada  vez se  nos pone mas sencillo    interactuar con  el mundo físico , no solo desde el punto de vista  de complejidad, sino también debido a  la  simplicidad  conseguida gracias a  la elevada miniaturización, lo cual  que  se suele traducir en precios muy bajos y diseños sencillos, especialmente  en la parte de la electrónica necesaria.

Como ejemplo usando Arduino se pueden construir muchos tipos de proyectos CNC  gracias al ingenio de muchas personas  así como la ayuda de  la electrónica necesaria  que puede condensarse   simplemente en este escudo   con el que se   pueden  controlar  por medio de un Arduino   3 motores paso a paso gracias a que los propios  módulos de controladores pueden  insertarse en cada zócalo  proporcionando así  la capacidad al eje motor de impulsión 3 motores  paso a paso (X, Y y Z).

cnc_shield_v3_2

En este escudo  para Arduino,  los motores paso a paso se pueden conectar con conectores molex de 4 pines o también se  pueden soldar los cuatro  hilos de cada motor directamente al conector  en su lugar

A propósito de las conexiones soldadas del motor  : la conexión o desconexión de los cables de un motor paso a paso mientras el driver  está alimentado puede destruir al driver  (por ejemplo   soltando por accidente algún hilo, cruzando  entre si  hilos , etc) así que es buena idea que los cables de los  motores estén sólidamente  conectados a la placa.

Asimismo al  igual que otras controladoras, esta placa se alimenta aparte de la fuente de Arduino con una tensión continua entre 12-36V DC.  En este punto es de destacar que por el momento sólo los controladores DRV8825 pueden manejar hasta 36V , por lo que considere un  voltaje de funcionamiento menor  para  alimentar al escudo.

Respecto a los drivers de cada motor como se puede ver en la foto , son enchufables   para facilitar su remplazo en caso de avería o fallo  y   están basados en  controlados de motores paso a paso del tipo   A4988  o DRV8825. Cada driver incluye puentes para configurar el Micro-Stepping para los controladores paso a paso con cinco modos de paso seleccionables: full, 1/2, 1/4, 1/8 y 1/16. (algunos controladores como el DRV8825 pueden hacer hasta 1/32 micro-stepping)

Resumidamente estas son las características de este nuevo escudo controlador multi-driver:

  • Compatibilidad con Arduino GRBL
  • Baja salida RDS (On)
  • Se puede utilizar para una máquina de grabado
  • Es compatible con GRBL 0.9 (Firmware de código abierto que se ejecuta en un Arduino UNO que convierte los comandos de código G en señales para  los motores paso a paso)
  • Soporte de 4 ejes (X, Y, Z, A-Puede duplicar X, Y, Z o hacer un 4to eje completo con firmware personalizado usando los pins D12 y D13)

 

En la siguiente imagen  de un Arduino  vemos la correspondencia con los pines del escudo para el control de los tres motores:.

cnc_shield_v3_3

 

Excepto todos los pines  citados ,  este escudo ( Arduino CNC Shield V3.0 ) contiene otros pines que admiten más funciones:

Arduino-CNC-Shield-Scematics-V3.XX_

Arduino-CNC-Shield-V3-Layout

Las funciones de los pines extras son los siguientes:

  • Interruptor de límite de pines ha sido duplicado por que cada eje tenga un “Top / +” y “fondo /-“. Esto hace más fácil de instalar dos interruptores de límite para cada eje.(usar con un interruptor normalmente abierto)
  • EStop – estos pines se pueden conectar a un interruptor de parada de emergencia. Esto hace lo mismo que el botón RESET en la placa Arduino. ( también puede ser instalado un botón adicional de emergencia que corta la corriente a toda la maquinaria. )
  • Control del husillo y el refrigerante tiene sus propios pins.
  • Comando Pin externos GRBL  se han quitado lo que le permite añadir botones de pausa/espera, reanudar y abortar.
  • Los pines serie (D0-1) y  los de I2C (A4-5) tienen su propia salida   para futuras ampliaciones. Por ejemplo  I2C se podría implementar software para  controlar cosas como la velocidad del huso o control del calor.
  • Versión 3.00 añadió unos jumpers para configurar el eje 4 (clon el otro eje o pin D12-13), comunicaciones (RX+TX, I2C) y una cabecera de control paso a paso (todos los pines necesitan para ejecutar 4 steppers)

Instalación de hardware

Se deben observar las siguientes advertencias:

  • Inversión de la polaridad de la alimentación o conectar incorrectamente la energía destruirá el  escudo
  •  Siempre asegúrese de insertar conexiones en la a orientación correcta y en la toma adecuada  correctamente
  • El escudo de CNC Arduino es compatible con fuentes de alimentación hasta 36V. Eso significa que todos los drivers de chip paso a paso NO se deben alimentar con  ese valor pues  controladores A4988  no están diseñados para funcionar a 36V de modo que si lo alimenta con ese valor  puede destruirlos.  Alimentación de  36V son para los drivers  como la Pololu DRV8825 que pueden funcionar con + 36V

ESQUEMA CONEXIONES PARA MODULO A4988

A4988

ESQUEMA CONEXIONES PARA MODULO DRV8824/DRV8825

DRV8825

ESQUEMA CONEXIONES PARA MODULO TMC2100

TMC2100

Instalación del software

1) Obtener código GRBL en Arduino

Descargar el código GRBL desde enlace:grblmain.zip descomprimir el archivo y copiar a la carpeta de las bibliotecas de arduino IDE, haga clic en abierto arduino IDE File -> ejemplos -> grblmain -> GRBLtoArduino, elegir la mesa correcta y COM, luego cargar el código de GRBLtoArduino a UNO

IDE

2
3

2) Instalar software de controlador grbl

Descargar software de controlador grbl desde enlace:GrblController.exe , descarga e instala, abra el software de controlador grbl como sigue

grblcontroller361 (2)

Conectar el  Arduino UNO al PC con cable USB, seleccione el puerto correcto, ajustar la velocidad de Baute como “9600”, haga clic en “Abrir”, una vez conectado, el botón “Abrir” cambiará a “Cerrar/Reset” con color de fondo rojo. Haga clic en “seleccionar archivo” para seleccionar el archivo, haga clic en “Begin” para empezar a  el grabado  (si  es que los motores están configurados en una maquina CNC   al que se haya acoplado un diodo láser  como por ejemplo esta maquina hecha con piezas de CD’s )