Compartir a través de


Desarrollo de aplicaciones de primer plano

Obtenga información sobre los idiomas que se admiten en Windows 10 IoT Core, así como los tipos de aplicaciones para UWP y no para UWP que se admiten en IoT Core.

Nota

Visual Studio generará un error críptico al realizar la implementación en una imagen de IoT RS5 (o RS4 con OpenSSH habilitado), a menos que haya instalado un SDK de RS4 o superior al que pueda acceder Visual Studio.

Tipos de aplicación

Aplicaciones de Plataforma universal de Windows (UWP)

IoT Core es un sistema operativo centrado en UWP y aplicaciones para UWP son su tipo de aplicación principal.

Plataforma universal de Windows (UWP) es una plataforma de aplicaciones común en todas las versiones de Windows 10, incluida la Windows 10 IoT Core. UWP es una evolución de Windows Runtime (WinRT). Puedes encontrar más información y una introducción a UWP aquí.

Visual Studio es la herramienta principal para escribir aplicaciones para UWP para IoT Core y en general. Puede encontrar una lista detallada de los requisitos de compatibilidad de Visual Studio aquí.

Aplicaciones para UWP tradicionales

Las aplicaciones para UWP solo funcionan en IoT Core, igual que en otras ediciones de Windows 10. Una aplicación Xaml sencilla y en blanco en Visual Studio se implementará correctamente en el dispositivo IoT Core como lo haría en un teléfono o Windows 10 PC. Todos los lenguajes estándar de UWP y las plantillas de proyecto son totalmente compatibles con IoT Core.

Hay algunas adiciones al modelo de aplicación de UWP tradicional para admitir escenarios de IoT y cualquier aplicación para UWP que aproveche sus ventajas necesitará la información correspondiente agregada a su manifiesto. En concreto, el espacio de nombres "iot" debe agregarse al manifiesto de estas aplicaciones para UWP estándar.

Dentro del <Package> atributo del manifiesto, debe definir los xmlns de iot y agregarlos a la lista IgnorableNamespaces. El xml final debe tener este aspecto:

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
  IgnorableNamespaces="uap mp iot">

Aplicaciones en segundo plano

Además de las aplicaciones de interfaz de usuario tradicionales, IoT Core ha agregado un nuevo tipo de aplicación para UWP denominado "Aplicaciones en segundo plano". Estas aplicaciones no tienen un componente de interfaz de usuario, sino que tienen una clase que implementa la interfaz "IBackgroundTask". A continuación, registran esa clase como "StartupTask" para ejecutarse en el arranque del sistema. Puesto que siguen siendo aplicaciones para UWP, tienen acceso al mismo conjunto de API y se admiten desde el mismo idioma. La única diferencia es que no hay ningún punto de entrada de interfaz de usuario.

Cada tipo de IBackgroundTask obtiene su propia directiva de recursos. Esto suele ser restrictivo para mejorar la duración de la batería y los recursos de la máquina en los dispositivos en los que estas aplicaciones en segundo plano son componentes secundarios de las aplicaciones de interfaz de usuario en primer plano. En los dispositivos IoT, las aplicaciones en segundo plano suelen ser la función principal del dispositivo, por lo que estos StartupTasks obtienen una directiva de recursos que refleja las aplicaciones de interfaz de usuario en primer plano en otros dispositivos.

En el ejemplo siguiente se muestra el código necesario para compilar una aplicación en segundo plano de C# que parpadea un LED:

namespace BlinkyHeadlessCS
{
    public sealed class StartupTask : IBackgroundTask
    {
        BackgroundTaskDeferral deferral;
        private GpioPinValue value = GpioPinValue.High;
        private const int LED_PIN = 5;
        private GpioPin pin;
        private ThreadPoolTimer timer;

        public void Run(IBackgroundTaskInstance taskInstance)        {
            deferral = taskInstance.GetDeferral();
            InitGPIO();
            timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(500));

        }
        private void InitGPIO()
        {
            pin = GpioController.GetDefault().OpenPin(LED_PIN);
            pin.Write(GpioPinValue.High);
            pin.SetDriveMode(GpioPinDriveMode.Output);
        }

        private void Timer_Tick(ThreadPoolTimer timer)
        {
            value = (value == GpioPinValue.High) ? GpioPinValue.Low : GpioPinValue.High;
            pin.Write(value);
        }
    }
}

