quinta-feira, 4 de julho de 2013

Aplicativo Android - Consumo do Carro

Boa noite pessoal, 

Desenvolvi um aplicativo em Android para verificar o que é mais vantajoso, abastecer com gasolina ou com álcool. É só entrar com os valores de ambos e apertar Verificar. É um aplicativo bastante simples mas útil para quem quer fazer uma economia na hora de abastecer o possante!!!! Segue o link para download no Google Play.


Download - Consumo do Carro.apk

Abraço

Rafael Adami

pivotoadami@gmail.com

domingo, 30 de junho de 2013

Aplicativo Android comunicando com Raspberry Pi - TCP Client/Server


Boa noite pessoal,

Aproveitando o post anterior, resolvi fazer um aplicativo Android (RPIDroid App) que é um TCP Client para se comunicar com um TCP Server no Raspberry PI para acender o LED da placa extensora. Este exemplo, em um primeiro momento, está funcionando apenas em rede local. O aplicativo está disponível para download na Google Play no link abaixo:

RPIDroid App

Não se esqueça que deve habilitar o wifi no smartphone.



Segue o link para download do código do TCP Server para Raspberry Pi. Esse código recebe um comando do aplicativo pela rede e acende ou apaga o LED utilizando a biblioteca wiringpi.

http://testandroid.webuda.com/rpidroidserver.zip

Abraço

Rafael Adami
pivotoadami@gmail.com

terça-feira, 18 de junho de 2013

Raspberry PI - Trabalhando com a biblioteca  GPIO wiringpi - Fazendo um LED piscar


Boa noite pessoal, 

Neste tutorial vou mostrar como acessar as portas GPIO em C usando a biblioteca "wiringpi" e fazer um LED piscar em uma simples placa extensora.

Primeiramente vejam na imagem abaixo de todos os componentes envolvidos nesse exemplo:



O circuito da placa extensora é bastante simples, veja abaixo:





Vejam a pinagem do conector GPIO:



Levando em consideração que a biblioteca "wiringpi" já esteja instalada (Postagem anterior), vamos digitar o seguinte comando para ver a situação das portas GPIO do Raspberry. Não se esqueçam de estar como usuário root (sudo -i).

gpio readall

Aparecerá a seguinte tabela:



Veja que a GPIO 17 (primeira linha da tabela) está em modo OUT, ou seja, é possível enviar comandos através dela. Caso a porta esteja em modo IN, deve-se mudar sua configuração para OUT, da seguinte forma:

gpio mode 0 out

Veja que o valor dessa porta está como LOW. Para mudar o valor podemos digitar o seguinte comando:

gpio write [wiringpi port] [0/1] ou seja gpio write 0 1 

Nesse caso o valor dessa porta passará a ser HIGH. Mas o que queremos é mudar o valor (0/1) dessa porta através de um código C para acender o LED. Então vamos!!!! Você pode criar uma pasta para o seu projeto dentro do diretório /home. 

Segue abaixo o código em C (main.c) para fazer o LED piscar 10 vezes a cada 1 segundo:

#include <stdio.h>
#include <wiringPi.h>

#define LED_0 0

int main (void)
{
int i;

printf("Pisca LED Raspberry PI\n");

wiringPiSetup () ;

  for(i=0; i<=10;i++){
printf("Índice: %i\n",i);

digitalWrite(LED_0,HIGH); //Acende o LED
delay(1000); //Aguarda 1 segundo

digitalWrite(LED_0,LOW); //Apaga o LED
delay(1000); //Aguarda um segundo
}

printf("Terminou a execução...\n");
return(0);

}

Para compilar o código, devemos digitar a seguinte linha de comando:

gcc -o main main.c -lwiringPi

Para executar, 

./main

Espero que seja útil para seus estudos. Em breve mais postagens a respeito!!!

Abraço

Rafael Adami
pivotoadami@gmail.com


Raspberry PI - Trabalhando com a biblioteca wiringpi para GPIO - Download e Instalação


Boa noite pessoal, 

