[STM32MP1] 给STM32MP135F-DK开发板配置WiFi并实现上电自动连接

[复制链接]
 楼主| Tristan_C 发表于 2025-5-4 16:34 | 显示全部楼层 |阅读模式
本帖最后由 Tristan_C 于 2025-5-4 16:35 编辑

给开发板配置WiFi并上电自动连接
手上拿到这块开发板比较长时间了,趁着五一假期有一点点空,取出来跑一跑。ST官方这块开发板还是比较好的,官方出品,做工和配置这些自然也挺好的,没得说,包括上面配置了一块7寸的触摸屏,一只摄像头模块,板载了村田的一颗超小封装的WiFi/BLE模块,甚至还配置了一张16GB的SD卡。按照官方WiKi文档中的Getting started内容,给板子上电,顺利跑起来了。
1cb3f646d97cb3c7ceecb1080eee18e0
a5b2e1af6f2659c16866ac887d21cdb0
内核也启动了
9deff0ee09bc3f6ce4dd606d1df16f7a
为了调试方便,对板载的WiFi进行配置
8907ae11eb8faa1014f2c5eefd2330d5
首先是对如下文件进行编辑:/etc/wpa_supplicant.conf
  1. ctrl_interface=/var/run/wpa_supplicant

  2. ctrl_interface_group=0

  3. update_config=1

  4. ap_scan=1

  5. network={

  6. ssid="要连接的WiFi"

  7. psk="WiFi密码"

  8. }

新建一个脚本文件:/usr/local/bin/wifi-connect.sh
编辑如下内容
  1. #!/bin/sh

  2. # 启动 wpa_supplicant

  3. /usr/sbin/wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

  4. # 等待几秒保证连接成功,主要是等待上面的操作成功再执行udhcpc

  5. sleep 5

  6. # 启动 udhcpc(前台运行,等待租约)

  7. exec /sbin/udhcpc -i wlan0 -n -q

再创建如下文件:vi /etc/systemd/system/wifi-connect.service
  1. [Unit]

  2. Description=Auto connect to WiFi

  3. After=network.target

  4. [Service]

  5. Type=simple

  6. ExecStart=/usr/local/bin/wifi-connect.sh

  7. RemainAfterExit=yes

  8. Restart=on-failure

  9. [Install]

  10. WantedBy=multi-user.target

启用并启动服务,这样可以在上电之后自动连接WiFi
  1. systemctl daemon-reexec

  2. systemctl daemon-reload

  3. systemctl enable wifi-connect.service

  4. systemctl start wifi-connect.service

然后使用reboot重启板子,可以在启动后看到wlan0成功
b10188e251a521f5fc29366fee399989
使用ifconfig即可查到wlan0成功使用dhcp分配到ip地址 了
ba9bb09dc025655620a81103f4be7d5f
Ping一下百度baidu看看是否外网通了
c64681f0f9bf0425616263806a1dae14
如果要做一些网络断开重连的自动检测方案,可以更改一下wifi-connect.sh 脚本:
  1. #!/bin/sh

  2. WPA_CONF="/etc/wpa_supplicant.conf"
  3. IFACE="wlan0"

  4. echo "[wifi-connect] Starting WiFi auto-connect loop..."

  5. while true; do
  6.     # 检查是否连接了 WiFi
  7.     if iw "$IFACE" link | grep -q "Connected"; then
  8.         echo "[wifi-connect] WiFi connected. Checking IP..."

  9.         # 如果没有IP,就重新请求一次
  10.         IP_ADDR=$(ip addr show "$IFACE" | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)
  11.         if [ -z "$IP_ADDR" ]; then
  12.             echo "[wifi-connect] No IP assigned. Requesting via udhcpc..."
  13.             udhcpc -i "$IFACE" -n -q
  14.         fi
  15.     else
  16.         echo "[wifi-connect] WiFi disconnected. Reconnecting..."

  17.         # 杀掉可能存在的旧进程
  18.         pkill wpa_supplicant
  19.         pkill udhcpc

  20.         # 重新连接
  21.         wpa_supplicant -B -i "$IFACE" -c "$WPA_CONF"

  22.         # 等待连接成功
  23.         for i in $(seq 10); do
  24.             if iw "$IFACE" link | grep -q "Connected"; then
  25.                 echo "[wifi-connect] Connected to WiFi."
  26.                 break
  27.             fi
  28.             sleep 1
  29.         done

  30.         # 再请求 IP
  31.         echo "[wifi-connect] Getting IP via udhcpc..."
  32.         udhcpc -i "$IFACE" -n -q
  33.     fi

  34.     sleep 10  # 每 10 秒轮询一次
  35. done

这样在每次重启就可以自动连接WiFi了


 楼主| Tristan_C 发表于 2025-5-5 11:49 | 显示全部楼层
记得更改一下 /usr/local/bin/wifi-connect.sh 文件的脚本
arima 发表于 2025-5-5 16:10 | 显示全部楼层
这个板子太高档了。。。
xionghaoyun 发表于 2025-5-6 09:50 | 显示全部楼层
学习一下
 楼主| Tristan_C 发表于 2025-5-22 10:06 | 显示全部楼层
arima 发表于 2025-5-5 16:10
这个板子太高档了。。。

官方评估板的做工确实很好
gaonaiweng 发表于 2025-5-31 18:20 | 显示全部楼层
堪称“嵌入式 Linux WiFi 自动联网”典范
gaonaiweng 发表于 2025-5-31 18:22 | 显示全部楼层
开发板体验总结得非常到位,整体流程也操作得非常清晰专业。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

117

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部