En este proyecto podemos ver como interactuan datos entre un ordenador y una placa electronica PineA64 con sistema operativo Armbian. La comunicación va del ordenador por usb a la placa electronica Nodemcu, de la placa Nodemcu va a la placa electronica W5500 por puerto spi, y la placa W5500 traslada la comunicación spi a comunicación Ethernet por RJ45, por ultimo la placa W5500 esta conectada a la PineA64 por RJ45 comunicación Ethernet.
La comunicación es bidireccional, transmite datos tanto del ordenador a la PineA64 , como de la PineA64 al ordenador.
Codigo de NodeMCU:
#include <Arduino.h>
#include <SPI.h>
#include <Ethernet.h> // Biblioteca Ethernet para W5500
// Configuración de la dirección IP de la NodeMCU (cliente)
IPAddress clientIP(192, 168, 1, 104); // Reemplaza con la IP de la NodeMCU
IPAddress serverIP(192, 168, 1, 105); // Reemplaza con la IP de la Pine64
IPAddress dns(8, 8, 8, 8);
IPAddress gateway(192, 168, 1, 1);
int serverPort = 8080; // Puerto en el que el servidor (Pine64) está escuchando
byte mac[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
// Define los pines SPI para la NodeMCU y el pin de selección de esclavo (CS) para el W5500
const int pinCS = 5; // Pin de selección de esclavo (CS) para el W5500
EthernetClient client;
void setup() {
Serial.begin(9600);
// Inicializa la comunicación SPI
SPI.begin();
Ethernet.init(pinCS);
// Configura la dirección IP y la conexión Ethernet
Ethernet.begin(mac, clientIP, dns, gateway);
delay(1000); // Espera a que la conexión se establezca
// Conecta al servidor (Pine64)
if (client.connect(serverIP, serverPort)) {
Serial.println("Conectado al servidor");
// Envía datos al servidor
client.println("Hola Mundo desde NodeMCU");
//client.stop(); // Cierra la conexión
} else {
Serial.println("Error de conexión");
}
}
void loop() {
// Maneja el envío de datos al servidor (Pine64)
if (client.connected()) {
if (Serial.available()) {
String inputFromSerial = Serial.readStringUntil('\n'); // Lee la entrada del terminal serie
client.println(inputFromSerial); // Envía la entrada al servidor
// También puedes mostrar lo que se envía al servidor en el terminal serie si lo deseas
Serial.print("Enviado al servidor: ");
Serial.println(inputFromSerial);
}
}
// Maneja la recepción de datos del servidor y muestra en el terminal serie
static char receivedData[128];
static int dataIndex = 0;
while (client.available()) {
char c = client.read();
receivedData[dataIndex] = c;
dataIndex++;
if (dataIndex >= sizeof(receivedData) - 1) {
receivedData[dataIndex] = '\0';
Serial.println(receivedData);
dataIndex = 0;
}
}
if (dataIndex > 0) {
receivedData[dataIndex] = '\0';
Serial.println(receivedData);
dataIndex = 0;
}
}
El dispositivo que interactua con el ordenador es una placa PineA64, y el codigo que trabaja en la placa es python y corresponde con:
import socket
host='0.0.0.0'
port=8080
with socket.socket(socket.AF_INET, socket.STOCK_STREAM) as s:
s.bind((host, port))
s.listen()
conn, addr=s.accept()
pritn(f"Esperando respuesta en la conexion: {addr}")
while True:
data=conn.recv(1024)
if not data:
break
print(f"Datos recibidos:{data.decode()}")
message= input("Escribe un mensaje para la nodemcu:")
conn.sendall(message.enconde())
Deja una respuesta Cancelar la respuesta