Tempos atrás postei uma reportagem falando sobre o Raspberry Pi (http://adamitech.blogspot.com.br/2013/06/raspberry-pi-o-menor-computador-do.html) que é o menor computador do mundo e possui uma série de recursos. 

Hoje eu vou falar um pouco sobre uma biblioteca desenvolvida em C para acesso das portas GPIO do Raspberry chamada "wiringpi". Veja nesse link as informações completas sobre o mesmo: http://wiringpi.com/. Não se esqueçam de estar como usuário root.

O WiringPi é mantido em um GIT, portanto é necessário instalá-lo no Raspbian ou na distribuição que você esteja utilizando da seguinte forma:

sudo apt-get install git-core

Caso tenha algum problema (erro) na execução da linha de comando acima, verifique se o seu Raspbian (OS) está atualizado:

sudo apt-get update
sudo apt-get upgrade

O "apt-get update" efetua download de uma lista de pacotes atualizados enquanto o "apt-get upgrade" efetua uma comparação entre os pacotes que estão instalados em sua máquina e se na lista houver um pacote com a versão mais nova, ele faz o download e atualiza. 

Até o momento, preparamos o ambiente para fazer o download da biblioteca WiringPi. Agora podemos fazer o download da seguinte forma:

git clone git://git.drogon.net/wiringPi

Entre na pasta wiringpi

cd wiringpi

e atualize o seu repositório local com base no repositório remoto

git pull origin

Para instalar, execute o seguinte comando:

./build

A partir de agora a biblioteca wiringpi está instalada na sua distribuição (a minha é Raspbian) no Raspberry Pi. 

Acompanhem a continuação das postagens sobre o Raspberry Pi. 

Abraço

Rafael Adami
pivotoadami@gmail.com

segunda-feira, 10 de junho de 2013

TDC 2013 - The developer's Conference


Bom dia pessoal, 

Segue abaixo o link do TDC 2013. Uma grande oportunidade para programadores e pessoas do mundo da tecnologia.


http://www.thedevelopersconference.com.br/#geral

Abraço

Rafael Adami
pivotoadami@gmail.com

domingo, 9 de junho de 2013

Treinamentos na Tempo Real Eventos

Boa noite pessoal

Gostaria apenas de divulgar o link da Tempo Real Eventos. Ela organiza treinamentos e seminários na área de tecnologia e são bastante interessantes. Eu tive a oportunidade de participar de dois treinamentos (C/C++ Embarcado e Google Android) e fiquei muito satisfeito. Até onde eu sei, os eventos são de curta duração mas valem muito a pena. 
Segue o link:




http://www.temporealeventos.com.br/ 

Abraço

Rafael Adami
pivotoadami@gmail.com

Abrir página web com aplicativo Android

Boa noite pessoal,

Nesse tutorial vou explicar como abrir uma página web em um aplicativo Android. Existem outras formas, como por exemplo, utilizando a classe WebView mas acredito que da forma como vou mostrar é mais simples. Nesse exemplo, teremos um botão que abre a página web. Veja abaixo o código fonte da minha activity.

package adamitech.blog;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Android_Abrir_Pagina_WebActivity extends Activity implements OnClickListener {
    
Button btn_abrir;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        btn_abrir = (Button)findViewById(R.id.btn_abrir);
        btn_abrir.setOnClickListener(this);
    }

@Override
public void onClick(View v) {
if(v.getId() == R.id.btn_abrir){
       //Abrir página web
String url = "http://adamitech.blogspot.com.br/";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}

}
}

Temos que declarar a tag Button no nosso arquivo main.xml.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button 
   android:id="@+id/btn_abrir"
   android:text="Abrir página web" 
   android:layout_height="wrap_content" 
   android:layout_width="match_parent">
    </Button>
</LinearLayout>

Não podemos esquecer que precisamos declarar a permissão de internet no arquivo AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Espero que seja útil para vocês e em breve teremos novas postagens!!!!

Abraço

Rafael Adami
pivotoadami@gmail.com


sexta-feira, 7 de junho de 2013

Desenvolvendo um Splash Screen em Android

O que é um Splash Screen? É uma tela de apresentação que é exibida ao abrir o aplicativo durante um período, geralmente alguns segundos.

É extremamente simples criar um Splash Screen. Primeiramente devemos criar uma activity que implementa a classe Runnable. Segue abaixo o código fonte da classe.


package adamitech.blog;


import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

public class SplashScreen extends Activity implements Runnable {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        
        Handler h = new Handler();
h.postDelayed(this, 3000);//aqui é definido o delay do handler em milisegundos
}
public void run(){
      //Aqui inicia a activity "Android_Splash_ScreenActivity" (classe principal)
startActivity(new Intent(this, Android_Splash_ScreenActivity.class));

     //Aqui chamamos o método finish() para terminar a activity atual, no caso a Splash Screen
finish();
}
    
}

O Handler possui duas funções principais:
  1. Agendar ações a serem executadas em algum instante.
  2. Separar uma ação para ser executada em uma outra Thread. 
Iremos utilizar o método postDelayed() para executar o Runnable depois de um tempo.

A classe SplashScreen irá executar depois de 3 segundos a outra activity "Android_Splash_ScreenActivity". 

