Chuyển đổi giữa chế độ AP và máy khách


8

Tôi đang làm việc trong một dự án radio RPi và tôi muốn có thể chuyển đổi giữa "chế độ thiết lập" trong đó RPi hoạt động như một điểm truy cập Wi-Fi, cho phép người dùng gửi thông tin đăng nhập Wi-Fi tại nhà của họ thông qua một ứng dụng dành riêng cho thiết bị di động, sau đó ghi chúng vào wpa_supplicanttệp và "chế độ bình thường" nơi bảng trở thành ứng dụng khách Wi-Fi và kết nối với mạng Wi-Fi mà người dùng đã chỉ định trong khi sử dụng chế độ thiết lập.

Có thể không?

Câu trả lời:


8

Có thể, tôi khuyên bạn nên sử dụng lighttpd với dịch vụ web cho ứng dụng của bạn. Sau đó - chỉ cần chuyển đổi giữa hostapd (chế độ AP) và wpa_supplicant (chế độ máy khách). Nó đơn giản như dừng một dịch vụ và bắt đầu một lệnh wia shell khác.

CẬP NHẬT: Một số lời khuyên. Cách đơn giản nhất là sử dụng systemd như một trình chuyển đổi kích hoạt và để nó được thực hiện như thế này:

  • sử dụng wpa_supplicant như một dịch vụ
  • hostapd đã là một dịch vụ trong Ubuntu / debian, vì vậy bạn không cần phải làm gì về nó.

Tiếp theo, định cấu hình ISC-DHCPD và hostapd cho chế độ AP của bạn, kiểm tra xem chúng có hoạt động như AP không, tức là bạn có thể tham gia mạng và lấy địa chỉ IP, DNS từ DHCP của bạn có thể ping từ thiết bị và hoạt động. Sau đó, sử dụng chương trình này trên SystemD để làm cho dhcpd và hostapd không tự động khởi động khi khởi động :

#systemctl disable hostapd.service
#systemctl disable isc-dhcp-server.service

và ngừng sử dụng SoB's;) giống như vậy:

#systemctl stop hostapd.service
#systemctl stop isc-dhcp-server.service

sau đó bằng một liên kết tôi đã chỉ ra, hãy tạo wpa_supplicant (cài đặt nó như thế apt-get install wpasupplicant:) một dịch vụ và thiết lập để hoạt động như bạn muốn, tức là RPi của bạn liên kết với AP bạn sắp sử dụng, nhận IP + DNS, có thể ping / wget, v.v. Sau đó - vô hiệu hóa và dừng dịch vụ giống như chúng tôi đã nâng cấp :

#systemctl stop wpa_supplicant.service
#systemctl disable wpa_supplicant.service   

Sau đó, điều kỳ diệu :) để chuyển từ chế độ này sang chế độ khác, chỉ cần dừng các dịch vụ từ chế độ trước đó và bắt đầu các dịch vụ cần thiết (nghĩa là dừng wpa_supplicantvà bắt đầu hostapdisc-dhcp-server) như thế này:

#systemctl stop wpa_supplicant.service && systemctl start hostapd.service && systemctl start isc-dhcp-service.service

Vâng, trong một chuỗi duy nhất . Bí quyết ở đây là " && " xây dựng - đó là một loại hàng đợi khi phần tử tiếp theo sẽ được thực hiện chỉ nếu trước đó đã không thất bại. Vì vậy, bất cứ nơi nào bạn sẽ thực hiện cuộc gọi cho đường ống này, hãy kiểm tra mã thoát 0. Nó sẽ đảm bảo cho bạn rằng mọi thứ đều ổn khi chuyển đổi chế độ. Thế là xong, cứ thoải mái đặt câu hỏi nếu bạn cần thêm trợ giúp!


Cảm ơn câu trả lời của bạn. Đó là những gì tôi đã nghĩ đến, nhưng tôi không giỏi với kịch bản shell. Tôi sẽ cố gắng tìm một số ví dụ, vì tôi nghĩ rằng tôi sẽ phải tìm hiểu về dhcpd.conf, / etc / default / isc-dhcp-server và / etc / network / interface như được đề xuất trong liên kết
Zbam

@Zbam cần thêm thông tin để giúp bạn?
Alexey Vesnin

một số cái nhìn sâu sắc về cách tôi có thể chuyển từ chế độ này sang chế độ khác sẽ rất tuyệt, bởi vì từ những gì tôi đã thấy nó liên quan đến nhiều tệp
Zbam

@Zbam hãy xem bản chỉnh sửa của tôi, tôi đã cập nhật câu trả lời của mình
Alexey Vesnin

Điều này rất hữu ích cho dự án "rùa" của riêng tôi ... nhưng tôi vẫn chưa rõ về một chi tiết: Tôi lý tưởng muốn "thử" kết nối với kết nối wifi đã biết và nếu thất bại, thì mặc định là chế độ AP. Có một cách dễ dàng để làm điều này với SystemD, hay tôi nên viết một kịch bản shell sẽ thử kết nối, và sau đó làm như trên? Bất kỳ hướng dẫn sẽ hữu ích! (Hoặc cho tôi biết nếu bạn muốn câu hỏi này như một câu hỏi riêng biệt)
Aerophilic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.