Связь между Arduino и Python через UDP

1

Я изо всех сил пытаюсь построить коммуникационный мост между Arduino и Python. Arduino должен отправить целочисленное значение в python. Чтобы включить связь Udp, я использую Ethernet щит 2 на Arduino и должен подключиться к IP "192.168.137.30". Теперь, когда я пытаюсь соединиться с этим IP-адресом, возникает ошибка, потому что "192.168.137.30" является внешним IP-адресом.

Ниже мой код Arduino и Python:

#include <SPI.h>
#include <SD.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>         // UDP library from: [email protected] 12/30/2008

byte mac[] = {
  0xA8, 0x61, 0x0A, 0xAE, 0x2A, 0x12
};
IPAddress ip(192.168.137.30);

unsigned int localPort = 8880;      // local port to listen on

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;


void setup()
{


  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
  Serial.begin(115200);

  }

void loop()
{

   char  ReplyBuffer[] = "acknowledged";    
    Udp.beginPacket(ip, localPort);
    Udp.write(ReplyBuffer);
    Udp.endPacket();

}

Python:

import serial
import time 
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('192.168.137.30', 8880))
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
sock.close()

Я до сих пор не могу отправить данные из Arduino в Python. Тем не менее, можно отправлять данные из Python в Arduino.

IPAddress ip(169, 254, 114, 130);
IPAddress my_PC_ip(169, 254, 94, 133);
unsigned int localPort = 7476; 
unsigned int pythonPort= 7000; 

void setup()
{
  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
  Serial.begin(115200);

  }

void loop()
{
    Udp.beginPacket(my_PC_ip,pythonPort);
    Udp.print("hello");
    Udp.endPacket();
}

Python: импорт последовательного импорта

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('169.254.94.133', 7000))
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
sock.close()
Теги:
arduino
udp

1 ответ

1
Лучший ответ

Вы не размещаете правильные IP-адреса в нужных местах. Вот что должно быть где:

  • В Ethernet.begin на Arduino вы должны использовать IP-адрес Arduino.
  • В Udp.beginPacket на Arduino вы должны использовать IP-адрес вашего компьютера.
  • В sock.bind на вашем компьютере, вы должны использовать IP-адрес вашего компьютера.

В настоящее время вы используете один и тот же во всех трех местах, что не имеет смысла с точки зрения сети.

  • 0
    Вы подразумеваете под IP-адресом компьютера локальный хост 127.0.0.1 или адрес IPv4-адаптера Ethernet или адрес Wv-IPv4 адаптера WLAN?
  • 0
    @Joe Использует ли компьютер Ethernet или WLAN для подключения к сети, на которой работает Arduino? Используйте это. (Определенно не localhost.)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню