Compartilhar via


Desenvolvimento de aplicativo de primeiro plano

Saiba mais sobre os idiomas com suporte no Windows 10 IoT Core, bem como os tipos de aplicativo UWP e não UWP com suporte no IoT Core.

Observação

O Visual Studio gerará um erro indecifrável ao implantar em uma imagem de IoT RS5 (ou RS4 com OpenSSH habilitado), a menos que esteja instalado um SDK de RS4 ou superior que possa ser acessado pelo Visual Studio.

Tipos de aplicativo

Aplicativos da UWP (Plataforma Universal do Windows)

O IoT Core é um sistema operacional centrado em UWP e os aplicativos UWP são seu tipo de aplicativo principal.

Plataforma Universal do Windows (UWP) é uma plataforma de aplicativo comum em todas as versões do Windows 10, incluindo Windows 10 IoT Core. A UWP é uma evolução de Windows Runtime (WinRT). Você pode encontrar mais informações e uma visão geral da UWP aqui.

O Visual Studio é a principal ferramenta para escrever aplicativos UWP para IoT Core e em geral. Você pode encontrar uma listagem detalhada dos requisitos de compatibilidade do Visual Studio aqui.

Aplicativos UWP tradicionais

Os aplicativos UWP funcionam apenas no IoT Core, assim como em outras edições Windows 10. Um aplicativo Xaml simples e em branco no Visual Studio será implantado corretamente em seu dispositivo IoT Core, assim como faria em um telefone ou Windows 10 computador. Todas as linguagens UWP padrão e modelos de projeto têm suporte total no IoT Core.

Há algumas adições ao modelo de aplicativo UWP tradicional para dar suporte a cenários de IoT e qualquer aplicativo UWP que se aproveite deles precisará das informações correspondentes adicionadas ao manifesto. Em particular, o namespace "iot" precisa ser adicionado ao manifesto desses aplicativos UWP padrão.

Dentro do <Package> atributo do manifesto, você precisa definir os xmlns iot e adicioná-lo à lista IgnorableNamespaces. O xml final deve ter esta aparência:

<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">

Aplicativos em Segundo Plano

Além dos aplicativos de interface do usuário tradicionais, o IoT Core adicionou um novo tipo de aplicativo UWP chamado "Aplicativos em Segundo Plano". Esses aplicativos não têm um componente de interface do usuário, mas têm uma classe que implementa a interface "IBackgroundTask". Em seguida, eles registram essa classe como uma "StartupTask" para execução na inicialização do sistema. Como eles ainda são aplicativos UWP, eles têm acesso ao mesmo conjunto de APIs e têm suporte do mesmo idioma. A única diferença é que não há nenhum ponto de entrada da interface do usuário.

Cada tipo de IBackgroundTask obtém sua própria política de recursos. Isso geralmente é restritivo para melhorar a duração da bateria e os recursos do computador em dispositivos em que esses aplicativos em segundo plano são componentes secundários de aplicativos de interface do usuário em primeiro plano. Em dispositivos IoT, os Aplicativos em Segundo Plano geralmente são a função principal do dispositivo e, portanto, essas StartupTasks obtêm uma política de recurso que espelha aplicativos de interface do usuário em primeiro plano em outros dispositivos.

O exemplo a seguir mostra o código necessário para criar um aplicativo em segundo plano em C# que pisca um 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);
        }
    }
}

Você pode encontrar informações detalhadas sobre aplicativos em segundo plano aqui.

Aplicativos não UWP

O IoT Core dá suporte a determinados tipos de aplicativos Win32 tradicionais, como Aplicativos de Console Win32 e Serviços NT. Esses aplicativos são criados e executados da mesma maneira que no Windows 10 Desktop. Além disso, há um modelo de projeto do Console do C++ do IoT Core para facilitar a criação desses aplicativos usando o Visual Studio.

Há duas limitações de main nesses aplicativos não UWP:

  1. Sem suporte à interface do usuário herdada do Win32: O IoT Core não contém APIs para criar Windows clássico (HWND). Métodos herdados como CreateWindow() e CreateWindowEx() ou quaisquer outros métodos que lidam com HWNDs (identificadores do Windows) não estão disponíveis. Posteriormente, não há suporte para estruturas que dependem dessas APIs, incluindo MFC, Windows Forms e WPF no IoT Core
  2. Somente aplicativos C++: Atualmente, somente o C++ tem suporte para desenvolver aplicativos Win32 no IoT Core.

Linguagens de programação

O IoT Core dá suporte a uma ampla variedade de linguagens de programação.

In-Box idiomas

As linguagens UWP tradicionais são fornecidas com suporte no Visual Studio por padrão. Todas as linguagens de In-Box dão suporte a aplicativos de interface do usuário e em segundo plano

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

Fiação Arduino

O Arduino Wiring requer o download dos "Modelos de Projeto do Windows IoT Core" do Gerenciador de Ferramentas e Atualizações do Visual Studio>. O Arduino Wiring dá suporte apenas a aplicativos em segundo plano. Você também pode criar Windows Runtime Componentes usando C#, C++ou Visual Basic e, em seguida, referenciar essas bibliotecas de qualquer outra linguagem.

C# e Visual Basic (VB)

O C# e o VB têm suporte como aplicativos UWP e têm acesso à parte do .NET Framework disponível para aplicativos UWP. Eles dão suporte a aplicativos de interface do usuário criados com Xaml, bem como aplicativos em segundo plano. Você também pode criar Windows Runtime Componentes que podem ser usados de outras linguagens com suporte.

Exemplos:

JavaScript

Você pode usar o JavaScript para criar aplicativos de interface do usuário e em segundo plano. Os aplicativos de interface do usuário funcionam da mesma maneira que funcionam em todas as edições UWP. Os Aplicativos em Segundo Plano são novos para o IoT Core, mas são simples. O código de exemplo a seguir mostra a saída do novo modelo de projeto do 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++

Com o C++, você pode criar aplicativos de interface do usuário Xaml ou DirectX, bem como projetos em segundo plano UWP e aplicativos Win32 que não são da interface do usuário.

Exemplos:

Observação

Para aqueles que estão planejando escrever seu aplicativo em C++, você precisará marcar a caixa de seleção C++ da UWP ao baixar.

C++ para Visual Studio

?### Fiação Arduino

Com o suporte ao Arduino Wiring, você pode criar aplicativos no Arduino Wiring para muitos componentes e periféricos populares no ecossistema de IoT.

Nosso Guia de Projeto de Fiação do Arduino fornece instruções completas sobre como configurar para criar esses aplicativos. Os exemplos copiados e vinculados abaixo ajudarão você a começar a criar seus próprios. Você pode até mesmo criar componentes do WinRT no Arduino que podem ser usados de outras linguagens.

Código de exemplo intermitente O código de exemplo completo e os documentos estão disponíveis em nossa página de exemplos e você pode encontrar o código completo abaixo:

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);
}