Quem acompanha o site sabe que o carro-chefe é o Arduino. Em segundo lugar - na nossa preferência - vem o Raspberry Pi. Mas isso não impede de trazermos para nossos leitores outras plataformas, que de uma forma ou de outra, acabam por trabalhar em conjunto com o Arduino e o Raspberry Pi.
Esse é o caso do projeto "OpenWRT - WR703N". que se trata de "embarcar" o Linux em um roteador 3g/wi-fi. Com isso queremos substituir os caríssimos shields 3g e wi-fi por um roteador que custa menos de R$ 50,00 (no Brasil compramos por R$65,00, com desconto). Como um bônus, ainda teremos uma porta usb e uma fonte de 1A/5V. A título de comparação: o shield 3G da Itead Studio custa US$ 65.00 ! O shield wi-fi do mesmo fornecedor custa US$ 34.50. Para o leitor atento, no próprio site da Itead Studio (http://imall.iteadstudio.com/catalogsearch/result/?q=wi-fi) está à venda, por US$ 22.00, o nosso recém-adquirido router. O frete custa US$ 7.29. E ainda há o risco da RFB taxar em 60%, assim é mais viável comprar no mercado local. Importante destacar que o WR703N não vem com o modem 3G, ele está apto para receber um dongle 3g. Até o momento não testamos essa funcionalidade.
A complexidade da instalação do Linux no roteador foge ao escopo do Solucionática. Há tantos sites que explicam melhor como instalar o OpenWRT (um Linux) no roteador WR703N, que foi o usado no nosso caso, que vamos nos deter em apresentar apenas alguns resultados. Para quem quer se adiantar, eis o link do tutorial que ensina a fazer a instalação: http://wiki.xinchejian.com/wiki/Install_OpenWRT_on_TPlink_WR703N. A instalação é fácil, o difícil vem depois.
Observem, primeiramente, se seu roteador tem mais do que 8M de memória flash. Essa informação, em geral, não vem explicitamente indicada na a embalagem, nem mesmo no manual do fabricante. Caso tenha 4M (não recomendamos instalar em roteadores com menos de 4M de memória flash) não instale os pacotes do GUI Luci - ou melhor, não instale nenhum pacote - pois vai dar problema por falta de memória. Nós, do Solucionática, instalamos alguns pacotes com muito sucesso; outros, nem tanto; e, alguns, deu tudo muito errado. E todo trabalho foi perdido.
Esse, infelizmente, é o nosso caso - temos apenas 4M de memória flash - e estamos trabalhando para aumentar a memória por meio de um pendrive, sem sucesso até agora, justamente porque não conseguimos instalar alguns pacotes. Na foto abaixo,retirada do site Itead Studio, vemos o modelo desenvolvido apenas para o mercado chinês, tanto é assim que o GUI Web (a interface gráfica do usuário, aquela que é acessada pelo endereço 192.168.X.X) é toda em chinês! Felizmente, no tutorial as dicas levam em conta que ninguém é obrigado a saber ler chinês.
Mas, já está na hora de explicar o que queremos fazer com essa modificação do roteador: queremos que o Arduino ou Raspberry Pi acessem a internet - via porta ethernet - por meio desse roteador. O roteador, por sua vez, recebe o sinal da internet via wi-fi. Simples? Falar é fácil, fazer funcionar é que é difícil. Mas, se nós conseguimos, vocês também conseguirão!
Após seguir o tutorial e ter instalado corretamente o novo firmware, chegamos no feliz momento em que acessamos o nosso router via telnet (telnet 192.168.1.1). Opa, aqui no Solucionática nós usamos quase o tempo todo Linux Ubuntu 12.04 LTS. Mas, para os usuários do Windows, o acesso pode ser feito por meio do programa (.exe) PuTty, que é gratuito e pode ser baixado do site do desenvolvedor (www.putty.com). Quem usa Android, pode acessar o roteador por meio do app Juice (recomendamos). Aos usuários de iOS, vamos ficar devendo uma recomendação, mas qualquer app gratuito dá conta do recado, como por exemplo o Mocha (para o Telnet) e o SSH Terminal (para o SSH).
Segue abaixo um pequeno FAQ, para dar início aos trabalhos:
1. Telnet X SSH?
O roteador após a troca de firmware só pode ser acessado via telnet (telnet 192.168.1.1). Após a troca de senha (comando passwd, no shell do Linux) o telnet é bloqueado e só se pode voltar a acessar o roteador via ssh.
2. Quais pacotes posso instalar?
Via de regra, todos. Mas você corre um grande risco de receber a mensagem "o dispositivo está sem memória livre" e em alguns casos trava tudo e aí só vai acessando em "fail mode". Isso se aplica, principalmente, ao WR703N que só tem 4M de memória flash.
3. Ok. Consegui mudar a senha, e agora?
Que bom que conseguiu, mas antes de reinicializar (reboot) o roteador, é preciso configurar os seguintes arquivos texto: wireless, network e firewall.
4. Como listo os arquivos e diretórios? Como faço para mudar de diretório?
Os comandos são, respectivamente, ls e cd ....Por exemplo, para acessar os arquivos de configuração (config) basta digitar cd /etc/config.
5. Certo, consegui mudar o diretório (cd) e listar (ls) os arquivos. Como faço para editar os arquivos?
Excelente questão. Para isso vamos digitar ># vi nomedoarquivo. O editor de texto é pouco amigável, não custa nada googlar por aí e aprender os comandos.
Para a nossa tarefa vamos usar os seguintes: i - para entrar no modo de edição; esc - para saír do modo de edição; : (isso mesmo dois pontos) - para entrar no modo de comando; wq - para salvar e sair do editor de texto. Muito cuidado ao modificar o arquivo firewall, pois é o maior dos que vamos trabalhar, e pode ocorrer a sobreposição de caracteres. Caso isso ocorra e você esteja preocupado de ter modificado algo sem querer, ao invés do comando wq basta usar o q!, que sai do editor sem salvar as modificações.
Espero que até agora as dúvidas tenham sido sanadas, para que tenhamos espaço para novas dúvidas. Bem, vamos - finalmente - entrar na parte mais técnica e interessante do projeto. A configuração!
Depois de pesquisar em uma infinidade de sites e blogs pela internet toda, localizamos um que resolveu nosso problema. Quem quiser ir conferir é só clicar aqui
Acessando o roteador
Após a instalação do firmware no roteador, o acesso a ele passa a ser feito excusivamente via SSH (Secure Shell). O referido protocolo tem a seguinte estrutura:
ssh login@ip_do_roteador
No nosso caso, usando o Xterm do Linux, ou o PuTTY no Windows, devemos digitar no prompt:
$ ssh root@192.168.25.38 // não é necessário entrar como root no roteador, porém para as nossas necessidades vamos com todos os privilégios.
Em resposta, podemos ter as seguinte tela, onde vemos que é necessário prosseguir com a tentativa de conexão, mesmo com a advertência relativas às chaves criptográficas (RSA). Outras vezes, é preciso gerar novamente as chaves no micro ou laptop em que se quer estabelecer a conexão. A falha de segurança é relativamente simples de resolver e são autoexplicativas, quer dizer, no próprio texto do erro há a solução para o problema.
Observem e o firmware instalado é o BusyBox, versão 1.19.4. Como nosso roteador tem pouca memória, seremos muito econômicos nas instalações de pacotes, pois caso ultrapassemos a quantidade disponível de memória, o resultado é um crash definitivo, ou seja, tem que reinstalar tudo do zero!
Vamos avançar um pouco, supondo que essas etapas iniciais correram tudo bem, o que nem sempre ocorre, mas não desanimem, pois o resultado compensa.
Assim, vamos saber o que podemos fazer com nosso roteador, que agora se transformará em um acesso de internet wi-fi -> Ethernet, ou seja, quando conectamos o Raspberry Pi na porta ethernet do roteador, passamos a ter acesso à rede (WAN e LAN) e à internet. Com isso economizamos alguns bons reais.
Eis os arquivos que devemos modificar : etc/config/wireles - etc/config/network - etc/config/firewall
WIRELESS
config wifi-device 'radio0' option type 'mac80211' option macaddr '14:e6:e4:e3:a5:4a' option hwmode '11ng' option htmode 'HT20' list ht_capab 'SHORT-GI-20' list ht_capab 'SHORT-GI-40' list ht_capab 'RX-STBC1' list ht_capab 'DSSS_CCK-40'
#REMOVA ESTA LINHA PARA HABILITAR O WIFI
# option disabled '1' config wifi-iface option ssid 'YOUR_SSID' option encryption 'psk2' option device 'radio0' option mode 'sta' option network 'wwan' option key 'YOUR_PW'
NETWORK
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fdxx:xxxx:xxxx::/48'
config interface 'lan'
option ifname 'eth0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
config interface 'wan'
option proto 'dhcp'
O link de referência foi este: https://gist.github.com/unixdj/5969578
Cada uma das linhas dos dois arquivos de configuração tem muita importância e cada uma delas podem ser bem explicadas, mas o texto vai ficar mais pesado ainda. Em resumo, as configurações acima, permitem que todo o tráfego de rede flua da interface wireless do roteador, denominada wan, pois foi assim criada ao segui o tutorial apresentado no início da nossa página. Desse modo, o Arduino que tenha uma interface ethernet acoplada, pode se comunicar sem fio, com a rede local (wlan) de sua casa, ou de qualquer outro lugar, bastando para isso modificar esse trecho
config wifi-iface option ssid 'YOUR_SSID' option encryption 'psk2' option device 'radio0' option mode 'sta' option network 'wwan' option key 'YOUR_PW'
Como se percebe, as modificações não são tão complicadas, bastando editar os arquivos mencionados. É claro, que tudo pode sair fora do nosso controle, como por exemplo, a configuração de sua rede local sem fio, por exemplo, não está de acordo com a do arquivo. Ou o seu recém transformado roteador pode não suportar determinada funcionalidade, como por exemplo a criptografia PSK2. Nesse caso, deve-se atualizar o Linux (opkg update) e instalar o pacote adequado, que no caso do nosso WR703N é referenciado por Atheros ou mac80211, pois são equipados com chip wifi compatíveis. Para muito mais explicações consulte as wiki pages do OpenWRT. Em relação à criptografia, a página é essa: http://wiki.openwrt.org/doc/uci/wireless/encryption.
Resolvido, assim espero, o maior problema de configuração do roteador, podemos finalmente passar para as aplicações, que - afinal
- é o objetivo desse tópico.
A primeira aplicação é : conectar o roteador a um Raspberry Pi, que por sua vez, está conectado a um Arduino. A ideia é acessar o Arduino por qualquer terminal (micro, laptop, tablet, smartphone etc) conectado na mesma rede local. Para isso, vamos primeiramente acessar o roteador, via ssh. Em seguida, vamos acessar o Raspberry Pi também via ssh! Em seguida, habilitamos a conexão VNC e executamos o ambiente desktop remoto X11. Como fazer isso está explicado nesse link: http://www.neil-black.co.uk/raspberry-pi-beginners-guide#.UzD3KKE24UQ.
Observe que nós podemos considerar o roteador como um micro ou notebook com uma versão do Linux instalada. Ao acessá-lo remotamente, podemos executar os comandos no Raspberry Pi diretamente e assim acessar todos os programas instalados no Raspberry Pi, inclusi a IDE do Arduino! Logo, podemos carregar sketches no Arduino via usb e receber dados vindos do Arduino, por esta mesma usb. Pronto! Temos um sistema de automação ou aquisição de dados (ou ambos), sem fio, com OTA (Over The Air). São inúmeras as possiblidades: podemos programar e executar programas em Python no Rasp, que interagem com o Arduino e ter um script, rodando no roteador, que pode estabelecer automaticamente uma outra conexão ssh com um servidor localizado em qualquer parte do mundo. Nossas aplicações, podem ser acessadas da internet, de fora de nossas casas, por meio de um smartphone ou tablet, tudo isso por menos de R$200,00.
Mas há um pulo do gato. ATENÇÃO: é preciso alterar um arquivo de configuração do Raspberry Pi, para programar o ipaddr = 192.168.1.2 (obedecendo a faixa de ip da topologia de rede que se tem). Desse modo, o comando remoto de acesso ao Raspberry Pi é ssh pi@192.168.1.2. Outro aspecto interessante é sobre a alimentação. A fonte do roteador é de 1A/5V. Trocando por outra de 2A/5V é possível alimentar os três módulos (Roteador, Raspberry Pi e Arduino) com uma única fonte. Para isso, é necessário um cabo USB/mini-usb para alimentar o Rasp pela porta usb do roteador; e um cabo USB tipo B, para alimentar o Arduino por uma das portas do Rasp.
Link de referência: http://myraspberrypiexperience.blogspot.com.br/p/setting-up-vnc.html
OUTRAS APLICAÇÕES
Uma das inúmeras possibilidades é programar o roteador para efetuar algumas tarefas automaticamente, na inicialização, ou manualmente rodando scripts que foram salvos usando o editor de texto (vi).
EXEMPLOS ("HELLO WORLD")
Vamos executar os seguintes scripts: inicio, ledon e strobo. Para listar os arquivos, usamos o comando ls. Para saber os processos que estão rodando usamos ps ou top; para executar um script usamos sh nome_do_script, por exemplo >$ sh inicio.
Referência: http://www.busybox.net/downloads/BusyBox.html.
SOCAT
De dentro da WLAN é possível conectar via SSH ao WR703N e com o comando:
#socat - TCP:192.168.1.x:80, onde x é o IP obtido pelo cliente (no caso o W5100) via DHCP. Para saber qual é esse ip basta usar o comando:
root@OpenWrt:~# arp -n
IP address HW type Flags HW address Mask Device
192.168.25.33 0x1 0x2 40:b0:fa:c5:1b:2b * wlan0
192.168.25.1 0x1 0x2 6c:2e:85:f2:07:af * wlan0
192.168.25.31 0x1 0x2 00:1e:58:45:05:eb * wlan0
192.168.1.237 0x1 0x2 de:ad:be:ef:fe:ed * br-lan
No nosso caso particular x=237.
Assim, prosseguimos com o comando:
root@OpenWrt:~# socat - TCP:192.168.1.237:80
446
HTTP/1.1 200 OK
Content-Type: text/html
Ligando led 4
<br>Ligando led 4
<br>Ligando led 6
<br>344
Ligando led 3
<br>Ligando led 4
<br>Ligando led 4
Obs: Só é possível uma única conexão por vez. Ou seja, apenas uma máquina poderá controlar os leds enquanto o direcionamento porta 80 --> ip: 192.168.1.237:80 estiver ativa. Para derrubar essa conexão basta dar ctrl+C.
Links úteis:
http://www.dest-unreach.org/socat/doc/socat-addresschain.html
https://0xtux.wordpress.com/2013/02/25/portforwarding-von-ipv6-auf-ipv4/
http://dsc.juliano.com.br/howto/default.htm
IMPORTANTE: http://slopjong.de/2014/08/27/create-virtual-network-devices-on-a-vps/