wifi_hotpot/README.md

198 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Linux嵌入板卡自发热点连接无线网络
### 介绍
Linux嵌入板卡发出热点供客户端连接客户端通过浏览器访问热点连接到Linux嵌入板卡的热点并进行交互。
- 连接逻辑:
1. 扫描Wi-Fi,并将Wi-Fi list保存为json格式,存储在本地,命名为`scaned_wifi_list.json`;
2. 检查Wi-Fi连接状态,若已连接,则退出程序;
3. 关闭Wi-Fi,并启动热点和web服务器,web服务器监听80端口,并提供一个页面,页面中包含Wi-Fi列表;
4. 等待用户选择 Wi-Fi 网络并输入密码,并连接到用户选择的 Wi-Fi 网络;
5. 如果Wi-Fi连接成功,则显示Wi-Fi连接成功页面,并提供交互页面;
6. 如果Wi-Fi连接失败,则重新扫描Wi-Fi,并提示用户重新连接.
- 灯光指示逻辑:
1. 当红灯亮起时,热点开启,等待客户端连接,连接成功后,红灯熄灭;
2. 当蓝灯亮起时,程序正常启动,如果蓝灯不亮起,则程序未启动,如果蓝灯熄灭,则已连接Wi-Fi,程序已关闭.
### 环境准备
#### (1) 安装依赖项:
```
sudo apt-get update
sudo apt-get install -y hostapd dnsmasq
```
#### (2) 克隆项目到本地并安装依赖:
```
// 克隆项目到本地 https or ssh
git clone http://43.132.157.186:3000/gaohz/wifi_hotpot.git
cd wifi_hotpot
```
#### (3) 安装Python端环境依赖
```
sudo pip install flask psutil
```
#### (4) 配置开机自启动服务项:
##### (4.1) 配置WiFi热点服务项:
1. 创建一个service文件
```
sudo vim /etc/systemd/system/hotspot.service
```
2. 在打开的文件中,添加以下内容:
```
[Unit]
Description=Hotspot Service
After=network.target
[Service]
ExecPre=/bin/sleep 2
ExecStart=create_ap wlan0 eth0 Takway-Toys --no-virt
User=root
[Install]
WantedBy=multi-user.target
```
请确保将`wlan0`替换为你的无线网卡接口,将`eth0`替换为你的有线网卡接口,`Takway-Toys`替换为你想要设置的热点名称。
3. 保存并关闭文件。
4. 重新加载systemd配置
```
sudo systemctl daemon-reload
```
5. 启用并启动Hotspot service
```
# sudo systemctl enable hotspot.service
sudo systemctl start hotspot.service
```
6. 如果需要停止Hotspot service可以使用以下命令
```
sudo systemctl stop hotspot.service
```
7. 如果需要查看Hotspot service的状态
```
sudo systemctl status hotspot.service
```
##### (4.2) 配置WiFi热点管理服务项:
- 编辑
```
sudo vim /etc/systemd/system/wifi_hotspot.service
```
- 内容:
```
[Unit]
Description=WiFi Hotspot Wrapper
After=network.target
Wants=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash /home/orangepi/wifi_hotpot/start_hotpots.sh
WorkingDirectory=/home/orangepi/wifi_hotpot
User=root
[Install]
WantedBy=default.target
```
- 配置
```
sudo systemctl daemon-reload
sudo systemctl enable wifi_hotspot.service
# sudo systemctl disable wifi_hotspot.service
```
- 开始(测试)
```
sudo systemctl start wifi_hotspot.service
# sudo systemctl stop wifi_hotspot.service
```
- 查看输出
```
sudo systemctl status wifi_hotspot.service
```
#### (5) 配置热点信息:
- 手动连接`http://192.168.12.1/`
- 连接成功后,输入用户名密码,即可进入交互界面。
## 其他参考命令
- 创建热点:
```
sudo systemctl start hotspot.service
```
- 关闭热点:
```
sudo systemctl stop hotspot.service
```
- 开启Wi-Fi连接:
```
nmcli dev wifi connect Innoxsz-Public password innox2023
```
- 断开Wi-Fi连接:
```
nmcli dev disconnect wlan0
```
- 扫描Wi-Fi:
```
nmcli dev wifi
```
- 检查Wi-Fi连接状态:
```
nmcli dev status
```
### create_ap
```
sudo create_ap wlan0 eth0 Takway-Toys --no-virt
+```