Trabalhando com Python e Linux no Intel Galileo Gen 2 17

No primeiro artigo sobre o Intel Galileo Gen 2 mostramos as principais características dessa placa e como realizar um teste básico de funcionamento carregando um dos exemplos da IDE customizada do Galileo. Hoje faremos um pequeno tutorial de aplicação do Linux no Intel Galileo.

Intel_Galileo_LED

Além de funcionar normalmente como um Arduino, podemos também utilizar o slot microSD para carregar o Linux no Intel Galileo e fazer com esses dois ambientes troquem informações entre si. Vamos mostrar isso executando um pequeno script em Python que vai enviar dados para o serial monitor da IDE, e também um programa do Arduino que vai ler as informações de um arquivo texto do cartão microSD por meio de comandos enviados para o Linux.

Instalação do Linux no cartão microSD

Faça o download da imagem Linux para o Galileo, acessando este link. Na página de downloads, clique em SD-Card Linux Image:

Download Linux

Providencie um cartão microSD com capacidade de pelo menos 1 GB. Descompacte o arquivo e coloque toda a estrutura da pasta image-full-galileo na raiz do cartão SD, que ficará assim:

Arquivos - Linux

Desligue o Galileo (desconectando a fonte externa e também o cabo usb), coloque o cartão no slot microSD e ligue novamente a placa. Aguarde alguns minutos até que o Linux seja carregado, observando a atividade do led SD, à direita do conector USB, que pisca enquanto o cartão está sendo acessado.

Acessando o Linux através da rede Ethernet

Para acessar o Linux no Intel Galileo através da rede, precisamos primeiro descobrir o endereço IP. Conecte um cabo de rede na porta Ethernet, abra a IDE e carregue o programa abaixo:

void setup() 
{
   system("telnetd -l /bin/sh");
}

void loop() 
{
   system("ifconfig eth0 > /dev/ttyGS0");
   sleep(20);
}

Esse programa se conecta ao Linux através dos comandos system(), e retorna, no serial monitor, as configurações de rede e o endereço IP do Galileo, destacado em vermelho na imagem abaixo:

Serial Monitor - IP

Com o endereço IP, podemos agora acessar o Linux utilizando o PuTTY (download), que cria uma conexão com o sistema operacional utilizando SSH ou Telnet. Na tela do PuTTY, coloque o endereço IP do Galileo, mantenha a porta com o valor 23, selecione TELNET e clique em Open.

PuTTY

Após a conexão, você terá uma tela de terminal onde pode rodar scripts em Python, editar, criar, renomear e excluir arquivos, etc.

Terminal PuTTY

Executando scripts em Python a partir do Arduino

Nesse primeiro exemplo vamos criar um program em Python que vai acionar alternadamente leds ligados às portas 6 e 7 do Galileo, e enviar para o serial monitor da IDE do Arduino as informações sobre o estado desses leds. O circuito é composto por 2 leds e 2 resistores de 330 ohms:

Circuito Galileo Python

Crie na raiz do cartão SD um arquivo chamado teste_galileo.py (tudo em minúsculas) e coloque dentro dele o código abaixo. Recomendamos utilizar o programa Notepad++, selecionando o caracter de fim de linha UNIX/OSX no menu EDIT => EOL Conversion:

#!/usr/bin/python
import sys
import time

def pins_export():
    pin1export = open("/sys/class/gpio/export","w")
    pin1export.write("21")
	        
    fp1 = open( "/sys/class/gpio/gpio21/direction", "w" )
    fp1.write( "out" )
    fp1.close()
	
    pin2export = open("/sys/class/gpio/export","w")
    pin1export.write("39")
	        
    fp3 = open( "/sys/class/gpio/gpio39/direction", "w" )
    fp3.write( "out" )
    fp3.close()

def write_led( value ):
    fp2 = open( "/sys/class/gpio/gpio21/value", "w" )
    fp2.write( str( value ) )
    fp2.close()
	
def write_led2( value ):
    fp4 = open( "/sys/class/gpio/gpio39/value", "w" )
    fp4.write( str( value ) )
    fp4.close()


