Desenvolvimento

27 jun, 2017

Porque fazer o seu próprio gateway IoT com SoC?

Publicidade

Quando falamos de IoT, ou Internet das Coisas, já pensamos em que algo estará conectado à Internet. Essa “coisa” não necessariamente se conecta de forma direta, sendo, na grande maioria dos casos, por meio um gateway ou roteador.

O gateway é similar a um roteador, porém, ele pode unir redes de diferentes protocolos, através de um processamento local para a tradução e conversão de protocolos. Gateways são muito utilizados em ambiente industrial e corporativo, porém, com o avanço do IoT, está ficando mais comum encontrar esse tipo de equipamento para uso residencial.

Em IoT, é muito comum que o dispositivo opere com um protocolo ou mesmo um rádio diferente, sendo obrigatório o uso de algum tipo de gateway proprietário. Alguns sistemas operam com rádios diferentes do WiFi 802.11, com menor consumo de energia, tornando impossível o uso do roteador padrão para essa comunicação.

Esse cenário é o ideal para o uso de um gateway, porém esse tipo de equipamento normalmente é proprietário e não permite muitas customizações – o que é uma ótima desculpa para fazer o nosso próprio gateway!

Mas por que fazer um gateway de IoT?

Primeiramente, porque fazer é mais divertido do que comprar. Além do fato do aprendizado ser mais intenso dessa forma, botando a mão na massa!

A grande vantagem em fazer o seu próprio gateway, é o nível de customização que ele pode ter, já que temos total acesso ao sistema operacional, sem restrições impostas pelo fabricante – o que ocorre na maioria dos casos. Essa customização vai permitir usar o gateway em modo “fog computing” (computação em nevoeiro), para o processamento de informações o mais perto do dispositivo da borda, ou edge device, fazendo com que, mesmo na falta de Internet, o dispositivo consiga se manter operacional, ainda que com algumas restrições.

O lugar mais sensato para a implementação de fog computing é no gateway, já que pode comportar um poder de processamento superior aos dispositivos, permitindo armazenamento local de informações, pré-processamento dos dados coletados, atuação em tempo real, sem dependência de uma conexão ativa com a Internet.

Fazer o seu próprio gateway de IoT pode parecer loucura, mas com a baixa nos preços dos SoC’s (System-on-a-Chip), alavancado principalmente pela Raspberry Pi, torna possível a criação de sistemas computacionais de bom desempenho, tamanho reduzido e baixo custo. Já é possível encontrar SoC’s custando menos de US$ 10.

O SoC MT7688 e a Omega2

Um desses SoC’s é o MT7688 da MediaTek, que é um sistema com WiFi 802.11 e um processador MIPS a 580MHz e uma série de periféricos como porta Ethernet, USB 2.0, SPI, I2C, entre outros. O SoC MT7688 já equipa alguns roteadores comerciais no mercado, além de uma série de placas de desenvolvimento, como a Omega2 da Onion.io.

A Omega2 é um computador em módulo, similar a Raspberry Pi, porém com foco na construção de soluções IoT, custando entre US$ 5 a US$ 9, foi um projeto lançado pelo Kickstarter e alcançou a quantia de US$ 672 mil durante a campanha na primeira fase.

Rodando uma customização do Linux openWRT, a Omega2 se torna a solução ideal para a construção do gateway, já que o openWRT é uma das mais populares distribuições GNU/Linux para roteadores atualmente. O openWRT suporta uma vasta gama de arquiteturas de processadores, periféricos e linguagens de programação, entre elas Python, Lua, C/C++, shell script Erlang, Ruby e Perl.

Criando um gateway básico

A arquitetura básica do gateway terá a Omega2+ como CPU e o openWRT versão 15.05 “chaos calmer” como S.O. GNU/Linux. Para iniciar uma sessão do console na Omega2, devemos usar um cabo conversor serial para USB nos pinos 12 (TX) e 13 (RX) da Omega2 com a velocidade de 115200bps.

$ screen /dev/ttyUSBx 115200

Após o carregamento do sistema, o console será habilitado. Agora podemos iniciar a configuração básica do gateway, que receberá a conexão com a Internet pela interface WiFi em modo “station” e disponibilizará pela mesma interface, porém em modo “ap”. Para fazer essa “bridge” interna, devemos configurar a interface diretamente pelo arquivo de configuração.

# vi /etc/config/wireless

config wifi-device 'ra0'
    	option type 'ralink'
    	option mode '9'
    	option channel 'auto'
    	option txpower '100'
    	option ht '20'
    	option country 'BR'
    	option disabled '0'

config wifi-iface
    	option device 'ra0'
    	option network 'wlan'
    	option mode 'ap'
    	option encryption 'psk2'
    	option key 'senhameugateway'
    	option ApCliEnable '1'
    	option ApCliSsid 'ssid-da-sua-rede-wifi'
    	option ApCliAuthMode 'WPA2PSK'
    	option ApCliEncrypType 'AES'
    	option ApCliPassWord 'senha-da-sua-rede-wifi'
    	option ssid 'MeuGateway'

Altere as credenciais de acordo com a sua rede e escolha um nome e uma senha para a rede que será criada. O openWRT dispõe de uma outra forma de configurar esse arquivo: por meio do sistema “uci” Unified Configuration Interface. Definindo as configurações no arquivo configs, devemos agora modificar o arquivo networks, conforme o modelo.

# vi /etc/config/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 'fd1d:48c4:7633::/48'

config interface 'wlan'
    	option type 'bridge'
    	option ifname 'eth0.1'
    	option proto 'static'
    	option ipaddr '192.168.3.1'
    	option netmask '255.255.255.0'
    	option ip6assign '60'

config interface 'wan'
    	option ifname 'eth0.2'
    	option proto 'dhcp'

config interface 'wwan'
    	option ifname 'apcli0'
    	option proto 'dhcp'

Feitas as alterações nos dois arquivos, precisamos reiniciar a interface de rede wireless. Para isso, utilizamos o seguinte comando:

# ifup wlan

Agora a interface será reiniciada e temos um início de um projeto de gateway com o SoC MT7688! Para testar, conecte um dispositivo na rede criada, e certifique-se de que todos as configurações de SSID e senhas estejam corretas. Basta essas alterações e já podemos usar a Omega2 como um repetidor de rede WiFi, ou mesmo como uma segunda rede somente para IoT.

Temos, agora, todo o potencial de um sistema para dar início a criação de aplicações dentro do gateway, utilizando as linguagens de programação já mencionadas.