JRD McLAREN Posted June 18, 2020 Posted June 18, 2020 Hello, I'm try to setup my OPiZero as mediaplyer, and I need to use it sometimes as WiFi Client - Managed mode and sometimes as WiFi AP - Master mode. Scenario 1 Work in "dual mode", I mean, when my wifi network within reach, then OPiZ start as "client", and connect to my preferred wifi network when wifi network not in range, it start as AP+DHCP (hostapd and dnsmasq) Scenario 2 Switched mode, Make any push button on gpio, and then make scripts "to do the job" .. disconnect from wifi, stop wpa_supplicant, run hostapd an dnsmasq. Has anybody something like "scenrio1" or "scenario2" .. ?? (or my ideas are totally bad ... )
xwiggen Posted August 3, 2020 Posted August 3, 2020 plug in additional wifi dongle; one for ap one for client
Werner Posted August 4, 2020 Posted August 4, 2020 I'd say depends. If you like the challenge of scripting this which for sure should be possible then do that. On the other hand though the easier setup is by following @xwiggen's advice, not lastly because WiFi dongles have become very cheap...
JRD McLAREN Posted September 27, 2020 Author Posted September 27, 2020 So ... for some time ... Here is my python script, for switching one wifi intreface ... It is first "one-way" version ... The OPi.GPIO library for python is needed. https://opi-gpio.readthedocs.io/en/latest/install.html #!/usr/bin/env python import os #import sys import OPi.GPIO as GPIO import time # Set your pins button = (7) led = (26) cmd_dnsmasq_stop = "systemctl stop dnsmasq.service" cmd_dnsmasq_start = "systemctl start dnsmasq.service" cmd_wpa_supplicant_stop = "systemctl stop wpa_supplicant.service" cmd_wpa_supplicant_start = "systemctl start wpa_supplicant.service" cmd_wifi_off = "nmcli con down WiFi" cmd_wifi_on = "nmcli con up WiFi" cmd_hostap = "hostapd /etc/hostapd.conf -B" cmd_bridge_on = "nmcli con up Bridge" cmd_bridge_off = "nmcli con down Bridge" cmd_dnsmasq_ap = "dnsmasq -C /etc/dnsmasq_ap.conf" # Placeholder variable GPIO.setmode(GPIO.BOARD) GPIO.setup(led, GPIO.OUT, initial=GPIO.LOW, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(button, GPIO.IN, initial=GPIO.LOW, pull_up_down=GPIO.PUD_DOWN) #def my_callback(): # print('This is a edge event callback function!') # print('Edge detected on channel %s'%button) # print('This is run in a different thread to your main program') #GPIO.add_event_detect(button, GPIO.RISING, callback=my_callback, bouncetime=200) #GPIO.add_event_callback(button, my_callback) GPIO.wait_for_edge(button, GPIO.RISING) # add rising edge detection on a channel print('Button pressed') print('Wifi Off') os.system(cmd_wifi_off) time.sleep(2) print('Stop DNSMASQ') os.system(cmd_dnsmasq_stop) time.sleep(5) print('Stop WPA Supplicant') os.system(cmd_wpa_supplicant_stop) time.sleep(2) print('Start Bridge') os.system(cmd_bridge_on) time.sleep(2) print('Start DNSMASQ AP') os.system(cmd_dnsmasq_ap) time.sleep(5) print('Start HostAP') os.system(cmd_hostap) time.sleep(5) GPIO.output(led, GPIO.HIGH) #GPIO.cleanup()
JRD McLAREN Posted October 2, 2020 Author Posted October 2, 2020 Final version..... Anybody can use their own commands for start-stop processes or for bring up-down interfaces... #!/usr/bin/env python3 # Set your pins button = (5) led = (26) #Set your commands cmd_dnsmasq_stop = "systemctl stop dnsmasq.service" cmd_dnsmasq_start = "systemctl start dnsmasq.service" cmd_wpa_supplicant_stop = "systemctl stop wpa_supplicant.service" cmd_wpa_supplicant_start = "systemctl start wpa_supplicant.service" cmd_wifi_off = "nmcli con down WiFi" cmd_wifi_on = "nmcli con up WiFi" cmd_hostap_on = "hostapd /etc/hostapd.conf -B" cmd_hostap_off = "killall hostapd" cmd_bridge_on = "nmcli con up Bridge" cmd_bridge_off = "nmcli con down Bridge" cmd_dnsmasq_ap_on = "dnsmasq -C /etc/dnsmasq_ap.conf" cmd_dnsmasq_ap_off = "killall dnsmasq" # Main script import os import sys import OPi.GPIO as GPIO import time client = 0 ap = 1 # Placeholder variable GPIO.setwarnings(False) # Ignore warning for now GPIO.setmode(GPIO.BOARD) GPIO.setup(led, GPIO.OUT, initial=GPIO.LOW, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(button, GPIO.IN, initial=GPIO.LOW, pull_up_down=GPIO.PUD_DOWN) state = client while True: GPIO.wait_for_edge(button, GPIO.RISING) # This is a function os.system(cmd_wifi_off) time.sleep(3) os.system(cmd_dnsmasq_stop) time.sleep(5) os.system(cmd_wpa_supplicant_stop) time.sleep(5) os.system(cmd_bridge_on) time.sleep(15) os.system(cmd_dnsmasq_ap_on) time.sleep(10) os.system(cmd_hostap_on) time.sleep(5) GPIO.output(led, GPIO.HIGH) print("AP mode is started") state = ap time.sleep(5) if state == ap: GPIO.wait_for_edge(button, GPIO.RISING) # This is a function os.system(cmd_hostap_off) time.sleep(3) os.system(cmd_dnsmasq_ap_off) time.sleep(3) os.system(cmd_bridge_off) time.sleep(5) os.system(cmd_wpa_supplicant_start) time.sleep(5) os.system(cmd_dnsmasq_start) time.sleep(7) os.system(cmd_wifi_on) time.sleep(3) GPIO.output(led, GPIO.LOW) print("Client mode is strted") state = client time.sleep(5)
chwe Posted October 9, 2020 Posted October 9, 2020 put 2 wifi dongles in cause xradio 819 on opi zero (if it's the original zero) is prob. the worst onboard wifi you can have prone to hang the kernel with it when it fails (I don't think that everybody ever took an effort to fix that)..
JRD McLAREN Posted October 14, 2020 Author Posted October 14, 2020 OK .. but, if you can use another board ... (OPIZero Plus or OPIZero Plus2 or anything else) this is useful ...
Recommended Posts