python - Arduino 以太网服务器从 Python 客户端接收意外值

标签 python sockets arduino ethernet

我正在尝试通过 Python 客户端与带有以太网屏蔽的 Arduino 进行通信。一旦 Python 客户端尝试连接,我就会在 Arduino 服务器端收到(看起来是)垃圾值。我什至在尝试在 Python 端发送任何数据之前就收到了这些值。

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

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 代码之前,我在串行流上什么也没有得到。一旦它运行,我就会在串行中得到一个(看似)永无休止的字节流。这是一个示例:

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() 发送的内容?

最佳答案

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

还要检查您的波特率。

##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?

关于python - Arduino 以太网服务器从 Python 客户端接收意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052251/

相关文章:

python - 如何将构造函数参数传递给 Flask 蓝图?

python - 如何考虑同一 DAG 中先前任务的结果来创建动态数量的任务?

java - 使用套接字连接的简单聊天

python socket 如何使用相同的套接字连接正确重定向 http/s 请求?

c - Arduino Uno - 使用按钮控制和 7 段显示从 1-9 计数并返回的 C 代码

c++ - int 的 Arduino C++ vector

python - 特定类型的所有变量的django模板过滤器

c++ - QTcpSocket : reading and writing

Arduino 显示 Ethernet.localIP()

python - Xlsxwriter 以指定顺序订购工作表