pins_export()
while True:
    print "Led porta 6 ligado"
    write_led( 1 )
    time.sleep( 2 )
    print "Led Porta 6 desligado"
    write_led( 0 )
    time.sleep( 2 )
    print "Led porta 7 ligado"
    write_led2( 1 )
    time.sleep( 2 )
    print "Led Porta 7 desligado"
    write_led2( 0 )
    time.s

Vamos agora executar esse programa em Python à partir do Arduino, carregando este programa na IDE:

//Programa : Executando script Python pelo Arduino
//Autor : MakerHero

void setup()
{
  system("python /media/realroot/teste_galileo.py > /dev/ttyGS0");
}

void loop() 
{
  //Vazio
}

Esse programa envia um comando ao Linux para executar o programa teste_galileo.py, e enviar as mensagens para a serial, assim podemos visualizá-las no serial monitor:

Serial Monitor Teste Galileo

Podemos usar o system() também para efetuar a leitura de um arquivo texto gravado no cartão SD. Para isso, crie um arquivo texto qualquer na raiz do cartão, e carregue o seguinte programa no Arduino:

//Programa : Lendo arquivo texto do cartao SD
//Autor : MakerHero

void setup()
{
  system("cat /media/realroot/nome_do_arquivo_texto > /dev/ttyGS0");
}

void loop() 
{
  //Vazio
}

O princípio de funcionamento é o mesmo do programa anterior. Utilizamos o system() para executar o comando CAT do Unix (usado para exibir o conteúdo de arquivos), e enviamos o resultado para a serial.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

