segunda-feira, 18 de julho de 2011

Netduino + LCD Nokia 5100

Em meu post anterior falei um pouco sobre o Netduino, fizemos nosso primeiro “Hello World” com a luz da própria placa piscando e agora vamos escrever em uma tela de LCD.

O LCD que eu escolhi foi o Nokia 5100, ele é bem simples, tem baixo consumo de energia e possui um único chip para todas as suas funções, tem 84 colunas por 48 linhas e originalmente foi desenvolvido para celulares. Eu o escolhi por ser diferente dos tantos LCDs menores (16 colunas por 2 linhas) que eu vi em vários tutoriais, como encontrei no próprio fórum um post dedicado a ele me empolguei e decidi que ele seria minha escolha (para quem estiver interessado eu comprei aqui).

lcd_nokia_5100

Quando abri a caixinha vermelha da sparkfun e peguei o LCD a primeira coisa que me vaio a cabeça foi “e agora como eu ligo esse cara no Netduino”, como eu não tinha ideia entrei no fórum e perguntei e prontamente me ajudaram, em menos de dois dias meu amigo Stefan (moderador do fórum) documentou como fazer essa conexão (para mais detalhes).

image

Na verdade foi tudo bem simples, tive apenas que soldar pinos no LCD para mantê-lo fixado na breadboard e depois conectar os cabos de acordo com a imagem, para mostrar texto na tela bastou usar o driver já implementado. O legal mesmo foi a conversão que existe para imagem, é possível transformar uma imagem em bytes para mostrar no LCD (a foto acima esta fazendo isso).

Dessa vez não colocarei código, no fórum esta tudo bem documentado e funcionando bem, então até a próxima.

quinta-feira, 7 de julho de 2011

Netduino

Recentemente o adquiri para um projeto da especialização, mas o que ele é e porque foi minha escolha?

Bom primeiramente como era necessário o uso de .net para esse projeto comecei a procurar algo diferente e então encontrei o netduino, que é uma plataforma eletrônica open source que usa o .net micro framework. Maravilha não? Com isso poderei usar c# para controlar um hardware!

netduino2

Infelizmente não o encontrei no Brasil, tive que importar, acabei escolhendo a Proto Advantage para fazer a compra e como meu primeiro pedido acabou no buraco negro dos correios o pessoal de lá acabou me mandando outro sem custo algum, tive apenas que arcar com metade do frete (fica ai a dica para os interessados, o atendimento dessa empresa é ótimo).

Já existe uma comunidade relativamente ativa, no fórum do site oficial existem vários projetos já em andamento com drivers para lcds, rfids, rede, sensores entre outros, tudo bem explicado, com os esquemas eletrônicos e exemplo dos códigos (sem contar a boa vontade do pessoal, sempre respondendo de pronto as novas postagens).

Um passo a passo já existe no site mas deixo aqui um resumo do que é preciso e também um código do que seria nosso primeiro hello world !

O que preciso instalar?

  1. Microsoft Visual  C# Express 2010
  2. Microsoft .Net Micro Framework v4.1 SDK
  3. Netduino SDK v4.1 32bits ou Netduino SDK v4.1 64bits

Tudo instalado e agora?

