香橙派——自发热点连Wi-Fi

文章目录

    • 1. 安装依赖
    • 2. 热点功能
      • (1)开启热点(并断开当前连接的Wi-Fi)
      • (2)运行Web后端
    • 3. 开启自启动脚本
      • 方式一:配置系统开机自启动service服务
    • 其他常用命令及脚本

1. 安装依赖

sudo apt-get update
sudo apt-get install hostapd dnsmasq
sudo pip install flask

2. 热点功能

  • 教程:香橙派ubuntu22开启热点并设置成开机自启

(1)开启热点(并断开当前连接的Wi-Fi)

sudo nmcli radio wifi off && \
sudo nmcli radio wifi on && \
sudo systemctl stop dnsmasq && \
sudo systemctl restart NetworkManager && \
nohup sudo create_ap wlan0 eth0 Takway-Toys --no-virt > create_ap.log 2>&1 &

(2)运行Web后端

sudo chmod 777 app.py
sudo python3 app.py
  • app.py
# coding: utf-8
import subprocess
import os
import time
from flask import Flask, render_template, request, redirect, url_forapp = Flask(__name__)# 检测 Wi-Fi 连接状态
def check_wifi_connection():try:# 使用nmcli命令检查Wi-Fi连接状态output = subprocess.check_output(['nmcli', 'device', 'status']).decode('utf-8')# 分析输出以查找Wi-Fi连接状态for line in output.split('\n'):if 'wifi' in line and 'connected' in line:return Trueexcept subprocess.CalledProcessError as e:print(f"Error checking Wi-Fi status: {e}")return False# 设置热点
def set_hotspot():try:subprocess.run(['sudo', 'create_ap', 'wlan0', 'eth0', 'Takway-Toy', '--no-virt'], check=True)except subprocess.CalledProcessError as e:print(f"Error setting up hotspot: {e}")# 扫描 Wi-Fi
def scan_wifi():try:subprocess.run(['nmcli', 'device', 'wifi', 'rescan'], check=True)except subprocess.CalledProcessError as e:print(f"Error scanning for Wi-Fi networks: {e}")# 连接 Wi-Fi
def connect_wifi(ssid, password):scan_wifi()time.sleep(1)try:subprocess.run(['sudo', 'create_ap', '--stop', 'wlan0'], check=True)print("Stopping create_ap service")except subprocess.CalledProcessError as e:print(f"Error stopping hotspot: {e}")time.sleep(1)try:subprocess.run(['nmcli', 'dev', 'wifi', 'connect', ssid, 'password', password], check=True)except subprocess.CalledProcessError as e:print(f"Error connecting to Wi-Fi: {e}")time.sleep(5)# 检查是否成功连接Wi-Fiif check_wifi_connection():print("成功连接到Wi-Fi,程序即将退出。")os._exit(0)  # 成功连接后退出程序else:print("Wi-Fi连接失败。")# 主页
@app.route('/')
def index():return render_template('index.html')# 提交 Wi-Fi 信息
@app.route('/submit', methods=['POST'])
def submit():ssid = request.form['ssid']password = request.form['password']print(f"Connecting to Wi-Fi: {ssid} with password {password}")connect_wifi(ssid, password)return redirect(url_for('index'))if __name__ == '__main__':debug_mode = True  # 设置为 True 以跳过 Wi-Fi 连接状态检测if not debug_mode:if check_wifi_connection():print("已连接到 Wi-Fi 网络")else:print("未连接到 Wi-Fi 网络")set_hotspot()# 创建 index.html 文件index_html_path = 'index.html'if not os.path.exists(index_html_path):with open(index_html_path, 'w') as f:f.write("""<!DOCTYPE html>
<html>
<head><title>Wi-Fi 设置</title>
</head>
<body><h1>输入 Wi-Fi 信息</h1><form method="post" action="{{ url_for('submit') }}"><label for="ssid">Wi-Fi 名称 (SSID):</label><input type="text" id="ssid" name="ssid" required><br><label for="password">密码:</label><input type="password" id="password" name="password" required><br><input type="submit" value="连接"></form>
</body>
</html>""")app.run(host='0.0.0.0', port=80, debug=True)
  • 手动连接http://192.168.12.1/

3. 开启自启动脚本

方式一:配置系统开机自启动service服务

香橙派——基本配置教程

sudo vim /etc/systemd/system/wifi_hotspot.service
[Unit]
Description=My Service
After=network.target​
[Service]
Type=simple
WorkingDirectory=/home/orangepi
ExecStart=python3 /home/orangepi/app.py
User=root[Install]
WantedBy=multi-user.target
  • 第二种
[Unit]
Description=WiFi Hotspot Wrapper
After=network.target
Wants=network.target[Service]
Type=oneshot
ExecStart=python3 /home/orangepi/wifi_hotpot/wifi_manager.py
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 status wifi_hotspot.service

其他常用命令及脚本

  • 扫描Wi-Fi:
nmcli dev wifi rescan
  • 断开WiFi连接
sudo systemctl stop dnsmasq
sudo systemctl stop NetworkManager
sudo systemctl restart NetworkManager
  • 连接Wi-Fi
nmcli dev wifi connect Innoxsz-Public password innox2023
nmcli dev wifi connect Takway-AI password takway123
  • 开启热点:
# 有密码
sudo create_ap -m nat wlan0 eth0 orangepi orangepi --no-virt
# 无密码
sudo create_ap wlan0 eth0 Takway-AI --no-virt
# nohup
nohup sudo create_ap wlan0 eth0 Takway-Toys --no-virt > create_ap.log 2>&1 &
  • 关闭热点:
sudo create_ap --stop wlan0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION--论文笔记

论文笔记 论文来源 Very Deep Convolutional Networks for Large-Scale Image Recognition 代码来源 还没上传 数据集 这里采用的是猫狗数据集 还没上传 1论文摘要的翻译 在这项工作中&#xff0c;我们研究了卷积网络深度对其在大规模图像识别设置中的准确性的影响。我…

uniapp 蓝牙分包发送数据

// 连接蓝牙设备并发送数据 function sendDataOverBLE(deviceId, data) {// 首先连接蓝牙设备uni.createBLEConnection({deviceId: deviceId,success: function(res) {// 连接成功后&#xff0c;获取服务uni.getBLEDeviceServices({deviceId: deviceId,success: function(res) …

CSP模板生成系统

开门见山&#xff0c;直接放一百分代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> #include<bits/stdc.h> using namespace std; const int N 2e4 10; string a[1010]; unordered_map<string , string> mp;void…

防火墙技术基础篇:解析入侵检测与预防系统(IDPS)功能

防火墙技术基础篇&#xff1a;解析入侵检测与预防系统&#xff08;IDPS&#xff09;功能 入侵检测与预防系统&#xff08;Intrusion Detection and Prevention Systems, IDPS&#xff09;作为防火墙技术的核心组成部分&#xff0c;扮演着保护网络安全的关键角色。本文将全面讲…

mysqlbinlog解析

安装mysql后在bin文件夹下搜索mysqlbinlog.exe&#xff0c;用cmd执行以下命令 mysqlbinlog --no-defaults --base64-outputdecode-rows -vv C:\Users\Desktop\mysql-bin.001914 > C:\Users\Desktop\output14.sql–no-defaults&#xff1a;不要读取任何选项文件。如果由于从…

【力扣一轮】344.反转字符串 541.反转字符串Ⅱ

344.反转字符串 思路 两个指针向中间移动&#xff0c;反转字符串即可。 伪代码 遍历字符串两个指针分别指向开头及末尾交换开头及末尾元素代码 void reverseString(string & s) {for(int i 0, j s.size()-1 ; i < s.size()/2 ; i , j--){char temp s[i];s[i]s…

OSPF状态机及网络接口类型

、OSPF 状态机 Down一旦接收到hello 包进人下一个状态机 Init 初始化接收到的hello 包中&#xff0c;若存在本地的 RID&#xff0c;进入下一状态 2way 双向通讯--邻居关系建立的标志 条件匹配:点到点网络直接进入下一个状态机 MA 网络将进行 DR/BDR 选举(40S) 非 DR…

一个程序员的牢狱生涯(34)利害

星期一 利害 老杨让我把煤气灶上的炒瓢里倒了一瓢水后,又让我帮他打开面粉袋,然后一边从里面抓出一把面粉放到水瓢里,一边和我说道: “我也怀疑是小X州,但当时你并没有证据能证明是他放的,对吧!” 我点点头后,老杨继续说道: “不要看别人好像在号子里想起来就能欺负他…

东北师范大学信息科学与技术学院课程攻略 共享计划

文章目录 介绍前言特性平台为什么采用 GitHub 项目作为平台&#xff1f;上传什么资料&#xff1f;警告 相关说明命名说明Watch、Star、Fork的说明 使用指南查找搜索文件下载方式贡献方法 开源力量许可附录东北师范大学学风建设实施细则第六章 规范与惩处&#xff08;学生&#…

[力扣题解] 841. 钥匙和房间

题目&#xff1a;841. 钥匙和房间 思路 深度优先搜索&#xff0c;只从0号房间进入&#xff0c;最后统计遍历情况&#xff0c;如果有没有遍历到的&#xff0c;返回false&#xff0c;否则返回true&#xff1b; 代码 class Solution { private:void dfs(vector<vector<i…

蓝桥杯物联网竞赛_STM32L071KBU6_关于TIM的新理解

最近在复习kbu6的模块&#xff0c;其中关于定时器的记忆比较模糊&#xff0c;再来强化强化 仔细看了看相关HAL库代码果然有一些额外的收获 对定时器tim7: 这个定时器还是比较准的&#xff0c;其调用方法如下&#xff1a; HAL_TIM_Base_Start_IT(&htim7);从上述代码中不难…

解决 Redis 击穿问题之黑名单

以商品列表为例&#xff1a; 主要思想&#xff1a; /* 1.先查黑名单是否存在当前商品&#xff0c;如果有就抛出异常 2.检查redis里面是否有该商品&#xff0c;如果有就直接返回&#xff0c; 3.如果没有就查询数据库&#xff0c;将数据缓存到redis 4.判断数据库中是否有该商品&…

哪个网盘最适合个人文件长期储存?用派盘最好

派盘是一款面向个人和企业的本地云存储解决方案,专为长期文件存储而设计。这种存储方式利用了本地硬盘的存储容量,通过“云化”的方式,可以将本地硬盘变成云存储空间。它具有强大的数据保护功能,确保了数据的私密性和安全性。 派盘的主要特点 高效的存取速度:由于使用本地…

这种电脑原来这么耗电……震惊了粉丝小姐姐

前言 在今年1月份的时候&#xff0c;一位来自重庆的小姐姐加了小白&#xff0c;咨询电脑的问题&#xff1a; 哦豁&#xff0c;这个电脑看着确实闪闪发光&#xff0c;是真的很漂亮&#xff5e;&#xff08;嗯&#xff0c;小姐姐也很漂亮&#xff09; 电脑无法开机&#xff0c;按…

什么是流量削峰?如何解决秒杀等业务的削峰场景

文章推荐 1 作为程序员&#xff0c;开发用过最好用的AI工具有哪些&#xff1f; 2 Github Copilot正版的激活成功&#xff0c;终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手&#xff0c;帮助你提高写代码效率 5 Jetbrains的a…

【Python设计模式02】设计原则

1.单一职责原则 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;是面向对象编程中SOLID原则的第一个原则。它强调每个类应该只有一个引起变化的原因&#xff0c;即一个类只负责一项职责。这一原则有助于提高代码的可维护性、可读性和可复用性。 单…

mysql锁表查看

命令 &#xff1a; show full processlist;//显示哪些线程正在运行

数字驱动,教育先行——低代码揭秘教育机构管理数字化转型

数字化时代为教育带来了许多变革和挑战&#xff0c;同时也为教育创新提供了无限可能。数字化转型可以帮助教育机构应对这些变革和挑战&#xff0c;提高教育效率和质量&#xff0c;满足学生个性化需求&#xff0c;优化教育管理和服务&#xff0c;并提高教育机构的竞争力。 并且…

docker 安装 yapi

文章目录 docker 安装 yapi一、拉取镜像二、创建目录三、添加配置文件四、初始化数据库表五、启动 yapi六、测试以及修改默认密码 没有 MongDB 的可以先看这个教程&#xff1a;MongDB安装教程 docker 安装 yapi 版本&#xff1a; 1.9.5 一、拉取镜像 docker pull yapipro/y…

以及Spring中为什么会出现IOC容器?@Autowired和@Resource注解?

以及Spring中为什么会出现IOC容器&#xff1f;Autowired和Resource注解&#xff1f; IOC容器发展史 没有IOC容器之前 首先说一下在Spring之前&#xff0c;我们的程序里面是没有IOC容器的&#xff0c;这个时候我们如果想要得到一个事先已经定义的对象该怎么得到呢&#xff1f;…