Usando Wifi com a placa WedMos D1

Olá a todos

Nesse post mostraremos a placa WebMos D1, que é uma placa compatível com o padrão Arduino, mas possuí um chip ESP8266 no lugar do Atmel. A placa possuí uma pinagem semelhante à do Arduino Uno, porém apresenta apenas um pino analógico. Em contrapartida a D1 por utilizar o ESP8266 já possuí uma placa de Wifi, dispensando o uso de placa externas ou Shields. 

Placa WebMos D1
Placa WebMos D1

Para utilizar essa placa no IDE do Arduino devemos antes instalar os arquivos da placa. O primeiro passo é configurarmos o IDE para que ele possa baixar esses arquivos. Para isso vá no menu File, submenu Preferences. Será aberta uma tela de configuração do IDE. No campo Additional Boards Manager URLs informe o endereço em que o IDE pode baixar os arquivos da D1: http://arduino.esp8266.com/stable/package_esp8266com_index.json. Em seguida clique em OK. Para finalizar feche todas as telas do IDE e abra-o novamente.

Configurando o IDE
Configurando o IDE

Para instalar os arquivos da placa, vá no Tools, submenu Board e escolha o item Board Manager. Será aberta uma tela para instalação de arquivos de diversos modelos de placa compatíveis com Arduino. Role a lista até localizar o item esp8266 by ESP8266 Community, selecione esse item e clique no botão Install. Após instalar os arquivos da placa reinicie novamente o IDE.

Instalando os arquivos da placa
Instalando os arquivos da placa

Com o IDE configurado, passaremos para o uso. Conecte a placa ao computador utilizando a porta USB e aguarde ele ser reconhecido. Em seguida vá no menu Tools, Board e selecione o item WebMos D1 R2 & mini.

Passaremos agora para o desenvolvimento de um código que utilize uma conexão Wifi, que é o grande diferencial dessa placa. O primeiro passo é incluirmos os arquivos que contém os objetos para controlarmos a D1, esses dois arquivos são ESP8266Wifi.h e ESP8266HTTPClient.h. Em seguida declare dois arrays do tipo char que armazenam o nome da rede Wifi e a senha de acesso à ela:

Adicionando os header
Adicionando os header

Em seguida crie uma função chamada setup_wifi com o código abaixo. Esse código exibe o nome da rede Wifi e solicita a conexão através do método begin do objeto Wifi. Em seguida é aguardado que a conexão seja estabelecida para em seguida imprimir o endereço IP que foi atribuído à placa, confirmando que a conexão está ok.

Função setup_wifi
Função setup_wifi

Na função setup, configure a porta serial para a velocidade de 9600bps e chame a função setup_wifi:

Função Setup
Função Setup

Passaremos agora para a função loop, que fará uma requisição HTTP. Primeiro confirme que a conexão Wifi continue ative e caso contrário execute novamente a função wifi_setup.

Com a conexão ativa, crie um objeto do tipo HttpClient e configure o endereço da requisição através do método Begin desse objeto. Para executar a requisição e obter o código de retorno utilize o método GET.

Por fim o código verifica o resultado da requisição e escreve na porta serial o conteúdo da resposta da requisição. Caso a requisição tenha falhado o código exibe o erro.

Por fim chame a função end do objeto HttpClient para encerrar essa requisição e utilize a função delay para aguardar algum tempo, no exemplo utilizei 10 segundos.

Função Loop
Função Loop

Por fim compile o programa e transfira para a placa. Note que a compilação para essas placa leva mais tempo que para um Arduino Uno ou Nano. Após transferido o programa abra o monitor serial e verifique a execução do programa.

Obrigado a todos e até o próximo post!

Onde encontrar:

Acessando a internet com o Arduino

Olá a todos,

Nesse post mostraremos como colocar o Arduino na nossa rede local para acessar servidores nela ou mesmo na internet através do Shield Ethernet. Nesse exemplo acessaremos o Google solicitando sua página inicial.

Note que neste Shield temos também um conector para cartões micro SD, logo podemos utilizá-lo para armazenar ou ler dados desse tipo de cartão de memória.

Shield Ethernet
Shield Ethernet

Para utilizarmos o Shield o primeiro passo é conectá-lo ao Arduino através dos seus pinos inferiores. Para isso encaixe o Shield em cima do Arduino com cuidado para não entortar nenhum pino do Shield.

Shield montado
Shield montado

O próximo passo é determinar um MAC Address, que é um identificador de placas de rede de computadores, e o endereço IP que o Shield terá na rede local. Você pode utilizar um MAC Address qualquer, desde que não esteja em uso por outro equipamento na mesma rede. Para verificar se o MAC Address escolhido não está em uso consulte a tabela de conexões ativas de seu roteador. O MAC Address deve possuir o formato de 6 blocos de números onde cada número é composto de 2 algarismos hexadeciamais. Um exemplo é: 00 AA BB CC DE 02.

