Smartwatches en entorno abierto


Aunque suene muy novedoso Secret Labs (los creadores de Netduino)y House of Horology   tuvieron ya hace tres años allá por 2013  tuvieron  una la idea  de crear el primer reloj inteligente abierto   :Agent , un smatwatch  muy  similar a lo que proponen hoy en día  ,pero claramente con recursos innovadores para su época como era  la carga inalámbrica y la pantalla de tinta electrónica.

El reloj cuenta  con procesador  a 120MHz ARM Cortex-M4 con  secundario  AVR co-processor  siendo la pantalla de 1.28 “(128 x 128)con retroiluminación inteligente
lente de cristal anti-reflejo

Lleva integrado  Bluetooth 4.0 BD / EDR + LE,  un acelerómetro de 3 ejes ,Sensor de luz ambiental, motor de vibración y carga inalámbrica Qi

respecto a la batería es muy interesante pues se ha diseñado el reloj para permitir la reparación y reciclaje de este incluyendo la batería reemplazable , teniendo una autonomía de 7 días duración de la batería (típica)  y 30 días en modo de sólo su esfera

Entre sus muchas virtudes este reloj puede ejecutar  aplicaciones escritas en C # utilizando Microsoft Visual Studio 2012 ( incluyendo la edición gratuita Express) desplegando sus propias aplicaciones a través de Bluetooth y por supuesto depurando de forma interactiva .

Para crear apps para este reloj solo  se necesitan tres herramientas gratuitas:

  •  Visual Studio Express 2012
  •  .NET Micro Framework SDK v4.3 QFE1
  • Agente de descarga del SDK v0.3.0 (febrero de 2014 de vista previa)

Asimismo los desarrolladores también pueden utilizar el reloj como una pantalla secundaria , interactuando con él de forma remota a través de Bluetooth de su Objective-C , C #, Java o aplicación de teléfono inteligente .

Y por cierto al igual que su teléfono inteligente, este reloj  ejecuta aplicaciones descargables .Estas aplicaciones pueden hablar con los dispositivos Bluetooth tradicionales, tales como teléfonos inteligentes y monitores de ritmo cardíaco , así como la nueva generación de dispositivos Bluetooth de baja energía, tales como cerraduras de las puertas .Por supuesto la conexión con el smartphone ,permite a las  aplicaciones también recuperar la información desde Internet, que le puede mantener al día con las cosas que son más importantes para usted .

agent.PNG

 

El proyecto se lanzó kickstarter   y  se llama Agent .La friolera de casi 6000 personas (exactamente  5.685 patrocinadores) contribuyeron con  1.012.742 $ para ayudar a dar vida a este proyecto, que aun no ha concluido por los números escollos que ha tenido en el aspecto hardware preveyendo que muy pronto de la luz.

 

En la otra cara de la moneda , tenemos otra propuesta muy diferente llamada culbox,   que pretende ser  el smartwatch de código abierto programable con Arduino

Culbox es una pulsera de código abierto con la que puede interactuar con los proyectos realizados con Arduino. Se puede programar a través del IDE de Arduino, siendo muy sencillo usar las diferentes librerías de Arduino con él..

Se trata de un reloj de pulsera de código abierto con Bluetooth integrado  contando ademas con diferentes  sensores como son un sensor de movimiento de 6 ejes , sensor de presión de aire ,altimetro,etc.

Cuenta con un procesador de 32 bits ARM Cortex ,, una pantalla de 1.5″OLED, 3 botones, y todo lo necesario en un reloj.

culbox1

CulBox viene con una aplicación tanto para teléfonos Android como para IOS que se puede utilizar como una plantilla para realizar distintos proyectos.

Acepta tarjetas microSD. También hay un puerto de usos múltiples como la carga de la batería o conectar el dispositivo a Arduino para la programación. Enlace al proyecto en Kickstarter. Y a su web.

 

 

Constrúyase su propio descodificador con una Raspberry Pi


Aunque el objetivo fundacional de Raspberry Pi era la educación, no se trata de un ordenador para niños en su sentido mas estricto . La nueva placa no es solo un dispositivo estupendo para programar sino que es el ideal para jugar y experimentar. La placa perfecta para sus futuros proyectos de IoT.Es un miniordenador , sin más ( en el sentido  estricto de la palabra pues no lleva ni  fuente de alimentación ni periféricos de E/S)  que es posible usar en  miles de aplicaciones diferentes en campos avanzados como  pueden ser la robótica o las monedas criptográficas, y otras más lúdicas  como podría ser construir una miniconsola retro  o un robot mayordomo como hemos visto en este blog .

Como  ejemplo de polivalencia  de la Raspebrry PI  también puede usarse para   tareas complejas de vídeo ,gracias a su potencia de procesamiento especialmente en gráficos  que y por supuesto también a la gran versatilidad del sw de Kodi.  Veamos los pasos necesarios para llevar a cargo esa tarea;

HARDWARE

Aunque desde Raspberry Pi Fundation  dejan claro que no van a olvidarse ni abandonar los modelos anteriores, lo cierto es que dado que la diferencia de precios actuales es muy pequeña ( apenas uno euros entre la versión 2   y la 3 ) , merece la pena en caso de no disponer ya de una versión anterior , de adquirir  la nueva  Raspberry Pi 3 Modelo B (1,2 GHz Quad-core ARM Cortex-A53, 1GB RAM, USB 2.0)

Esta es  la última placa de la familia de Raspberry Pi  ,la cual es  10 veces más potente que la original . A diferencia del la versión 2    lleva  conectividad inalámbrica integrada de 802.11 b/g/n LAN y Bluetooth 4.1  y  se  puede comprar por unos 40€ en Amazon .

raspberrypi

Entre las novedades más destacadas de la Raspberry Pi 3 está su nuevo procesador, ARM Cortex A53, un procesador de cuatro núcleos a 1.2GHz de 64 bits  con chipset  Broadcom BCM2387   y  que es superior un 50% más que la Raspberry Pi 2 model b , es decir el modelo anterior Raspberry Pi 2 model B  , que  a pesar de todo  para aplicaciones de vídeo como las que vamos  a ver,también  ofrece unos resultados también mas que excelentes.

Para empezar nuestro proyecto    es interesante resaltar  que para las funciones de video que vamos a usar  tanto la versión 2 como la 3 cumplirán con excelencia su cometido,  por lo que si tenemos una Raspberry Pi 2  también podremos usarla para este proyecto.

Una vez tengamos la placa  ( la Raspeberry Pi  2  o la Raspberry Pi 3  ) ,lo primero es buscar un emplazamiento para la placa, siendo lo más sencillo  y económico usar una caja trasparente de plástico que tengamos para reciclar  a las que les haremos los agujeros correspondientes con  un  simple  cortante  para las tomas usb, la alimentación por el micro-usb, el hdmi , la toma ethernet  y por ultimo para la micro-sd con idea de poder experimentar con diferentes posibilidades .

Asimismo es importante no olvidar fijar la placa a la caja con 4 tornillos para que no se mueva ésta

En la siguientes imágenes podemos ver lo fácil que resulta  practicar los  agujeros con  un cutter para  dar una mínima  consistencia  física

IMG_20160528_113034 IMG_20160528_113051 IMG_20160528_113103 IMG_20160528_113121

Y aquí vemos el resultado con el trabajo terminado y la tapa puesta

IMG_20160528_113013

Una vez hayamos fijado la placa a la caja, conectaremos la fuente  de 5V   (se  recomienda al menos de 1,5Amp  , intensidad  muy similar a las de los cargadores de  smartphones mas grandes) , el cable hdmi, la conexión ethernet  y por ultimo un medio de comunicación con la consola (teclado o ratón )  como puede ser  un mando inalámbrico  que incluya un ratón y mini-teclado en un  único dispositivo .

miniteclado

Un ejemplo de multidispositivo inalámbrico que podremos usar es KKmoon 2.4G Mini Teclado con ratón táctil QWERTY sin hilos del Touchpad para PC portátil Android TV Box HTPC Blanco

SOFTWARE

OpenELEC es un sistema operativo embebido en torno a Kodi  , entorno es ultimo  por excelencia para labores  multimedia que es open sw. Este ambiente está diseñado para ser lo más ligero posible en términos de tamaño y complejidad, para poder convertir por ejemplo un  HTPC en un receptor de satélite o un reproductor de DVD. Con su pequeño tamaño, OpenELEC también es ideal para pequeños sistemas de formato de hoy en día, por lo que no necesitará una computadora de escritorio grande en su sala de estar

