Go com Intel Edison

Go com Intel Edison

Golang com Intel Edison

Como prometido no post sobre a construção do meu IoT home appliance, essa é a forma mais simples e segura de instalar Go no Edison.

A maioria dos tutoriais que encontrei na internet pedem para compilar Go, o que dá bastante trabalho e demora. Isso se você não esbarrar com alguma dependência como a versão do git por exemplo, ou então adicionar repositórios que muitas vezes estão desatualizados tornando o Yocto instável. É muito mais fácil você simplesmente fazer download da versão para 32 bits em golang.org

Preparando o Edison

Obviamente para seguir os passos nesse post seu Edison precisa estar configurado e conectado no seu wifi. Se você ainda não fez isso vale a pena passar pelo Guia de Iniciação da placa Intel® Edison e depois retomar os o tutorial.

Download

Na ultima vez que revisei esse post a ultima versão estável para 32 bits é a 1.7.1

Para baixar essa versão no próprio Edison basta abrir um terminal serial ou ssh e usar o bom e velho wget como no exemplo abaixo:

wget https://storage.googleapis.com/golang/go1.7.1.linux-386.tar.gz

Instalação

Para instalar basta descompactar o arquivo com o comando tar da seguinte maneira:

tar -zxvf go1.7.1.linux-386.tar.gz

Tudo que você precisa para rodar Go vai ser descompactado em um novo diretório no meu caso em /home/root/go eu preferi deixar no diretório home do root, mas uma boa pratica seria colocar mover esse diretório para /usr/local/go que é o diretório padrão para instalação.

Configurando

Agora precisamos configurar algumas variáveis de ambiente para isso vamos editar o arquivo .profile em /home/root e inserir as seguintes linhas:

export PATH=$PATH:~/go/bin
export GOROOT=~/go
export GOPATH=~/iot_home_appliance

A primeira linha coloca go/bin no PATH, para que os comandos fiquem acessíveis, a segunda linha avisa as ferramentas da linguagem que o diretório onde go esta instalado é /home/root/go e não o diretório padrão /usr/local/go e por ultimo avisamos adicionei o diretório do projeto do meu IoT home appliance na variável GOPATH, isso é importante porque é ai que Go vai gravar os pacotes usados nesse projeto entre outras coisas.

Testando

Pronto, teoricamente esta tudo preparado, mas vamos ter certeza com um pequeno teste… um clássico, o famoso hello world!

Crie um arquivo hello_world.go e preencha com o seguinte:

package main

import "fmt"

func main() {
    fmt.Printf("Hello world!\r\n")
}

Para testar execute o seguinte comando:

go run hello_world.go

Se tudo deu certo go já esta instalado e funcionando. É ótimo poder instalar um sistema tão poderoso simplesmente descompactando e ajustando algumas variáveis, mas pensando bem essa é a pegada do Go, tudo é feito para ser fácil.

Go com mraa

Agora vamos ver um exemplo um pouco mais complexo e interessante. Para poder usar as portas do Edison e outros recursos a forma mais fácil é pela biblioteca mraa. Vamos fazer um pequeno blink, afinal piscar um LED é o equivalente do hello world para eletrônica.

Para isso vamos criar um novo arquivo que eu chamei de blink.go e preencher com o codigo abaixo:

package main

/*
    #cgo LDFLAGS: -lmraa
    #include <mraa.h>

    mraa_gpio_context led;

    void config(void) {
        led = mraa_gpio_init(13);
        mraa_gpio_dir(led, MRAA_GPIO_OUT);
    }

    void blink(int b) {
        mraa_gpio_write(led,b);
    }

*/
import "C"

import (
    "fmt"
    "time"
)

func main() {
    C.config()
    for {
        fmt.Print("blink!\r\n")
        C.blink(1)
        time.Sleep(300 * time.Millisecond)
        C.blink(0)
        time.Sleep(300 * time.Millisecond)
    }
}

Nos poderíamos executar esse programa da mesma forma que o hello_world.go usando o comando go run hello_world.go mas nesse caso eu acho mais interessante compilar para termos um arquivo executável. Para isso execute o seguinte comando:

go build blink.go

E para executar basta chamar o aplicativo com o seguinte comando:

./blink

Como você pode ver para incluir código C dentro de um programa escrito em Go basta importar o pacote “C” e escrever seu codigo em C no comentário imediatamente acima da linha import “C” isso pode parecer estranho no começo mas é bem pratico e claro que é apenas um exemplo, o ideal em um programa mais complexo é manter apenas as configurações do compilador que no nosso exemplo é #cgo LDFLAGS: -lmraa e um include para uma biblioteca sua previamente preparada com apenas as funções C que você precisa usar.

Então para chamar as funções escritas em C de dentro do seu programa em Go basta simplesmente colocar um C. antes do nome da função.

Também é uma boa prática escrever o mínimo de código C possível e deixar o trabalho pesado para o lado do Go, dessa forma fica mais fácil de portar o código caso você queira e também mais fácil de manter.

Para facilitar o entendimento fiz um pequeno vídeo mostrando o básico da instalação:

Por enquanto é só, nos próximos posts vou começar a implementação do meu IoT home appliance para valer.


Um pequeno complemento, obviamente você pode substituir o LED no código por um buzzer e ter um apito intermitente ou pode substituir por um rele e controlar uma lâmpada por exemplo. Ou seja, apesar de piscar um LED ser algo muito básico da para fazer muita coisa com isso. Divirta-se!

comments powered by Disqus