Manual
do
Maker
.
com
Algo bastante útil e pouco divulgado com o ESP8266 ou ESP32 é a comunicação via socket TCP ou UDP. Nesse artigo veremos como fazer um socket server com ESP8266, e por qual razão utilizá-lo. Já discorri a respeito de socket com ESP32 usando LWIP, mas farei um artigo mais simples, para quem não gosta de implementações longas.
Bem basicamente, uma rede é representada por 7 camadas no modelo conceitual OSI. Temos na primeira camada a representação física, que é o hardware em si. Seguidamente temos a camada de enlace, que é o primeiro nível de comunicação entre hardwares, e então temos a camada 3, que é rede. Na camada de rede temos o TCP/IP, seja IPv4 ou IPv6, e é aqui que temos endereçamento e protocolos.
Muitas das comunicações que fazemos entre dispositivos seriam mais simples, leves e rápidas de implementar se dispensássemos o servidor web, que é uma camada bem mais alta do modelo OSI. Quanto mais alta a camada, mais complexidade na implementação, além de mais recursos consumidos. Apesar dos recursos em embarcados estarem cada vez mais amplos, acabamos por vez gastando mais tempo e mais recursos por conta de uma implementação básica - com exceção apenas quando fazendo uma interface com o usuário.
O socket está na camada 3 do modelo OSI. Nesse ponto, já temos uma comunicação IP, ou seja, estamos conectados a uma rede. Abrir um socket significa abrir uma porta, pela qual poderemos trafegar dados. Utilizando um socket sem implementação de protocolos superiores como HTTP nos entrega uma experiência semelhante à comunicação serial, na qual devemos definir as regras por nós mesmos.
Há uma razão pela qual esse artigo dedicado está sendo escrito. Em um artigo relacionado mostrarei uma comunicação com o robô da MASUGUX, cuja comunicação será por WiFi. Achei importante descrever essa parte do código isoladamente para que sirva como referência para outros projetos onde caiba a utilização de sockets.
Para fazê-lo, podemos utilizar o seguinte código:
#include <ESP8266WiFi.h>
#define SSID "suaRede"
#define PASSWD "suaSenha"
#define SOCK_PORT 123
WiFiServer sockServer(SOCK_PORT);
void setup(){
Serial.begin(9600);
delay(1000);
WiFi.begin(SSID,PASSWD);
while (WiFi.status() != WL_CONNECTED){delay(100);}
Serial.print("IP: ");
Serial.println(WiFi.localIP());
sockServer.begin(); //abre a porta 123
}
void loop(){
WiFiClient client = sockServer.available();
if (client){
while (client.connected()){
while (client.available() > 0){
uint8_t value = client.read();
Serial.write(value);
}
delay(10);
}
client.stop(); //acabou a leitura dos dados. Finaliza o client.
}
}
Para testar o socket eu adaptei um script que escrevi para outro propósito (o robô do qual falo no vídeo). Nele, coloquei os valores ASCII de 0 à 4. O vídeo é mera prova de conceito, mas é a primeira oportunidade de mostrar um vídeo no novo formato, no qual vocês poderão me ajudar, deixando seu comentário e like, se gostarem, ou sugestões do que precisa ser melhorado.
#!/usr/bin/env python
import socket
import time
import struct
#ip a se conectar
ip = "192.168.1.211"
#porta do socket server
port = 123
addr = ((ip,port))
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(addr)
msg = bytearray()
msg.append(48)
msg.append(49)
msg.append(50)
msg.append(51)
msg.append(52)
msg.append(10)
for i in range(6):
# client_socket.sendall(str(msg[i]).encode())
client_socket.send(chr(msg[i]).encode())
time.sleep(1)
client_socket.close()
Troque o IP pelo que for mostrado na serial, só isso. Esse código pode ser salvo em qualquer arquivo com a extensão ".py" e roda em qualquer plataforma que tenha o Python 3 instalado. Se precisar de tutorial de instalação do Python, instalação de bibliotecas e afins, deixe seu comentário lá no vídeo.
Essa é a essência da comunicação socket, que facilitará em muito a comunicação com o robô. Espero que acompanhe!
E agora com novo formato (ainda em adaptação) e melhores resultados de audiovisual, acompanhe também em nosso canal DobitaobyteBrasil no Youtube os vídeos sobre os artigos.
O link direto para o vídeo é esse.
Revisão: Ricardo Amaral de Andrade
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.