Segue o código da activity "Android_Splash_ScreenActivity" (bem simples):

package adamitech.blog;
import android.app.Activity;
import android.os.Bundle;

public class Android_Splash_ScreenActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Segue abaixo a estrutura desse exemplo (Package Explorer do Eclipse):


Como vocês podem ver na imagem acima, devemos ter um arquivo splash.xml (possui um ImageView para exibir a imagem splash_screen.png) e main.xml (possui um TextView para exibir o texto "Minha Activity"). 
  • splash.xml
<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:screenOrientation="landscape">

 <ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/splash_screen"/>
</LinearLayout>
  • main.xml
  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TextView  
  android:textSize="22dp"
  android:textStyle="bold"
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:layout_marginTop="15dp"
  android:text="Minha Activity"/>
  </LinearLayout>

Não podemos esquecer de alterar o AndroidManifest.xml para especificar a Activity que será executada ao iniciar a aplicação.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="adamitech.blog"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SplashScreen"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" android:screenOrientation="portrait"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Android_Splash_ScreenActivity" android:screenOrientation="portrait">
<intent-filter><action android:name="android.intent.action.MAIN"></action></intent-filter>
</activity>        
    </application>
</manifest>

O resultado final será o seguinte:


Na tela Splash Screen pode conter o logotipo da empresa ou do próprio aplicativo e até mesmo propaganda de terceiros, podendo gerar ganhos para você. 

Espero que seja útil para vocês e em breve teremos novas postagens!!!!

Abraço

Rafael Adami

quarta-feira, 5 de junho de 2013

Parseando conteúdo de uma página HTML usando a biblioteca JSoup em Android


O objetivo desse post é mostrar a facilidade em se parsear um conteúdo HTML usando o JSoup (Java HTML Parser) em aplicativos Android. 
Para aprender um pouco mais sobre o JSoup e suas possibilidades, veja o seguinte link: http://jsoup.org/

Primeiramente faça o download da biblioteca (http://jsoup.org/download) e configure o build path do seu projeto android.




Vamos começar por um simples código HTML:

<html>
<body bgcolor="#696969">
<font face='verdana' style='font-size:16px' color='#000000'>
<h2>Android - JSoup</h2>
<br> 
<font face='verdana' style='font-size:12px' color='#000000'>
<a id="descricao">O Android é o sistema operacional portátil mantido pela Google e presente em um   considerável número de smartphones</a>
</body>
</html>

Link da página de teste: http://testandroid.webuda.com/

Agora vamos ver o código para Android comentado:

package adamitech.blog;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Android_JSoup_HTML_ParserActivity extends Activity {

    
String HTML_URL = "http://testandroid.webuda.com/";
TextView txv_conteudo_html;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        txv_conteudo_html = (TextView)findViewById(R.id.conteudo_html);
        
        try {
txv_conteudo_html.setText(htmlParsingResult());
} catch (Exception e) {
e.printStackTrace();
}
    }
    
    public String htmlParsingResult() throws Exception {
    String resultado = "";
   
    // Adquiri a estrutura do documento HTML
    Document document = Jsoup.connect(HTML_URL).get();
   
    // Query
    Elements nodeBlogStats = document.select("a#descricao");
   
    // checando resultados
    if(nodeBlogStats.size() > 0) {
    // Pegando o valor
    resultado = nodeBlogStats.get(0).text();
    }

    return resultado;

    }
}




O arquivo main.xml também é bastante simples pois possui apenas um componente TextView para exibir o conteúdo parseado.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<TextView  
android:id="@+id/conteudo_html"
android:textSize="22dp"
android:textStyle="bold"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="15dp"/>

</LinearLayout>

Não se esqueça de habilitar a permissão de Internet no arquivo manifest do seu projeto Android. 

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Em breve mais postagens!!!

Abraço

Rafael Adami
pivotoadami@gmail.com

Raspberry PI - O Menor computador do mundo


Raspberry Pi é um computador do tamanho de um cartão de crédito desenvolvido no Reino Unido pela Fundação Raspberri pi. Todo o hardware é integrado em uma única placa. Abaixo a matéria exibida pela Globo News Ciência e Tecnologia.



O objetivo principal é estimular o ensino de ciência da computação básica em escolas (Genial). Para quem quiser conhecer um pouquinho mais, segue o link: http://www.raspberrypi.org/

O preço aqui no Brasil gira em torno de R$ 150,00 mais algumas taxas na Farnell Newark. Segue o link: http://www.farnellnewark.com.br/sbcraspberrypimodelb512mbcore,product,43W5302,0.aspx

Em breve mais postagens!!!

Abraço

Rafael Adami
pivotoadami@gmail.com