Puede encontrar información detallada sobre las aplicaciones en segundo plano aquí.

Aplicaciones que no son para UWP

IoT Core admite determinados tipos de aplicaciones Win32 tradicionales, como aplicaciones de consola Win32 y servicios NT. Estas aplicaciones se compilan y ejecutan de la misma manera que en Windows 10 Escritorio. Además, hay una plantilla de proyecto de consola de C++ de IoT Core para facilitar la compilación de estas aplicaciones mediante Visual Studio.

Hay dos limitaciones principales en estas aplicaciones que no son para UWP:

  1. No se admite la interfaz de usuario de Win32 heredada: IoT Core no contiene API para crear Windows clásico (HWND). Los métodos heredados como CreateWindow() y CreateWindowEx() o cualquier otro método que trate con identificadores de Windows (HWND) no están disponibles. Posteriormente, los marcos que dependen de estas API, como MFC, Windows Forms y WPF, no se admiten en IoT Core.
  2. Solo aplicaciones de C++: Actualmente, solo se admite C++ para desarrollar aplicaciones Win32 en IoT Core.

Lenguajes de programación

IoT Core admite una amplia gama de lenguajes de programación.

idiomas de In-Box

Los idiomas tradicionales de UWP se incluyen con compatibilidad en Visual Studio de forma predeterminada. Todos los lenguajes de In-Box admiten aplicaciones en segundo plano y de interfaz de usuario

  • Idiomas
    • C#
    • C++
    • JavaScript
    • Visual Basic

Cableado de Arduino

El cableado de Arduino requiere la descarga de las "Plantillas de proyecto de Windows IoT Core" desde visual Studio Tools-Extensions> y Novedades manager. Arduino Wiring solo admite aplicaciones en segundo plano. También puede compilar Windows Runtime Componentes mediante C#, C++o Visual Basic y, a continuación, hacer referencia a esas bibliotecas desde cualquier otro lenguaje.

C# y Visual Basic (VB)

C# y VB se admiten como aplicaciones para UWP y tienen acceso a la parte de .NET Framework disponible para las aplicaciones para UWP. Admiten aplicaciones de interfaz de usuario compiladas con Xaml, así como aplicaciones en segundo plano. También puede compilar Windows Runtime componentes que se pueden usar desde otros lenguajes admitidos.

Ejemplos:

JavaScript

Puede usar JavaScript para compilar aplicaciones en segundo plano y de interfaz de usuario. Las aplicaciones de interfaz de usuario funcionan de la misma manera que en todas las ediciones de UWP. Las aplicaciones en segundo plano son nuevas para IoT Core, pero son sencillas. En el código de ejemplo siguiente se muestra la salida de la plantilla de nuevo proyecto de JS:

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409
(function () {
    "use strict";

    // TODO: Insert code here for the startup task

})();

C++

Con C++ puedes compilar aplicaciones xaml o de interfaz de usuario de DirectX, así como proyectos en segundo plano de UWP y aplicaciones Win32 que no son de interfaz de usuario .

Ejemplos:

Nota

Para aquellos que planean escribir su aplicación en C++, tendrás que activar la casilla UWP C++ después de descargarla.

C++ para Visual Studio

?### Cableado de Arduino

Con la compatibilidad con el cableado de Arduino, puede crear aplicaciones en Arduino Cableado para muchos componentes y periféricos populares en el ecosistema de IoT.

Nuestra guía de proyectos de cableado de Arduino proporciona instrucciones completas sobre cómo configurar para compilar estas aplicaciones. Los ejemplos copiados y vinculados a continuación le ayudarán a empezar a crear los suyos propios. Incluso puedes compilar componentes de WinRT en Arduino que luego se pueden usar desde otros lenguajes.

Código de ejemplo de Blinky El código de ejemplo completo y los documentos están disponibles en nuestra página de ejemplos y puede encontrar el código completo siguiente:

void setup()
{
    // put your setup code here, to run once:

    pinMode(GPIO5, OUTPUT);
}

void loop()
{
    // put your main code here, to run repeatedly:

    digitalWrite(GPIO5, LOW);
    delay(500);
    digitalWrite(GPIO5, HIGH);
    delay(500);
}