Ya que está diseñado para ser ligero, OpenELEC utiliza muy pocos recursos del sistema para el procesador o la memoria. Con soporte para Intel HD Graphics, la plataforma GeForce y ION de NVIDIA, la plataforma Radeon & Fusion de AMD, así como chips Crystal HD de Broadcom, OpenELEC puede soportar contenido de alta definición en máquinas con procesadores de baja potencia mediante la descarga de contenido de vídeo a las tarjetas y descodificadores de gráficos compatibles .

Tambien openELEC es compatible con una amplia gama de tarjetas gráficas, por lo que es posible convertir los nuevos y no tan nuevos ordenadores en los sistemas de funciones completo de cine en casa,lo  cual o significa que se puede construir (o comprar) incluso máquinas pequeñas, silenciosas, sin ventilador para ser utilizado con eficacia como centro multimedia. Las siguientes plataformas son:

  • Generic (64 & 32bit): Intel HD/GMA graphics, NVIDIA Geforce / ION / ION2, AMD Radeon / Fusion
  • Raspberry Pi: A and B(+)
  • RaspberryPi-2: Cortex-A7 ARM
  • Freescale iMX6 ARM

Tambien esta aun disponible para plataformas  OpenELEC 3.x (“Frodo”) y 4.x (“Gotham”):

  • NVIDIA ION / ION2
  • Intel GMA HD chipsets
  • AMD Fusion
  • Apple TV 1 (using Broadcom Crystal HD)
  • Raspberry Pi

Se podría instalar Windows o su distribución Linux favorita en su ordenador y luego Kodi en la parte superior – y  funciona- pero no sería tan rápido ni tan fácil como OpenELEC. OpenELEC se construye desde cero específicamente para una tarea, para ejecutar Kodi. Otros sistemas operativos están diseñados para ser polivalentes, por lo que incluyen todo tipo de software para ejecutar otros  servicios y programas que si necesita sólo la parte multimedia no  va a utilizar. OpenELEC, sin embargo, sólo incluye el software necesario para ejecutar Kodi. Debido a que es pequeña (aproximadamente 150 MB), se instala en cuestión de minutos, literalmente, y, se puede arrancar de forma extremadamente rápida en 5-20 segundos, dependiendo del tipo de hardware utilizado.

A diferencia de otras soluciones de Kodi, OpenELEC no se basa en Ubuntu. De hecho, no se basa en cualquier distribución de Linux; OpenELEC ha sido construido desde cero específicamente para actuar como un centro de medios de comunicación. Eso significa que no incluye controladores para las cosas que simplemente no se pueden utilizar como tarjetas 3G y gráficos comprimidos, por ejemplo.

Además, OpenELEC está diseñado para ser manejado como un aparato: se puede actualizar automáticamente y puede ser administrado en su totalidad dentro de la interfaz gráfica. A pesar de que se ejecuta en Linux, usted nunca tendrá que ver una consola de administración, terminal de comandos o tener conocimientos de Linux para usarlo.

Viendo las bondades que nos ofrece  OpenElec  , siendo posible con Raspberry Pi  (incluso en sus versiones anteriores ) veamos ahora como podemos  instalarlo en nuestro proyecto

Lo primero que hay que hacer es descargar la última versión estable de OpenELEC para ello podemos descargar la imagen versión actual desde aquí:http://openelec.tv/get-openelec  seleccionando “Raspberry Pi builds” en la columna de Open Elec stable Releases (6.0.3), o pulsando en el enlace directo de  la imagen  pinchando  en http://openelec.tv/get-openelec/category/7-raspberry-pi2-builds

openelec.png

Como  puede observar hay bastantes plataformas disponibles  por lo que como se había comentado hay un gran abanico de posibilidades

Para continuar necesitaremos las siguientes herramientas :

  1. Windows XP/7/8.x
  2. 7zip
  3. Win32DiskImager
  4. Una memoria micro-sd de al menos 8GB

Los  pasos   a seguir  para instalar

  • Descargar la imagen   desde  aqui http://openelec.tv/get-openelec/category/7-raspberry-pi2-builds
  • Extraer la imagen utilizando 7zip.
  • Insertar su memoria micorsd   en un lector microsd a USB . Debe aparecer como una nueva letra de unidad.
  • Ejecutar Win32DiskImager
  • Seleccione el archivo de imagen para comprobar la letra de la unidad de destino es correcta, a continuación, en escritura.
  • Cuando esté terminado se puede retirar de forma segura el dispositivo USB / tarjeta SD haciendo clic derecho sobre la unidad en Windows Explorer y seleccionando la opción de expulsión.

ADVERTENCIA: Su memoria micro-sd e borrará por este procedimiento, ya que se instala OpenELEC en la misma. Por favor asegúrese de conocer la letra  correcta para su USB Stick / tarjeta SD.

ADDON

Gracias  al sw de Kodi  junto a  un ADDOn,  es posible visualizar  toda la oferta  de canales de Imagenio que se tenga contratada   desde cualquier equipo  que este conectado a la red del hogar    gracias  a la  tecnología  DLNA  actualmente ya soportada por Movistar +

Este  addon   disponible gratuitamente en sourceforge,  permite realizar las mismas acciones (y otras mejoras) que un decodificador de movistar TV desde un PC, tabletas Android, smartphones, Android TVs, raspberrys, Bannana Pi y Linux x64 y 32 bits  pues  soporta los siguientes SO: windows 7 o superior, Android y Linux.

Este software funciona como un plugin dentro del famoso  reproductor multimedia  Kodi Helix  , por lo que es obligatorio tener instalado como prerequisito la  aplicación Kodi (www.kodi.tv) .pero como sabemos en OPenElec  ya esta instalado

Kodi Movistar+ TV es pues un ADDON para Kodi ( y también para XBMC)  que permite disponer de un decodificador virtual de Movistar+ TV para distintos sistemas operativos.

Las principales funcionalidades del addON son:

  •  Actualización automática de canales con descubrimiento automático de canales.
  •  Guía de programación EPG( Guía electrónica de programas).
  •  Grabaciones en la Nube y en local.
  •  Visualización de grabaciones en la nube.
  •  Sincronización de grabaciones a local para evitar su caducidad.
  •  Gestión avanzada de series.
  •  Últimos 7 días.
  • Grabaciones y programación de grabaciones.
  • Funciones Timeshift.
  • Distribución de señal mediante DLNA a otros dispositivos.
  • Gestión y grabación de series.
  • Grabaciones y reproducción en la nube (habilitar grabaciones en nube en la configuración).
  • Sincronización de grabaciones en nube a local.

Veamos  los pasos para instalar  este software:

Paso 1
Descargarse la versión del ADDON correspondiente al sistema operativo/dispositivo  desde el siguiente link: https://sourceforge.net/projects/movistartv/

Actualmente existen las siguientes versiones de Kodi Imagenio:

  •  Windows. Para XBMC/Kodi de sistemas Windows.
  •  Raspberry. Para Raspberry PI y sistemas Openelec , raspbmc o Bannana PI.
  •  Openelec X64. Para aquellos que tenéis instalado Openlec para X64 o sistemas X64 con compilaciones de ffmpeg 2.4 (en XBMC).
  •  Ubuntu X64. Resto de sistemas Linux X64.
  •  Android arm. Compilación para android con procesadores arm.

Una vez descargado, el paquete zip debe quedar accesible desde el dispositivo en el que está instalado el XBMC.

Paso 2.
Iniciamos la instalación de Add-on, para ello entramos en sistema -> Ajustes.
Entramos en la opción Add-ons  y   seleccionamos la opción de instalar desde un archivo .zip.
Seleccionaremos el archivo zip correspondiente y con esto quedará instalado el Add-on.
Paso 3.
Activamos y configuramos las opciones de TV en directo.
Para ello entramos en sistema -> Ajustes y seleccionamos la opción de TV en directo.
Activamos en general la TV en directo.
Paso 4.
Existen diversos parámetros de configuración que pueden ser variados y ajustados.Para entrar en los parámetros de configuración ir a Sistema-> Ajustes y seleccionar la opción deAdd-ons. Seguidamente seleccionar Add-ons activados.Seleccionar la categoría de Clientes PVR y  dentro de clientes PVR seleccionar el PVR IPTV Imagenio.
Desde la siguiente pantalla pulsar la opción de configurar.
Existen 3 bloques de configuración:general,Grabación de series,grabación en nube  y DLNA

