我正在尝试通过 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')
另请参阅这篇文章:
关于python - Arduino 以太网服务器从 Python 客户端接收意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052251/