def do_connect(self, essid, passwd): if not self._wifi.isconnected(): print('connecting to network...') self._wifi.active(True) self._wifi.connect(essid, passwd) import utime for i in range(300): if self._wifi.isconnected(): break utime.sleep_ms(100) if not self._wifi.isconnected(): self._wifi.active(False) print( rainbow('wifi connection error, please reconnect', color='red')) return False else: self._essid = essid self.ifconfig() if not Wifi.is_in_records(essid): Wifi.add_record(essid, passwd) return True else: print( rainbow('You have already established a Wifi connection.', color='green')) return True
def ifconfig(self): info = self._wifi.ifconfig() print(rainbow('你连接的WiFi为 %s' % self._essid)) print(rainbow('IP地址: ' + info[0], color='red')) print(rainbow('子网掩码: ' + info[1], color='green')) print(rainbow('网关: ' + info[2], color='blue')) return info, self._essid
def connect(cls): worker = NetWorker.worker() if worker.is_connected(): s0 = 'You have already established a Wifi connection.' print(rainbow(s0, color='green')) else: default = cls.get_default() if default: records = cls.get_records().insert(0, default) else: records = cls.get_records() # print(records) networks = [i.get('essid') for i in worker.scan()] for i in records: if i[0] in networks: s1 = 'Trying to connect automatically to %s ...' % i[0] print(rainbow(s1, color='blue')) if not worker.do_connect(*i): s2 = 'Automatic connection to %s failed' % i[0] print(rainbow(s2, color='red')) cls.del_record(i[0]) worker._wifi.active(True) continue else: s3 = 'Automatically connect to %s successfully' % i[0] print(rainbow(s3, color='green')) return True print(rainbow('No record available', color='red')) worker.before_connect()
def set_boot_mode(): print(print_as_a_list_item(0, '清除模式', '注意: 清除引导程序 boot.py, 这将导致程序无法启动!')) print(print_as_a_list_item(1, 'WiFi模式', '此选项适合稳定程序使用!')) print(print_as_a_list_item(2, '开发者模式', '启动连接WIFI热点,并开启WebREPL开发模式')) mode = selection('请选择模式 [0-2]: ', 2) with open('boot.py', 'w') as f: if mode == BOOT_MODE.WITH_NOTHING: boot_code = '' f.write(boot_code) print(rainbow('已设置为清除模式', color='green')) elif mode == BOOT_MODE.WITH_WIFI_STARTUP: boot_code = BOOT_MODE.WITH_WIFI_STARTUP_CODE f.write(boot_code) print(rainbow('已设置为WiFi模式', color='green')) elif mode == BOOT_MODE.EASY_DEVELOP: config_path() if not 'webrepl.pass' in os.listdir('config'): with open('config/webrepl.pass', 'w') as c: c.write('123456') boot_code = BOOT_MODE.EASY_DEVELOP_CODE f.write(boot_code) print(rainbow('已设置为开发者模式', color='green')) reboot()
def connect(cls): worker = NetWorker.worker() if worker.is_connected(): s0 = '您已成功建立了WiFi连接.' print(rainbow(s0, color='green')) else: default = cls.get_default() if default: records = cls.get_records().insert(0, default) else: records = cls.get_records() # print(records) networks = [i.get('essid') for i in worker.scan()] for i in records: if i[0] in networks: s1 = '尝试自动连接到 %s ...' % i[0] print(rainbow(s1, color='blue')) if not worker.do_connect(*i): s2 = '自动连接 %s failed' % i[0] print(rainbow(s2, color='red')) cls.del_record(i[0]) worker._wifi.active(True) continue else: s3 = '自动连接到 %s 成功' % i[0] print(rainbow(s3, color='green')) return True print(rainbow('没有记录!', color='red')) worker.before_connect()
def ifconfig(self): info = self._wifi.ifconfig() print(rainbow('You are connected to %s' % self._essid)) print(rainbow('IP: ' + info[0], color='red')) print(rainbow('Netmask: ' + info[1], color='green')) print(rainbow('Gateway: ' + info[2], color='blue')) return info, self._essid
def do_connect(self, essid, passwd): if not self._wifi.isconnected(): print('正在连接到网络...') self._wifi.active(True) self._wifi.connect(essid, passwd) import utime for i in range(300): if self._wifi.isconnected(): break utime.sleep_ms(100) if not self._wifi.isconnected(): self._wifi.active(False) print(rainbow('WiFi连接错误,请重新连接', color='red')) return False else: self._essid = essid self.ifconfig() if not Wifi.is_in_records(essid): Wifi.add_record(essid, passwd) return True else: print(rainbow('您已经建立了WiFi连接.', color='green')) return True
def ifconfig(self, noreturn=True): info = self._wifi.ifconfig() print( rainbow('==> You are connected to %s' % self._essid, color='green')) print(rainbow(' --> IP: ' + info[0], color='blue')) print(rainbow(' --> Netmask: ' + info[1], color='blue')) print(rainbow(' --> Gateway: ' + info[2], color='blue')) if not noreturn: return info, self._essid
def _list_wifi(index, essid, dbm): try: _index = ('[%s]' % str(index)).center(8).lstrip() _essid = rainbow(essid + (40 - len(essid)) * ' ', color='red') _dbm = rainbow(dbm.center(10).lstrip(), color='blue') except AttributeError: _index = ('[%s]' % str(index)).lstrip() _essid = rainbow(essid + (40 - len(essid)) * ' ', color='red') _dbm = rainbow(dbm.lstrip(), color='blue') if not noprint: print('{0} {1} {2} dBm'.format(_index, _essid, _dbm))
def auto_connect(self): if self._wifi.isconnected(): print( rainbow('You have already established a Wifi connection.', color='blue')) else: if len(list(self.get_records().keys())) == 0: # 没有记录就直接连接 self.connect() else: # 先查找是否有default值 default_essid = self.get_default()['essid'] # default 值不能为空 if default_essid: essids_in_records = [default_essid] + \ list(self.get_records().keys()) else: essids_in_records = list(self.get_records().keys()) records = self.get_records() networks = [i['essid'] for i in self.scan(noreturn=False)] for essid in essids_in_records: if essid in networks: print( rainbow( '==> Trying to automatically connect to %s ...' % essid, color='blue')) if self.connect(essid=essid, passwd=records[essid], noreturn=False, apexist=True): print( rainbow( '==> Automatically connect to %s successfully' % essid, color='green')) return else: print( rainbow( '==> Automatic connection to %s failed' % essid, color='red')) self.del_record(essid) continue print(rainbow('!!! No record available.', color='red')) self.connect()
def _do_connect(self, essid, passwd): self._wifi.active(True) self._wifi.connect(essid, passwd) import time for i in range(300): if self._wifi.isconnected(): break try: time.sleep_ms(100) except AttributeError: time.sleep(0.1) if not self._wifi.isconnected(): self._wifi.active(False) print( rainbow('!!! WiFi connection error, please reconnect', color='red')) return False else: self._essid = essid self.ifconfig(noreturn=False) if not self.is_in_records(essid): self.add_record(essid, passwd) return True
def scan(self, noreturn=True, noprint=False): self._wifi.active(True) print(rainbow('==> Scaning networks...', color='green')) def _list_wifi(index, essid, dbm): try: _index = ('[%s]' % str(index)).center(8).lstrip() _essid = rainbow(essid + (40 - len(essid)) * ' ', color='red') _dbm = rainbow(dbm.center(10).lstrip(), color='blue') except AttributeError: _index = ('[%s]' % str(index)).lstrip() _essid = rainbow(essid + (40 - len(essid)) * ' ', color='red') _dbm = rainbow(dbm.lstrip(), color='blue') if not noprint: print('{0} {1} {2} dBm'.format(_index, _essid, _dbm)) networks = [] for i in self._wifi.scan(): # string decode may raise error try: nw = dict(essid=i[0].decode('utf-8'), dbm=str(i[3])) except: nw = dict(essid=str(i[0], 'ascii'), dbm=str(i[3])) finally: networks.append(nw) # networks = [dict(essid=i[0].decode(),dbm=str(i[3])) for i in self._wifi.scan()] for i, item in enumerate(networks): _list_wifi(i, item['essid'], item['dbm']) if not noreturn: return networks
def del_record(cls, essid): config = cls.read_config() for index, i in enumerate(config.get('records')): if essid == i[0]: config['records'].pop(index) cls.update_profile(config) print(rainbow('记录删除: %s' % essid, color='green')) return True return False
def connect(self, essid=None, passwd=None, noreturn=True, apexist=None): if essid is not None: if apexist is None: apexist = essid in [ i['essid'] for i in self.scan(noreturn=False, noprint=True) ] if apexist: if passwd is not None: result = self._do_connect(essid, passwd) if not noreturn: return result else: # 只传入essid 便去查找记录以获得密码 passwd = self.get_passwd(essid) if passwd is not None: result = self._do_connect(essid, self.get_passwd(essid)) if not noreturn: return result else: print( rainbow('!!! The record was not found.', color='red')) if not noreturn: return False else: print(rainbow('!!! AP[ %s ] not found.' % essid, color='red')) if not noreturn: return False else: networks = [i['essid'] for i in self.scan(noreturn=False)] select = selection('Choose a WiFi to connect', len(networks) - 1) passwd = input('Password: ') essid = networks[select] result = self._do_connect(essid, passwd) if not noreturn: return result
def set_boot_mode(): print( print_as_a_list_item( 0, 'Boot with nothing', 'attention: this option will clear up boot.py, careful!')) print( print_as_a_list_item( 1, 'Boot with wifi startup', 'this mode will auto start wifi connect program.')) print( print_as_a_list_item( 2, 'Easy to develop', 'this mode is for developers.In this mode you can develop much easier via EMP-IDE(emp.1zlab.com)' )) mode = selection('Please input your choice [0-2]: ', 2) with open('boot.py', 'w') as f: if mode == BOOT_MODE.WITH_NOTHING: boot_code = '' f.write(boot_code) print(rainbow('Boot mode set to WITH_NOTHING', color='green')) elif mode == BOOT_MODE.WITH_WIFI_STARTUP: boot_code = BOOT_MODE.WITH_WIFI_STARTUP_CODE f.write(boot_code) print(rainbow('Boot mode set to WITH_WIFI_STARTUP', color='green')) elif mode == BOOT_MODE.EASY_DEVELOP: config_path() if not 'webrepl.pass' in os.listdir('config'): with open('config/webrepl.pass', 'w') as c: c.write('1zlab') boot_code = BOOT_MODE.EASY_DEVELOP_CODE f.write(boot_code) print(rainbow('Boot mode set to EASY_DEVELOP', color='green')) reboot()
def start(cls, port=8266, password=None): WebREPL().stop() if password is None: try: import webrepl_cfg _webrepl.password(webrepl_cfg.PASS) WebREPL().setup_conn(port, WebREPL().accept_conn) print("WebREPL 将按配置启用") except: print("WebREPL 未初始化配置, 请运行 'import webrepl_setup'") else: _webrepl.password(password) WebREPL().setup_conn(port, WebREPL().accept_conn) print(rainbow("WebREPL 启动.", color='green'))
def start(cls, port=8266, password=None): WebREPL().stop() if password is None: try: import webrepl_cfg _webrepl.password(webrepl_cfg.PASS) WebREPL().setup_conn(port, WebREPL().accept_conn) print("Started webrepl in normal mode") except: print("WebREPL is not configured, run 'import webrepl_setup'") else: _webrepl.password(password) WebREPL().setup_conn(port, WebREPL().accept_conn) print(rainbow("WebREPL started.", color='green'))
def setup_conn(cls, port, accept_handler): WebREPL().listen_s = socket.socket() WebREPL().listen_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ai = socket.getaddrinfo("0.0.0.0", port) addr = ai[0][4] WebREPL().listen_s.bind(addr) WebREPL().listen_s.listen(1) if accept_handler: WebREPL().listen_s.setsockopt(socket.SOL_SOCKET, 20, accept_handler) for i in (network.AP_IF, network.STA_IF): iface = network.WLAN(i) if iface.active(): print(rainbow("WebREPL 启动守护进程 ws://%s:%d" % (iface.ifconfig()[0], port), color='green')) return WebREPL().listen_s
def del_record(self, essid=None): if essid is None: records = self.get_records() essids = [i for i in records.keys()] for index, item in enumerate(essids): print(list_item(index, item)) option = selection( 'Please select an option to delete [0-%s]' % str(len(list(records.keys())) - 1), len(list(records.keys())) - 1) essid = essids[option] records.pop(essid) records = {'records': records} self.update_profile(records) elif self.is_in_records(essid): records.pop(essid) records = {'records': records} self.update_profile(records) else: print(rainbow('The record was not found', color='red'))
def set_web_repl(): pw = input(rainbow('请输入新的WebREPL密码:', color='blue')) config_path() with open('config/webrepl.pass', 'w') as c: c.write(pw) print(rainbow('已重新设置WebREPL密码,重启之后可用!!!', color='green'))
def add_record(cls, essid, passwd): config = cls.read_config() config['records'].append((essid, passwd)) cls.update_profile(config) print(rainbow('添加记录: %s' % essid, color='green'))
def disconnect(self): self._wifi.active(False) print(rainbow('WIFI 连接已断开', color='red'))
def _list_wifi(index, essid, dbm): _index = ('[%s]' % str(index)).center(8).lstrip() _essid = rainbow(essid + (40 - len(essid)) * ' ', color='red') _dbm = rainbow(dbm.center(10).lstrip(), color='blue') print('{0} {1} {2} dBm'.format(_index, _essid, _dbm))
def create_profile(cls): default = () records = [] default_config = dict(default=default, records=records) cls.update_profile(default_config) print(rainbow('创建 config/wifi_cfg.json 配置', color='blue'))
def disconnect(self): self._wifi.active(False) print(rainbow('WIFI connection has been disconnected', color='red'))
def reboot(): print(rainbow('Reboot', color='red')) machine.reset()