用shell脚本实现linux系统上wifi模式(STA和soft AP)的转换

转载请注明出处:http://blog.csdn.net/hellomxj1/

功能:在linux系统上实现wifi STA与AP功能的转换

实现成果:1、添加wifi密码账户add_wifi_account;

          2、wifi两种模式启动的脚本wifi_start;

             3、帮助信息README_WIFI_START;


具体实现过程如下:

添加wifi密码账户add_wifi_account

  1 #!/bin/sh                                                                                                                                
  2 
  3 echo "Add Wifi Account ..."
  4 
  5 if [ ! -e /usr/firmware/wifi/wpa_supplicant.conf]
  6 then
  7     echo "There is not wpa_supplicant.conf!!!"
  8     exit
  9 fi
 10     echo network={ >>/etc/wifi/wpa_supplicant.conf
 11     echo ssid=\"$1\" >>/etc/wifi/wpa_supplicant.conf
 12     echo psk=\"$2\" >>/etc/wifi/wpa_supplicant.conf
 13     echo key_mgmt=$3 >>/etc/wifi/wpa_supplicant.conf
 14     echo } >>/etc/wifi/wpa_supplicant.conf
 15 
 16 
 17     echo "ssid=\"$1\""
 18     echo "psk=\"$2\""
 19     echo "key_mgmt=$3"
 20 
 21 
 22 echo "Finshed!"
~                    


该部分主要是实现将账户和密码添加到wpa的配置文件,以便于使用sta模式启动能自动连接网络,若果该配置文件中有多个账户信息,将会从依次连接,如果其中一个成功,将不会往下执行。


wifi两种模式启动的脚本wifi_start

