IoT ou IdC Internet das Coisas

IdC será o acrónimo em língua portuguesa, pouco usado.

IoT (Internet of things), Internet das Coisas, engloba todos os equipamentos ligados de forma permanente à Internet com capacidade de se identificar e de comunicar entre si. O seu estado(ligado/desligado) pode ser alterado por comandos de rede executados por pessoas ou sem o envolvimento ativo do ser humanos onde sensores ou condições programáveis atuam e alteram o seu estado. Alguns destes dispositivos têm capacidade para recolher informação sobre o ambiente que os envolve(medir temperatura, humidade, distância etc etc).
A Internet Society define IoT como "uma extensão da conetividade de rede e capacidade de computação para objetos, dispositivos, sensores e outros artefactos que, normalmente, não são considerados computadores". Será, por isso, uma rede de "coisas" interligadas entre si capazes de reunir, guardar e transmitir informação. Este conceito foi proposto em 1999 por Kevin Ashton no Laboratório de Auto-ID do MIT.

IPV4

blocos ipv4

A Internet usa como forma de identificação de cada ponto de acesso o IP(Internet Protocol) que atribui, na sua primeira versão, um IP(IPV4) a cada "coisa" ligada na rede, este ip é composto por 4 grupos que números entre 0 e 255(1 Byte), pode por isso abranger, desde 0.0.0.0 a 255.255.255.255, qualquer coisa como 4 294 967 296. Já em 1993 se previa o esgotamento da gama na versão 4. As previsões iniciais de rápida alocação de todos os ips, acabaram por não acontecer devido à utilização de tecnologias que mitigam e possibilitam a utilização mais inteligente das gamas.

  • CIDR- permite atribuir blocos de endereços com tamanho arbitrário;
  • NAT- especifica os endereços privados, não válidos na Internet, nas redes empresariais ou "home". O NAT permite que, com um endereço válido apenas, toda uma rede baseada em endereços privados, tenha ligação, embora limitada pelo número de utilizadores;
  • DHCP - possibilita aos fornecedores de serviço de Internet(provedores) a reutilização de ips de conexões não permanentes, atribuindo automaticamente um ip cada vez que determinada ligação fica ativa.

Com os triliões e triliões de objetos ligados a uma rede única (Internet), as gamas de ipv4 ficaram esgotadas, em 2012 aparece o protocolo IPV6 com 128bits que se escreve com 8 grupos de 4 dígitos hexadecimais.
Os endereços IPv6 podem ser mapeados para IPv4 e são concebidos para roteadores que suportem os dois protocolos, permitindo que nos IPv4 façam um "túnel" através de uma estrutura IPv6. Estes endereços são automaticamente construídos pelos roteadores que suportam ambos os protocolos.
Os 128 bits do IPv6 ficam assim divididos:
campo de 80 bits colocado a '0' (zero), 0000:0000:0000:0000:0000 ...
campo de 16 bits colocado a '1' (um), ... FFFF ...
endereço IPv4 de 32 bits
Endereços IPv6 mapeados para IPv4:
::FFFF:<endereço IPv4>

MAC ADRESS

O endereço mac é único para cada dispositivo ligado a uma rede. Representa-se por, por exemplo:

  • 55-A5-CF-88-F3-A9
  • 55a5.cf00.0088.f3a9
  • 55:a5:cf:00:00:88:f3:a9

Difere do ip que é dinâmico e que pode ser atribuído por software, o mac (embora possa ser alterado), em funcionamento é sempre fixo e único representa io dispositivo de comunicação. Se efetuarmos um bloqueio a um endereço de mac, mesmo mudando de ip o dispositivo conectado com aquele endereço, nunca conseguirá passar o bloqueio.

Exemplos IoT

Casa

Um sistema que faça a verificação e monitorização da temperatura, humidade, qualidade do ar, luminosidade etc etc e que possa adaptar automaticamente estas opções às nossas preferências é mais do que ter o controlo da casa, passa a ser uma casa inteligente e interativa.

Automóvel

Começou por nos dar a indicação do estado do veículo e evoluiu para o estacionamento inteligente e, já hoje (2020), veículos com condução autónoma.