Para testar o Shield com o MAC Address escolhido abra o arquivo de exemplo que acompanha o IDE do Arduino chamado DhcpAddressPrinter. Altere o MAC Address que está no início do código e execute o programa. Se tudo estiver correto será impresso o endereço IP que o roteador atribuiu para a placa:

Declaração dos objetos
Declaração dos objetos
Recuperando IP da placa
Recuperando IP da placa

Agora passaremos para o código que fará a requisição e mostrará o resultado. Primeiro inclua os arquivos SPI.h e Ethernet.h ao código através da função #include. Em seguida declare o MAC Address e o endereço IP que serão utilizados.

O MAC Address é representado por um array de bytes e o endereço IP é representado por um objeto do tipo IPAddress. Os parâmetros de construção do objeto IPAddress são os octetos do endereço IP separados por virgula.

Declaração dos objetos
Declaração dos objetos

Para realizarmos a conexão utilizaremos o objeto EthernetClient. Declare esse objeto no código e também um array de bytes que deverá conter o endereço IP do servidor para o qual faremos a requisição, no nosso caso o Google. Para obter esse endereço abra uma janela do prompt do Windows ou um Terminal Linux e execute o comando ping <endereço>. O Esse comando retornará o endereço IP do servidor.

Declaração dos objetos de conexão
Declaração dos objetos de conexão

Agora passaremos para o desenvolvimento da função setup. O primeiro passo é configurarmos o Shield através do objeto EthernetClient e a porta serial com o uso do objeto Serial.

Após essas configurações podemos realizar a conexão com o servidor através do método connect do objeto EthernetClient. Esse método recebe o array de bytes com o endereço IP do servidor e a porta que utilizaremos para conectar ao servidor. Com a conexão ativa podemos enviar o corpo da nossa requisição, nesse caso montamos uma requisição HTTP do tipo GET que retorna a página inicial do Google.

Função Setup
Função Setup

Na função loop faremos a leitura da resposta. Utilizamos o método available para verificar se há conteúdo para ser lido e o método read para ler esse conteúdo, semelhante ao objeto que controla a porta serial. Nessa função também verificamos se a conexão ainda está ativa e caso contrário congelamos o programa.

 

Função loop
Função loop

Compile o programa e transfira para a placa para iniciar a execução. Abra o terminal serial e acompanhe a execução do programa e veja ocorrer tanto a requisição como a leitura ds resposta.

Onde encontrar:

 

Obrigado a todos e até o próximo post!

Utilizando Node.JS na Intel Galileo Gen2

Olá a todos,

nesse post demonstraremos como podemo desenvolver aplicações WEB, utilizando Node .JS com a nossa placa Intel Galileo Gen2. Dessa forma poderemos transformar nossa placa em um servidor WEB que poderá ser acessado na nossa rede local ou mesmo na internet, se atribuirmos um IP de internet à nossa placa.

Antes de escrevermos nossos códigos em C++ no Eclipse precisamos colocar nossa placa na rede. As instruções para essa tarefa estão nos posts Conectando a Intel Galileo Gen2 na rede local e Conectando a Intel Galileo Gen2 na rede WiFi.

Com a Intel Galileo na nossa rede o próximo passo é instalar serviço de impressão Bonjour da Apple (apenas para computadores com Windows). Esse serviço é necessário para que o XDK IoT Edition reconheça sua placa na rede. Para instalar esse serviço baixe o instalador no site da Apple.

O passo seguinte é instalar o Intel XDK IoT Edition que é o IDE para escrevermos nossos programas em Noje.JS. Faça o download do instalador no link https://software.intel.com/en-us/articles/install-the-intel-xdk-iot-edition. O instalador deve ser executado com permissão de administrador (clique com o botão direito do mouse sobre o arquivo e selecione a opção Executar como Administrador). Será aberta a tela do instalador do XDK IoT Edition. Siga as instruções do instalador.

Nesse momento teremos o ambiente pronto, precisamos então realizar um pequeno teste para validar a montagem do ambiente.

Primeiro monte o circuito conforme descrito no esquema abaixo. Esse circuito é semelhantes ao circuito montado para testarmos o envio de sinais digitais em um post sobre Arduino.

Esquema do circuito utilizado no post
Esquema do circuito utilizado no post
Mdelo do circuito utilizado no post
Mdelo do circuito utilizado no post

Após a instalação execute o IDE. Na primeira execução deverá aparecer uma mensagem solicitando a liberação no firewall do Windows para o IDE acessar a internet. Clique no botão Allow Access.

