【发布时间】: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