Arduino e a utilização em rede(intranet e Internet)

arduino internet shield w1500

O arduino pode ser usado numa rede TC/IP e, consequentemente, através da Internet com um módulo (ethernet shield). Existem vários, no entanto, o mais comum é o W1500.
Controlador: W5100

  • Tensão de operação: 3,3V – 5VDC
  • Velocidade de conexão: 10 / 100Mb
  • Protocolos Suportados: TCP / IP, UDP, ICMP, ARP IPv4, IGMP, PPPoE, Ethernet
  • Suporte (Full-duplex e half-duplex)
  • Suporte a conexão ADSL (PPPoE com PAP / CHAP no modo de autenticação)
  • Suporte a 4 conexões independentes simultaneamente
  • Memória Interna: 16Kb para buffers de Tx / Rx
  • Conexão com o Arduino através de SPI

Exemplo de aplicação

arduino internet shield w1500 com led

Usar o W5100 em conjunto com o Arduino para fazer uma ligação a um webserver e permitindo na página web, através de um botão, ligar ou desligar um LED. O estado do LED(aceso ou apagado) também será exibido na página.

  1. O código está configurado para utilizar um IP estático na placa, por isso, terá que alterar algumas informações.
  2. No “byte ip[]”, coloque um endereço de IP livre na sua rede dentro sa sua gama, no “byte gateway[]”, coloque o endereço de gateway na sua rede e no “byte subnet[]”, coloque as informações de máscara de sub-rede na sua rede.
  3. Interligue o Arduino com o computador, conecte uma ponta do cabo de rede RJ45 ao Ethernet Shield e a outra ponta ao roteador.
  4. Após o arquivo ser carregado no Arduino, abra o navegador no seu computador, smartphone ou tablet, digite o endereço de IP (byte ip[]) que inseriu no código e a página web abrirá.
  5. Alterne entre os comandos para acender e apagar o LED.
  6. Alguns pinos do Arduino serão para uso exclusivo do Ethernet Shield W5100. No caso do Arduino Uno, os pinos digitais utilizados pelo shield são 10, 11, 12 e 13, e no Arduino Mega os pinos 50, 51, 52 e 53. Além disso, em ambas as placas o pino digital 4 também é utilizado para selecionar o uso do micro cartão de memória. Portanto, estes pinos não devem ser usados como entrada ou saída no seu projeto com o W5100.

# include <SPI.h> //INCLUSÃO DE BIBLIOTECA
# include <Ethernet.h> //INCLUSÃO DE BIBLIOTECA

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //mac address
byte ip[] = { 192, 168, 1, 64 }; // IP na rede dentro da gama da rede
byte gateway[] = { 192, 168, 1, 254 }; // gateway igual ao do router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //porta do weserver para https 443

String readString;
int ledPin = 2;

void setup(){
    pinMode(ledPin, OUTPUT); //Seleciona a opção ON/OFF
    digitalWrite(ledPin, HIGH); // Liga o LED, set pin high
    delay(500);
    digitalWrite(ledPin, LOW); // Desliga o LED, set pin low
   
    //inicial a ligação na rede interna 
    Ethernet.begin(mac, ip, gateway, subnet);
    server.begin();
}

