It seems you can a UDP packet on a PC to itself, but you can't send a UDP packet from an ESP32 to itself:
import network, socket
# Create access point for the phone to log onto
si = network.WLAN(network.AP_IF)
si.active(True)
print("Wifi is: ESP_%X%X%X" % tuple(si.config("mac")[-3:]))
print(si.ifconfig())
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(3)
port = 9099
ipnum = "192.168.4.1"
s.bind((ipnum, port))
s.sendto(b"An ESP32 UDP Packet", (ipnum, port))
print(s.recvfrom(100)) # <--- this times out
response is:
Wifi is: ESP_8C1FB2
('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')
Traceback (most recent call last):
File "", line 16, in
OSError: [Errno 110] ETIMEDOUT
However, when I connect my PC to the ESP_8C1FB2 hotspot then I can run the following:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(3)
port = 9099
ipnum = "192.168.4.2"
s.bind((ipnum, port))
s.sendto(b"A PC UDP Packet", (ipnum, port))
print(s.recvfrom(100))
response is:
(b'A PC UDP Packet', ('192.168.4.2', 9099))
I am able to send and receive UDP packets between the PC and the ESP32
- PC: s.sendto(b"A PC UDP Packet", ("192.168.4.1", port)); print(s.recvfrom(100)))
- ESP32: s.sendto(b"An ESP UDP Packet", ("192.168.4.2", port)); print(s.recvfrom(100)))
The socket.bind function seems to have to be to the device's own IPnumber. Fortunately this is quite predictable when working from the ESP's hotspot.
It seems you can a UDP packet on a PC to itself, but you can't send a UDP packet from an ESP32 to itself:
response is:
However, when I connect my PC to the ESP_8C1FB2 hotspot then I can run the following:
response is:
I am able to send and receive UDP packets between the PC and the ESP32
The socket.bind function seems to have to be to the device's own IPnumber. Fortunately this is quite predictable when working from the ESP's hotspot.