Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 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))
Exemplo n.º 10
0
    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()
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
 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
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
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()
Exemplo n.º 16
0
 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'))
Exemplo n.º 17
0
 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'))
Exemplo n.º 18
0
    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
Exemplo n.º 19
0
    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'))
Exemplo n.º 20
0
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'))
Exemplo n.º 21
0
 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'))
Exemplo n.º 22
0
 def disconnect(self):
     self._wifi.active(False)
     print(rainbow('WIFI 连接已断开', color='red'))
Exemplo n.º 23
0
 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))
Exemplo n.º 24
0
 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'))
Exemplo n.º 25
0
 def disconnect(self):
     self._wifi.active(False)
     print(rainbow('WIFI connection has been disconnected', color='red'))
Exemplo n.º 26
0
def reboot():
    print(rainbow('Reboot', color='red'))
    machine.reset()