void loop(){
    // Cria uma ligação cliente
    EthernetClient client = server.available();
    if (client) {
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();

                //lê a chamada HTTP 
                if (readString.length() < 100) {

                    //grave os caracteres numa string
                    readString += c;
                }

                //if HTTP request has ended– 0x0D is Carriage Return \n ASCII
                if (c == 0x0D) {
                   client.println("HTTP/1.1 200 OK"); //send new page
                    client.println("Content-Type: text/html");
                    client.println();

                    client.println("<html>");
                    client.println("<head>");
                    client.println("<title> ARDUINO ETHERNET SHIELD</title>");
                    client.println("</head>");
                    client.println("<body>");
                    client.println("<hr>");
                    client.println("<hr>");
                    client.println("<br>");
                    client.println("<h1 style="color:green;">LED ON/OFF FROM WEBPAGE</h1>");
                    client.println("<hr>");
                    client.println("<br>");

                    client.println("<h2><a href="/?LEDON">Turn On LED</a><br></h2>");
                    client.println("<h2><a href="/?LEDOFF">Turn Off LED</a><br></h2>");

                    client.println("</body>");
                    client.println("</html>");

                    delay(10);
                    //parar
                    client.stop();

                    // controlar atraves do pino do arduino
                    if(readString.indexOf("?LEDON") > -1) //verifica LEDON
                    {
                        digitalWrite(ledPin, HIGH); // coloca pin high
                    }
                    else{
                        if(readString.indexOf("?LEDOFF") > -1) //verifica LEDOFF
                        {
                            digitalWrite(ledPin, LOW); // coloca pin low
                        }
                    }
                    //limpa string apara a próxima leitura 
                    readString="";
                }
            }
        }
    }
}
  • Digital PIN3 é usado para ligar um LED através de um resistor.
  • Digital PIN13 é usado para comunicar com o W5100 e não pode ser usado para outra função

Quando o circuito é ligado à rede, o router atribui um IP automaticamente através do DHCP. Uma vez que esta atribuição iria variar cada vez que uma nova ligação fosse efetuada, atribuimos um IP à placa
byte ip[] = 192.168.1.64
Este IP deve estar dentro da gama de ips usada na rede.

Como verificar a rede a utilizar?

A forma mais simples é abrir "Linha de comandos" ou "Terminal" e digitar "ipconfig" se utilizarmos o windows, "ifconfig" para linux e MAC OS X.

ipconfig

Podemos então verificar que a nossa gama de ips é a 192.168.1.*
O nosso projeto terá de funcionar dentro desta gama. Se configurarmos a placa com 192.168.1.64 e colocarmos o ip no browser, com acesso seja por rede de cabo ou wi-fi, vamos abrir a nossa página de controlo através de um servidor de web.

ipconfig

Podemos aceder a partir da internet?

Sim podemos se, dentro das nossa rede, transformarmos o nosso ip num servidor de web externo. Para isso, temos de configurar o nosso router para que o endereço saia na porta 80.
Exemplo de configuração em router Tecnicolor TG789vac v2

configurar web server routeador

Adicionamos um webserver(http server) ao router

configurar web server atribuir ip

Agora já podemos aceder externamente através do ip externo, até agora usamos os ips internos da nossa rede, o ip externo pode ser verificado digitando numa pesquisa do google "meu ip" ou "myip". Se abrirmos o nosso browser de Internet(chrome, firefox, safari, edge, ie ...) e digitarmos o endereço externo, abrimos o nosso controlador de led da mesma forma que abrirmos com o ip local.
De uma forma geral, todos os routers têm possibilidade de configurar um servidor de http. O grande problema está na mudança do ip externo, o operador de internet(provedor) atribui um IP que varia(pode até ser um IP fixo durante dias ou meses, mas pode variar constantemente), assim, se ao sairmos de perto do nosso router, deixamso de ter acesso ao nosso servidor de IOT. Para colmatar esta mudança, podemos usar um dos muitos sites da web que permitem atribuir um ip dinâmico, por exemplo, www.noip.com. Neste site, configuramos o nosso acesso IP para um endereço que automaticamente vai ter ao nosso routeador. Podem criar um endereço tipo meunome.ddns.net que direciona para o ip externo, mesmo que mude, abrindo o vosso dispositivo de controlo. Assim, com smartphone, computador ou por qualquer outro meio ligado à internet, pode-se controlar um dispositivo existente numa rede local(home) sempre com o mesmo endereço em texto.

Existem vários serviços(no-ip, dyndns, statdns, dtdns, gnudip) que permitem o dns dinâmico com vários métodos para renovar o ip externo, alguns routers permitem esta atualização do ip automaticamente sem ter de recorrer a software adicional.

Este é um exemplo base de como se pode controlar um dispositivo remotamente através da Internet, em vez de ligar um led, pode atuar um relé ou qualquer outra coisa.


Artigos Relacionados