Arduino EthernetServer从Python客户端接收意外值
我正在尝试用一个Python客户端和一个带以太网扩展板的Arduino进行通信。但是当Python客户端试图连接时,我在Arduino服务器端收到了(看起来像是)一些无效的值。这些值在我尝试发送任何数据之前就已经出现了。
我做了一个简单的示例,基于Arduino文档中的EthernetServer示例。我唯一改变的就是网络设置,另外我让服务器把接收到的数据通过串口输出,而不是发送回客户端。
这是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代码之前,我在串口流中什么都没有看到。但一旦运行了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()
发送的数据呢?
2 个回答
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')
还可以看看这个帖子:
0
原来是Fedora的包管理器里Arduino开发环境的版本出了问题。我尝试从源代码更新到最新版本,但在构建过程中遇到了一些Java方面的错误,搞得我很头疼。最后,我在Windows虚拟机里编译了同样的代码,然后把它加载到Arduino上,结果一切都正常运行了。
虽然这不是最好的解决办法,但至少问题解决了。