Bridge - Ejemplo Bridge

Este example Para El Arduino Yun Muestra Como utilizar la biblioteca brifge para acceder a este los pinos digitales y analógicos de la placa por medio de Llamadas RESTO. Se Muestra Como Se Puede crear su API Propia CUANDO utilice El estilo REST para Realizar Llamadas A través del Navegador .

Al ejecutar this example, ASEGURESE De que su equipo esta en La Misma Que el Rojo Yun. CUANDO Haya Programado La Placa, PUEDE Solicitar El Valor de la unidad ONU pasador, Escribir valor de las Naciones Unidas en pin de la ONU, y Configurar unidad ONU pasador Como una entrada o salida.

CUANDO La Contraseña RESTO ESTA desactivada, Se Puede Como utilizar ONU Navegador con la siguiente Estructura de URL:

http: //myArduinoYun.local/arduino/digital/13: Llamada de la ONU digitalRead (13);
http: //myArduinoYun.local/arduino/digital/13/1: Llamada de la ONU digitalWrite (13,1);
http: //myArduinoYun.local/arduino/analog/9/123: analogWrite (9123);
http: //myArduinoYun.local/arduino/analog/2: analogRead (2);
http: //myArduinoYun.local/arduino/mode/13/input: pinMode (13, INPUT);
http: //myArduinoYun.local/arduino/mode/13/output: pinMode (13, OUTPUT);


Necesario hardware

No hay ejemplo circuito parrafo Este.


Código

El Código de la Muestra ejemplo de Como Es Posible Hacer Peticiones RESTO a la Yun para leer y la información Escribir un los pinos de la Placa.

Es Necesario Incluir las Bibliotecas Puente, YunServer y YunClient:

# Include < puente . H >
 # Include < YunServer . H >
 # Include < YunClient . H >
Una instancia de la ONU Servidor Que permite al Yun para escuchar los Clientes Conectados.

YunServer Servidor ;

En la configuration (), se inician la serie Comunicación Multas Pará de depuración, y se Enciende el LED Incorporado en el pin 13, MIENTRAS SE Inicia puente. Bridge.begin () es de Bloqueo, y Dębe tardar Alrededor de 2 Segundos para completarse . Una Vez Que Se Pone en Marcha puente, se apaga el LED.

void setup ( ) {
   Serial . Comenzar ( 9600 ) ;
   pinMode ( 13 , OUTPUT ) ;
   digitalWrite ( 13 , LOW ) ;
   Puente . Iniciar ( ) ;
   digitalWrite ( 13 , ALTA ) ;

En la Segunda Parte de la configuration (), se instruye a la instancia de YunServer Para Que ESCUCHE Las Conexiones entrantes Sólo procedentes de localhost. Las Conexiones Realizadas un Linux Séran Pasadas AL PROCESADOR 32U4 Parr ANALIZAR Y Controlar los pinos. ESTO SUCEDE en el puerto 5555. Iniciar el Servidor con server.begin ().

Servidor . listenOnLocalhost ( ) ;
   Servidor . INICIAR ( ) ;
 }

En loop (), va a crear de de Una instancia de YunClient Para La Gestión de la Conexión. Si el Cliente se Conecta, procesará las Solicitudes En Una función f f personalizada (descrita Más adelante) y cerrará La Conexión CUANDO Haya terminado.Poner ONU RETRASO Al final del bucle () Los sueros Útil para mantener el Procesador pecado Hacer Demasiado Trabajo.

void loop ( ) {
   YunClient Cliente = Servidor . Aceptar ( ) ;

   SI ( Cliente ) {
     Proceso ( Cliente ) ;
     Cliente . Detener ( ) ;
   }

   RETRASO ( 50 ) ;
 }

Otro argumento Crear Proceso Proceso Llamado Que Acepta YunClient Como. Lee El Comando Mediante la Creación De Una cadena para Contener LA INFORMACIÓN entrante. Analiza los Comandos RESTO Por Su Funcionalidad (digital, analógico y Modo) y Pasa la Información de la Función f Llamada apropiadamente.

vacío Proceso ( YunClient Cliente ) {
   Cadena de comando = Cliente . ReadStringUntil ( '/' ) ;

   SI ( comando = = "digital" ) {
     digitalCommand ( Cliente ) ;
   }
   SI ( comando = = "análogo" ) {
     analogCommand ( Cliente ) ;
   }
   SI ( comando = = "Modo" ) {
     modeCommand ( Cliente ) ;
   }
 }

