乐鑫技术交流
直播中

康辅佑

7年用户 967经验值
擅长:控制/MCU
私信 关注
[问答]

如何用ESP8266手动发送DHCP发现消息?

您好,
我想用 ESP8266 手动发送 DHCP 发现消息。
我做了以下代码:
代码:全选#define UDP_BROADCAST_PORT 3444
char DeviceBuffer[40] = {0};

wifi_set_opmode(STAtiON_MODE);
wifi_station_dhcpc_stop();

myEspconn.type = ESPCONN_UDP;
myEspconn.state = ESPCONN_NONE;
myEspconn.proto.udp->remote_port = UDP_BROADCAST_PORT; // ESP8266 udp remote port
myEspconn.proto.udp->local_port = UDP_BROADCAST_PORT; // ESP8266 udp local port

remote_ip = IPADDR_NONE;
os_memcpy(myEspconn.proto.udp->remote_ip, &remote_ip, 4);

wifi_get_macaddr(STATION_IF, hwaddr);
os_sprintf(DeviceBuffer, "%s" MACSTR "!", ESP8266_MSG, MAC2STR(hwaddr));
espconn_send(&myEspconn, DeviceBuffer, os_strlen(DeviceBuffer));

Espconn_send 返回错误代码 -4。
有人可以帮我解释一下这里可能出了什么问题。


               


                       

回帖(1)

王辉

2024-5-31 17:36:07
您可以参考以下代码来手动发送DHCP发现消息:

```
#include
#include

WiFiUDP udp_client;
IPAddress broadcast_ip(255, 255, 255, 255);
uint16_t client_port = 68;  // DHCP server port

void setup() {
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();

  udp_client.begin(client_port);
}

void loop() {
  uint8_t buffer[] = {
    0x01, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x63, 0x82, 0x53, 0x63, 0x35, 0x01,
    0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  };

  udp_client.beginPacket(broadcast_ip, client_port);
  udp_client.write(buffer, sizeof(buffer));
  udp_client.endPacket();
  
  delay(10000);  // send every 10 seconds
}
```

注意:DHCP协议的实现需要按照RFC2131中规定的格式进行组包和解析,上面的代码仅实现了最简单的DHCP发现消息格式,如果需要实现完整的DHCP流程,建议使用其他成熟的DHCP库。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分