Em seguida será aberta a tela inicial do IDE, solicitando o login ou que seja criada uma conta no ambiente da Intel. Após criar sua credencial ou realizar o login deverá aparecer a tela principal do XDK IoT Edition. Selecione a opção Start a New Project para iniciar um novo projeto.

Será aberta a tela para selecionarmos um template de projeto. Selecione o template Simple Web Server e clique no botão Continue. Na tela seguinte preencha o campo Project Name com o nome do projeto.

Iniciando um novo projeto.
Iniciando um novo projeto.

Depois de criado o projeto abra o arquivo package.json para incluirmos alguns módulos no projeto. No trecho dependencies inclua os módulos express e body-parser como na imagem abaixo. Esses módulos facilitam o desenvolvimento de aplicações web em Noje.JS como veremos a seguir.

Arquivo JSON de configuração do projeto
Arquivo JSON de configuração do projeto

O próximo passo é editarmos o arquivo main.js, que possuí o código da nossa aplicação. Ao abrir o arquivo remova todo o seu conteúdo. Em seguida inicie os módulos express, body-parser, util e mraa conforme a imagem abaixo:

Código Node. JS
Código Node. JS

O próximo passo é declaramos e iniciarmos as variáveis que controlarão os valores dos pinos que estão ligados aos leds conforme o trecho abaixo:

Declaração das variáveis
Declaração das variáveis

Em seguida declare uma função que controlará os valores dos pinos e escreverá o código HTML para ser exibido no navegador:

Código do projeto
Código do projeto

Agora escreva as funções para o webserver processar as requisições do tipo GET e POST e retornar a página HTML. A requisição do tipo GET coloca todos os pinos em estado baixo (LOW) e retorna a página com as caixas de seleção como não selecionadas. As requisições do tipo POST alteram os valores do pino e informam o valor selecionando a caixa quando o estado for HIGH ou não a caixa de seleção quando o valor for LOW:

Funções GET e POST
Funções GET e POST

Para encerar o código inicie o webserver com o método listen. Esse método recebe como parâmetro a porta em que o webserver está recebendo as requisições:

Inicialização do webserver
Inicialização do webserver

Com o programa pronto devemos configurar a conexão com a nossa placa. Na parte inferior do IDE selecione a opção [+] Add Manual Connection no campo IoT Device. Será aberta a janela de configuração de conexão. Informe o endereço IP da placa, mantenha os demais valores e clique no botão Connect.

Com a conexão configurada clique no botão Install/Build (ícone com um martelo) para baixar e instalar os módulos express e body-parser. Em seguida clique no botão Upload (ícone com uma caixa e uma seta, localizado a esquerda do botão Install/Build) para transferir o programa para a placa. O último passo é clicar no botão Run (ícone com um fluxograma e uma seta verde) para iniciar o programa.

Com o programa iniciado abra um navegador de internet e digite o endereço HTTP://<endereço IP>:<porta>, onde o endereço IP é o endereço IP da placa e a porta é a placa do WebServer que foi passada como parâmetro no método listen. Deverá ser exibida no navegador a página da nossa aplicação:

Aplicação em execução
Aplicação em execução

Selecione alguma das caixas de seleção e clique no botão Submit Query. Os valores das caixas serão enviados para a Intel Galileo Gen2 que alterará os valores do pino e mostrará o novo estado dos leds na tela.

Também é possível depurarmos os programas em Node.JS. Para iniciar um programa em modo depuração clique no botão Debug, que possuí o desenho da barata com o triangulo que fica no lado direito do botão Run. Será aberta a tela de debug.

Podemos adicionar breakpoints clicando no número da linha do código. Para iniciar a aplicação clique no botão com o símbolo Play azul localizado na parte superior direita da tela. Aguarde a aplicação iniciar e acesse o mesmo endereço utilizado anteriormente.

Nesse ponto temos uma aplicação web que poderá ser utilizada em nossa rede local ou através da internet caso seja configurado um endereço IP público para a nossa placa.

Onde encontrar:

Obrigado a todos e até o próximo post!

 

Escrevendo código em C++ para Intel Galileo Gen2

Olá a todos,

nesse post mostraremos como configurar o nosso ambiente, composto do nosso computador e da placa conectados via rede, para desenvolvermos softwares em C++ para nossos projetos. Para esse desenvolvimento utilizaremos uma versão especial do Eclipse provido pela Intel.

Antes de escrevermos nossos códigos em C++ no Eclipse precisamos colocar nossa placa na rede. As instruções para essa tarefa estão nos posts Conectando a Intel Galileo Gen2 na rede local e Conectando a Intel Galileo Gen2 na rede WiFi.

Você também precisa verificar se possui o Java 8 instalado em seu computador. Os instaladores do Java podem ser encontrados aqui.