Ao conectar o netduino ao pc pelo cabo usb os drivers devem ser instalados automaticamente, feito isso abra o Visual Studio e crie um novo projeto (New Project => Visual C# => Micro Framework => Netduino Application), o que teremos será uma aplicação nos moldes de um console application.

Vamos ao código

Em nosso primeiro exemplo faremos com que o LED programável da própria placa pisque, basicamente iremos criar um OutPutPort para controlar a voltagem desse LED, em seguida, dentro de um loop, faremos com que esse LED ascenda e apague dentro de um intervalo, segue o código:

  1: using System.Threading;
  2: using Microsoft.SPOT.Hardware;
  3: using SecretLabs.NETMF.Hardware.Netduino;
  4: 
  5: namespace NetduinoApplication1
  6: {
  7:     public class Program
  8:     {
  9:         public static void Main()
 10:         {            
 11:             int i = 0;
 12:             OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
 13:             while (i < 20)
 14:             {
 15:                 led.Write(true);   // liga o LED
 16:                 Thread.Sleep(250); // aguarda 250ms
 17:                 led.Write(false);  // desliga o LED
 18:                 Thread.Sleep(250); // aguarda 250ms
 19:                 i++;
 20:             }
 21:         }
 22: 
 23:     }
 24: }
 25: 

 


Bom é isso, nos próximos meses terei muito a fazer com esse cara, sobrando um tempo eu postarei aqui meu progresso.

quarta-feira, 6 de abril de 2011

Antes do hello world um pouco de teoria (Android)

Eu sei que o legal de desenvolver é pular a parte chata (documentação e teoria) e ir direto para o desenvolvimento, fazendo de cara o bom e velho hello world, ok sem problema, mas depois é bom dar uma olhada nos fundamentos para ter noção das possibilidades da plataforma.

 

Um aplicativo dentro do sistema Android

As aplicações Android são codificadas em Java, depois de tudo compilado, código e recursos são colocados em um pacote, com extensão .apk, esse é o “instalador” da apicação desenvolvida.

Depois de instalado, a aplicação fica em seu próprio “sand box”:

  • O Android é um SO baseado em Linux, cada aplicação é tratada como um usuário distinto;
  • Cada aplicação recebe um ID de usuário único, onde apenas esse usuário possui permissão de acesso aos arquivos da aplicação;
  • Cada processo tem sua própria máquina virtual (VM), então o código de um aplicativo é executado isoladamente de outras aplicações.
  • Cada aplicativo é executado em seu próprio processo, que inicia quando um dos componentes da aplicação precisa ser executada e encerra caso contrário para a liberação de memória;

Desta forma, o sistema Android implementa o princípio de privilégio mínimo. Ou seja, cada aplicação, por padrão, só tem acesso aos componentes que ele necessita para fazer o seu trabalho e nada mais. Isso cria um ambiente muito seguro em que um aplicativo não pode acessar partes do sistema para o qual não é dado a permissão.

Porém existem maneiras de compartilhar dados com outras aplicações ou mesmo acessar outros serviços:

  • É possível configurar duas aplicações com o mesmo ID, de forma que ambas podem compartilhar seus recursos;
  • Um aplicativo pode solicitar permissão para acessar os dados do dispositivo, como contatos do usuário, mensagens SMS, o armazenamento (cartão SD), câmera, Bluetooth e outros. Todas as permissões devem ser concedidas pelo usuário no momento da instalação.

 

Componentes de aplicação

São os blocos de construção de uma aplicação, onde cada um permite uma maneira de entrada do sistema para a aplicação. Nem todos os componentes são pontos de entrada real para o usuário e alguns dependem uns dos outros, mas cada um existe como uma entidade própria e desempenha um papel específico, cada um é um bloco único que ajuda a definir o comportamento global da aplicação.

Existem quatro tipos diferentes de componentes de aplicação. Cada tipo serve a um propósito diferente e tem um ciclo de vida distinto que define como o componente é criado e destruído, são eles:

Activity

O activity representa uma tela de inteface com o usuário, uma aplicação pode conter várias activitys cada uma com seu propósito e a aplicação pode iniciar de qualquer uma delas se assim for permitido. Um exemplo poderia ser um activity de login, outro de menu e outro de cadastro, a menos que exista algum controle é perfeitamente possível iniciar a aplicação de qualquer uma delas.

Services

Os serviços não possuem interface com o usuário, possuem como propósito executar operações em segundo plano, mesmo quando a aplicação não esta ativa, como por exemplo realizar verificações para a aplicação quando o usuário estiver em outra ou tocar uma música por exemplo

Content provider

Sua função é gerenciar dados do aplicativo, como arquivos ou banco de dados. Ele também é capaz de permitir que outros aplicativos acessem esses dados, um exemplo disso é o content provider do Android que fornece informações de contatos do usuário.

Broadcast receivers

É o componente que recebe mensagens de sistema, como por exemplo desligamento de tela ou bateria fraca, também podem ser usados para criar notificações para o usuário. É comumente usado para iniciar serviços.

 

Ativando componentes

Três dos quatro tipos de componentes activitys, services e broadcast receivers são ativados através de uma mensagem assíncrona chamado intent. Intents são componentes individuais que se ligam uns aos outros em tempo de execução.

Para as activityse services, o intent define a ação a ser executada (por exemplo, para "ver"ou "mandar" alguma coisa), e pode especificar o URI dos dados para agir sobre (entre outras coisas que o componente a ser iniciado necessita de saber ).

Para broadcast receivers, o intent simplesmente define a mensagem a ser (por exemplo, uma transmissão para indicar a bateria do dispositivo é reduzido inclui apenas uma seqüência de ação que indica "a bateria está baixa").

O content provider, não é ativado por intents, ele é ativado por um pedido de ContentResolver. O content resolver manipula todas as operações diretas com o content provider. Isso deixa uma camada de abstração entre o content provider e as informações sobre o componente requerente (por segurança).

 

O arquivo manifest

Para que o Android possa iniciar um componente de nosso aplicativo, ele precisa antes de mais nada conhece-lo, por isso todos os componentes devem ser declarados no AndroidManifest.xml (fica na raiz de nossa aplicação). Além de nossos componentes também devem ser declarados os recursos do aparelho que serão utilizados, como acesso ao cartão SD ou navegação na internet, bibliotecas utilizadas, nivel de API entre outras coisas.

Recursos

Em geral as aplicações são formadas por muito mais do que código, como imagens, sons, estilos, definições de layout, cores, enfim uma infinidade de outras coisas.

Com recursos fica mais fácil realizar uma mudança no estilo das telas por exemplo sem a necessidade de alterar o código da aplicação, para acessar os recursos basicamente é necessário apenas que se conheça seu ID.

Um novo projeto Android vem com três grupos diferentes de recursos, drawable (aqui ficariam as imagens usadas pelo sistema), layout (aquios arquivos XML que definem as telas do sistema) e values (arquivos XML no estili INI, com nome e um valor).

Encerrando

Bom era isso, se você chegou até aqui tenho certeza que agora possui uma ótima noção de como as coisas funcionam no Android, para ver na integra o documento de fundamentos sobre o Andoird (sem tradução meia boca) é só acessar aqui.