首先要先感谢树莓派实验室创客群-G的大佬:【管理员】辣鸡管理

话说我家的WiFi信号有些差劲,就想用树莓派中继一下,弄了一晚上之后成功,特此记录。

我的配置:

  1. 树莓派3A+一块
  2. USB无线网卡一个(建议选择大功率的,我做出来网速就很慢)

树莓派其实可以用其他版本,zerow的话就需要MicroUSB转USB的线

之所以要用USB网卡是因为中继需要两张无线网卡:一张连接网络,一张开AP。

如果你想用网线开热点的话,就不要理这个,把下面的“连接到网络的网卡”改成eth0即可

请事先调试好你的树莓派确保能正常上网和连接,如有异议请点击这里入门

好的我们开始!

Step1:插上USB网卡

插上后要检查一下有没有被识别,一般都能够别识别的
键入命令以查看网络情况:

1
ifconfig

之后应该有两张无线网卡:wlan0和wlan1,如图:

如果没有找到两张网卡,就是没有被识别,可以自行百度树莓派识别USB网卡

Step2:安装create_ap

create_ap是GitHub上一个开源项目,专门用于开热点

1
2
3
4
5
6
7
#把这个项目Git下来并安装
sudo git clone https://github.com/oblique/create_ap
cd create_ap
sudo make install

#安装依赖的库
sudo apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq

这个东西的语法自己用-h去问,大概是这样的:

1
2
3
4
5

sudo create_ap 要使用的无线网卡 连接到网络的网卡 热点名 密码
#或者这样,其中-n是无互联网连接的开关
sudo create_ap -n 要使用的无线网卡 热点名 密码
#其实密码都可以省略,表示没有密码

完成了之后继续

Step3:切断和重连

因为两张无线网卡都连接到了WiFi(或者说是都在使用中),所以create_ap调用时就会报错,所以我们要先切断一张网卡的连接(这里我弄了有3、4个小时才搞清楚)
首先,你的那张USB网卡可能没有开AP的功能,而树莓派的板载网卡是有的,所以辨别要切断哪一个网卡的连接
用命令尝试一下:

1
2
3
4
sudo create_ap wlan0 wlan1
#用wlan0作AP源
sudo create_ap wlan1 wlan0
#用wlan1作AP源

其中有一个会报如下错误(除非你两张都支持):

1
2
ERROR: Your adapter does not support AP (master) mode
#你的网卡没有AP功能

那么,就可以知道哪一张是能开AP的了,下面用wpa切断这张网卡的WiFi连接(要用于开AP,必须空闲状态),此时要先记住另一个网卡的ip,如果你是用无线网络连接的话,可能就被一同切断,这时就要通过另一网卡连接。

1
2
wpa_cli -i wlan0 disable_network 0
#注意你的是wlan0还是wlan1

再ifconfig一下,你会发现有一张网卡没有ip地址,此时它被闲置了:

OK,此时再用create_ap创建AP(注意你选择的网卡):

1
sudo create_ap wlan0 wlan1 你的WiFi名 你的WiFi密码

如果无误一般不会报错,但我在用2019年树莓派新版系统Raspbian Buster时会报错(弄了我2个小时,不知道这个bug现在修复了没有)。
此时,另一种方法可以避免这个bug(如果你已经报错,先重启):

1
2
#直接键入
sudo create_ap wlan0 wlan1

之后它会提示你输入SSID(网络名)和密码而并不会报错,真是巧妙

好了,万事大吉了

当然还有一个画龙点睛之笔

画龙点睛:开机自启

关于开机自启,有很多方法,但我偏爱下面的这一个

先写一个开WiFi的脚本,再添加到rc.local里

1
2
3
4
5
6
7
8
9
10
11
12
#创建脚本:
cd ~
nano auto_ap.sh

#随后在文件里输入:
#!/bin/sh
sleep 10s
#这里延迟10s是因为rc.local比网卡启动早,要等网卡启动了之后才能进行下面的工作
wpa_cli -i wlan0 disable_network 0
sudo create_ap wlan0 wlan1 网络名 密码 &

#那个&是后台的意思,这意味着你可以在这里添加一些其他代码,例如定时关机等等

Ctrl+X,然后按Y确认保存

之后加权限

1
chmod 777 auto_ap.sh

再打开rc.local文件,并加入代码

1
2
3
4
5
#打开rc.local
sudo nano /etc/rc.local

#在exit 0上面加入
su pi -c "exec /home/pi/auto_ap.sh"

sudo reboot

Okay