Desgraciadamente los tiempos de la plataforma de Netduino pasaron a la historia, ya que fue adquirida por wildernesslabs, empresa que tras unos años de desarrollo han dado paso a Meadow , una plataforma IoT completa con seguridad de nivel de defensa que ejecuta aplicaciones estándar .NET completas en microcontroladores integrados.
Meadow realmente se ha orientado al publico profesional proporcionando una biblioteca IoT completa, plug-and-play con una enorme biblioteca de controladores periféricos, control industrial, compatibilidad con pantallas gráficas y más.Los kits para desarrolladores integrables y aptos para prototipos le permiten crear prototipos en hardware real e integrarlos directamente en los productos.Los módulos de hardware de montaje en superficie (SMT) llave en mano le permiten ir a escala de producción con opciones de conectividad modular en entornos industriales.Asismismo Meadow.Cloud le permite administrar sus dispositivos a escala en el campo.
En este post hablaremos de su ultimo diseño Meadow F7 que destaca por su potencia y muy bajo perfil y que a continuación pasaremos a comentar sus novedades mas notables
Wilderness Labs, que impulsa a los desarrolladores de .NET a incursionar en el hardware, ha anunciado un nuevo sistema en módulo (SOM) basado en su familia Meadow: el módulo Meadow F7 Core-Compute.
«Nuestros clientes tienden a crear soluciones de IoT industriales y comerciales, en muchos casos están modernizando procesos industriales e integrándose en arquitecturas SCADA», dice Bryan Costanich, cofundador y director ejecutivo de Wilderness Labs, sobre el lanzamiento. «Gran parte de la infraestructura existente con la que están trabajando es lamentablemente insegura, por lo que es gratificante poder brindarles una plataforma de desarrollo rápido que les permite usar sus habilidades existentes para desbloquear el desarrollo de hardware, al mismo tiempo que brinda seguridad de manera predeterminada.
El Meadow F7 tiene un nuevo hermano más pequeño. Conozca el módulo de cómputo central Meadow F7. (📷: Laboratorios del desierto)
«Y al ofrecer el módulo Core-Compute», agrega Costanich, «podemos reducir significativamente el tiempo de comercialización de nuestros clientes, así como aliviar muchos de los desafíos de su cadena de suministro, dado lo difícil que es obtener un mantener estos microcontroladores, ya que estamos en la asignación directa del fabricante».
El SOM en sí se basa en el mismo diseño central que el Meadow F7 similar a un chicle de la compañía, que se actualizó a fines del año pasado como Meadow F7v2 . Hay un microcontrolador STMicroelectronics STM32F7 con un coprocesador Espressif ESP32 para conectividad Wi-Fi y Bluetooth Low Energy (BLE), 32 MB de RAM, 64 MB de memoria flash no volátil y un tamaño reducido que empaqueta todo en algo «del tamaño de un EE. cuarto de dólar», se jacta la compañía.
Aquellos que estén ansiosos por comenzar tendrán la opción de un kit de desarrollador, que incluye el módulo Core-Compute con una placa portadora que rompe los pines de entrada/salida de uso general (GPIO) de la pieza y ofrece puertos USB, puertos Ethernet duales y SD. almacenamiento de tarjetas Tanto la placa portadora como el propio módulo Core-Compute son de código abierto, señala la empresa, bajo la permisiva licencia Apache 2.0.
El kit para desarrolladores de $100 incluye un solo módulo más una placa portadora para facilitar el acceso a las funciones. (📷: Laboratorios del desierto)
«El kit de desarrollo del módulo Core-Compute está pensado como un acelerador, ya que proporciona un buen diseño de referencia conocido para las diversas funciones avanzadas del módulo, de modo que la gente básicamente puede copiar y pegar el esquema en sus propios diseños», explica Costanich de la decisión de la empresa de publicar el diseño de forma permisiva. «Y si tienen necesidades específicas, también pueden tomar el diseño de referencia del módulo e integrarlo directamente en sus circuitos».
Meadow F7 Core-Compute ahora está disponible para pre-pedido a $45 , antes del envío de julio, como una muestra de ingeniería con un pedido máximo por cliente de 25 piezas a través de la tienda de Wilderness Labs, mientras que el Developer’s Kit tiene un precio de $100 con un límite de cinco por cliente. El precio por volumen del módulo solo se reducirá a $ 30 en el lanzamiento general, prometió la compañía. Mientras tanto, los archivos de diseño están disponibles en el repositorio de GitHub de la compañía .
La compañia Wildernesss Labs tras comprar en 2016 Netduino y trabajar en secreto dos años en 2018, sacaron vía crowfounding (en Kickstarter) su proyecto estrella: Meadow , una plataforma IoT estándar de .NET de pila completa que intenta combinar lo mejor de todos los mundos, pues tiene el poder de RaspberryPi, el factor de computación de un Arduino y la capacidad de administración de una aplicación móvil. ¿Y la mejor parte? funciona con .NET Standard completo en hardware de IoT real
Existe una brecha cada vez mayor entre los desarrolladores y las empresas que desean construir hardware conectado y la capacidad de hacerlo. Meadow intenta cerrar esa brecha y permite a los diez millones de desarrolladores de .NET crear experiencias de hardware realmente interesantes con la misma facilidad con la que crean aplicaciones web o móviles en la actualidad.
Meadow permite a los desarrolladores ejecutar aplicaciones completas de .NET Standard 2.x en un microcontrolador e incluye un conjunto de controladores de hardware y API en la parte superior que hace que el desarrollo de hardware sea plug and play. Sin embargo, Meadow no se limita a los desarrolladores .Net, intentando abrir el desarrollo de hardware a desarrolladores de todo tipo, poniendo especialmente foco en el ambiente empresarial .
Microordenador vs Microcontrolador: las Raspberry Pis son ordenadores completos y los Ardunios son pequeños dispositivos (en su mayoría) de una sola tarea. Es quizás una exageración tener Ubuntu en un ordenador solo para encender un dispositivo así que por lo general, es deseable que los dispositivos de IoT ocupen desde el punto de vista del hardware como del sw lo menos posible a si que puede ser una buena idea que nuestro core de IoT corra un sistema operativo mas estable en cuanto a cortes o interrupciones ( como lo haría en un microcontrolador pero con muchísima mas potencia del calculo).
Meadow en principio ha sido diseñado para ejecutarse en una variedad de microcontroladores, y la primera placa se basa en la MCU STM32F7 (insignia de STMicroelectronics) con coprocesador ESP-32 e implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado, todo ello en el factor de forma Adafruit Feather.
Lo interesante pues es que el factor de forma Feather sirva como placa de desarrollo o incrustarlo. Es realmente un gran diseño basada en MCU STM32F7 en un bajísimo factor de forma y con casi tantos puertos GPIO (25) tanto analógicos como digitales como estamos acostumbrados en Arduino o Netduino.
En el sitio de Meadow Kickstarter dicen que se está ejecutando en Mono Runtime y admite la API .NET Standard 2.0 lo cual significa que probablemente ya sepa cómo programarlo pues la mayoría de las bibliotecas de NuGet son compatibles con .NET Standard, por lo que una gran cantidad de software de código abierto debería «simplemente funcionar» en cualquier solución que admita .NET Standard.
En términos de NanoFramework y TinyCLR; si bien esos son grandes esfuerzos, son significativamente diferentes a Meadow. Ambos esfuerzos se basan en .NET MicroFramework. Como tal, no son compatibles con .NET completo. No hay genéricos en ninguno de ellos, por ejemplo, ni hay soporte para las bibliotecas estándar .NET.
Funciones empresariales
Meadow incluye soporte para actualizaciones seguras por aire (OTA), lo que permite que las instalaciones de campo de IoT se gestionen de forma remota; una característica clave para las implementaciones empresariales de IoT.
Meadow abrirá todo un nuevo conjunto de posibilidades para el desarrollo de cosas conectadas. Y como funciona con un dispositivo de ultrabaja energía, podrá colocarlo en todas partes. Las instalaciones de baterías, energía solar e incluso energía a través de Ethernet (POE) se convertirán en algo común, lo que significa que para muchos de estos dispositivos, el acceso físico será limitado, por lo que la administración centralizada es un requisito absoluto.
Además de las actualizaciones de OTA, Wilderness Labs tiene planes para el monitoreo de campo básico, informes de fallas y análisis para asegurarse de que los dispositivos Meadow funcionen in situ.
Y debido a que Meadow usa .NET, las empresas pueden usar equipos existentes e inversiones de código para construir IoT, en lugar de tener que contratar nuevos desarrolladores que se especialicen en hardware. Es una propuesta de valor similar a la que sus creadores hicieron en Xamarin; había desarrolladores existentes que querían hacer dispositivos móviles, así como muchas inversiones existentes en código empresarial los cuales fueron habilitados en una plataforma completamente nueva ( Microsoft adquirió Xamarin por más de 400 millones de dólares, en gran parte por su valor en el mercado empresarial).
Seguridad
Otro aspecto importante del aspecto Meadow se intenta centrar en la seguridad. Meadow presenta consideraciones de seguridad básicas, desde la seguridad a nivel de hardware y las actualizaciones seguras, pero Wilderness Labs también se compromete a enviar componentes de software destinados a facilitar la seguridad desde una perspectiva de UX. No es suficiente tener actualizaciones seguras por aire (OTA ) , firmware firmado, revocación de certificados terciarios, etc., pueso la seguridad debe llegar hasta el final.
El pirateo del bot Mirai funcionó porque muchas de estas cámaras de seguridad conectadas tenían nombres de usuario y contraseñas predeterminados, asi que no es una cuestión banal.
En este nuevo enfoque enviaran componentes que puede ingresar y brindar una experiencia de usuario fantástica y fácil para cambiar esas cosas, así como orientación y educación para el desarrollador para ayudar a la gente a comprender cómo aprovechar las funciones de seguridad en la pila Meadow.
Inteligencia artificial en IoT
Recientemente, Pete Warden, director de TensorFlow en Google, escribió que la mayor parte de la inteligencia artificial se realizará en microcontroladores , y Meadow es la primera plataforma de desarrollo de microcontroladores que cumple con esa promesa, permitiendo ejecutar visión artificial a través de TensorFlow y otros paquetes de inteligencia artificial de alto nivel localmente en chip.
Se espera que la IA desempeñe un papel clave en IoT con la visión artificial y otros algoritmos de aprendizaje profundo que se ejecutan en imágenes y otros datos de sensores en la fuente para agilizar la recopilación de datos y permitir que los dispositivos tomen decisiones en el campo. Sin embargo, Meadow es la primera plataforma de microcontroladores de IoT que se enfoca específicamente en casos de uso de IA.
Mercado emergente
Se espera que el mercado global de IoT supere los USD $ 1 billón / año para 2025 , y se prevé que gran parte de ese dinero se gaste en herramientas, plataformas y servicios para desarrolladores. Y ese mercado está listo para la disrupción, mientras que los microcontroladores están preparados para convertirse en la forma dominante de computación , con un estimado de 75B de ellos in situ y conectados para 2025, casi todo el desarrollo de microcontroladores hoy en día se realiza en lenguajes de bajo nivel como C / C ++ , y las herramientas no han cambiado mucho desde la década de 1980.
Una de las cosas que ha frenado a IoT hasta ahora es la barrera de entrada; existe una variedad fantástica de nuevos dispositivos informáticos que pueden hacer todo lo que puede hacer una computadora en miniatura y más; sólo cuestan unos pocos dólares, pueden funcionar con una batería de tipo botón durante años y, sin embargo, programarlos es un trabajo duro durante los años 80 ”, comentó Bryan.
Diferencias con Neduino
Hardware
Si bien Meadow está diseñado para ejecutarse en una variedad de microcontroladores de 32 bits, su primera placa se basa en el chip STM32F7 de STMicroelectronic con 32 MB de almacenamiento flash y 16 MB de RAM , el sucesor del chip STM32F4 muy popular que se encuentra en varias placas de desarrollo de microcontroladores, incluido Netduino. La serie F7 es dos veces más poderosa pero usa la mitad de la energía de los chips F4 e incluye una serie de características interesantes, como un códec JPEG integrado para manejar transmisiones de video y cámara, así como un acelerador de gráficos 2D para proporcionar UX en un variedad de pantallas.
También están trabajando en una placa basada en ESP32 que traerá características y conectividad de alta gama a un mercado de bajo precio. Esperaremos con ansias el día en que pueda incorporar una placa Meadow basada en ESP32 en productos por menos de $ 10.
Una gran diferencia con Netduino es que la placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather ( claramente diferente a Natduino que se diseño para tener el mismo factor de forma que Arduino ). Además incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar. Aisimismo por diseño, el F7 también está destinado a ser integrable por defecto.
Lo interesante pues es que el factor de forma Feather sirva como placa de desarrollo o incrustarlo. Es realmente un gran diseño basada en MCU STM32F7 con coprocesador ESP-32 e implementando. WiFi, BLE, 32 MB de RAM, 32 MB de Flash. 25 puertos GPIO, PWM, I2C, SPI, CAN, UART y cargador de batería LiPo integrado en un bajísimo factor de forma y con casi tantos puertos GPIO (25) tanto analógicos como digitales como estamos acostumbrados en Arduino o Netduino.
Software
Meadow ejecuta un puerto personalizado de Mono sobre un NuttX muy modificado (un µRTOS). De ahí proviene el soporte estándar .NET. No se basa en Netduino de ninguna manera. Es una pieza de tecnología completamente nueva que han desarrollando desde cero durante los últimos dos años. Existe alguna relación con el proyecto Netduino.Foundation pues han portado Netduino.Foundationa Meadow, y obteniendo todo el atractivo de la última versión de C # y .NET completo para crear una API aún mejor para todos esos controladores.
El proyecto se inició porque .NETMF había desaparecido y no había ningún progreso real allí ni la comunidad pudo participar realmente en él. Es cierto que se inició como un spin-off de .NETMF pero, aparte del motor de ejecución y una buena parte de mscorlib, todo el código se escribió desde cero.
Han mejorado muchas cosas, actualizándolo en lo que respecta al sistema de compilación, Wilderness Labs lo ha hecho verdaderamente portátil para los RTOS de CMSIS, han reelaborado el motor de depuración y han agregado varios objetivos de referencia para MCU con diferentes conjuntos de funciones.
TODO el código es completamente de código abierto ( como el de Netduino ) . Desde el código nativo, a las bibliotecas de clases hasta la extensión de Visual Studio. Dos años de trabajo pueden parecer que el proyecto todavía está en él ‘Es una infancia, pero están orgullosos de que esto se ejecute en SoC SMT32 (de la serie L0 a H7) y, sí, también en ESP32. Hay NuGets funcionales y totalmente utilizables para GPIO, I2C, SPI, Serial, ADC, PWM, Wi-Fi, Networking (con soporte SSL / TLS) y otros.
Es cierto que no admiten bibliotecas .NET completas. En su lugar, han seguido prácticamente la API de .NET UWP para que se pueda reutilizar una gran cantidad de código sin demasiado trabajo pues en el mundo del IOT cada línea de código importa, se debe considerar cada ciclo de CPU, cada mA que el sistema drena de la batería y así sucesivamente: es decir todo lo que podamos hacer más eficiente es importante.
Conclusión
Tras dos años en el mercado Meadow es una plataforma con mucho futuro pero con mucho recorrido para crecer
Es como vemos bastante interesante, pero hay algunas cosas nos impiden retroceder:
PROS
La placa Meadow F7 está diseñada para ser compatible con el factor de forma Adafruit Feather e incluye un conector de batería y un cargador integrado, por lo que puede funcionar fácilmente con una batería o conectarse a un panel solar para uso indefinido mediante recarga solar .Ademas por diseño, el F7 también está destinado a ser integrable por defecto. Lo interesantes pues es que el factor de forma Feather sirva como placa de desarrollo o incrustarlo. .
Hay muchas variables en este sistema. Si podemos elegir entre tener genéricos o código en C # usando una herramienta increíble como Visual Studio, no lo deberíamos pensar dos veces y lo ideal seria optar por lo último. En general, es genial que haya más opciones disponibles que permitan a los desarrolladores de .NET codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito;NET para codificar para IoT y sistemas integrados utilizando su lenguaje favorito
También hay cierta fragmentación en el espacio de .NET IoT, lo que significa que tenemos varias soluciones pequeñas, pero ninguna que sea utilizada por muchos desarrolladores. Un esfuerzo común, dirigido por .NET Foundation, habría sido un mejor enfoque. Nano Framework está en el camino correcto, pero todavía está en su infancia. Al final, el no compromiso de Microsoft con IoT / .NET Micro Framework es ahora un gran problema, ya que habría sido la plataforma perfecta y natural para el desarrollo de IoT basado en Azure ;
CONTRAS
Con 50$ al cambio , es extremadamente cara en comparación con Arduino, Raspberry Pi y otras ofertas similares.
Hay un esfuerzo para portar .NET a varios chips SDT y ESP32: https://nanoframework.net/ . pues no olvidemos que se puede obtener una placa de desarrollo ESP32 por menos de 10 $ ( y menos)
Es bueno recordar el fracaso del AGent smartwatch también en quickstarter patrocinada por Secret Labs ( los fundadores de Netduino). La idea era muy buena pues ya en 2013 este reloj pretendía ser un reloj inteligente con tinta electronica y con el soporte .Net. Este proyecto desgraciadamente precipito la caída de Secrets LAbs y con ello la de Netduino que fue comprado por Wilderness Labs.
Fundada en 2016, Wilderness Labs es el fabricante de placas Netduino y el creador de Meadow. Para obtener más información, puede encontrar su blog en blog.wildernesslabs.co .
Netduino ha sido una plataforma abierta Open sw basada en Microsoft.NET Micro Framework ,la cual por desgracia ha quedado discontinuida ( es decir no se van a fabricar mas placas )
La plataforma Netduino ha sido buena con nosotros y con la comunidad pues .NET MicroFramework de hecho fue una incursión bienvenida para permitir el desarrollo de .NET en dispositivos integrados, y sin su inspiración no tendriamos Meadow ( digamos la «evolucion» de Netduino).
Desde este blog nuestras felicitaciones para el equipo original de .NET MicroFramework, Colin, Lorenzo, y todos los demás que lo construyeron y trabajaron en él. Y el corazón de todo el ecosistema de .NET MicroFramework. GHI, Mountaineer, MikroBus, IngenuityMicro, José y la gente de NanoFramework, ( Mark, Craig, Adrian, Frank, Jorge, Scott) asi como tantos Y, por supuesto, el mayor abrazo a Chris Walker, el ingeniero original que creó Netduino.
Haciendo un poco de historia Wilderness Labs adquirió Netduino en 2017 y lo usaron para ayudar a crear prototipos de nuestros esfuerzos de .NET de próxima generación en embebidos, así como para apoyar a la comunidad que construyó a su alrededor. Arreglaron errores antiguos creando Netduino.Foundation (el precursor de Meadow.Foundation) para que se conectara y jugara con sensores.
Sin embargo, el progreso tecnológico de la humanidad avanza inevitablemente, y desde el primer día, Wilderness tubo la visión de poner la bondad de la experiencia .NET en hardware embebido, como es el caso de . Meadow que da cuenta de esa visión, y ahí es donde van sus esfuerzos ahora.
Netduino Foundation
Wildeerness Lab en este contexto creó Netduino.Foundation,, una plataforma que toma gran parte de la complejidad del desarrollo de hardware y permite una experiencia de desarrollo lista donde se pueden crear soluciones de hardware sofisticado utilizando C#.
Usando Xamarin,se pueden crear aplicaciones móviles que hablan y controlan cosas conectadas asi como escribir soluciones de extremo a extremo en. net,
El ecosistema Netduino
Haciendo un poco de historia la versión Plus se diferenciaba por el interfaz Ethernet integrado, así como el apoyo de una ranura para microSD en la misma tarjeta , pero además existía una version avanzada con adaptador wifi integrado
Esta placa contaba con un potente microcontrolador de 32 bits integrado Cortex-M que ejecuta .NET Micro Framework (NETMF) v4.3 y con un entorno de desarrollo estándar que está disponible gratuitamente a través de Microsoft (Visual Studio 2010).
Recuerde que Microsoft. NET Micro Framework combina la facilidad de un lenguaje de programación de alto nivel (C #) con las características de los microcontroladores permitiendo la depuración de programación basada en eventos, multi-threading, línea por línea,puntos de interrupción y mucho más. Ademas ..,se pueden añadir mas accesorios ofreciendo funcionalidades extra ( por ejemplo la ubicación GPS, el control de servos ,displays de todo tipo).
Una característica ademas muy interesante es que el desarrollo es multiplataforma por lo que se puede hacer tanto en Windows, con Visual Studio, o con Xamarin Studio en Mac OS X.
La plataforma permitía una fácil interconexión con switches, sensores, LEDs, dispositivos de serie, y mucho más pues Netduino combina 20 GPIO con SPI, I2C, UART 2 (1 RTS / CTS), 4 y 6canales de PWM ADC ,los cuales son compatibles con pin / puerto con los escudos Arduino, abriendo asi mucha mas posibilidades de ampliacion.
Características de la placa original , mantenida en las siguientes versiones Netduino 2 y Netduino 3 (esta ultima con interfaz wifi) :
● all 20 digital and analog pins: GPIO ● digital pins 0-1: UART 1 RX, TX ● digital pins 2-3: UART 2 RX, TX ● digital pins 5-6: PWM, PWM ● digital pins 7-8: UART 2 RTS, CTS ● digital pins 9-10: PWM, PWM ● digital pins 11-13: SPI MOSI, MISO, SPCK ● analog pins 4-5: I2C SDA, SCL
● ethernet: 100 mbps (solo versiones con ethernet en v1, v2, v3) con network stack via lwIP
● micro sd (up to 2 GB) ● auto card detect
Y ahora hablemos de las variantes de esta placa :
Netduino 3 :Era la ultima evolución de esta placa. Contaba con procesador 168Mhz Cortex-M4 (STM32F4) con o 1,408 KB of almacenamiento para código y 164 KB de RAM.
Existía comercialmente en tres variantes:
N3 :384 KB Code Flash Storage,SIn ethenert ni wifi
En la era de IoT, nuestra vida está cada vez más integrada con la tecnología gracias a la capacidad de los dispositivos de consumo cotidiano, las máquinas industriales, los vehículos y los electrodomésticos para interactuar entre sí mediante la conectividad de Internet integrada ha hecho la vida más fácil y eficiente.
Microsoft ha desarrollado Azure Sphere para el desarrollo de dispositivos de microcontroladores (MCU) altamente seguros compatibles con implementaciones de IoT , intentando asegurarse de que los dispositivos innovadores puedan continuar alterando el status quo y mejorando nuestras vidas sin sacrificar el importante aspecto de nuestra seguridad, aspecto de los mas crucial para que el IoT pueda seguir evolucionando.
En este senctido Microsoft ha hecho una llamada a todos los ingenieros y desarrolladores de todo el mundo para crear proyectos altamente seguros, impulsados por MCU utilizando Azure Sphere, diseñando formas creativas para asegurar lo que más lo necesita: ¡todo!
Asegurar sus datos es importante en una gran cantidad de industrias. Aquí hay algunas ideas para comenzar:
Integrar Azure Sphere en dispositivos perimetrales de IoT nuevos o existentes
Asegurar sus proyectos de electrónica de consumo .
Innovaciones en torno al comercio seguro e inteligente
Construccion de soluciones robustas y seguras para edificios y domótica.
Diseñar soluciones seguras de fábrica.
Crear soluciones de energías renovables
La idea pues es crear un nuevo proyecto en torno al concepto de seguridad o simplemente mejore la seguridad de sus proyectos existentes con su nuevo kit de Azure Sphere contandoles detalles urante la experiencia. ¿La mejor parte? ¡Avnet está regalando hasta 20,000 Kits de Esfera Azure gratis para que podamos comenzar!
¿Qué es Microsoft Azure Sphere?
Azure Sphere consta de tres capas de seguridad: en el sistema operativo, en la nube y en la MCU.
Seguridad en el sistema operativo:Un SO creado a propósito reepecto a aspectos como la seguridad y agilidad para crear una plataforma confiable para nuevas experiencias de IoT. Un sistema operativo seguro construye innovaciones de seguridad pioneras en Windows en un HLOS lo suficientemente pequeño para los MCU.
Seguridad en la MCU:Asegurado desde y hasta el silicio Esta nueva clase cruzada de MCU ahora combina procesadores de aplicaciones y en tiempo real con tecnología de seguridad y conectividad de Microsoft incorporadas.
Seguridad en la nube: Protege los dispositivos con una nube construida para la seguridad de IoT. El servicio de seguridad de Azure Sphere renueva la seguridad del dispositivo, identifica las amenazas emergentes y la confianza de los intermediarios entre el dispositivo, la nube y otros puntos finales.
El hardware
Especificaciones del Carrier Board
Dos zócalos de expansión MikroE Click board
Conector de expansión Grove (I2C)
Sensores a bordo: acelerómetro de 3 ejes, giroscopio de 3 ejes, temperatura, presión / barométrica, luz ambiental
Interfaz para pantalla OLED 128×64 opcional
Interfaz USB
Soporta depuración, servicio y recuperación
UARTs, y JTAG
Interruptores pulsadores de usuario y LEDs.
Regulación de potencia de 5V a 3.3V
Entrada de alimentación de CC: USB 5V desde la computadora central y huellas de terminales para suministros externos de 5V DC y VBAT
Módulo Azure Sphere MT3620
MediaTek MT3620AN SoC
3 interfaces ISU configuradas para UART, SPI, I2C
ADC / GPIO: 3x entradas de ADC de 12 bits (o 3 GPIOs)
PWM / GPIO: 9x salidas PWM (o hasta 24 GPIOs)
RTC (requiere suministro VBAT)
Wi-Fi de banda dual 2.4 / 5GHz 802.11 a / b / g / n
Antena chip de doble banda 2.4 / 5GHz
El software
Tenga en cuenta los escenarios del mundo real: su solución segura deberá tener una transmisión de comunicación diaria con la Nube de Azure para garantizar una conexión protegida continua. Use su kit de desarrollo de Azure Sphere para aprovechar los servicios en la nube de Microsoft..
Concurso
Puede regístrese para obtener su kit gratuito , eso si deberemos pagar los costes de envío y los impuestos o aranceles aduaneros de su país. !Incluso aún puede participar si su país no es elegible para los kits gratuitos pues si su país no está en la lista, consulte con frecuencia a medida que amplian el alcance!.(vea todos los países elegibles. )
La seguridad es sumamente importante, pero la consistencia en entornos seguros es lo que nos mantiene en línea por ello buscan que se pueda mostrar el kit de Azure Sphere como puede permanecer en línea durante 30 días consecutivos y de esta modo será elegible para ganar los mejores premios.
Una vez que tenga su kit en la mano, conéctelo y regístrelo descargando la pequeña aplicación de Windows para la sincronización diaria con el servidor de concursos.( Por favor revise las instrucciones de registro ) .Más detalles se pueden encontrar en las reglas oficiales.
SoftWeb Solutions han construido un increíble «mapa de calor» para ver dónde se han conectado nuestros 20,000 kits de Azure Sphere en todo el mundo. Estaremos representado cada vez que realizemos la sincronización diaria y se convierta en parte de la presencia global de Azure Sphere. Échele un vistazo en el Mapa de Calor de Azure Sphere.
Este concurso es parte de una campaña más grande de comunidades de Avnet. Vea el desafío Sensing the World de element14, seminarios web, talleres virtuales y más recursos en secureeverything.avnet.com .
Premios
¡Estan regalando miles de dólares en premios a los 510 mejores proyectos! Un premio por persona: ninguna persona puede ganar el premio total de $ 35,000. Los jueces elegirán los mejores proyectos calificados según los criterios de evaluación descritos en la sección de reglas. Los premios de Nivel 3 se entregan únicamente en función de los requisitos de elegibilidad.
Tier 1
Para los proyectos que se separan claramente del resto y demostraron creatividad y uso ejemplar de Azure Sphere. Para ser considerado para los premios de Nivel 1, debe hacer ping a la Nube de Azure una vez al día durante 30 días consecutivos.
El mejor proyecto de su clase y el diseño de referencia definitivo para Microsoft Azure Sphere.
El nivel 2
Para los proyectos que se separan claramente del resto y demostraron creatividad y uso ejemplar de Azure Sphere. Para ser considerado para los premios de Nivel 2, debe hacer ping a la Nube de Azure una vez al día durante 15 días consecutivos.
7 ganadores de Surface Laptop valoradas en $ 1,000
Nivel 3
Para ser elegible para el premio Tier 3, su proyecto debe usar el kit de desarrollo de Azure Sphere. ¡Los proyectos ganarán automáticamente una nueva Raspberry Pi 4! Eche un vistazo a nuestros requisitos de calificación en la pestaña de reglas.
El ganador recibirá lo siguiente: – una tarjeta de regalo de $ 250; – una tarjeta de regalo Adafruit de $ 100 (premio especial para el concurso Secure Everything); – una suscripción de 12 meses a Patchr Premium (valor de $ 180); – Por último, pero no menos importante, se presentarán en una entrevista en video con el único y único Alex Glow de Hackster.
ThingSpeak™ es un servicio web gratuito muy veterano y del que hemos hablado en este blog en numerosas ocasiones que permite recopilar y almacenar datos de sensores conectados a Rasberry Pi, Arduino ,Netduino entre otros para enviarlos hacia un servicio de datalogger en la nube.
Asimismo también sirve para desarrollar aplicaciones de Internet de las cosas como por ejemplo desencadenar ciertas acciones ante determinados cambios en las medidas , tal y como vamos a ver en este caso desencadenando envíos de tweets con el motivo de la alerta.
El servicio de web de ThingSpeak es uno de los servicios mas veteranos en la red proporcionando aplicaciones que le permiten analizar y visualizar los datos en MATLAB®y luego actuar sobre los cambios en esos datos desencadenando acciones.
Los datos de los sensores pueden enviarse a ThingSpeak desde un Arduino®, Raspberry Pi™, BeagleBone Black asi como desde Netduino+ entre otras plataformas
En este post vamos a intentar ver cómo se puede enviar un tweet cuando los datos de punto de rocío superan un umbral usando dos aplicaciones como son ThingTweet y React :
ThingTweet sirve para vincular una cuenta Twitter® a su cuenta ThingSpeak. Sus dispositivos pueden enviar alertas a través de Twitter utilizando la API de TweetContol. Por ejemplo, puede hacer que un dispositivo tuitee cuando la temperatura de su invernadero disminuya o cuando las baterías de un dispositivo se estén agotando. Los pasos son sencillos : entraremos c en Link Twitter Account para vincular una cuenta de Twitter a su cuenta ThingSpeak y cuando se le pida que autorice a ThingTweet a usar su cuenta ingresaremos el nombre de usuario y contraseña de Twitter marcando la casilla Recordarme para guardar en caché las credenciales de Twitter en su pc y por supuesto haciendo clic en Autorizar aplicación
React funciona con las aplicaciones ThingHTTP, ThingTweet y MATLAB Analysis para realizar acciones cuando los datos del canal cumplen una determinada condición. Por ejemplo se puede hacer que una aplicación móvil informe su latitud y longitud a un canal ThingSpeak, de modo que cuando su posición esté dentro de una cierta distancia de su casa, ThingHTTP encienda las luces de su sala.
Como pasos previos para poder usar ambos servicios se requiere que ya han realizado estos pasos:
Crear una cuenta de Twitter® .
Iniciar sesión a su cuenta de MathWorks® o la cuenta de ThingSpeak™ , o crear una nueva cuenta de MathWorks .
Crear un canal como el canal calculados del punto de rocío.
Leer los datos de estación meteorológica( por ejemplo desde una placa Netduino) en su canal y calcular el punto de rocío como vimos en el post anterior
Nota : En este ejemplo vamos a utilizar una medida intermedia que es calculada en función de la humedad y temperatura , pero lógicamente los desencadenantes se pueden lanzar desde medidas sencillas que no requieran un calculo intermedio .
Vincular la cuenta de Twitter a ThingSpeak
Para empezar tenemos que vincular una cuenta de twitter a nuestra cuenta de thingspeak . Para ello puede seguir lo siguintes pasos:
Validese en su cuenta de ThinSpeak
Ir a aplicaciones(Apps) > ThingTweet.
En la página ThingTweet, haga clic en (enlace decuenta de Twitter (Link Twitter Account ) para vincular su cuenta de Twitter a tu cuenta de ThingSpeak.
Tiene que autorizar el acceso a su cuenta de twitter desde ThingSpeak
Introduzca su nombre de usuario de Twitter y contraseña y haga clic en Autorizar la aplicación.
En la página de autorización , haga clic en volver a ThingTweet(back to ThingSpeak). Nos avisara de que su cuenta de Twitter está relacionada con ThingSpeak devolviendonos el valor del APIKEY , el cual por cierto podemos fiorzar a cambiar gracis al boton Regenerate API Key.
Si queremos deshacer este cambio simplemente pulsaremos sobre el botón desenlazar cuenta («Unlink Account»)
Reaccionar al cambio en el punto de rocío
Una vez vinculada su cuenta de twitter a thingspeak ya podemos indicar a React que envie un tweet cada vez que el nivel de punto de rocío supere un valor va sobre 15ªC , testeando el canal cada 10 minutos.
Estos son los pasos para hacerlo:
Ir a aplicaciones > react hacera clic en Reaccionar de nuevo.
Nombre este react por ejemplo como «Tweet de punto de rocío.»
Defina el tiponumérico.
Ajuste la Frecuencia de la prueba a cada 10 minutos.
Establecer la condición cuando el valor de la humedad en su canal alcanza o supera los 60:
Si canal: seleccione el canal de medición de punto de rocío.
campo: seleccione 3 (punto de rocío).
Para el tipo de condición, seleccione es mayor o igual a.
El valor de condición, entre 60 (se refiere a grados Fahrenheit)
Ajuste acción en ThingTweet.
Entrar en esta cadena en tweet a continuación:
Turn off that humidifier! It's above 60F
Seleccione su cuenta de Twitter con la cuenta de Twitter.
En Opciones, elija Ejecutar acción cada vez que la condición se cumple.
Click Save React.
El tweet se envíara cada vez que el nivel de humedad supere los 15,5ºC o 60 ° F.
Es evidente que esta facilidad de ThingSpeak ,que sinsisteimo es soportado por un amplio abanico de hardware (como Raspberrry, Arduino o el propio Netduino), tiene una utilidad indudable para infinidad de condiciones que nos pueden facilitar la vida como por ejemplo apertura de puertas o ventanas, temperaturas anómalas , caídas de tensión , y un largo etcétera.
Netduino es una plataforma de desarrollo de código abierto integrado similar a la famosa plataforma Arduino, excepto que utiliza .NET Micro Framework para su programación. La placa de desarrollo Netduino tiene el mismo factor que Arduino Uno, y por lo tanto la mayoría de los escudos de Arduino son también compatibles con Netduino. Las placas de desarrollo Arduino se basan en 8 bits microcontroladores Atmel que corren a una velocidad máxima de reloj de 16 MHz en su versión primera ,pero el hardware Netduino usa potentes procesadores de 32 bits (en el caso de la primera versión un Atmel SAM7x en Netduino, y STMicro STM32F4 en versiones Netduino Plus) y funciona a una velocidad mucho más rápida (48 MHz a 168 MHz).
En el siguiente ejemplo extraido de embedded-lab.com ademas de intenatr dar una introducción a la plataforma Netduino y asegurar que cualquier principiante, estudiante o aficionado, será rápidamente capaz de empezar a usarlo para sus propios proyectos y diseños embebidos vamos a ver la gestiona de un display de 7 segmentos de led con nuestro Netduino Plus .
Una salida visual siempre añade valor a cualquier proyecto .En esta ocasión , vamos a mostrar un poco de información numérica, alfabética, así como dos personajes simbólicos en un módulo LED de siete segmentos de 4 dígitos en función de luminosidad captada por una foto-resistencia,es decir vamos a leer una tensión analógica de un sensor LDR y mostraremos la salida del ADC en cuatro módulos de siete segmentos.
En realidad el control de un display de 7 segmentos ( en realidad 8 si contamos con el punto) , es bastante intuitivo , si se piensa en que cada segmento corresponde a un solo led .Por ejemplo para mostrar dígito «1», tenemos que enviar la señal de alto para el LED «b» y «c» solamente y tierra el cátodo.
Como un display cuenta con siete segmentos LED se hace con siete más un LED, cada LED tiene su propio nombre, por ejemplo ,si tenemos que mostrar «15» la forma en que hacemos es mostrando un «1» ( segmentos B y C) en un bloque LED ,luego apagamos ese primer display ( cátodo a uno lógico) y luego nos vamos a mostrar «5» en el segundo display LED( segmentos A,F,G y D) y luego lo apagamos también (cátodo a uno lógico), y repetimos el bucle indefinidamente :esto es básicamente la multiplexación porque todos lo segmentos los unimos eléctricamente para ahorrar bits de control de modo que solo controlamos el encendido de uno de ellos a una frecuencia tan rápida que sea inapreciable por el ojo humano
.
Configuración de Circuito y Teoría
En la sección analógica, hemos utilizado una LDR como nuestro dispositivo de entrada analógica. Con la iluminación, la resistencia de la LDR cambiará causando el cambio en el voltaje debido al divisor de tensión formado por el LDR y una resistencia de 10k .La caída o subida de tensión entre el punto de unión entre el LDR y la resistencia nos dará una tensión que conectemos a nuestro pin analógico A1 de Netduino
En la sección digital, las conexiones son también muy sencillas. Cada pin (a hasta g) de los siete segmentos LED están conectados a los pines digitales DO a D6 de Netduino+ través de una resistencia de 330 ohmios . Posteriormente cada display de siete segmentos LED al ser estos de cátodo común y haber cuatro unidades , los controlaremos por medio de 4 transistores NPN ( por ejemplo BC547) con sus resistencias de base de 10k que conectaremos a los pines digitales D8,D9;D10 y D11 de nuestro Netduino
Cuando la base del transistor está forzado a un uno lógico, el transistor conduce y entonces el ánodo correspondiente se conecta a tierra, que completaría el circuito justo en los segmentos cuyos pines lógicos estén a uno logico encendiendo así el LED correspondiente a ese led
.
Programa en c#
El código escrito por embedded-lab va usar una pequeña biblioteca (Clase SevenSegments) que soporta un poco más que los dígitos que muestran. Veamos paso a paso. En el código de abajo, primero creamos una instancia de la clase AnalogInput lo que nos permite obtener el valor de nuestro dispositivo analógico que es LDR en este caso. Luego creamos una instancia independiente de la clase SevenSegments. El constructor de esta clase lleva varios pines como argumentos. Una vez que tenemos SevenSetments instancia simplemente llamar al método Show y pasar el valor que se lee desde el dispositivo analógico
public static void Main() {AnalogInput aInPin = new AnalogInput(Pins.GPIO_PIN_A1);
//se puede usar cualquier pin analógico
aInPin.SetRange(0, 1234); //dar un rango. Debug.Print(«Analog value: » + aInPin.Read()); // inicializacion del display de 7 segmentos pasando los pines adecuados SevenSegments sevenSegments = new SevenSegments( Pins.GPIO_PIN_D0, Pins.GPIO_PIN_D1, Pins.GPIO_PIN_D2, Pins.GPIO_PIN_D3, Pins.GPIO_PIN_D4, Pins.GPIO_PIN_D5, Pins.GPIO_PIN_D6, new Cpu.Pin[] { Pins.GPIO_PIN_D8, Pins.GPIO_PIN_D9, Pins.GPIO_PIN_D10, Pins.GPIO_PIN_D11 });
// Valor de pantalla leido por en entrada analogica sevenSegments.FlickerDelay = 5; // Pausa entra cada letra durante la repeticio en una unidd de LED sevenSegments.UnitSevenSegmentLedDelay = 1; //Duracion de una unida led estando a ON sevenSegments.UnitRepetition = 50; /// Repeticion de todo la tira while (true) { sevenSegments.Show(aInPin.Read()); Debug.Print(aInPin.Read().ToString()); } }
El proceso pesados principal se hace en la clase SevenSegment. Por lo tanto, vamos a echar un vistazo rápido a las diferentes secciones de esta clase.
Sección constructor de la clase SevenSegment
Aquí hemos definido algunas E / S digitales para los segmentos de LED a hasta g. Para soportar cualquier número de unidades LED, los pines asociados a ánodos o al cátodo común son recibidos como una matriz. Ahora, para mostrar una carta o un alfabeto, se ha construido una serie de Boole. Todas estas matrices se almacenan en una tabla hash con una clave que corresponde a un dígito o un alfabeto o un símbolo. Finalmente algunas propiedades se inicializan con algunos valores
public SevenSegments(Cpu.Pin a, Cpu.Pin b, Cpu.Pin c, Cpu.Pin d, Cpu.Pin e, Cpu.Pin f, Cpu.Pin g, Cpu.Pin[] commonAnodeCathodePin) { OutputPort PinD0Out_a = new OutputPort(a, false); OutputPort PinD1Out_b = new OutputPort(b, false); OutputPort PinD2Out_c = new OutputPort(c, false); OutputPort PinD3Out_d = new OutputPort(d, false); OutputPort PinD4Out_e = new OutputPort(e, false); OutputPort PinD5Out_f = new OutputPort(f, false); OutputPort PinD6Out_g = new OutputPort(g, false); segmentPins = new OutputPort[] { PinD0Out_a, PinD1Out_b, PinD2Out_c, PinD3Out_d, PinD4Out_e, PinD5Out_f, PinD6Out_g }; // inicializacion de commonAnodeCathodePin ledSegmentUnit = new OutputPort[commonAnodeCathodePin.Length]; for (int i = 0; i < commonAnodeCathodePin.Length; i++) { ledSegmentUnit[i] = new OutputPort(commonAnodeCathodePin[i], false); } // crear una lista de caracteres soportados ledSegmentTable = new Hashtable(); ledSegmentTable.Add(«0», new bool[] { true, true, true, true, true, true, false }); ledSegmentTable.Add(«1», new bool[] { false, true, true, false, false, false, false }); ledSegmentTable.Add(«2», new bool[] { true, true, false, true, true, false, true }); ledSegmentTable.Add(«3», new bool[] { true, true, true, true, false, false, true }); ledSegmentTable.Add(«4», new bool[] { false, true, true, false, false, true, true }); ledSegmentTable.Add(«5», new bool[] { true, false, true, true, false, true, true }); ledSegmentTable.Add(«6», new bool[] { true, false, true, true, true, true, true }); ledSegmentTable.Add(«7», new bool[] { true, true, true, false, false, false, false }); ledSegmentTable.Add(«8», new bool[] { true, true, true, true, true, true, true }); ledSegmentTable.Add(«9», new bool[] { true, true, true, true, false, true, true }); ledSegmentTable.Add(«a», new bool[] { true, true, true, false, true, true, true }); ledSegmentTable.Add(«b», new bool[] { false, false, true, true, true, true, true }); ledSegmentTable.Add(«c», new bool[] { true, false, false, true, true, true, false }); ledSegmentTable.Add(«d», new bool[] { false, true, true, true, true, false, true }); ledSegmentTable.Add(«e», new bool[] { true, false, false, true, true, true, true }); ledSegmentTable.Add(«f», new bool[] { true, false, false, false, true, true, true }); ledSegmentTable.Add(«g», new bool[] { true, true, true, true, false, true, true }); ; ledSegmentTable.Add(«h», new bool[] { false, false, true, false, true, true, true }); ledSegmentTable.Add(«i», new bool[] { false, true, true, false, false, false, false }); ledSegmentTable.Add(«j», new bool[] { false, true, true, true, true, false, false }); ledSegmentTable.Add(«l», new bool[] { false, false, false, true, true, true, false }); ledSegmentTable.Add(«n», new bool[] { false, false, true, false, true, false, true }); ledSegmentTable.Add(«o», new bool[] { false, false, true, true, true, false, true }); ledSegmentTable.Add(«p», new bool[] { true, true, false, false, true, true, true }); ledSegmentTable.Add(«q», new bool[] { true, true, true, false, false, true, true }); ledSegmentTable.Add(«r», new bool[] { false, false, false, false, true, false, true }); ledSegmentTable.Add(«s», new bool[] { true, false, true, true, false, true, true }); ledSegmentTable.Add(«t», new bool[] { false, false, false, true, true, true, true }); ledSegmentTable.Add(«u», new bool[] { false, false, true, true, true, false, false }); ledSegmentTable.Add(«y», new bool[] { false, true, true, false, false, true, true }); ledSegmentTable.Add(«-«, new bool[] { false, false, false, false, false, false, true }); ledSegmentTable.Add(«?», new bool[] { false, true, true, false, true, true, false }); ledSegmentTable.Add(«?», new bool[] { true, false, false, true, false, false, true }); // Inicializar campos por defecto FlickerDelay = 5; SevenSegmentsUnits = commonAnodeCathodePin.Length; UnitSevenSegmentLedDelay = 0; UnitRepetition = 50; RightToLeft = true; }
Para mostrar un dígito o un signo del alfabeto, vemos un método Show de esta clase. Hay tres sobrecargas de este método Show que vamos a ver a continuación.
El primero toma int como argumento y llama directamente segundo método Mostrar que tiene cadena como argumento. En este método, dependiendo de si RightToLeft se establece en verdadero o falso, y el código salta a la sección correspondiente. Esta sección básicamente extrae la letra correcta para mostrar y luego llama el tercer método Mostrar.
public void Show(string stringToShow) {
// este bucle hará que parezca que todos los leds permanezcan encendidos for (int j = 0; j < UnitRepetition; j++) { if (RightToLeft) { int ledUnit = SevenSegmentsUnits – 1; // indice basados en 0 index for (int i = stringToShow.Length; i > 0; i–) { string eachLetter = stringToShow.Substring(i – 1, 1); Show(eachLetter, ledUnit); ledUnit -= 1; // si longitud de stringToShowes mayor que // SevenSegmentsUnits los restamos if (ledUnit < 0) ledUnit = SevenSegmentsUnits – 1; // – 1 es un indice basado en 0x Thread.Sleep(UnitSevenSegmentLedDelay); } } else { int ledUnit = 0; // indice basado en 0 for (int i = 0; i < stringToShow.Length; i++) { string eachLetter = stringToShow.Substring(i, 1); Show(eachLetter, ledUnit); ledUnit += 1; // Si longitud de stringToShow es mayor //que SevenSegmentsUnits restalo ledUnit = ledUnit % SevenSegmentsUnits; Thread.Sleep(UnitSevenSegmentLedDelay); } } Thread.Sleep(FlickerDelay); } }
El tercer método Mostrar toma dos argumentos, primero es la cadena que se mostrará y segundo es dónde mostrara es decir, en que bumero de display LED. En la HashTable definida durante la construcción, se rellena la matriz correcta de Boole y entonces el pin correspondiente se establece a nivel alta o baja en base a esta matriz booleana. En el paso final, todos los pines asociados al ánodo o al cátodo común se establecen a nivel bajo de modo que sólo el LED apropiado se establece a nivel alto.
public void Show(string numberString, int ledUnit) { bool[] ledSegmentOnOffValues; numberString = numberString.ToLower(); // en este nivel, se admite la longitud de la cadena, por lo que descarta el resto if (numberString.Length > 1) numberString = numberString.Substring(numberString.Length – 1, 1); // Enviar nivel bajo al ánodo / cátodo común de SevelSegmentLED for (int i = 0; i < ledSegmentUnit.Length; i++) { ledSegmentUnit[i].Write(false); } if (!ledSegmentTable.Contains(numberString)) { // cuando se pasas una letra no soportada muestra «-« ledSegmentOnOffValues = (bool[])ledSegmentTable[«-«]; } else { // consigue el array a true/false ledSegmentOnOffValues = (bool[])ledSegmentTable[numberString]; } for (int i = 0; i < segmentPins.Length; i++) { //poner el pin correspondiente a nivel alto segmentPins[i].Write(ledSegmentOnOffValues[i]); } // solamente envia la señal al catodo o anodo seleccionado ledSegmentUnit[ledUnit].Write(true); }
Valores maximos y/o minimos
Con muy pocas líneas de código podemos ampliar o añadir funcionalidades adicionales como un contador que toma cuenta del valor mínimo al valor máximo. Este contador es un ejemplo muy simple que toma dos argumentos, el valor mínimo y el valor máximo. Un bucle for se puede configurar a partir de este minuto a valor máximo y el método Show que se ha llamado de pasar el incremento de bucle de corriente. Este método nos permite mostrar el contador en nuestros siete segmentos unidad LED
public void Counter(int minValue, int maxValue) { for (int i = minValue; i <= maxValue; i++) { Show(i); Debug.Print(i.ToString()); } }
Pruebas finales
Con nuestra clase SevenSegments, tenemos varias salidas. En primer lugar vamos a ver la salida de nuestro circuito. Aquí podemos ver el valor más bajo en nuestra pantalla cuando LDR está cubierto sin embargo el número aumenta a medida que iluminamos nuestro LDR.
Ahora echemos un vistazo a nuestro métodoque hemos añadido a nuestra clase SevenSegments. Con el siguiente código, po rjemplo vamos a ver los números desde 980 a 1020: sevenSegments.FlickerDelay = 5; sevenSegments.UnitSevenSegmentLedDelay = 1; sevenSegments.UnitRepetition = 5; sevenSegments.RightToLeft = true; while (true) { sevenSegments.Counter(980, 1020); }
Vamos a darle una cadena de más de nuestros Siete unidades LED del segmento y ver qué pasa:
sevenSegments.RightToLeft = false; while (true) { sevenSegments.Show(«-Lab»); }
Y para terminar , es el siguiente video podemos ver el código presentado ejecutándose con la electrónica descrita
Los display leds de 7 segmentos ( o mas ) como se puede ver son bastante sencillos de manejar desde Netduino gracias a la multiplexacion como hemso visto en el ejemplo
La biblioteca TextDisplayMenu es un marco extensible para rápidamente crear menús jerárquicos, editables que pueden mostrar en un display lcd de caracteres de verias lineas (típicamente compatible con hd44780) controlándose mediante un IRotaryEncoder o una intrface IButton . Los drivers para pantallas LCD Serie comparten una interfaz común que lo hacen fácil de conectar e integrar con el TextDisplayMenu
Por tanto gracias a esta biblioteca podemos movernos en menús mostrados en displays lcd de varias lineas con un solo botón giratorio de un modo muy potente y eficiente.
En este vídeo podemos ver un ejemplo de funcionamiento:
El menú se puede crear mediante programación o cargadolos desde un fichero en formato JSON y tiene un número de tipos de elementos de menú integrado de pantalla y edición entrada como tiempo, temperatura y otros.
Además se pueden crear fácilmente menús personalizados contipos de elementos que permiten a los usuarios editar su valor a través de las entradas
Utilización
Para utilizar el menú, necesitará un LCD compatible con ITextDisplay u otro display, así como alguna combinación de botones y codificador rotatorio que permita la funcionalidad de avanzar a siguiente, anterior y seleccionar . Por ejemplo, puedes usar; tres entradas IButton discretas para la siguiente / previa / selección, un codificador rotatorio para siguiente / anterior y un IButton para selección, o un RotaryEncoderWithPushButton para manejar las tres entradas.
El esquema siguiente muestra una configuración típica de integral para manejar el menú e incluye una pantalla de cuatro líneas LCD común controlado directamente por pernos GPIO digitales de Netduino, así como un encoder rotativo con pulsador:
Como se puede apreciar se usa un display copatible con hd44780 usando interfaz de 4 bits con dos señales de control y luego aparte el encoder que usa tres señales de control
El display ademas de alimentación de 5v DC , tomada directamente de la placa ,usa pues 6 conexiones binarias de Netduino :d8,d9,d10,d11,d12 y d24 , forzando algunas lineas del diplay a vcc o gnd y el encoder las tres anteriores :d7,d5 y d5;
Resumiendo estas son las conexiones del display lcd:
VSS – Ground
VCC – (+5V)
VE – Contrast adjustment –>a gnd
RS – Register Select–>pind13
RW – Read/Write– >a gnd
EN – Clock (Enable)–>pind12
D0 – Data Bit 0–>pin d11
D1 – Data Bit 1–>pin d10
D2 – Data Bit 2–>pin d9
D3 – Data Bit 3–>pin d8
D4 – Data Bit 4
D5 – Data Bit 5
D6 – Data Bit 6
D7 – Data Bit 7
BLA – Backlight Anode (+)–>gnd
BLK – Backlight Cathode (-)–>a 5v (ojo algunos dislplay necesitan una resistencia limitadora no alimentándose directamente a 5v dc)
La caja para contener el encoder y el display los del Wilderness Labs han diseñado específicamente en 3D conun acabado fantastico:
Código de ejemplo
El código siguiente ilustra cómo crear una nueva, por eso carga su contenido de JSON:TextDisplayMenuRotaryEncoderWithButton
Para crear un menú con otras entradas, como botones o un codificador giratorio opcional, puede usar los otros constructores:
// Rotary encoder and select buttonpublicMenu(ITextDisplaydisplay,IRotaryEncoderencoder,IButtonbuttonSelect,byte[]menuResource,boolshowBackOnRoot=false)// Buttons for next, previous, and selectpublicMenu(ITextDisplaydisplay,IButtonbuttonNext,IButtonbuttonPrevious,IButtonbuttonSelect,byte[]menuResource,boolshowBackOnRoot=false)
Carga un menú desde JSON
Para crear el menú de JSON, en primer lugar definir el contenido del menú en un archivo JSON y luego agregarlo como un recurso.
Definición de muestra
El nodo raíz debe ser una matriz de elementos de menú. La tabla siguiente enumera las propiedades y uso asociado:
Property
Usage
text
Mostrar texto en el renderizado. Incluye {value} para mostrar el valor actual del tipo
command
Nombre del comando para distinguir los eventos de selección de menú. Si se establece el comando, tiene prioridad sobre el elemento de menú editable.
id
Identificador único para el tipo. Necesario para un elemento de menú editable..
type
Tipo de entrada, por ejemplo: Edad, Tiempo. Necesario para un elemento de menú editable.
sub
Array de items de sumenus .
Por ejemplo, el siguiente código json define un menú jerárquico dispuesto en los artículos y páginas de menú.
Para agregar el archivo JSON al proyecto como un recurso:
Haga clic derecho en el proyecto y seleccione Propiedades
Haga clic en el panel izquierdo Recursos
Haga clic y elija el archivo apropiado. Agregar recurso
Ahora, se puede acceder a este recurso por Resources.GetBytes(Resources.BinaryResources.[ResourceName]).
Soporte de eventos
El menú genera eventos cuando se selecciona un comando, se edita el elemento del menú y se sale del menú.
En cuanto a la selección de eventos ,para recibir una notificación cuando se selecciona un elemento de menú con un comando asignado, asigne un controlador al evento Seleccionado:
Respecto a la salida de eventos si el menú no es la pantalla de inicio de la aplicación deseada, entonces el menú puede ser cargado o descargado programáticamente usando Enable () o Disable (), respectivamente. Además, hay un parámetro opcional al crear un nuevo menú, showBackOnRoot, y cuando se establece en verdadero, »
Para editar eventos para obtener una notificación cuando cambia un valor de elemento de menú Editar, asignar a un controlador al evento:ValueChanged
menu.ValueChanged+=(s,e)=>{Debug.Print(e.ItemID+" changed with value: "+e.Value);}
Construcción de tipos
La siguiente tabla enumera los tipos de elementos de menú integrados y sus usos y valores asociados:
Type
Description
Boolean
Un tipo de lista como true y false.
Age
Un integer entre 0 y 100.
Temperature
Un valor entre -10 y 100 con una escala de 2.
Time
24 hora militar con HH:MM
TimeDetailed
24 hora militar con HH:MM:SS
TimeShort
24 hora militar con MM:SS
Creación de tipos de elementos de menú personalizado
Hay dos formas de crear elementos de menú personalizado. El más fácil y más común es heredar de y modificar, los tipos de base integrados. Sin embargo, también puede crear menús totalmente personalizada tipos de elementos.
Personalización de tipos Base incorporados
TextDisplayMenu incluye una serie de tipos base integrados que manejan tipos comunes y puede ser modificado para requisitos particulares para adaptarse:
Base Type
Description
NumericBase
Proporciona una pantalla y entrada numérica genérica. El mínimo / máximo y el número de decimales se pueden modificar.
TimeBase
Proporciona una máscara de entrada de XX: XX: XX o XX: XX según el modo.
ListBase
Proporciona una lista seleccionable de elementos.
Ejemplo de NumericBase personalizado
El siguiente código se extrae del tipo de menú Edad, e ilustra cómo heredar de NumericBase y especificar el piso, el techo y la escala de la entrada deseada.
En resumen como vemos el equipo de Wilderness Labs a través de la fundación de Netduino ha hecho un trabajo fantástico que espero podemos usar en nuestros futuros proyectos
Sin duda corren nuevos aires para la plataforma Netduino tras la retirada de Secrets Labs por parte de su creador Chris Walker y ahora wilderness labb es la plataforma que oficialmente esta soportando Netduino tanto es así que el sitio oficial anterior se ha redirigido a la plataforma wildernesslabs.co
Wildeerness Lab es una comunidad de desarrolladores .NET dispuesta a construir experiencias de hardware de próxima generación. Se consideran los «pastores» de Netduino; una plataforma de desarrollo de hardware abierto de código abierto y los creadores de Netduino.Foundation un marco que simplifica enormemente la construcción de cosas conectadas con Netduino.
Tras unos años reestructurando el nuevo sitio se ha asociado con Hackster.io y desafió a cualquier entusiasta de Netduino para poner en marcha la revolución de hardware mediante la creación de soluciones innovadoras que utilicen IO Netduino y .NET Micro Framework
Hoy en dia los teléfonos móviles superan a los dispositivos conectados móviles en relacion 4 a 1 pero en apenas unos años, los dispositivos conectadas a Internet superaran a los teléfonos móviles en una proporcion de 10 a 1 lo que supondra 75 billones dispositivos conectados predichos en 2025 gracias al uso de microcontroladores y los avances de hardware , lo cual desembocaran con la revolucion del mundo va móvil, en pocos años, a conectar casi todos los nuevos productos.
Esta progreso del hardware es toda una revolución , y Wildeerness Lab lo sabe permitiendo a los desarrolladores de hoy ser parte de él, pues ellos son conscientes de hecho que la revolución depende de piratas informáticos, creadores y manitas para crear con la tecnología de las experiencias del mañana
Veamos en primer lugar las placas disponibles pra luego meternos mas en detalle del concurso
Plataforma Netduino plus
Netduino es una plataforma abierta basada en Microsoft.NET Micro Framework. La versión Plus ademas es un poderoso Netduino junto con Ethernet integrado, así como el apoyo de una ranura para microSD en la misma tarjeta . Ademas existe una version avanzada con adaptador wifi integrado
Cuenta con un potente microcontrolador de 32 bits integrado con un entorno de desarrollo estándar que está disponible gratuitamente a través de Microsoft (Visual Studio 2010).
La familia Netduino se basa en el Microprocesador Cortex-M que ejecuta .NET Micro Framework (NETMF) v4.3.
El desarrollo se puede hacer tanto en Windows, con Visual Studio, o con Xamarin Studio en Mac OS X.
La plataforma permite una fácil interconexión con switches, sensores, LEDs, dispositivos de serie, y mucho más. El Netduino combina 20 GPIO con SPI, I2C, UART 2 (1 RTS / CTS), 4 y 6canales de PWM ADC.
Microsoft. NET Micro Framework combina la facilidad de un lenguaje de programación de alto nivel (C #) con las características de los microcontroladores permitiendo la depuración de programación basada en eventos, multi-threading, línea por línea,puntos de interrupción y mucho más. Ademas ..,se pueden añadir mas accesorios ofreciendo funcionalidades extra ( por ejemplo la ubicación GPS, el control de servos ,displays de todo tipo).
También son compatibles con pin / puerto con los escudos Arduino, abriendo posibilidades en el mundo.
Características de la placa original , mantenida en las siguientes versiones Netduino 2 y Netduino 3 (esta ultima con interfaz wifi) :
● all 20 digital and analog pins: GPIO
● digital pins 0-1: UART 1 RX, TX
● digital pins 2-3: UART 2 RX, TX
● digital pins 5-6: PWM, PWM
● digital pins 7-8: UART 2 RTS, CTS
● digital pins 9-10: PWM, PWM
● digital pins 11-13: SPI MOSI, MISO, SPCK
● analog pins 4-5: I2C SDA, SCL
● ethernet: 100 mbps (solo versiones con ethernet en v1, v2, v3) con network stack via lwIP
● micro sd (up to 2 GB)
● auto card detect
Netduino 3
Es la ultima evolución de esta placa. Cuenta con procesador 168Mhz Cortex-M4 (STM32F4) con o 1,408 KB of almacenamiento para código y 164 KB de RAM.
Wildeerness Lab ha creado Netduino.Foundation,, una plataforma que toma gran parte de la complejidad del desarrollo de hardware y permite una experiencia de desarrollo lista donde se pueden crear soluciones de hardware sofisticado utilizando C#. Usando Xamarin,se pueden crear aplicaciones móviles que hablan y controlan cosas conectadas aso como escribir soluciones de extremo a extremo en. net,
IoT real va a ser construido por los desarrolladores reales de hacking de IoT como nunca nunca podríamos imaginar:es ahi donde usted entramos los entusiastas de netduino por lo nos proponen unirnos a ellos en la construcción de soluciones creativas con Netduino y el .NET Microframework.
Por cierto si no tiene un Netduino no hay problema, pues estan regalando un total de 40 Netduino 3 WiFi o Ethernet de 3 Netduino personas que están pensado proyectar aplicaciones( asi qeu desee prisa, si usted necesita un tablero,pues el plazo de propuesta de proyecto patrocinado es el 1 de julio.)
Y para endulzar el acuerdo, todos los ganadores del concurso recibirán acceso temprano de beta a Prado; el sucesor de Netduino que ejecuta .net completo estándar 2 aplicaciones en un microcontrolador.
Si no recibe un Netduino o quieren conseguir uno cuanto antes, use HCONTEST para recibir una 15% de descuento en cualquiera de nuestros productos de Netduino vendidos en Amazon. Este código es válido hasta el 30 de julio de 2018..
Concurso Netduino
Presentaciones del proyecto
Presentación debe incluir:
Descripción detallada de su proyecto. ¿Qué es, ¿qué hacer, cómo funciona?
Imágenes de calidad y videos
Historia con instrucciones claras
BOM (Bill del material)
Código fuente y esquemas si está disponible
Compruebe hacia fuera estos proyectos Netduino Hackster ejemplos de buenas presentaciones:
Línea de tiempo
Presentación proyecto abre -13 de junio de 2018
Fecha límite para aplicar gratis Netduino -01 de julio de 2018
Presentación de proyecto cerrado -31 de julio de 2018
Anunciados los ganadores del -03 de agosto de 2018
Estos serán los premios a este concurso;
Mejor presentación general – 1er lugar
El mejor autor de presentación general de proyectos recibirán un kit de hack de prototipos de hardware que incluye una impresora 3D, osciloscopio y acceso beta temprano a Prado; Plataforma de hardware de vNext desierto Labs que trae .net completo estándar a un microcontrolador.
También recibirá un paquete de cuidado secreto artesanal del desierto Labs Director Ejecutivo y cofundador, Bryan Costanich.
Presentacion honorable
Hasta diez otros envíos grandes, también recibirá un paquete de atención secreta y acceso temprano al Prado.
Acceso de la Beta Meadow
Meadow es el sucesor a Netduino. Ejecuta aplicaciones .net estándar 2 completo en un microcontrolador a través de Mono. Es seguro desde el hardware hacia arriba y es manejable a través de la nube. Esperan ofrecer acceso beta privada al final de ganadores del verano.
¿Listo para comenzar?
Crear una cuenta en wildernesslabs.co si no lo has hecho ya.
En efecto existen sensores de pulso cardíaco de forma compacta, el cual podemos usar para nuestros proyectos para lo que se nos ocurra, como por ejemplo visualizar las pulsaciones cardíacas.
La esencia de estos circuitos es un sensor integrado de circuito de amplificación óptica y con un circuito de eliminación de ruido de la frecuencia cardíaca todo ello alimentado con una tensión de alimentación: 3.3V ~ 5 V
Lo ideal para medir el pulso es poner el sensor de pulso en el dedo o lóbulo de la oreja, directamente o bien mediante algún sistema mecánico que lo deje fijo como por ejemplo alguno de los sistemas que mostramos a continuación:
Estos sensores cuentan con una salida analógica que se puede conectar por ejemplo a una entrada analógica de un Arduino, para probar la frecuencia cardíaca
Estudiantes, artistas, deportistas, creadores, desarrolladore3s de juegos, o terminales móviles puedan desarrollar software o interactivos relacionado con el ritmo cardíaco, pero no obstante también existe una aplicación de código abierto para la visualización en tiempo real de la gráfica de la frecuencia cardíaca en https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino/.
El sensor de pulso cardiaco es esencialmente un fotopletismógrafo, que es un dispositivo médico conocido que se usa para controlar la frecuencia cardíaca de forma no invasiva. Asimismo los fotopletismógrafos miden los niveles de oxígeno en la sangre (SpO2) pero no siempre lo soportan.
La señal de pulso cardíaco que sale de un fotopletismograma es una fluctuación analógica de voltaje, y tiene una forma de onda predecible, tal como estamos acostumbrados a ver ( la representación de la onda de pulso se denomina fotopletismograma o PPG).
El Sensor de pulso amplifica la señal bruta del Sensor de pulso anterior y normaliza la onda de pulso alrededor de V / 2 (punto medio en voltaje) respondiendo a los cambios relativos en la intensidad de la luz
Tal y como esta construido ,veremos que la luz interna del LED verde del sensor se refleja de nuevo en el sensor cambiando durante cada impulso, ocurriendo las siguintes casuiticas:.
Si la cantidad de luz incidente en el sensor permanece constante, el valor de la señal permanecerá en (o cerca de) 512 (punto medio del rango de ADC).
Más luz y la señal aumentará.
Menos luz, todo lo contrario: el valor de la señal analógica dismuniira
El objetivo es encontrar momentos sucesivos de latido instantáneo del corazón y medir el tiempo transcurrido entre ellos, llamado intervalo Inter Beat (IBI) pues al seguir la forma y el patrón predecibles de la onda PPG, podemos hacer exactamente eso.
Cuando el corazón bombea sangre por el cuerpo, con cada latido hay una onda de pulso (una especie de onda de choque) que viaja a lo largo de todas las arterias hasta las mismas extremidades del tejido capilar donde está conectado el sensor de pulso. La sangre real circula en el cuerpo mucho más lentamente de lo que viaja la onda de pulso.
Sigamos los eventos a medida que progresan desde el punto ‘T’ en el PPG a continuación. Se produce un aumento rápido en el valor de la señal a medida que la onda de pulso pasa por debajo del sensor, luego la señal vuelve a descender hacia el punto normal. A veces, la muesca dicroica (pico descendente) es más pronunciada que otras, pero, en general, la señal se establece en el ruido de fondo antes de que la siguiente onda de pulso se filtre.
Como la onda se repite y es predecible, podríamos elegir casi cualquier característica reconocible como punto de referencia, por ejemplo, el pico, y medir la frecuencia cardíaca haciendo cálculos matemáticos sobre el tiempo entre cada pico,pero sin embargo, esto puede dar lugar a lecturas falsas desde la muesca dicroica, si está presente, y puede también ser susceptible a la imprecisión con respecto al ruido de línea base.
Existen otras buenas razones para no basar el algoritmo de detección de latidos en fenómenos de onda arbitrarios. Idealmente, queremos encontrar el momento instantáneo del latido del corazón. Esto es importante para el cálculo preciso de BPM, la variabilidad del ritmo cardíaco ( y mida la frecuencia cardíaca haciendo cálculos en el tiempo entre cada pico.
Sin embargo, esto puede dar lugar a lecturas falsas desde la muesca dicroica, si está presente, y puede también ser susceptible a la imprecisión con respecto al ruido de línea base.
.
Algunos investigadores del corazón dicen que es cuando la señal alcanza el 25% de la amplitud, algunos dicen que es el 50% de la amplitud, y algunos dicen que es el momento en que la pendiente es más pronunciada durante el evento ascendente.
El circuito que vamos a ver es muy simple pues solo se precisa conectar un buzzer y el sensor de pulsos cardíacos .
Como podemos ver en el video , el sensor de pulsos cardíacos se conecta a la alimentación de +5V entre el hilo rojo(+5v) y el naranja (GND) y del hilo marrón obtenemos la salida analógica que conectaremos a la primera entrada analogica (A0) de cualquier placa que soporte entradas analogicas como pueden ser Arduino o Netduino
Para complementar el circuito puede ser interesante reflejar el punto maximo de nivel qeu reproduciremos mediante un buzzer conectado al pin 11 de salida binaria
A continuación en este breve ejemplo para Arduino se puede mostrar un pulso de latido del corazón humano en directo ayudándonos por medio de «Serial Plotter» de arduino o por ejemplo con una aplicacion móvil usando un modulo bluetooth coenctado a nuestro arduino
En este pequeño programa para Arduino qeu vamos a ver , sonará un buzzer con cada latido de tu corazón al mismo tiempo que se envia el valor de la señal de forma serie (esta es la señal directa del sensor de pulso) el cual podemos visualizar en un ordenador o si tenemos conectado un modulo bluettoth a nuestro arduino mediante un smarptphone usando una app .
//Programa para capturar el pulso cardiaco
// Variable para fijar el puerto donde conectaremos el buzzer
int buzzer = 11;
// la variable pulso contiene los datos brutos entrantes pudiendo variar entre 0-1024
int pulso;
// Determina qué señal «se contará como un latido» y qué señal ignorar.
int limite = 550;
void setup() {
//definimos donde conectamos el buzzer , que sonará al ritmo de su corazón
pinMode(buzzer,OUTPUT);
// Configura la comunicación serial a 9600 dependiendo de su adaptador bluetooth como esté configurado
Serial.begin(9600); }
void loop() {
// Lee el valor del pin analógico 0, y Asigna este valor a la variable «pulso». pulso = analogRead(A0);
//Este caracter lo filtra la aplicación en APP inventor
Serial.print(«*»);
// Envíe el valor de pulso al Plotter serial. Comentar si queremos visualizar en «serial ploter» Serial.println(pulso); if(pulso > limite){
// Si la señal es superior a «550», entonces suena el buzzer. digitalWrite(buzzer,HIGH);
}
else
{
// De lo contrario, deja de sonar el buzzer. digitalWrite(buzzer,LOW); }
Pachube fue pionera en desarrollo de aplicaciones y servicios web para conectar personas y dispositivos en lo que se considera “el Internet de las Cosas” o IoT(Internet of things) , un concepto global en el que todo está conectado (casas, móviles, coches, lámparas, pcs…) nacido en 2008 y que en el momento actual es imparable.
Para quien no lo conozca, Pachube era un servicio web donde se podía transmitir la información que generaban nuestros dispositivos mediante una conexión a Internet (Wifi, ethernet, GPRS,etcC). Una ventaja que tenia es que mediante nuestro ordenador/móvil/tablet podiamos consultar los datos que nuestro dispositivo envíaba mediante la propia web de Pachube de una forma gráfica, pudiendo hacer que nuestros feeds fuesen públicos o privados, consultar el historial de datos así como enviar alarmas y notificaciones a nuestros dispositivos.
Tenia limitaciones en su version gratuita , como que no se podían hacer más de 100 peticiones por minuto, pero en la mayoría de los casos eran suficientes para cualquier aficionado.
El servicio de Pachube fue adquirido hace varios años por una compañía llamada LogMeIn de modo que incluso cambiaron el nombre del servicio a COSM.
Con ésta adquisición LogMeIn entraba en un comercio en auge que se supone llegará a conectar más de 50.000 millones de dispositivos (muy variados entre si, como hemos comentado) en un futuro muy próximo pudiendo ayudar a mejorar la calidad de vida actual así como dar el último impulso a proyectos tan famosos como las viviendas inteligentes o ciudades “tecnológicas” enteras.
Al poco tiempo después, lo renombraron como Xively, el cual solía existir en dos formas: Xively (Comercial) y Xively Personal.
Lamentablemente en enero de 2018 cerraron Xively Personal , de modo que es necesario «pasar por caja» si se quiere usar sus servicios, los mismo servicios que antaño eran gratuitos.
Perfilándose como alternativa de servicio de IoT , hemos visto crecer la plataforma gratuita Adafruit IO. Su API es muy limpia y elegante , y permite ejecutar interaccionar correctamente en un Netduino 3 WiFi , pero muchos usuarios tienen problemas con Netduino 2 Plus, lo cual no lo hace recomendable por el momento si se disponen de placas «antiguas».
Muchas personas que han probado el Api de Adfruit frente a Xively Personal afirman que Adafruit IO. es mucho más sencillo de usar Xively con la ventaja añadida que es gratuita y tiene una gran comunidad de usuarios entusiastas por detrás
Algunas alternativas posibles en ningún orden en particular (esta lista puede crecer) de plataformas de IoT para experimentar con una placa Netduino:
ThingSpeak – la plataforma abierta de IoT con analytics MATLAB, la cual sigue estando disponible para uso no comercial para aficionados usando cualquier versión de Netduino con conectividad ( Netduino+,Netduino2+ y Netduino 3)
Espero que podamos compartir ejemplos de uso de algunas de estas plataforma en este humilde blog como alternativas reales al antiguo Pachube, democratizando el uso de Iot incluso para nuestra placa Netduino , la cual e resiste a ser reemplazada por otras placas destinadas a otros usos y que poco están quitándole el protagonismo que tubo antaño
Debe estar conectado para enviar un comentario.