Crear Una función f f Para Hacer Frente a los Comandos digitales. Argumento Aceptar El Cliente Como. Crear las variables ALGUNAS de Configuraciones Regionales para mantener el pasador y el valor del comando.

anulará digitalCommand ( YunClient Cliente ) {
   int pin , valor ;

· · Analizar la PETICIÓN del Cliente Para Que el pasador Trabaje Usando client.parseInt ().

Si el Carácter DESPUÉS del pin es una "/", SIGNIFICA Que la URL va a Tener un siguiente valor de 1 ó 0. Este valor Asigna ONU valor al pasador, haciendose ALTO o BAJO. Si no hay una "/" lee el valor del pin Especificado.

pin = Cliente . parseInt ( ) ;

   SI ( el Cliente . read ( ) == '/' ) {
     valor = Cliente . parseInt ( ) ;
     digitalWrite ( pin , valor ) ;
   }
   Otra Cosa {
     valor = digitalRead ( pin ) ;
   }

Imprimir El Valor para el Cliente y Actualizar La Clave del Almacén de Datos con el valor verdadero del pasador.

Al anteponer F () Es El valor para el Cliente, imprimiéndole estara en el formato de la memoria flash. Esto! Ayuda a Conservar el espacio en la SRAM, que aqui Cual es Útil Cuando Se Trata de Cadenas Largas Como las URL.

La Clave Será el pasador, y el tipo. Por ejemplo D2 se guardará para el pin digital 2. El Valor Será cualquier valor en el Que El pasador configurado ESTA ACTUALMENTE, o Haya Sido Leído Desde el pasador.

Cliente . de impresión ( F ( "Pin D" ) ) ;
   Cliente . de impresión ( pin ) ;
   Cliente . de impresión ( F ( "establecido de Como" ) ) ;
   Cliente . println ( valor ) ;

   Cadena clave = "D" ;
   Tecla + = pin ;
   Puente . Puesto ( llave , cadena ( valor ) ) ;
 }

Configurar Una función f f para manejar las Llamadas analógicas de la Misma Manera, excepto de el Establecimiento de La Clave de baño Lugar De D Cuando Se Trabaja con los pinos de entrada analógica:

void analogCommand ( YunClient Cliente ) {
   int pin , valor ;

   pin = Cliente . parseInt ( ) ;

   SI ( el Cliente . read ( ) == '/' ) {
     valor = Cliente . parseInt ( ) ;
     analogWrite ( pin , valor ) ;

     // Enviar Información a Clientes
     Cliente . de impresión ( F ( "Pin D" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "establecido Como analógico" ) ) ;
     Cliente . println ( valor ) ;

     Cadena clave = "D" ;
     Tecla + = pin ;
     Puente . Puesto ( llave , cadena ( valor ) ) ;
   }
   Otra Cosa {
     valor = analogRead ( pin ) ;

     Cliente . de impresión ( F ( "Pin A" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "lee el analógico" ) ) ;
     Cliente . println ( valor ) ;

     Cadena clave = "A" ;
     Tecla + = pin ;
     Puente . Puesto ( llave , cadena ( valor ) ) ;
   }
 }
Crear Una función f f Más para manejar los Cambios de Modo del pasador. Aceptar YunClient argumento de Como, y crear de la variable de Una de mantener el parrafo El Numero de pinos locales. Lea el valor del pin de Tal Como Lo Hizo En Las Funciones digitales y analógicas.

 anulará modeCommand ( YunClient Cliente ) {
   int pin ;
   pin = Cliente . parseInt ( ) ;

Asegurese de Que la URL es Válida

 SI ( el Cliente . read ( ) ! = '/' ) {
     Cliente . println ( F ( "error" ) ) ;
     volver ;
   }
Si Se Trata De Una Dirección URL Válida, Almacenar la URL Como una cadena. Si el Modo Es Una entrada o salida, Configurar el pin E INFORMAR de Ello al cliente. Si la cadena no coinciden con Organismos Europeos de Normalización Valores, devolvera el error de la unidad ONU.

   Cadena Modo = Cliente . ReadStringUntil ( '\ r' ) ;
      SI ( Modo == "entrada" ) {
     pinMode ( pin , ENTRADA ) ;
     // Envía ONU retorno al cliente
     Cliente . de impresión ( F ( "Pin D" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "configurado de Como ENTRADA!" ) ) ;
     volver ;
   }

   SI ( Modo == "salida" ) {
     pinMode ( pin , OUTPUT ) ;
     // Enviar Información a Clientes
     Cliente . de impresión ( F ( "Pin D" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "configurado de Como SALIDA!" ) ) ;
     volver ;
   }
    Más
   Cliente . de impresión ( F ( "error: Modo no válido" ) ) ;
   Cliente . de impresión ( Modo ) ;
 }

