Introduction
Los dispositivos de la familia de controladores ESP32 Ethernet & WiFi & BLE PLC tienen un chip integrado específico para Wi-Fi de 5GHz, llamado ISM43340. Como sabes, la banda Wi-Fi de 5GHz es una versión mejorada de las anteriores, igual que la banda de 2.4GHz, por ejemplo.
La tecnología de 5GHz tiene algunas ventajas en comparación con la banda de 2,5GHz, como 25 canales no solapados, menos interferencias, mayor velocidad de conexión y funciona con los estándares IEEE actualizados (802.11a, 802.11n, 802.11ac).
There is also a disadvantage: shorter network range. Related to that, in this post you are going to see a couple of examples about how to use the 5GHz of the PLC to act as a Server or a Client, tested with the appropriate Client and Server JavaScript codes.
Requisitos
Los puntos clave a tener en cuenta son los siguientes:
PPC (para cargar los programas en el PLC y ejecutar los códigos JavaScript)
Enlaces relacionados
Server.ino - Client.js
En este primer ejemplo, el PLC actuará como Servidor y el PC como Cliente.
Server.ino
Antes de cargar el código, recuerda poner tu SSID Wi-Fi y tu contraseña Wi-Fi.
// WiFi5 library example // by Industrial Shields #include <WiFi5.h> const char* ssid = "YOUR-WIFI-SSID-HERE"; const char* key = "YOUR-WIFI-PASSWORD-HERE"; const uint16_t serverPort = 1234; WiFi5Server server(serverPort); const int bufferLen = 200; uint8_t buffer[bufferLen]; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(115200UL); if (WiFi5.begin(ssid, key) != WL_CONNECTED) { Serial.println("WiFi join error"); while (true); } Serial.print("Server IP address: "); Serial.println(WiFi5.localIP()); server.begin(); Serial.println("WiFi5 example started"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { static uint32_t lastCheckTime = millis(); if (millis() - lastCheckTime > 5000) { WiFi5Client client = server.available(); if (client) { int rxLen = client.read(buffer, bufferLen); if (rxLen > 0) { Serial.print("RX: "); Serial.write(buffer, rxLen); client.stop(); } } lastCheckTime = millis(); } }
Cuando ejecutes el programa del Servidor, vas a ver las siguientes impresiones en el Monitor Serial cuando el Cliente esté conectado (la dirección IP del Servidor es para conocerla y así poder usarla en el código client.js para establecer la conexión). Y el mensaje abcd recibido del Cliente.
Server IP address: 192.168.1.70 WiFi5 example started RX: abcd
client.js
Antes de subir el código, recuerda poner la dirección IP del servidor vista anteriormente.
#!/usr/bin/env node const host = process.argv[2] || '192.168.1.70'; const port = Number(process.argv[3] || 1234); const net = require('net'); const socket = new net.Socket(); socket.on('end', () => { console.log('Socket end done'); }); socket.on('error', (err) => { console.error(`Socket error: ${err}`); }); socket.connect(port, host, () => { console.log('Socket connected'); socket.end('abcd'); });
Cuando ejecutes el cliente con node.\Nclient.js, verás en la terminal cuándo el cliente está conectado:
Socket connected
Socket end done
Server.js - Client.ino
En este segundo ejemplo, el PC actuará como Servidor y el PLC como Cliente.
Server.js
#!/usr/bin/env node const net = require('net'); const server = net.createServer((socket) => { console.log(`client connected: ${socket.remoteAddress}`); socket.on('data', (data) => { console.log(`data received from ${socket.remoteAddress}: ${data}`); if (data.toString('utf-8') == 'get-number') { const number = (Date.now() * Math.random()) % 1000; socket.write(number.toFixed(0)); } else { socket.write('unknown'); } }); socket.on('end', () => { console.log(`client disconnected: ${socket.remoteAddress}`); }); socket.on('error', (err) => { console.error(`client ${socket.remoteAddress} error: ${err.message}`); }); }); server.on('error', (err) => { console.error(`server error: ${err.message}`); }); server.listen(1234, () => { console.log(`server listening`); });
Cuando ejecutes el servidor con node .\Nserver.js, verás en la terminal cuando el cliente está conectado (y la dirección del cliente):
server listening client connected: ::ffff:192.168.1.213
client.ino
Antes de cargar el código, recuerda poner tu SSID Wi-Fi y tu contraseña Wi-Fi, así como la dirección IP del servidor.
#include <WiFi5.h> const char* ssid = "YOUR-WIFI-SSID-HERE";
const char* key = "YOUR-WIFI-PASSWORD-HERE";
const IPAddress serverIp(192, 168, 1, 213); const uint16_t serverPort = 1234; WiFi5Client client; uint32_t lastSendTime = 0; const int bufferLen = 200; uint8_t buffer[bufferLen]; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(115200UL); switch (WiFi5.begin(ssid, key)) { case WL_NO_SHIELD: Serial.println("WiFi error"); while (true); break; case WL_NO_SSID_AVAIL: Serial.println("No SSID available"); while (true); break; } Serial.println("WiFi5 example started"); } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { if (!client.connected()) { Serial.println("Connecting to server..."); if (!client.connect(serverIp, serverPort)) { Serial.println("Failed. Wait some time and retry"); delay(5000); } else { Serial.println("Client connected"); } } else { if (millis() - lastSendTime > 1000) { String msg("get-number"); if (!client.write((uint8_t*) msg.c_str(), msg.length())) { Serial.println("Write failed"); client.stop(); } lastSendTime = millis(); } int rxLen = client.read(buffer, bufferLen); if (rxLen < 0) { Serial.println("Read failed"); client.stop(); } else if (rxLen > 0) { Serial.print("RX: "); Serial.print(rxLen); Serial.print(": "); Serial.write(buffer, rxLen); Serial.println(); } } }
Cuando ejecutes el programa cliente, verás las siguientes impresiones en el Monitor Serial cuando el cliente esté conectado:
WiFi5 example started Connecting to server... Client connected Connecting to server... Failed. Wait some time and retry
No te preocupes por el mensaje Failed. Espera un tiempo y reintenta los mensajes siempre y cuando hayas visto el mensaje de Cliente conectado; en este momento, se ha establecido la conexión entre el cliente y el servidor.
NOTA: Recuerda el proceso de carga de código con los PLCs de la familia ESP32. Puedes consultarlo en la Guía de Usuario así como en el Datasheet del producto.
Trabajando con el módulo Wi-Fi 5GHz del ESP32