Cesar Gimenes

Programação, Eletrônica, Golang, UNIX e muito mais papo nerd

Go transformando imagem PNG em código C

Já tem algum tempo eu estava desenvolvendo um projeto usando a DISCO-F746NG, uma placa bem interessante e com muitos recursos. Um dos recursos mais legais é o LCD-TFT com 4.3” e multi-touch. E a programação da placa é feita usando mbed que é um ambiente bastante bom apesar de eu torcer o nariz para ele. Apesar de muitas qualidades essa placa não tem recursos muito avançados para tratamento de imagem via hardware, para desenhar você simplesmente escreve na memória de vídeo… no bom e velho estilo dos anos 90 gravando pixel a pixel :D

Go com Intel Edison Lendo valor analógico

Este é mais um post da serie falando sobre Go com Intel Edison, e estou usando bastante do que já falei em outros posts como tratamento de sinais por exemplo. Para gerar o sinal analógico vamos usar um potenciômetro, ou melhor RAS, Rotary Angle Sensor :D. O estilo do código é muito parecido com o que fizemos para gerar sinais PWM, mas agora a operação é de leitura. Lendo valores analógicos com MRAA.

Go com Intel Edison controlando saída PWM

PWM ou Pulse Width Modulation tem uma gama enorme de aplicações, usamos para controlar servos, definir o brilho de LEDs, potência de motores, regular tenção, efeitos sonoros e por ai vai. PWD com MRAA Como de costume poderíamos ter chamado diretamente as funções da MRAA, mas daí o código fica muito mais confuso, uma pratica melhor é dividir o programa em múltiplos arquivos. Primeiro o cabeçalho pwm.h que vai ser usado para incluir as funções C no código Go.

Tratando sinais com Go

Tratar sinais é uma boa pratica, dessa forma você pode finalizar seu programa graciosamente, liberando recursos, fechando banco de dados, etc. muito melhor que simplesmente fechar o programa. E tratar sinais do sistema operacional com Go é muito simples porque basicamente o sistema vai jogar o sinal em uma canal e então precisamos apenas ficar escutando. Primeiro criamos um canal sc := make(chan os.Signal, 1) Daí informamos qual o tipo de sinal estamos interessados, no caso ^C ou seja SIGINT.

Go com Intel Edison lendo um botão.

Continuando com a diversão com o Intel Edison e a linguagem Go, esse é um pequeno exemplo de como ler o estado de um botão e usar esse estado para exibir uma mensagem na tela e para acender um LED. Para facilitar o entendimento vamos ver duas formas de implementação, uma com tudo em um único arquivo e outra com um código mais organizado. Primeiro exemplo Crie um arquivo com o nome button.

Usando diff e patch

Esses dois comandos são ferramentas extremamente úteis para o programador, com esses dois comandos fica fácil enviar patchs (remendos) de código para outros programadores sem precisar enviar o código todo. diff Digamos que você tem dois arquivos texto, um original e outro que é uma copia do original com alguma modificação. O comando diff procura por diferenças entre dois arquivos ou mesmo duas arvores de diretórios, a forma mais simples de usar esse comando é a seguinte:

Intel Bong com Edison

Eu quero emitir alertas sonoros no meu projeto de controle IoT e para isso eu precisava entender como a classe buzzer da biblioteca UPM funciona, dava para fazer tudo usando apenas a MRAA afinal é apenas um PWM em um terminal, mas vale a pena usar a UPM pois já vou usar para coisas mais pesadas como controle de periféricos i2c por exemplo. Outro motivo para esse pequeno tutorial é que a UPM tem vários recursos e bons exemplos mas não encontrei nenhum lugar explicando como compilar apenas usando os recursos do próprio Edison com uma simples linha de comando ou no máximo com um pequeno Makefile.

IPFS com Intel Edison

Faz tempo que estou querendo brincar com IPFS, a ideia é usar o Edison como um servidor interno para cache de recursos, experimentar e testar o protocolo. Para ter um pouco mais de espaço de armazenamento adicionei um sdcard que vou usar também para armazenar alguns outros recursos da rede de casa. Se você não sabe o que é e como funciona IPFS, de uma olhada no site oficial em https://ipfs.

SSH sem Senha

Acessar servidores via ssh usando um conjunto de chaves publica/privada é mais seguro e pratico principalmente alem de facilitar a automação de várias tarefas. Criando as chaves Primeiro crie as chaves com o seguinte comando: mkdir ~/.ssh ssh-keygen Você só precisa fazer isso uma vez na maquina cliente. Copiando a chave publica para o servidor É necessário copiar a chave que acabamos de gerar para o arquivo ~/.ssh/authorized_keys no servidor.

HTTPS com Golang no Linux

Gerando as chaves com letsencrypt.org Como eu mencionei no post sobre redirecionar tudo para HTTPS todas as comunicações entre cliente e servidor precisam ser criptografadas e com letsencrypt.org isso pode ser feito sem custo, com código aberto e muita documentação, o que no meu ponto de vista acaba com todas as desculpas para não usar HTTPS. Uma ressalva importante é que podem haver razões legais para preferir usar outra entidade certificadora, por exemplo se eu não estou enganado para ter valor legal no Brasil a entidade precisa ser brasileira.