El Programa completo quedaria Así:

# Include < puente . H >
 # Include < YunServer . H >
 # Include < YunClient . H >

 YunServer Servidor ;

 void setup ( ) {
   Serial . Comenzar ( 9600 ) ;
   pinMode ( 13 , OUTPUT ) ;
   digitalWrite ( 13 , LOW ) ;
   Puente . Iniciar ( ) ;
   digitalWrite ( 13 , ALTA ) ;

 Servidor . listenOnLocalhost ( ) ;
   Servidor . INICIAR ( ) ;
 }

 void loop ( ) {
   YunClient Cliente = Servidor . Aceptar ( ) ;

   SI ( Cliente ) {
     Proceso ( Cliente ) ;
     Cliente . Detener ( ) ;
   }

   RETRASO ( 50 ) ;
 }

 vacío Proceso ( YunClient Cliente ) {
   Cadena de comando = Cliente . ReadStringUntil ( '/' ) ;

   SI ( Comando == "digital" ) {
     digitalCommand ( Cliente ) ;
   }
   SI ( Comando == "analógicas" ) {
     analogCommand ( Cliente ) ;
   }
   SI ( Comando == "Modo" ) {
     modeCommand ( Cliente ) ;
   }
 }

 anulará digitalCommand ( YunClient Cliente ) {
   int pin , valor ;

 pin = Cliente . parseInt ( ) ;

   SI ( el Cliente . read ( ) == '/' ) {
     valor = Cliente . parseInt ( ) ;
     digitalWrite ( pin , valor ) ;
   }
   Otra Cosa {
     valor = digitalRead ( pin ) ;
   }

  Cliente . de impresión ( F ( "Pin D" ) ) ;
   Cliente . de impresión ( pin ) ;
   Cliente . de impresión ( F ( "establecido de Como" ) ) ;
   Cliente . println ( valor ) ;

   Cadena clave = "D" ;
   Tecla + = pin ;
   Puente . Puesto ( llave , cadena ( valor ) ) ;
 }

 void analogCommand ( YunClient Cliente ) {
   int pin , valor ;

   pin = Cliente . parseInt ( ) ;

   SI ( el Cliente . read ( ) == '/' ) {
     valor = Cliente . parseInt ( ) ;
     analogWrite ( pin , valor ) ;

     // Enviar Información a Clientes
     Cliente . de impresión ( F ( "Pin D" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "establecido Como analógico" ) ) ;
     Cliente . println ( valor ) ;

     Cadena clave = "D" ;
     Tecla + = pin ;
     Puente . Puesto ( llave , cadena ( valor ) ) ;
   }
   Otra Cosa {
     valor = analogRead ( pin ) ;

     Cliente . de impresión ( F ( "Pin A" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "lee el analógico" ) ) ;
     Cliente . println ( valor ) ;

     Cadena clave = "A" ;
     Tecla + = pin ;
     Puente . Puesto ( llave , cadena ( valor ) ) ;
   }
 }

 anulará modeCommand ( YunClient Cliente ) {
   int pin ;
   pin = Cliente . parseInt ( ) ;

 SI ( el Cliente . read ( ) ! = '/' ) {
     Cliente . println ( F ( "error" ) ) ;
     volver ;
   }

  Cadena Modo = Cliente . ReadStringUntil ( '\ r' ) ;
   SI ( Modo == "entrada" ) {
     pinMode ( pin , ENTRADA ) ;
     // Enviar Información a Clientes
     Cliente . de impresión ( F ( "Pin D" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "configurado de Como ENTRADA!" ) ) ;
     volver ;
   }

   SI ( Modo == "salida" ) {
     pinMode ( pin , OUTPUT ) ;
     // Enviar Información a Clientes
     Cliente . de impresión ( F ( "Pin D" ) ) ;
     Cliente . de impresión ( pin ) ;
     Cliente . de impresión ( F ( "configurado de Como SALIDA!" ) ) ;
     volver ;
   }
     Cosa otra ;
   Cliente . de impresión ( F ( "error: Modo no válido" ) ) ;
   Cliente . de impresión ( Modo ) ;
 }
  

No hay comentarios:

Publicar un comentario