Las opciones  más importantes son:

  • Directorio de grabación. En que directorio se dejarán los archivos de las grabaciones efectuadas. Por defecto en Windows es c:\recording y en los sistemas Linux el directorio recodings del storage. Esta configuración puede variarse hacia cualquier directorio o recurso compartido.
  •  Cargar todos los canales. Por defecto la aplicación solo le mostrará los canales que tienes contratados, ya que en general para los que no tiene contratado Movistar no devuelve ni tan siquiera señal. Aun así esta opción sirve para realizar un scan automático en toda la posible lista de canales y mostrará aquellos para los que movistar devuelve señal de TV.Como resultado de esto lo más probable es que encuentre nuevos canales que antes no tenía en la lista, en general será la correspondiente versión en SD de los canales HD (para los que tengan HD) o los HD para los que tengan señal en SD.A veces aparece alguno más que por lo que sea está abierto. El objetivo de esta opción (y del addón en general) no es el “pirateo” de canales, sino la de integrar en un solo dispositivo XBMC y el deco de imagenio para suprimir trastos innecesarios.
Paso 5
Una vez detectados los canales  desde  la barra horizontal de Kodi, simplemente hay que pulsar en TV , y podremos ver todos los canales que tengamos contratados
 LODI
KODI
Realmente como ha podido ver no es muy complicado  la construcción de este descodificador  cuyo corazón es una  Raspberry Pi 3 Modelo B (1,2 GHz Quad-core ARM Cortex-A53, 1GB RAM, USB 2.0  ¿se  anima a construirlo usted también?

 

¿Qué es NETMF?


NETMF es una plataforma de código abierto, que se convirtió en un proyecto de colaboración de código abierto allá  por  el año 2009, cuya principal virtud es  ampliar  el potencial y la capacidad de adaptación de .NET para el mundo de los dispositivos integrados de modo que programadores de escritorio , también pueden crear aplicaciones que se ejecuten en una amplia gama de sistemas de pequeños dispositivos, como mandos a distancia,  PCs ,servidores en la nube ,etc    todos ellos usando el mismo modelo de programación y herramientas comunes. Así de  este modo ,desarrolladores de sistemas integrados pueden aprovechar las ventajas  de lenguajes de productividad masiva orientados a escritorio y reducir su tiempo de comercialización.

.NET Micro Framework  pues esta diseñado  pues para dispositivos pequeños y por tanto de recursos limitados ofreciendo un entorno completo e innovador de desarrollo y ejecución que trae la productividad de las herramientas informáticas modernas a esta clase de dispositivos,pudiendo utilizarse para construir dispositivos integrados en dispositivos limitados recursos en un microcontrolador con pocos cientos kilobytes de memoria RAM y almacenamiento  como por ejemplo Netduino del que tantas veces hemos tratado en este blog.

Uno de los punto fuertes  respecto a otras plataformas  Open Hardware como Arduino o Raspberry Pi es que los desarrolladores pueden utilizar sus conocimiento de Visual Studio, C# y .net   para escribir rápidamente aplicaciones integradas sin tener que preocuparse por las complejidades de cada microcontrolador, asi que cualquier desarrollador puede comprarse  una placa  compatible con .net, conectar la placa a su equipo de desarrollo con Visual Studio y comenzar a escribir aplicaciones para dispositivos físicos  no  necesitando por tanto amplios conocimientos de diseño de hardware  para empezar a escribir código para dispositivos físicos.

Las  ventajas de NETMF pues son las siguientes:

  • Mejores herramientas  y experiencia para los desarrolladores : al utilizar  tecnologías existentes (c#.net )  y entornos de desarrollo profesionales es evidente que  la experiencia de uso es mucho  mejor que en otros entornos de  desarrollo para crear micro dispositivos inteligentes de depuración.
  • Prototipado rápido :dar vida a sus ideas en horas es fácil (en lugar de días o semanas con otras plataformas) usando por ejemplo los módulos de . net Gadgeteer. Por tanto es una vía rápida y fácil de desarrollar sus invenciones para mostrar a la gente sus diseños creativos.
  • Aprovechamiento de . net y C# : puede usar su  base de conocimientos que ya tenga de C# y. net para hacer dispositivos frescos e innovadoras.

 

Desde el punto de vista del desarrollador ,  trabajar con NETMF tiene dos caras : portarlo al hardware  o  utilizarlo para controlar su hardware . Portarlo  requiere costo considerable , mucho tiempo y mucha experiencia . Una vez hecho esto , podrá usar  NETMF  casi sin esfuerzo .

Usando criterios de calidad y fiabilidad como  directrices principales, otras empresas  como Secrets Labs o GHI  han  enriquecido aún más NETMF con características de valor añadido tales como WiFi, USB servidor y base de datos, lo cual se traduce en soluciones  de bajo riesgo de abandono a un costo mínimo.

benefits

En cuanto al hardware  existen  dos partners de  .NET Micro como son  GHI Electronics y  Secret Labs.

placas

Características fundamentales

NETMF está lleno de características propias de  cualquier lenguaje  moderno,como el soporte de  las siguientes estructuras  y facilidades como son :

  • Arrays
  • Classes
  • Collections — ArrayList, Dictionary, Stack, Queue
  • Cryptography — Encrypting/decrypting, hashing, SSL
  • Displays
  • Dynamic memory management with GC
  • Exceptions
  • File I/O — Files, directories and various storage types.
  • Globalization
  • Graphics — Bitmap, GIF, JPEG, Windows Presentation Foundation (WPF), fonts, touch and gestures.
  • Numerics
  • Power Management
  • Reflection
  • Hardware — Analog Input/Output, Digital Input/Output, I2C, Interrupts, OneWire, PWM, SPI, UART (Serial Port)
  • Math helpers
  • Namespaces
  • Networking — DHCP. DNS. HTTP. Sockets. TCP. UDP. Wireless
  • Runtime Debugging
  • Serialization
  • Strings
  • Text Encoding/Decoding
  • Threading, Events, Delegates, and Timers
  • Time keeping
  • USB Client
  • XML
  • Resources

Hay empresas  como GHI , que ademas construyen sobre las características principales del NETMF anteriormente citadas , extensiones adicionales de valor añadido como pueden ser las siguientes:

  • Configuración de la pantalla y el logotipo de la puesta en marcha
  • E / S – CAN, captura de la señal, generador de señales, I2C Software, USB de almacenamiento masivo
  • En-Campo de actualización
  • PPP
  • Reloj en tiempo real
  • Registro Acceso
  • RLP para cargar código nativo (c / montaje) para los propósitos de velocidad y en tiempo real.
  • Base de datos SQLite
  • USB Client – joystick, teclado, almacenamiento masivo, Ratón
  • USB Host – joystick, teclado, almacenamiento masivo, ratón, USB-Serial, Webcam
  • Perro guardián

.NET Gadgeteer se construye en la parte superior de NETMF para proporcionar una plataforma de desarrollo rápido utilizando placas base y módulos plug-and-play  como sensores .

Supongamos que queremos por ejemplo  hacer una aplicación de registrador de temperatura,  esto requiere una placa base, módulo de tarjeta SD y un  módulo de temperatura. En cuanto al software, ademas también se necesitan  controladores necesarios .

Si contamos  con el hardware ya  preconstruido  y los controladores para estos se incluyen, en el desarrollo de  la nueva aplicación  se reducen significativamente el tiempo de desarrollo.

.NET Gadgeteer es un estándar mantenido por Microsoft para la normalización de las conexiones entre las placas base y módulos. GHI fue  elegido para ser el primer proveedor en ofrecer una tarjeta de .NET Gadgeteer, el FEZ araña. El ecosistema continúa creciendo con más placas base y módulos.

 

Diseñador

Usando el diseñador de .NET Gadgeteer es simple y acelera su diseño.En la pantalla de diseño, se abre la caja de herramientas, arrastrado y soltando los componentes deseados.Haciendo clic y seleccionando “Conectar todos los módulos”  habrá terminado la configuración inicial.

Este proceso  incluye automáticamente todos los archivos DLL necesarios y genera una variable para alcance de cada componente  que le permite centrarse en la escritura de la funcionalidad principal de su diseño sin tener que escribir todo desde el principio ahorrándole tiempo y recursos valiosos.

IntelliSense

Visual Studio de Microsoft incluye una característica denominada IntelliSense. A medida que escribe  su código , IntelliSense entiende lo que podría estar tratando de escribir y muestra cuadros con sugerencias. Es por eso que se envian productos .NET Gadgeteer sin ningún tipo de manuales de programación.

Imaginemos  que esta utilizando un módulo de la cámara:todo lo que necesita hacer es escribir la palabra “rfidReader” y  golpe  el teclado para ver una lista de los métodos admitidos disponibles en los controladores incluidos.

Gadgeteer vs  Arduino Phidgets

¿Cómo se compara Gadgeteer contra otras plataformas de desarrollo?,Si esta interesado puede echar un vistazo  al siguiente vídeo que compara parpadear un LED, el control de un servo con un potenciómetro y un podómetro que muestra los pasos en una matriz de LED todo ello comparando varias plataformas.

 

Fuente   aqui

Placa clon de la Raspberry Pi:la Orange Pi


Desde 2012 la Raspberry Pi ha ido  creciendo  de  gran popularidad, estando  hoy en día  posicionada como una de las placas de desarrollo de referencia. Uno de sus rivales clásicos en los últimos tiempos están siendo las Orange Pi, una placa con un diseño similar pero  basado  en  procesadores de Allwinne

Shenzhen Xunlong dispone de la  placa SBC  muy similar a la Raspberry Pi a falta de 1 conector  USB , pero con un coste   bastante inferior  en Aliexpres. Es ademas abierta y hackeable. La placa de desarrollo low cost compite abiertamente   con  otras tantas existentes  donde  la mas destacable es tambien la Banana Pi  ,  pretendiendo todas  ellas  competir  con la Raspberry Pi.

Hablando de esta versión, la Orange Pi ,se vende en dos versiones, una básica de bajo coste  y otra denominada Orange Pi Plus.

orangepi

La Orange Pi normal  cuesta menos de 15$ y se basa en un SoC Allwinner A20 ARM, mientras que la Orange Pi Plus más cara sube a los 52$ a cambio  de integrar una versión más potente del chip Allwinner, concretamente una A31S En el resto de hardware, ambas placas SBC son muy similares y parejas en cuanto a prestaciones.

Las dos integran una CPU basada en ARM Cortex A7 Dualcore y Quadcore (en la versión más potente), una GPU Mali compatible con OpenGL y 1GB DDR3 RAM, posibilidad de direccionar hasta 64GB de almacenamiento mediante tarjetas o por un puerto SATA, conexiones para audio, conector CSI para cámara, HDMI, VGA, USB OTG, USB 2.0, alimentación, GPIOs, IR, etc.

El tamaño de ambas placas de  es de 85 × 55 milímetros y su peso se queda en 38 gramos. En estas dimensiones a sus desarrolladores les han cabido puertos HDMI y AV, receptor de infrarrojos, Ethernet RJ45 10/100M, tres puertos USB 2.0, uno microUSB OTG, un micrófono, un interfaz CSI para cámara y un encabezado de 40 pines compatible con Raspberry Pi ( y en la version Plus soporte para SATA ,8GB de  EMMC   y   WiFi

 

orange_pi

En cuanto a los sistemas operativos soportados, se encuentran Raspbian, Ubuntu, Debian, Android 4.4 y otras versiones del sistema de Google  descargable desde la pagia oficial .. Todos ellos pueden ser movidos por los chips de Allwinner y el hardware que entregan estas placas SBC (Single Board Computer).

Sobre el resto de características son  las siguientes:

 

Especificación de hardware

CPU H3 Quad-Core Cortex-A7 H.265/HEVC 4 K
GPU
· Mali400MP2 GPU @ 600 MHz
· Compatible con OpenGL ES 2.0
Memoria (SDRAM) 1 GB DDR3 (compartido con GPU)
Almacenamiento a bordo Tarjeta del TF (máximo 64 GB)/MMC ranura para tarjeta
Red de a bordo 10/100 Ethernet RJ45
Entrada de vídeo Un conector de entrada CSI cámara:

Soporta 8-bit YUV422 interfaz de sensor CMOS

Soporta CCIR656 protocolo para NTSC y PAL

   Soporta SM píxeles sensor de la cámara

Soporta captura de vídeo solución hasta P @ 30fps

Entrada de audio MIC
Salidas de vídeo

Soporta salida HDMI con HDCP

Soporta HDMI CEC

Soporta HDMI 30 funciones

Integrado CVBS

Soporta una salida simultánea de HDMI y CVBS

Salida de audio 3.5mm Jack y HDMI
Fuente de alimentación
  Entrada de CC, entrada USB OTG no suministra alimentación
USB 2.0 puertos Tres USB 2.0 Host, un puerto USB 2.0 OTG
Botones Botón de encendido:
Periféricos de bajo nivel
40 encabezado pines, compatible con Raspberry Pi B +
GPIO (1×3) pin UART, suelo.
LED Energía LED y LED de estado
Clave IR de entrada, potencia
Sistemas operativos soportados Android lubuntu, debian, Rasberry Pi imagen

Definición de interfaz

Tamaño del producto 85mm × 55mm
Peso 38g
Naranja Pi™ es una marca comercial de Shenzhen xunlong software co., Limitada

 

Si la  versión económica  le parece poco   , Shenzhen Xunlong  también ha puesto a disposición del público, por menos de 52$, la versión  Orange Pi Plus, una versión más potente con un procesador SoC Allwinner H3 de cuatro núcleos a 1.6Ghz , con soporte para SATA ,8GB de  EMMC   y  sobre todo integracion de  WiFi.

 

bananaplus

hardware.jpg

Por cierto,  ambas  placas son compatibles con los pines de expansión de la Pi original…

Sobre diferencias respecto  al original,ciertamente casi todas las placas SBC son bastante similares orientándose para ser clones  mas baratos  de  la Raspberry Pi. Es cuestión de gustos o necesidades, pues  como hemos visto no se pueden alegar diferencias sustanciales, excepto porque se basan en arquitecturas diferentes a la ARM (como las basadas en x86) de la cual se comenta tienden a calentarse mucho precisando normalmente de un radiador pasivo o si es posible mejor  activo (equipado con un miniventilador).

Tutorial IoT con Fiware


Gracias a  Telefónica R&D Chile( Telefónica I + D Chile) nos  ofrecen   un interesantisimo tutorial  intruductorio sobre  IOT   concretamente usando la plataforma Orion Context Broker  (FIWARE ) con Arduino aunque puede extrapolarse  a otras placas de IoT ( por ejemplo Netduino ,Intel Edison o Raspberry Pi)

 

Un punto interesante para analizar el IoT (Internet of Things  )es el uso de las normas. Para el caso concreto vamos a revisar más adelante en la sección Orion Context Broker, una adaptación basada en la especificación OMA (Open Mobile Alliance) NGSI (Next Generation Service Interface).  En términos simples, esto significa que las peticiones HTTP o acciones que deben utilizarse son los que están actualmente empleados por los navegadores tales como GET, POST, DELETE y PUT para interactuar con el contexto Broker.

Configuración de hardware

Los componentes que vamos a utilizar son:

  •  Una placa Arduino (hay muchas alternativas, pero una versión con WiFi es esencial)
  •  Una placa protoboard
  •  LEDs
  •  Cables de conexión
  • Un router o un dispositivo celular que pueden ofrecer Wi-Fi (tethering)

Como se ha comentado en este blog , Arduino tiene su propia interfaz de desarrollo utilizando el lenguaje C ++ y se integra una serie de librerías para facilitar la  aplicación de prototipos. Esto no quiere decir que Arduino no se puede utilizar en entornos industriales o de alta demanda. Sin embargo, en estos escenarios cuestiones de costos por lo general conducen a la utilización de componentes ad-hoc.

Al observar la estructura, se puede reconocer algunos pines digitales en la parte superior y analógicas pines en la parte inferior (idéntico  a muchas otras placas como Netduino). Además, en la parte inferior, también  hay una  fila de conectores para alimentar al propia  placa u otras que se conecten. Por supuesto la  placa   también  tiene un conector a una toma de corriente y un conector mini USB, entre otros componentes, dependiendo de la versión de la tarjeta y si se utiliza add-on “escudos” o no.

Si conectamos un LED a la placa podemos hacerlo directamente, conectando el ánodo LED de pin digital 13 y el cátodo del   led  al pin de   GND como se ve aquí.  Hay que señalar que es interesante conectar  entre el pin digital 13 con una resistencia de 220 ohmios para proteger el diodo led , pero estrictamente podría omitirse dicha resistencia.

led.jpg

 

Por último, este mismo esquema se puede usar para agregar más LEDs o sensores de nuestra placa Arduino para que pueda añadir más funcionalidades. Para ello hay que recordar que en un tablero de alimentación corre horizontalmente en los puntos exteriores y vertical en los puntos interiores

 

Arduino, software and communications Arduino, software y comunicaciones

En este ejemplo  vamos a aprender cómo programar la placa Arduino con el fin de activar el LED se instaló en la segunda parte y se apaga. A continuación, vamos a utilizar una conexión a Internet con WIFI  en  la placa.

Como requisito previo, hay que ya hemos configurado el software de Arduino según nuestro sistema operativo. Además, hay que tener USB de la placa conectada a nuestro ordenador para cargar el programa a nuestra placa (  consulte  aquí para ver cómo instalar el software en una placa Intel Edison).

Debe onviamente seleccionar la versión del software que corresponde a su sistema operativo.  Una vez que el software está configurado e instalado abrimos nuestra IDE hasta el comienzo de la codificación.

sketc

 

Vamos  a ver  un ejemplo de la IDE Arduino.  Este ejemplo es específicamente para el IDE para los conjuntos de Intel, aunque los conceptos son los mismos. En la segunda fila de menú (donde el icono de comprobación es), encontrará los comandos para compilar y cargar nuestros desarrollos a la placa.   Si examina el código, tenemos dos funciones.  Uno es de configuración, donde las variables se inicializan y el bucle en el que se ejecutan las operaciones según se requiera. En el menú Archivo tenemos los ejemplos de opciones – 01 Básico – Blink. Esto mostrará una nueva ventana con el código necesario para poner a prueba nuestra LED:

/*

Blink Parpadeo

Se enciende un LED durante un segundo, luego se apaga durante un segundo, en repetidas ocasiones.

Este código de ejemplo está en el dominio público.

*/ Pin 13 tiene un LED conectado en la mayoría de las placas Arduino.

// Darle un nombre:

int led = 13;

// La instalación se ejecuta de rutina una vez cuando se presiona RESET:

void setup() { 

// Inicializar el pin digital como salida.

pinMode (led, OUTPUT);

}

// La rutina de bucle se ejecuta una y otra vez para siempre:

void loop() {

digitalWrite(led, HIGH);  //  Enciende el LED (ALTA es el nivel de tensión)

delay(1000);  // Espera un segundo

digitalWrite(led, LOW);  //  Apagar el LED haciendo que la tensión BAJA

delay(1000);  // Espera un segundo

}

El ejemplo que genera Arduino es bastante simple.  En la línea 10 se establece una variable con el número pin correspondiente en la placa . Posteriormente, el pasador la variable se  configura  como salida y se inicializa. Y, en el bucle, el LED se enciende y se apaga separado por un retraso de un segundo .

Antes de cargar el código anterior en la placa , el IDE se debe configurar para que sepa la placa  y qué puerto se  está utilizando:

Select Tools> Board> Intel Edison Seleccione Herramientas> Junta> Intel Edison ( para el caso de una placa Intel Edison)

Select Tools> Port> dev / ttyACM0 Seleccione Herramientas> Puerto> dev / ttyACM0

Ahora bien, si la tarjeta está correctamente conectada al puerto USB, podemos ‘Subir’ el código de la tarjeta (Ctrl + U) y deberíamos ver nuestra LED encendido y apagado de cada segundo.

 

Ahora para usar el wifi, tenemos que trabajar un poco más.  Por suerte, en los ejemplos de Arduino, tenemos una sección de WIFI con diferentes alternativas utilizando las soluciones de redes.  Entre ellos se encuentran los servidores Telnet y clientes, servidores Web y clientes, e incluso un cliente de Twitter.

CONSEJO: En nuestro caso, por motivos de simplicidad, podemos utilizar un cliente Web ya que vamos a enviar solicitudes posteriormente al corredor Orion Contexto utilizando el protocolo HTTP.  Tenga en cuenta que hay mejores soluciones, pero para los propósitos educativos vamos a tratar de minimizar el código tanto como sea posible.

#include <SPI.h>

#include <WiFi.h> >

/ ************************** /

/ * * Configuración de la instalación /

/ ************************ /

char ssid[] = “YourWifiSSID”;//Nombre de la red

char pass[] = “WifiPassword”; //Contraseña de red

char server[] = “130.206.80.47”;  // ORION IP address -> Create in /lab/ // Dirección IP ORION -> Crear en / lab /

int status = WL_IDLE_STATUS; int estado = WL_IDLE_STATUS; // we predefine the status as On but not connected // Nos predefinimos la condición pero no conectada

int led = 13; int LED = 13; // We initialize a variable to assign the pin number to which the led will be connected // Inicializamos una variable para asignar el número de identificación personal al cual se conectará el LED

/**

* Configuración Configuración Arduino

* (Ejecutar una sola vez)

**/

void setup() {

// Inititialization del puerto serie Arduino

Serial.begin(9600);

while (!Serial) {

// Esperar para el puerto serie para conectar. y Necesario para Leonardo solamente

}

// Comprobar que la placa tiene un escudo WiFi

if (WiFi.status() == WL_NO_SHIELD) {

Serial.println(“Wifi shield is not available”);

// No continúe con la instalación, o en otras palabras, se quedan aquí para siempre

while(true);

}

El código completo está disponible en:

https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

FIWARE  y Orion Context Broker

Como se ha discutido anteriormente en este ejemplo, el Broker de Orión define un contexto como un servicio que en base al stándar  OMA NGSI 9/10 puede manejar el envío y recepción de información contextual.  ¿Qué significa esto?  En primer lugar, para manejar un gran número de mensajes de entidades y administrar las actualizaciones, consultas, y también se encargan suscripciones de datos de las entidades. Recordemos que, según la NGSI 9 y 10 estándares, nos ocupamos de las entidades como una abstracción de los nodos físicos o dispositivos utilizados en las soluciones de la IO.

En el ejemplo anterior, hemos hecho una solicitud de actualización a una entidad ya creada.  Pero primero vamos a revisar cómo trabajar con Orión. . Una manera simple de probar el servicio OCB es crear una cuenta en https://account.lab.fiware.org/ y crear una máquina virtual con Orion preconfigurada en la sección de la nube. Alternativamente, el sitio y el acceso GitHub de Orión descargar una máquina virtual para ejecutar en nuestro entorno local

Otra herramienta útil es un cliente REST, pero podemos usar cURL si parece más sencillo. RESTClient es un cliente para Firefox que es bastante fácil de usar.

Los aspectos de configuración de la OCB están fuera del alcance de este tutorial, ya que requeriría demasiados detalles.  En cuanto al Laboratorio fiware, es importante tener en cuenta que fiware proporciona máquinas virtuales en la nube de forma gratuita para probar fiware compontents. Sólo tiene que crear una cuenta para acceder a los servicios. Sólo una advertencia rápida. . A partir de hoy (19-03-2015) y temporalmente, España no tiene recursos disponibles, pero hay otras regiones en las que las máquinas virtuales se pueden crear.

Cuando tengamos las herramientas necesarias, la forma más básica para interactuar con la OCB es:

1. Creando una entidad:Para ello hay que tener en cuenta varios factores.  En primer lugar, la llamada se envía como una solicitud HTTP POST, por ejemplo, http://myhost.com:1026/v1/updateContext.  Con esto queremos decir que estamos ocupando la versión 1 del API con la operación updateContext.

También tenemos que definir varias variables en la cabecera de la solicitud:

Accept: application/json

Content-Type: application/json

X-Auth-Token: [TOKEN AUTHENTICATION]

En cuanto a la generación de tokens, la forma más sencilla es utilizar un script en Python creado por Carlos Ralli en GitHub. Se necesita una cuenta FIWAREy ejecutar el ‘get_token.py  se requiere la escritura’.

Después de configurar el encabezado de la solicitud, configurar el “cuerpo” de la solicitud mediante el siguiente código JSON:

{

“contextElements”:[

{

“type”:”LED”,

“isPattern”:”false”,

“id”:”LED001″, “

“attributes”:[

{

“name”:”switch”,

“type”:”bool”,

“value”:”false”

}

]

}

],

“updateAction”:”APPEND”

}

Esta es la estructura de un “contexto Elementos”, que es un grupo de entidades con ciertos atributos, tales como, “isPattern” e “id”, “tipo”.type ”  se refiere a un tipo definido y permite la búsqueda de entidades por un tipo particular. “Id” es un atributo que debe ser único para cada entidad para ejecutar búsquedas en base a este ID. “IsPattern” se explicará más adelante en el punto No. 2.

También puede agregar una serie de atributos de la entidad en la propiedad “atributos”, donde cada atributo se define por el “nombre”, “tipo” y “valor”. Por último, “updateAction” define si vamos a realizar un “añadir” o y “UPDATE”.

Si todo va bien, vamos a recibir una respuesta 200 OK desde el servidor y que nos dará los detalles de la entidad creada:

{

“contextResponses” :

{

“contextElement” : {

“type” : “LED”,

“isPattern” : “false”,

“id” : “LED001”, “

“attributes” :

{

“name” : “switch”,

“type” : “bool”,

“value” : “”

}

]

},

“statusCode” : { “

“code” : “200”,

“reasonPhrase” : “OK”

}

}

]

}

2. Consultar la entidad: Para consultar una entidad, la operación estándar es ‘queryContext’ que sería http://myhost.com:1026/v1/queryContext.También aplicamos las cabeceras que se describen en el punto No. 1 y el uso post.

El JSON utilizado en el cuerpo de la petición sería la siguiente:

{

“entities”:[

{

“type”:”LED”,

“isPattern”:”false”,

“id”:”LED001″

}

]

}

Aquí es donde puede utilizar “isPattern” en “verdadero” y trabajar bien en el campo “tipo” o el campo “id” con expresiones regulares si queremos ejecutar una búsqueda un poco más compleja. En el ejemplo anterior sólo estamos buscando la misma entidad creada a través de la “id”.

También hay una manera más sencilla de hacer la misma consulta utilizando la siguiente solicitud: GET http://myhost.com:1026/v1/contextEntities/LED001 donde LED001 es el “id” de la entidad a buscar.

3. Actualización de la entidad: Esto es idéntico al punto No. 1, pero cambiando el atributo “updateAction” de “añadir” a “UPDATE”.

Por último, la integración de todo lo que hemos revisado, seremos capaces de generar una acción desde una página Web sencilla que se puede implementar en un servidor remoto y, de hecho demostrar que el LED de la aplicación se activa de forma remota utilizando la OCB.

Para ello vamos a utilizar el LED001 de reciente creación, estableciendo el atributo “interruptor” de verdadero a falso y viceversa para comprobar la acción.

Nuestra web se vería así:

 

ejemplño

Para ello, el código html, css y js se comparten en:   https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

 

 

 

Fuente    aqui

Herramientas online diseño electronico


La automatización de diseño electrónico (del inglês Electronic Design Automation, o simplemente EDA) se refiere a una categoría de herramientas  CAD  enfocadas  a la concepción, y producción de sistemas electrónicos, llegando no  sólo el diseño sino incluso  al  desarrollo de circuitos impresos  o  la simulación de los mismos

Tradicionalmente  estas herramientas EDA  se han adquirido comprando la licencia software  para un s.o. en concreto  el que se instalaba . Normalmente con el paso de los años, el sw  solía quedarse desfasado  con lo que  normalmente teníamos  que adquirir una nueva licencia normalmente de pago: por ejemplo son los casos de la familia de herramientas Orcad-Pspice  o Tango

Antes de EDA, los circuitos integrados se diseñaban a mano, y se desarrollaban manualmente en un proceso  fundamentalmente gráfico, con la traducción de electrónica al gráfico hecho manualmente. Una de las mejores compañía que se conocían para esto era Calma, cuyo formato GDSII aún sobrevive.A mediados de los setenta, los desarrolladores empezaron a automatizar el diseño junto con los croquis empezando a desarrollar las primeras herramientas de montaje y ruteo.

Las primeras herramientas EDA fueron desarrolladas académicamente, y una de las más conocidas era la “Berkeley VLSI Tools Tarball”, un conjunto de utilidades UNIX destinadas al diseño de los primeros sistemas VLSI. Todavía ampliamente utilizados son ‘Espresso heuristic logic minimizer’ y ‘Magic’.

Otro hito crucial en el desarrollo fue la conformación de MOSIS, un consorcio de universidades y fabricantes que desarrollaron de una manera económica una forma de entrenar estudiantes para formar diseñadores de chip, produciendo circuitos integrados reales.

En 1981, Daisy Sistemas, Mentor Graphics, y Valid Logic Systems, fueron todos ellos fundados en esa época, y colectivamente fueron referidos como DMV. Después, pocos años más tarde, muchas compañías se especializaron en EDA, cada cual con un énfasis ligeramente diferente. El primer encuentro de mercado para EDA estuvo organizado en la ‘Design Automation Conference’ en 1984.

En 1981, el Departamento de Defensa de EE.UU. empezó a financiar VHDL como lenguaje de descripción de hardware. Y en 1986, Verilog, otro lenguaje de diseño de alto nivel de gran popularidad, fue introducido como lenguaje de descripción de hardware por Gateway Design Automation. Los simuladores siguieron rápidamente a estas introducciones, permitiendo la simulación directa de diseños de chips: especificaciones ejecutables. Unos cuantos años más, se desarrollaron backs-ends para mejorar la síntesis de lógica.
2015-12-02_21h47_43

Actualmemte  , con el avance de los servicios web  hoy en día es posible gestionar la concepción,  producción de sistemas electrónicos,  diseño, desarrollo de circuitos impresos  y simulación , mediante varias  herramientas en línea gratuita como por ejemplo KiCad , gEDA ,etc . entre las que  podriamos destacar  EasyEda , la cual compone una suite de herramientas EDA, integrando una poderosa herramienta de captura de esquemas, un simulador libre de modo mixto de circuito y un  diseñador de PCB en un entorno sin fisuras mediante el usos de un navegador orientado no solo para para ingenieros electrónicos, también para educadores, estudiantes y aficionados

Esta herramientas es soportada por multiplataforma , soportada por  Mac, Linux, Windows y Android,  y al ser una herramienta web  no hay que instalar ni configurar nada en nuestras maquinas

En cuanto al diseño de esquemas se puede ahorrar tiempo de diseño utilizando bibliotecas masivas de componentes esquemáticos, huellas y paquetes de PCB, modelos de simulación de Pspice y subckts.

 

Esquema, diseño de PCB, simulador de circuitos

Con estas herramienta es posible dibujar esquemas rápidamente utilizando las bibliotecas disponibles en el navegador ( que ademas se actualizara de forma automática)  

Asimismo también es posible  verificar circuitos de señales digitales y mixtos analógicos, con subcircuitos y modelos de Pspice

En cuanto al diseño del circuito impreso es posible realizarlos  con múltiples capas, miles de pastillas, que aún podrían operar con rapidez y el diseño de problemas.

Respecto a los formatos soportados , es posible mediante  importación , de diseños realizados con  Eagle, Altium, Kicad y LTspice y exportación netlists especias y SVG, PNG y archivos pdf para la documentación. También utiliza los archivos de formato JSON estándar abierto internamente por lo que es fácil de hacer algunas cosa ssimplemente utilizando un editor de texto. Adems su  salida  tambien se   puede descargar en formato Gerber PCB y enviarlos a cualquier proveedor de PCB

Otro aspecto interesante , es el apartado de desarrollar en colaboración permitiendo invitar  a colegas y socios para colaborar en el diseño de ingeniería electrónica.,colaborar y hacer comentarios sobre diseños fácilmente de modo  público o privado, acceso controlado, opciones para compartir proyectos.

 

Herramienta de diseño de diseño de PCB
Podríamos considerar   pues que es una herramienta de desarrollo  en Nube de código abierto de hardware, permitiendo acceder a la potencia de la nube mediante  acceso abierto a fuentes de  módulos desarrollados por miles de ingenieros electrónicos gracias a  que es posible comparte  esquemas y PCB  con criterios fácilmente comprensibles  en torno a  proyectos público-privado y seguro y usando opciones de control de acceso
Especia Electrónica especia Simulador

 


EasyEDA  es pues una excelente 
 herramienta gratuita online  de desarrollo de circuitos electrónicos que incluso se puede utilizar incluso sin registrarse con archivos que se guardan en un modo anónimo donde los archivos pueden ser recuperados y compartieron con sólo sus url’s

Por último como no podía ser de otra manera , ofrecen un servicio de bajo costo de fabricación de placas de circuito impresos bajo demanda ,  de modo que  pueden pedirse estas directamente desde dentro de la herramienta

Para terminal  en el propio portal easyda   hay un  gran numero  ejemplos e incluso  un tutorial(  https://easyeda.com/Doc/Tutorial/)

 

Manejo de pantallas LCD con Netduino


Las pantallas de cristal líquido (LCD) son una gran opción de dispositivo de salida para mostrar caracteres alfanuméricos en tiempo real. También son muy útiles si su proyecto requiere una interfaz de usuario interactiva para la entrada de datos. Además, son de bajo costo, consumen menos energía que las pantallas LED, y le dan un aspecto más profesional a su proyecto.

Gracias a Ebedded Lab , hoy vamos a explorar cómo conectar un LCD personaje basado HD44780 a Netduino para mostrar caracteres alfanuméricos  sin usar las librerías de Crsytal Liquid , que aun siendo muy potentes  y utiles en ocasiones nos pueden dar algún problema .

Para más detalles técnicos del controlador HD44780, por favor lea la hoja de datos, así como su ejemplo de interfaz con chipKIT.

 

Configuración de Circuito y Teoría

La conexión de un LCD  es realmente simple. El LCD funciona en modo de 4 bits, y por lo tanto los pines 7 a 10 (D0-D3) de la pantalla LCD no han sido utilizados. Los cuatro bits de datos más significativos, D4-D7 (pines 12 a 14), recibe datos LCD / comando a través de pasadores Netduino E / S 7, 5, 3 y 1, respectivamente. Del mismo modo, el Registro Select (R / S) y Enable (E) las líneas de señal de la pantalla LCD son impulsados ​​por Netduino pins E / S 11 y 9, respectivamente. Pasadores LCD 1, 2, 3, 4, 15 y 16 están relacionados con la alimentación, ajuste de contraste y pantalla LED de luz de fondo, y están conectados apropiadamente como se muestra a continuación. Para entender cómo funciona LCD, tengo que apuntar a un documento diferente, ya que se explica mejor por allá. En Interconexión un LCD de caracteres, Raj explica acerca de la comunicación en el modo de 4 bits y también habla sobre los fundamentos de controlador HD44780 LCD. Para más detalles técnicos, consulte Hitachi HD44780U (LCD-II) ficha técnica.

Conexión Con Netduino / Netduino Plus

 Programa en # .NET

Hay dos maneras en que podemos mirar el programa, uno de una manera muy sencilla y la otra manera, por supuesto, más difícil.

En forma más simple no nos preocupamos acerca de lo que hay dentro de la clase LCD (o una biblioteca) y no utilizar algunos de los métodos o propiedades expuestas. Echemos un vistazo a las cosas más simples primero:

  //configuracion del LCD compatible con HD44780 de dos lineas
 var lcdProvider = new GpioLiquidCrystalTransferProvider(
 Pins.GPIO_PIN_D8, // RS
 Pins.GPIO_PIN_D9, // enable
 Pins.GPIO_PIN_D10, // d4
 Pins.GPIO_PIN_D11, // d5
 Pins.GPIO_PIN_D12, // d6
 Pins.GPIO_PIN_D13); // d7
 var lcd = new LiquidCrystal(lcdProvider);

lcd.Clear();

 lcd.Begin(16, 2);
 lcd.SetCursorPosition(0, 0);
 lcd.Write("primera linea");// Print a message to the LCD.
 

 lcd.SetCursorPosition(0, 1);

 lcd.Write("segunda linea");

Como se puede ver que hemos creado una instancia de la clase LCD y luego establecemos algunas propiedades de lo que nos gusta y simplemente llamamos al método  Write. Hay dos métodos escribir, uno mostrará el texto de la primera linea y el otro método mostrará la  segunda.

Ahora vamos a profundizar en la parte compleja. Hay varias bibliotecas por ahí, pero yo escribimos mi propia para entender lo que se cuece dentro. Echemos un vistazo a la sección constructor,

 
 /*-------------------------------------------------------------------------------+
|
| Copyright (c) 2012, Embedded-Lab. All Rights Reserved.
|
| Limited permission is hereby granted to reproduce and modify this 
| copyrighted material provided that this notice is retained 
| in its entirety in any such reproduction or modification.
|
| Author: ANir
| First Version Date: 2012/12/27
+-------------------------------------------------------------------------------*/


using System;
using System.Threading;
using Microsoft.SPOT.Hardware;
using System.Text;

namespace EmbeddedLab.NetduinoPlus.Day2.Display
{
 public class LCD
 {
 #region Constructor
 public LCD(Cpu.Pin rs, Cpu.Pin enable,
 Cpu.Pin d4, Cpu.Pin d5, Cpu.Pin d6, Cpu.Pin d7,
 byte columns, Operational lineSize, int numberOfRows, Operational dotSize)
 {
 RS = new OutputPort(rs, false);
 Enable = new OutputPort(enable, false);
 D4 = new OutputPort(d4, false);
 D5 = new OutputPort(d5, false);
 D6 = new OutputPort(d6, false);
 D7 = new OutputPort(d7, false);

 Columns = columns;
 DotSize = (byte)dotSize;
 NumberOfLines = (byte)lineSize;
 NumberOfRows = numberOfRows;

 Initialize();
 }
 #endregion


 #region Public Methods
 public void Show(string text, int delay, bool newLine)
 {
 if (newLine) dirtyColumns = 0;
 foreach (char textChar in text.ToCharArray())
 {
 ResetLines();
 Show(Encoding.UTF8.GetBytes(textChar.ToString()));
 dirtyColumns += 1;
 Thread.Sleep(delay);
 }
 }

 public void Show(string text)
 {
 string[] splitedText = SplitText(text);
 Show(splitedText);
 }


 public void ClearDisplay()
 {
 SendCommand((byte)Command.Clear);
 currentRow = 0;
 dirtyColumns = 0;
 }
 public void GoHome()
 {
 SendCommand((byte)Command.Home);
 currentRow = 0;
 dirtyColumns = 0;
 }
 public void JumpAt(byte column, byte row)
 {
 if (NumberOfLines == (byte)Operational.DoubleLIne) row = (byte)(row % 4);
 else row = (byte)(row % 2);

 SendCommand((byte)((byte)Command.SetDdRam | (byte)(column + rowAddress[row]))); //0 based index
 }

 public void PushContentToLeft()
 {
 SendCommand(0x18 | 0x00);
 }

 public void PushContentToRight()
 {
 SendCommand(0x18 | 0x04);
 }

 #endregion


 #region Private Methods
 private void Initialize()
 {
 //initialize fields
 isVisible = true;
 showCursor = false;
 isBlinking = false;

 rowAddress = new byte[] { 0x00, 0x40, 0x14, 0x54 };
 firstHalfAddress = new byte[] { 0x10, 0x20, 0x40, 0x80 };
 secondHalfAddress = new byte[] { 0x01, 0x02, 0x04, 0x08 };

 currentRow = 0;
 dirtyColumns = 0;

 Thread.Sleep(50); // must wait for a few milliseconds


 // RS to high = data transfer
 // RS to low = command/instruction transfer
 RS.Write(false);

 // Enable provides a clock function to synchronize data transfer
 Enable.Write(false);


 // Set for 4 bit model
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(150);
 Write(0x02, secondHalfAddress);


 // Set the LCD properties 
 byte operationalValue = (byte)((byte)Operational.FourBit | (byte)NumberOfLines | (byte)DotSize);
 SendCommand((byte)((byte)Command.Operational | operationalValue));

 UpdateDisplayOptions();

 ClearDisplay();

 byte entranceValue = (byte)Entrance.FromLeft | (byte)Entrance.ShiftDecrement;
 SendCommand((byte)((byte)Command.Entrance | entranceValue));

 }

 private string[] SplitText(string str)
 {
 if (str.Length > Columns * NumberOfRows) str = str.Substring(0, Columns * NumberOfRows);

 int stringArrayCounter = 0;
 dirtyColumns = 0;

 char[] charArray = str.ToCharArray();
 int arraySize = (int)System.Math.Ceiling((double)(str.Length + dirtyColumns) / Columns);
 string[] stringArray = new string[arraySize];

 for (int i = 0; i < charArray.Length; i++)
 {
 if (dirtyColumns < Columns)
 {
 stringArray[stringArrayCounter] = stringArray[stringArrayCounter] + charArray[i];
 dirtyColumns += 1;
 }
 else
 {
 dirtyColumns = 1;
 stringArrayCounter += 1;
 stringArray[stringArrayCounter] = stringArray[stringArrayCounter] + charArray[i];
 }
 }
 return stringArray;
 }


 private void ResetLines()
 {
 if (dirtyColumns == 0) return;
 if (dirtyColumns % Columns == 0)
 {
 currentRow += 1;
 JumpAt((byte)0, (byte)(currentRow));
 }
 }

 private void Write(byte[] data)
 {
 foreach (byte value in data)
 {
 Write(value, firstHalfAddress); // First half
 Write(value, secondHalfAddress); // Second half
 }
 }

 private void Write(byte value, byte[] halfAddress)
 {
 D4.Write((value & halfAddress[0]) > 0);
 D5.Write((value & halfAddress[1]) > 0);
 D6.Write((value & halfAddress[2]) > 0);
 D7.Write((value & halfAddress[3]) > 0);

 Enable.Write(true);
 Enable.Write(false);
 //Debug.Print("Wrote " + value.ToString());
 }

 private void SendCommand(byte value)
 {
 RS.Write(false); // command/instruction transfer
 Write(new byte[] { value });

 Thread.Sleep(5);
 }

 private void UpdateDisplayOptions()
 {
 byte command = (byte)Command.DisplayControl;
 command |= isVisible ? (byte)DisplayControl.ScreenOn : (byte)DisplayControl.ScreenOff;
 command |= showCursor ? (byte)DisplayControl.CursorOn : (byte)DisplayControl.CursorOff;
 command |= isBlinking ? (byte)DisplayControl.BlinkBoxOn : (byte)DisplayControl.BlinkBoxOff;

 SendCommand(command);
 }

 private void Show(string[] splitedText)
 {
 foreach (string text in splitedText)
 {
 JumpAt((byte)0, (byte)(currentRow));
 currentRow += 1;

 Show(Encoding.UTF8.GetBytes(text));
 }
 }

 private void Show(byte[] bytes)
 {
 RS.Write(true);
 Write(bytes);
 }

 #endregion

 #region Public Properties

 public bool IsVisible
 {
 get { return isVisible; }
 set { isVisible = value; UpdateDisplayOptions(); }
 }

 public bool IsBlinking
 {
 get { return isBlinking; }
 set { isBlinking = value; UpdateDisplayOptions(); }
 }

 public bool ShowCursor
 {
 get { return showCursor; }
 set { showCursor = value; UpdateDisplayOptions(); }
 }

 #endregion

 #region Fields
 private OutputPort RS;
 private OutputPort Enable;
 private OutputPort D4;
 private OutputPort D5;
 private OutputPort D6;
 private OutputPort D7;
 private byte Columns;
 private byte DotSize;
 private byte NumberOfLines;
 private byte[] rowAddress;
 private byte[] firstHalfAddress;
 private byte[] secondHalfAddress;
 


 private int currentRow;
 private int dirtyColumns;
 private int NumberOfRows;

 private bool isVisible;
 private bool showCursor;
 private bool isBlinking;
 #endregion


 #region Enums
 public enum Command : byte
 {
 Clear = 0x01,
 Home = 0x02,
 Entrance = 0x04,
 DisplayControl = 0x08,
 Move = 0x10,
 Operational = 0x20,
 SetCgRam = 0x40,
 SetDdRam = 0x80
 }

 public enum Entrance : byte
 {
 FromRight = 0x00,
 FromLeft = 0x02,
 ShiftIncrement = 0x01,
 ShiftDecrement = 0x00
 }

 public enum DisplayControl : byte
 {
 ScreenOn = 0x04,
 ScreenOff = 0x00,
 CursorOn = 0x02,
 CursorOff = 0x00,
 BlinkBoxOn = 0x01,
 BlinkBoxOff = 0x00
 }

 public enum Operational : byte
 {
 Dot5x10 = 0x04,
 Dot5x8 = 0x00,
 SingleLine = 0x00,
 DoubleLIne = 0x08,
 FourBit = 0x00
 }
 #endregion
 }
}

En la sección constructor, que básicamente crea cierta Outport, guarda las propiedades de LCD y luego llama al método Initialize. En este método, fijamos las propiedades visuales, inicializar algunas matrices y luego preparar la pantalla LCD para el modo de comunicación de 4 bits.

 private void Initialize()
 {
 //initialize fields
 isVisible = true;
 showCursor = false;
 isBlinking = false;

 rowAddress = new byte[] { 0x00, 0x40, 0x14, 0x54 };
 firstHalfAddress = new byte[] { 0x10, 0x20, 0x40, 0x80 };
 secondHalfAddress = new byte[] { 0x01, 0x02, 0x04, 0x08 };

 currentRow = 0;
 dirtyColumns = 0;

 Thread.Sleep(50); // must wait for a few milliseconds


 // RS to high = data transfer
 // RS to low = command/instruction transfer
 RS.Write(false);

 // Enable provides a clock function to synchronize data transfer
 Enable.Write(false);


 // Set for 4 bit model
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(4);
 Write(0x03, secondHalfAddress);
 Thread.Sleep(150);
 Write(0x02, secondHalfAddress);


 // Set the LCD properties 
 byte operationalValue = (byte)((byte)Operational.FourBit | (byte)NumberOfLines | (byte)DotSize);
 SendCommand((byte)((byte)Command.Operational | operationalValue));

 UpdateDisplayOptions();

 ClearDisplay();

 byte entranceValue = (byte)Entrance.FromLeft | (byte)Entrance.ShiftDecrement;
 SendCommand((byte)((byte)Command.Entrance | entranceValue));

 }

 

Ahora, echemos un vistazo a los métodos que son críticas para mostrar el texto a la pantalla LCD. El primer método Show nos permite mostrar la letra texto dado por carta como se puede ver el bucle está estructurado para cada carácter en el texto dado.

private void Show(string[] splitedText)
 {
 foreach (string text in splitedText)
 {
 JumpAt((byte)0, (byte)(currentRow));
 currentRow += 1;

 Show(Encoding.UTF8.GetBytes(text));
 }
 }

El segundo método Show muestra básicamente todo el texto a la vez, pero antes de que lo haga algún formato para que el texto aparecerá continuamente. Confía en mí mostrando texto dado de una manera continua es uno de lo difícil que resolví en esta clase LCD.

 private void Show(byte[] bytes)
 {
 RS.Write(true);
 Write(bytes);
 }

Por último, el método que escribe información en la pantalla LCD se realiza bajo el método de escritura. El primer método Write llama al método send Escribir pasa el valor de escritura y la dirección donde enviar la información. El segundo método de escritura básicamente escribe la información en la pantalla LCD.

  private void Write(byte value, byte[] halfAddress)
 {
 D4.Write((value & halfAddress[0]) > 0);
 D5.Write((value & halfAddress[1]) > 0);
 D6.Write((value & halfAddress[2]) > 0);
 D7.Write((value & halfAddress[3]) > 0);

 Enable.Write(true);
 Enable.Write(false);
 //Debug.Print("Wrote " + value.ToString());
 }
 

Producción

Después de conectar un par de cables, al ejecutar su código y visualizar el texto que usted quiere, pone una sonrisa en la cara. Dependiendo del método que está utilizando dará a obtener resultados diferentes Show, se mostrará letra por letra y otra mostrará el texto entero de una vez. Al igual que en el video, al girar el potenciómetro, los cambios de contraste de la pantalla.

 

  public static void Main()
 {
 LCD lcd = new LCD(
 Pins.GPIO_PIN_D8, // RS
 Pins.GPIO_PIN_D9, // Enable
 Pins.GPIO_PIN_D10, // D4
 Pins.GPIO_PIN_D11, // D5
 Pins.GPIO_PIN_D12, // D6
 Pins.GPIO_PIN_D13, // D7
 16, // Number of Columns 
 LCD.Operational.DoubleLIne, // LCD Row Format
 1, // Number of Rows in LCD
 LCD.Operational.Dot5x8); // Dot Size of LCD


 lcd.ShowCursor = true;
 lcd.Show("CRN", 200, true);
 Thread.Sleep(5000); // reading time for the viewer
}

 

Descargas

1) Código C # .NET (archivo Solution)

2) archivo Flitizing

 

 

 

Fuente  aqui