You need to enable JavaScript to run this app. Arduino Uno搭配W5500以太网盾的WebSocket Server开发咨询
优惠活动
大模型
产品
解决方案
定价
更多

Arduino Uno搭配W5500以太网盾的WebSocket Server开发咨询

问题根因

你当前的编译报错直接原因是WebSockets_Generic v2.x版本不支持AVR架构的Arduino Uno,错误提示已明确要求切换到1.x.x的ATmega分支版本。同时你引用的Ethernet2.h已经是过时库,目前官方Ethernet库v2.0及以上版本已原生支持W5500以太网盾,不需要额外用Ethernet2库,报错里的多库提示无需处理,优先用官方Ethernet库即可。


适配方案

有两种可用的方案满足你的需求,任选其一即可:

  • 方案1:将WebSockets_Generic库降级到v1.x.x的ATmega分支版本,原有代码仅需少量调整就能正常运行
  • 方案2:换用更轻量、原生支持AVR架构的WebSockets库,资源占用更低,接口和你现有代码几乎完全兼容

完整可用示例代码

Arduino端代码(适配Uno + W5500)

#include <Ethernet.h>
// 如果用降级后的WebSockets_Generic v1.x就保留这行,换用轻量WebSockets库就改成#include <WebSocketsServer.h>
#include <WebSockets_Generic.h>

WebSocketsServer webSocket = WebSocketsServer(81);
// 注意不要和局域网内其他设备MAC冲突
byte mac[] ={0xA8, 0x61, 0x0A, 0xAE, 0x69, 0x13};
// 建议修改为你局域网段内的空闲IP,原代码的198.162大概率是笔误
IPAddress ip(192, 168, 1, 177);

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
  switch (type)
  {
    case WStype_DISCONNECTED:
      Serial.printf("[%u] 客户端断开\n", num);
      break;
    case WStype_CONNECTED:
      Serial.printf("[%u] 新客户端连接\n", num);
      webSocket.sendTXT(num, "Connected");
      break;
    case WStype_TEXT:
      Serial.printf("[%u] 收到文本: %s\n", num, payload);
      // 你需要的发送ASCII值直接调用sendTXT传入对应字符串即可
      webSocket.sendTXT(num, "收到消息");
      break;
    case WStype_BIN:
      Serial.printf("[%u] 收到二进制数据,长度: %u\n", num, length);
      break;
    default:
      break;
  }
}

void setup()
{
  Serial.begin(115200);
  while (!Serial);
  // W5500默认CS引脚为10,硬件有改动可调整这里
  Ethernet.init(10);
  Ethernet.begin(mac, ip);
  Serial.print("WebSocket服务器IP: ");
  Serial.println(Ethernet.localIP());
  webSocket.begin();
  webSocket.onEvent(webSocketEvent);
}

void loop()
{
  webSocket.loop();
  // 你的业务逻辑,比如定时采集数据发送ASCII值可以写在这里
}

Python客户端测试代码

import websocket

def on_message(ws, message):
    print("收到Arduino返回:", message)

def on_error(ws, error):
    print("连接错误:", error)

def on_close(ws, close_status_code, close_msg):
    print("连接断开")

def on_open(ws):
    print("连接已建立,发送测试消息")
    ws.send("Hello from Python")

if __name__ == "__main__":
    # IP和端口要和Arduino代码里的设置保持一致
    ws = websocket.WebSocketApp("ws://192.168.1.177:81",
                              on_open=on_open,
                              on_message=on_message,
                              on_error=on_error,
                              on_close=on_close)
    ws.run_forever()

注意事项

  1. 调试前先单独测试以太网连通性,确认Arduino可以被你的电脑ping通后再调试WebSocket功能
  2. Arduino Uno RAM只有2KB,建议最多同时保持2~3个WebSocket连接,单次发送的ASCII字符串不要过长,避免内存溢出
  3. 如果使用静态IP,要确保IP和你电脑在同一个局域网段内,网关、子网掩码配置正确

内容的提问来源于stack exchange,提问作者tjsmert44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 09:06:02