【问题标题】:Arduino EthernetServer receiving unexpected values from Python clientArduino EthernetServer 从 Python 客户端接收到意外的值
【发布时间】:2012-02-21 13:28:08
【问题描述】:

我正在尝试通过 Python 客户端的以太网屏蔽与 Arduino 交谈。一旦 Python 客户端尝试连接,我就会在 Arduino 服务器端获得(似乎是)垃圾值。我什至在尝试在 Python 端发送任何数据之前就收到了这些值。

我根据 Arduino 文档中的 EthernetServer example 做了一个最小的示例。我唯一改变的事情(除了网络规格)是我让服务器通过串行连接推送它接收到的数据,而不是返回给客户端。

Arduino 服务器代码:

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xCD, 0x38};  
byte ip[] = {10, 1, 30, 210};
byte gateway[] = { 10, 1, 30, 0 };
byte subnet[] = { 255, 255, 0, 0 };

EthernetServer server = EthernetServer(50000);

void setup()
{
  // initialize the ethernet device
  Ethernet.begin(mac, ip, gateway, subnet);

  // start listening for clients
  server.begin();

  Serial.begin(9600);
}

void loop()
{
  // if an incoming client connects, there will be bytes available to read:
  EthernetClient client = server.available();
  if (client == true) {
    // read bytes from the incoming client and write them back
    // to any clients connected to the server:
    Serial.write(client.read());
  }
}

Python 客户端代码,我在 Arduino 有时间启动后运行:

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('10.1.30.210', 50000))
client_socket.close()

在运行 Python 代码之前,我在串行流上一无所获。一旦它运行,我就会从 Serial 中得到一个(看似)永无止境的字节流。这是一个示例:

j!ðé¸Xta¼#ò´çÈÂlÊC`»­\S513ÙCJèÙÒ Í([Ôø#Q_$(Ìs.)RlO&BÏ$6êçÁFøå¨ÝõVé]üEº_Tà*4V[¡¬íÆVÓñÿpQDÒÐþoñ«.çbþÐS-8&ÓÒøHüZ¡ª£¸öÙ ÂÛÖ¨{R{&<(]$¿*PXøMÃ>i]Û¿Ãké2E)¢4WuKÕÎ%CsÉ9ïÓàä-fZàH5N6ºÞ¹A¬}CaY,Ä]Dîj!ðé¸Xta¼#ò´çÈÂlÊC`»­\S513ÙCJèÙÒ Í([Ôø#Q_

有谁知道是什么原因造成的? Arduino 从哪里读取这些值?我怎样才能让它停止这样做,并开始阅读我用client_socket.send() 发送的内容?

【问题讨论】:

  • 当我从 telnet 客户端连接到服务器时,我也得到了持续不断的垃圾输出流。

标签: python sockets arduino ethernet


【解决方案1】:

您是否尝试过发送串行数据包而不是使用以太网?

还要检查您的波特率。

##set to your serial port
ser = serial.Serial('/dev/ttyUSB0', 19200)

## check serial port
def checkokay():
  ser.flushInput()
  time.sleep(3)
  line = ser.readline()
  time.sleep(3)

ser.write('1')

也可以看看这个帖子:

How Do I Use Raw Socket in Python?

【讨论】:

    【解决方案2】:

    原来是 Fedora 包管理器中的 Arduino 开发环境版本存在问题。我试图从源代码更新到最新版本,但由于构建过程中 Java 部分的一些错误而受阻。最后,在 Windows VM 中编译后,我将使用的相同代码加载到 Arduino 上;效果很好。

    不是最好的解决方案,但它完成了工作。

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2019-04-02
      • 2013-03-05
      • 1970-01-01
      相关资源
      最近更新 更多