1 #!/bin/sh
  2 
  3 echo "Start wifi ..."
  4 
  5 if [ ! -e /var/run/wpa_supplicant]
  6 then
  7 mkdir -p /var/run/wpa_supplicant
  8 fi
  9 
 10 busybox ifconfig wlan0 up
 11 
 12 ps -fe|grep wpa_supplicant |grep -v grep
 13 
 14 if [ $? -ne 0 ]
 15 then
 16 wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wifi/wpa_supplicant.conf&
 17 fi
 18 
 19 echo "######$1"
 20 
 21 if [ "$1" = "ap" ]
 22 then
 23 
 24     echo "Start wifi AP..."
 25 
 26     if [ ! $# == 2 ]
 27     then
 28         echo "Please input : start-wifi ap 192.168.1.xx(1-19)"
 29         exit
 30     fi
 31 
 32     if [ ! -e /var/lib/misc ]
 33     then
 34     mkdir -p /var/lib/misc
 35     fi
 36 
 37     if [ ! -e /var/lib/misc/udhcpd.leases ]
 38     then
 39     touch /var/lib/misc/udhcpd.leases
 40     fi                                                                                                                                   
 41 
 42     ifconfig wlan0 down
 43 
 44     result=`cat /sys/module/bcmdhd/parameters/firmware_path`
 45 
 46     if [ "$result" != "/usr/firmware/wifi/fw_43341_apsta.bin" ]
 47     then
 48     echo "/usr/firmware/wifi/fw_43341_apsta.bin">/sys/module/bcmdhd/parameters/firmware_path
 49     fi
 50 
 51     ifconfig wlan0 $2 up                                                                                                                 
 52 
 53     echo "Start hostapd ..."
 54 
 55     ps -fe|grep hostapd |grep -v grep
 56 
 57     if [ $? -eq 0 ]
 58     then
 59         ps -ef | grep hostapd | grep -v grep | awk '{print $1}' | sed -e "s/^/kill -9 /g" | sh -
 60     fi
 61 
 62     hostapd /etc/wifi/hostapd.conf&
 63 
 64     echo "Start udhcpd ..."
 65 
 66     ps -fe|grep udhcpd |grep -v grep
 67 
 68     if [ $? -eq 0 ]
 69     then
 70         ps -ef | grep udhcpd | grep -v grep | awk '{print $1}' | sed -e "s/^/kill -9 /g" | sh -
 71     fi
 72 
 73     udhcpd -fS /etc/udhcpd.conf&
 74 
 75     echo "Wifi AP finshed!"
 76 
 77 elif [ "$1" = "sta" ]
 78 then
 79     ifconfig wlan0 down
 80 
 81     result=`cat /sys/module/bcmdhd/parameters/firmware_path`
 82 
 83     if [ "$result" != "/usr/firmware/wifi/fw_43341.bin" ]
 84     then
 85     echo "/usr/firmware/wifi/fw_43341.bin">/sys/module/bcmdhd/parameters/firmware_path
 86     fi
 87 
 88     ifconfig wlan0 up
 89 
 90     udhcpc -i wlan0
 91 
 92 else
 93 
 94     echo "Error!! Please input again!"
 95 
 96 fi

 

这里主要分为两个模块,一个是sta模式的启动直接输入./wifi_start sta;即可启动,另一个为soft AP模式直接输入:./wifi_start ap 192.168.2.10;即可进入soft AP模式,考虑到两种模式的不断转换的问题,我在执行的前期会对进程进行检查,将以前开启的进程进行关闭,一边本次开启能够正常运行;


帮助信息README_WIFI_START

  1 <1>Introduction                                                                                                                          
  2 
  3     This document describes how to start wifi,and introduces the function and use methods of add-wifi-account and wifi-start;And add-        wifi-account and wifi-start in the "/etc/init.d" directory.
  4 
  5 <2>How to operate
  6 
  7 First,Add the available WiFi account
  8 
  9     #/etc/init.d/add-wifi-account "JZ_Guest" "#wwwingenic*" "WPA-PSK"
 10 
 11     Notes: "JZ_Guest" is the ssid of the network that you want to connect;
 12            "#wwwingenic* is the password of the network;
 13            " WPA-PSK"  is the encryption method of the network;
 14 
 15 Second,Start wifi
 16 
 17     /*Start wifi with STA model*/
 18 
 19     #/etc/init.d/wifi-start sta
 20 
 21     /*Start wifi with AP model*/
 22 
 23     #/etc/init.d/wifi-start ap 192.168.1.10
 24 
 25     Notes: 192.168.1.10 is ip of newton,you can use ip address from 192.168.1.1 <----> 192.168.1.19

这里主要是我的脚本的使用说明,方便使用;



时间比较紧,功能的实现可能会有问题,希望能给大家多多给出建议。


  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
ESP32可以同时运行在STAStation)模式AP(Access Point)模式下,实现STAAP的共存。以下是一种实现方式: 1. 首先,你需要在ESP32上初始化WiFi模块,并分别设置STAAP的参数。 ```cpp #include <WiFi.h> void setup() { // 初始化串口和WiFi模块 Serial.begin(115200); WiFi.mode(WIFI_MODE_STA); // 设置为STA模式 // 连接到WiFi路由器 WiFi.begin("your_ssid", "your_password"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } // 设置AP模式的参数 WiFi.softAP("your_ap_ssid", "your_ap_password"); } void loop() { // 在这里可以添加其他代码 } ``` 在上述代码中,你需要将`"your_ssid"`和`"your_password"`替换为你的WiFi路由器的名称和密码,将`"your_ap_ssid"`和`"your_ap_password"`替换为你希望设置的AP的名称和密码。 2. 在ESP32上同时运行STAAP模式后,你可以通过STA模式连接到一个WiFi路由器,并且其他设备可以通过AP模式连接到ESP32。这样,ESP32即可以作为一个WiFi客户端连接到网络,又可以作为一个WiFi热点提供网络给其他设备连接。 请注意,ESP32的STAAP之间共享同一个物理无线接口,因此在同时使用STAAP模式时,网络性能可能会受到影响。同时,ESP32的资源有限,如果同时处理大量的STAAP连接请求,可能会导致性能下降。因此,在实际应用中,需要根据具体需求和设备能力进行合理的配置和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值