Após colocar a placa na rede precisamos instalar o eclipse. Para isso baixe o eclipse do site da Intel a partir do link https://software.intel.com/en-us/installing-the-eclipse-ide. Você precisará utilizar o 7ZIP para descompactar o arquivo.

Tenha certeza que o caminho completo do Eclipse, que são os nomes de todas as pastas onde o arquivo foi descompactado, não possua o caractere espaço em branco, pois isso poderá fará aparecer uma mensagem de erro ao iniciar.

Após extrair o conteúdo do arquivo entre na pasta iotdk-ide-win e localize o arquivo devkit-launcher.bat. Dê um duplo clique nesse arquivo para iniciar o com todas as configurações necessárias para desenvolvermos nossos programas para a Intel Galileo Gen2, inclusive com o suporte às bibliotecas libmraa e upm.

Na primeira execução pode aparecer a mensagem abaixo solicitando a atualização das bibliotecas MRAA e UPM. Clique no botão Yes e aguarde o término da atualização.

Mensagem de atualizaçao das bibliotecas
Mensagem de atualizaçao das bibliotecas

Na sequência será aberta a janela para selecionar a pasta da workspace, que é o local onde os projetos serão armazenados. Selecionado o local da worskspace do Eclipse será aberta sua janela inicial:

Tela inicial do eclipse
Tela inicial do eclipse

Para iniciar o projeto monte o mesmo circuito descrito no post sobre como controlar motor DC com o Arduino.

Passaremos agora para o desenvolvimento do código. Inicie o projeto selecionando o menu File -> New -> Intel(R) IoT C/C++ Project. Será aberta uma janela que contém diversos modelos de projetos. Os modelos da pasta Grove Starter Kit possuem códigos de exemplo para trabalharmos com os pinos da Intel Galileo Gen2 e podem nos ajudar a migrar um projeto em sketch para código C++. Selecione o modelo PWM, pulse with modulation e informe um nome para o projeto no campo Project Name, que está na parte superior da janela. Em seguida clique no botão Next.

Criando o projeto
Criando o projeto

Será aberta a janela para configurar a conexão com a placa Intel Galileo Gen2. Clique no botão Search Target para abrir a janela onde você deverá informar o nome e endereço IP da placa. Nessa janela informe um nome para a conexão no campo Enter connection name e o endereço IP da placa no campo Enter Target name or IP address. Em seguida clique em OK, retornando para a janela anterior e clique no botão Finish. Aguarde o modelo do projeto ficar pronto.

Código no Eclipse
Código no Eclipse

Vamos examinar o código da função main. Primeiro é identificado se o código é executado em uma placa Intel (Galileo Gen1, Galileo Gen2 ou Edison) com o uso da função mraa_get_platform_type. Essa função retorna qual o modelo de placa em que o código está em execução.

Em seguida é criado um ponteiro para um objeto do tipo Pwm e esse objeto é criado. Note que no construtor do objeto é informado qual pino será utilizado, portanto troque o valor de 6 para um dos pinos que o LM293D está conectado na Intel Galileo Gen2.

Após a inicialização do PWM são declaradas duas variáveis para controlar o PWM: a porcentagem de tempo que o sinal ficará em HIGH (duty_cycle) e o período de pulso do PWM (period).

Com as configurações realizadas um laço do tipo FOR é executado infinitas vezes. Nesse laço o PWM é acionado e o código aguarda por 5 segundos. Após esse período é altera a porcentagem de tempo que o sinal fica em HIGH.

Note que a variável duty_cycle é iniciada com zero, o que deixa o motor em estado de repouso. Durante a execução do laço FOR esse valor é incrementado fazendo o motor acelerar. Ao chegar ao valor máximo o motor é desligado na próxima execução do laço e o ciclo se inicia novamente.

Para iniciar o debug do programa clique com o botão direito do mouse sobre o nome do projeto na janela Project Explorer do Eclipse e selecione a opção Debug As -> IoT Eclipse Developer Kit. Será aberta uma janela solicitando a credencial para conexão com a placa. Deixe o campo User ID com o valor root e o campo Password em branco e clique no botão OK. Será iniciada a compilação, transferência do programa para placa e execução do programa.

O motor deverá iniciar o programa em repouso e acelerar até o máximo para em seguida parar novamente. Para encerrar o programa selecione o menu Run -> Terminate.

Encerrando a execução do código
Encerrando a execução do código

Nesse ponto montamos nosso ambiente para desenvolvimento em C++ e validamos esse ambiente com a execução de um programa de teste. Mais informações sobre o uso do Eclipse pode ser encontrada na documentação do IDE, além de tutoriais disponíveis na internet. Também encontramos diversos tutoriais das linguagens C e C++ na internet.

Onde encontrar:

Obrigado a todos e até o próximo post!