...
嵌入式 esp8266udp

小程序使用udp广播获取esp8266的局域网ip地址

闲来无事玩玩嵌入式,最近遇到一个问题
就是esp8266连接路由器后怎样才能知道它的ip地址
总不能每次都去路由器后台查看或者设置固定ip吧!!!
这都不现实,于是查阅大量资料找到一个好办法。

使用udp广播

大致原理是这样的:
1、esp8266开一个udp服务器,设置固定端口(唯一的不好就是要一个固定端口)如:1234
2、使用小程序发送udp广播到 ip:255.255.255.255 端口:1234 上。
3、esp8266收到广播消息,将自己的ip地址发送给客服端,然后可以转tcp连接,至此完成ip传递。

代码

ESP8266

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

WiFiUDP udp;

// 发送udp消息到远程客户端
void udp_send(String msg, IPAddress remoteIP, int remotePort)
{
  // 配置远端ip地址和端口
  udp.beginPacket(remoteIP, remotePort);
  udp.write(msg.c_str());
  udp.endPacket();
}

// 接受udp消息
void udp_handle(String msg, IPAddress remoteIP, int remotePort)
{
    String type = subfstr(msg, "\n");
    if (type == "scanip")
    {
       // 将ip发送到客户端
        udp_send("scanip:ok\n"+WiFi.localIP().toString(), remoteIP, remotePort);
    }
}

void setup(){
    udp.begin(1234);
}

void loop()
{
  // 接收数据包
  if (udp.parsePacket()) // 解析包不为空
  {
    String temp = "";
    while (udp.available())
    {
      temp += (char)udp.read();
      delay(3);
    }
    // 处理接收的数据
    udp_handle(temp, udp.remoteIP(), udp.remotePort());
  }
}

小程序

const udp = wx.createUDPSocket()
udp.bind()
udp.onMessage((e) => {
    // 检查到来的消息是否是ip
    const data = new TextDecoder('utf-8').decode(e.message)
    // 分割消息  第一行是命令  第二行是传递的数据
    const arr = data.replaceAll('\r','').split('\n')
    if(arr[0] == 'scanip:ok'){
        // 这里有两种方式可以取到ip
        // 1 通过返回消息 arr[1]
        // 2 通过e.remoteInfo.address取到ip e.remoteInfo.port取到端口
        // 如果使用2方法 在esp哪里就不需要返回ip了
        const address = e.remoteInfo.address;
        const port = e.remoteInfo.port;
    }
})
// 关键:发送广播数据
udp.send({
    address: '255.255.255.255',
    port: 1234,
    message: 'scanip',
    // 此处一定要有,设置这条消息是广播消息
    setBroadcast: true
})

至此就可以实现广播方式获取esp8266的ip地址,唯一的就是端口号需要设置为固定的,但这个不碍事。
当初也想过让esp8266持续发送广播到指定端口上,手机只做接受,但是小程序好像收不到广播消息,如果需要esp持续发送的小伙伴也是可以尝试用这种方法去拿ip,自己把代码反着写一下就可以了。

顺便普及一下udp广播的消息:
https://blog.csdn.net/m0_74937538/article/details/134449864
https://blog.csdn.net/weixin_48102054/article/details/127736689

在线免费的AI照片无损放大和模糊修复工具分享 免费在线pdf文档文件翻译工具分享一下
biu biu biu
MacStroke下载及appleScript 模拟按键脚本 共享打印机0x0000011b修复的另一种方法 yarn 设置淘宝镜像 yarn 错误There appears to be trouble with your network connection. Retrying... win11 安装限制去除 跳过TPM CPU检测 附软件 win11 桌面不满足要求水印去除 适用于跳过TPM CPU检测安装后的桌面水印