17 Comentários

  1. Olá amigo muito bom tutorial, tenho uma dúvida se quero controlar mais led que teria que modificar no código. muito obrigado

    1. Olá Manuel,

      Tente entender o código. Vou verá que existe uma certa repetição. pois estamos controlando dois LEDS. São essas linhas repetidas que você precisa usar novamente no código para adicionar mais LEDS.

      Abraço!
      Rosana – Equipe MakerHero

  2. Bom dia!
    Existe alguma forma de usar a função system e retornar este valor para uma variável no arduino? Por exemplo ler o número de série de um cartão SD. Pode ser qualquer exemplo que retorne o resultado do comando em linux para uma variável no arduino (Intel Galileo Gen 2)
    Obrigado

    1. Olá,

      Você já visitou nosso fórum?
      Postando seu problema no fórum, o pessoal pode te ajudar mais nisso 😀

      Abraço!
      Rosana – Equipe MakerHero

  3. Bom dia
    Ontem fiz o procedimento indicado neste passo a passo mas não apareceu nada no monitor serial. Será que é pq a Ide está enviando a informação para o linux gravado na placa do galileo e não para o cartão micro SD? Todos os processos funcionam a única coisa é que não aparece nada no monitor serial mesmo

  4. Olá muito boa a matéria.
    Fiz a instalação do linux pelo micro SD na placa do Galileo Gen 2, e gostaria de saber se existe a possibilidade de programar em C ao invés do Phyton. Se sim queria saber como encontro essa informação ou se vcs conseguiriam me passar essa informação. Preciso fazer um trabalho de faculdade onde preciso fazer uma programação concorrente no galileo gen 2. Como sou iniciante estou com um pouco de dificuldades.

  5. Bom dia, quando fecho o Putty perco a conexão com os leds, como resolver esse problema ?

  6. Olá, Boa tarde,

    Baixei o SD-Card linux image, porém ele não é reconhecido (sistema operacional Windows 10), o arquivo apenas será reconhecido em um sistema Linux? Quais outras alternativas?

    1. ops. pra acessar os arquivos só em alguma distribuição Linux mesmo.. ou no próprio Galileo usando um terminal como o Putty por exemplo.. via ssh… ou se tiver o cabo FTDI (Atenção ao modelo pois existe dois.. de diferentes níveis de tensão de trabalho, ver no manual ou no fórum da Intel) ..

      Usando comandos pelo terminal você acessa as pastas no Galileo .. faz downloads.. atualizações.. etc.. óbvio muita coisa é limitada..

    2. Caso tenha dificuldades com o download copia o arquivo binário que a compilação da IDE gera na pasta TEMP do seu sistema operacional e cola na pasta sketch.algumacoisa do seu Galileo e reinicia o mesmo que vai rodar o código.

  7. Olá, sei que o post já é antigo, mas recentemente estou trabalhando em um projeto com a gen2 e me deparei com uma pedra no caminho. Qual é o mapeamento das portas físicas para as portas gpio que escrevemos nos arquivos do Sysfs? Pesquisei em vários sites e no forum da intel, mas cada lugar tem uma tabela e nenhum que achei funcionava com o mapeamento que indicavam. O único que funcionou foi o exemplo daqui. Ficaria muito agradecido se o autor pudesse me indicar a referencia para o mapeamento usado no artigo. Desde já agradeço

  8. Comprei essa placa faz um bom tempo, ela tem um problema sério quando tentamos fazer um upload de um sketch qualquer.. “permission denied”.. “no such file or directory” ” timer out” etc…
    Até hoje a Intel (em seu fórum dedicado aos Makers) não foi capaz sequer de explicar a raiz do problema. A única solução quando trocar de porta USB não dá certo é reiniciar o PC oque torna uma tarefa muito chata a toda vez que precisamos descarregar um código, fora esse problemão, ainda temos diversas incompatibilidades com bibliotecas desenvolvidas para Arduíno AVR e Galileo possui um i586 soc 400MHz.
    Apenas indicam usar a versão 1.6.0 porém não soluciona esse problema de falhas em Uploads.
    Sensores de Ultra som, ou sensores que dependem de uma REF de tensão externa.. como o Acelerômetro MMA7361 costumam dar trabalho, usar o I2c também entre outras bibliotecas que precisam ser modificadas para que o código compile em Galileo.
    Quanto a usá-la para projetos de automação via rede até vale a pena, por ter uma porta ethernet já inclusa e um barramento mini PCi express se quiser utilizar um módulo WiFi (Ou qualquer outro mini PCi), no momento uso o N6235.
    Mais são tantas as dificuldades envolvidas com essa placa que usar um simples Arduíno se torna muito favorável, fora o suporte de uma vasta quantidade de Bibliotecas e fóruns dedicados pra Arduíno.
    Acho que essa placa nasceu morta assim como Intel Edison que apresenta problemas semelhantes infelizmente. Caso a Intel não resolva os problemas mais graves ou algum desenvolvedor voluntário, não vejo um futuro promissor para as placas da Intel com “Internet das coisas”.

  9. Eu conseguir fazer o boot pelo cartão SD corretamente, testando se um sketch padrão permanecia após desconetar a energia. Ao ligar a energia na placa o sketch funcionou certinho.

    Na instrução “Conecte um cabo de rede na porta Ethernet, abra a IDE e carregue o programa abaixo:” a outra ponta do cabo de rede deve estar conectada onde? Modem? Roteador? PC? Tentei todas as formas mas tudo o que consegui no terminal foram vários retângulos sem espaços. Achei que fosse um problema no baudrate mas está igual o da imagem do tutorial. O que estou fazendo de errado?

    1. Uma no Galileo e outra no seu PC, também deve conectar o cabo USB da mesma forma.
      Se você fez isso e não deu certo, pode ser que seu cabo de rede esteja danificado. Verifique também se seu cado está na configuração crossover ou direto.

  10. Olá, parabéns pela iniciativa.
    Sou inciante em trabalhar com o Galileo e tentei refazer o tutorial.
    No meu caso não deu certo a etapa de rodar o código em python, apesar que não entendi muito bem a parte “selecionando o caracter de fim de linha UNIX/OSX no menu EDIT => EOL Conversion:”
    No meu caso, apenas salvei o arquivo .py na raiz do cartão e continuei o tutorial. Será que foi este o problema?
    Outra dúvida, existe outra maneira de executar códigos em python no Galileo utilizando o windows?
    Aguardo.
    Abraço.

    1. Oi Ricardo,

      Pode ser que seja esse o problema. Essa seleção do caracter de fim de linha está no Notepad++, que você pode baixar neste link: https://notepad-plus-plus.org/

      Quanto ao Windows, não temos essa informações. Nos nossos testes utilizamos a imagem Linux para o Galileo.

      Abraço e obrigado !

      Adilson – Equipe MakerHero