mirror of
https://gitee.com/qpy-solutions/tracker-v2.git
synced 2025-05-18 18:48:25 +08:00
update: 1. Timer Rebuild; 2. LED Rebuild; 3. Location add insernal gnns; 4. settings.py; 5. tracker.py; 6. delete selfcheck.py;
This commit is contained in:
parent
165b1e4171
commit
e0f38dcfbf
@ -1,7 +1,5 @@
|
||||
|
||||
from misc import Power
|
||||
from machine import Timer
|
||||
import usr.settings as settings
|
||||
from usr.logging import getLogger
|
||||
|
||||
log = getLogger(__name__)
|
||||
@ -56,20 +54,8 @@ def get_soc(temp, volt_arg, bat_type='nix_coy_mnzo2'):
|
||||
|
||||
|
||||
class Battery(object):
|
||||
def __init__(self, battery_read_cb=None):
|
||||
current_settings = settings.settings.get()
|
||||
def __init__(self):
|
||||
self.now_energy = 100
|
||||
self.battery_read_cb = battery_read_cb
|
||||
if self.battery_read_cb:
|
||||
self.battery_timer = Timer(current_settings['sys']['battery_timern'])
|
||||
self.battery_timer.start(period=60 * 1000, mode=self.battery_timer.PERIODIC, callback=self.battery_cb)
|
||||
else:
|
||||
log.warn('Battery read callback is not defined.')
|
||||
|
||||
def battery_cb(self, args):
|
||||
self.energy()
|
||||
if self.battery_read_cb is not None:
|
||||
self.battery_read_cb(self.now_energy)
|
||||
|
||||
def indicate(self, low_power_threshold, low_power_cb):
|
||||
# TODO: This fun for what?
|
||||
|
106
code/common.py
106
code/common.py
@ -1,6 +1,11 @@
|
||||
import utime
|
||||
import _thread
|
||||
import osTimer
|
||||
|
||||
from misc import USB
|
||||
from misc import Power
|
||||
|
||||
import usr.settings as settings
|
||||
from usr.battery import Battery
|
||||
|
||||
|
||||
@ -39,18 +44,14 @@ class Controller(Singleton):
|
||||
self.tracker.remote.post_data(self.tracker.remote.DATA_NON_LOCA, {'power_switch': True})
|
||||
elif perm == 'w':
|
||||
if flag is True:
|
||||
# TODO: Get other model info
|
||||
model_info = {}
|
||||
model_info['power_switch'] = flag
|
||||
self.tracker.remote.post_data(self.tracker.remote.DATA_NON_LOCA, model_info)
|
||||
self.tracker.machine_info_report()
|
||||
elif flag is False:
|
||||
# TODO: Get other model info
|
||||
model_info = {}
|
||||
model_info['power_switch'] = flag
|
||||
self.tracker.remote.post_data(self.tracker.remote.DATA_NON_LOCA, model_info)
|
||||
self.tracker.machine_info_report(power_switch=flag)
|
||||
self.tracker.energy_led.period = None
|
||||
self.tracker.energy_led.switch(0)
|
||||
self.tracker.running_led.period = None
|
||||
self.tracker.running_led.switch(0)
|
||||
Power.powerDown()
|
||||
else:
|
||||
pass
|
||||
else:
|
||||
raise ControllerError('Controller switch permission error %s.' % perm)
|
||||
|
||||
@ -60,3 +61,88 @@ class Controller(Singleton):
|
||||
self.tracker.remote.post_data(self.tracker.remote.DATA_NON_LOCA, {'energy': battery_energy})
|
||||
else:
|
||||
raise ControllerError('Controller energy permission error %s.' % perm)
|
||||
|
||||
|
||||
class TrackerTimer(Singleton):
|
||||
|
||||
def __init__(self, tracker):
|
||||
self.tracker = tracker
|
||||
self.tracker_timer = osTimer()
|
||||
self.tracker_timer.start(1000, 1, self.timer_callback)
|
||||
self.loc_count = 0
|
||||
self.barrery_count = 0
|
||||
self.gnns_count = 0
|
||||
|
||||
def timer_callback(self, args):
|
||||
current_settings = settings.settings.get()
|
||||
|
||||
self.loc_count += 1
|
||||
self.barrery_count += 1
|
||||
self.gnns_count += 1
|
||||
|
||||
if (current_settings['app']['loc_mode'] & settings.default_values_app._loc_mode.cycle) \
|
||||
and current_settings['app']['loc_cycle_period'] \
|
||||
and self.loc_count == current_settings['app']['loc_cycle_period']:
|
||||
self.loc_count = 0
|
||||
self.loc_timer()
|
||||
|
||||
if self.barrery_count == 60:
|
||||
self.barrery_count = 0
|
||||
self.barrery_timer()
|
||||
|
||||
if current_settings['app']['loc_method'] & settings.default_values_app._loc_method.gps and \
|
||||
current_settings['app']['gps_mode'] & settings.default_values_app._gps_mode.internal:
|
||||
self.gnns_count = 1
|
||||
self.gnns_timer()
|
||||
|
||||
def loc_timer(self):
|
||||
self.tracker.locator.trigger()
|
||||
|
||||
def barrery_timer(self):
|
||||
current_settings = settings.settings.get()
|
||||
energy = self.tracker.battery.energy()
|
||||
is_charge = USB.getStatus()
|
||||
if is_charge == 0:
|
||||
self.tracker.energy_led_show(energy)
|
||||
if current_settings['app']['sw_low_power_alert']:
|
||||
if energy <= current_settings['app']['low_power_alert_threshold']:
|
||||
self.tracker.alert.post_alert(30002, {'local_time': utime.mktime(utime.localtime())})
|
||||
self.tracker.machine_info_report()
|
||||
if energy <= current_settings['app']['low_power_shutdown_threshold']:
|
||||
self.tracker.machine_info_report(power_switch=False)
|
||||
self.tracker.energy_led.period = None
|
||||
self.tracker.energy_led.switch(0)
|
||||
self.tracker.running_led.period = None
|
||||
self.tracker.running_led.switch(0)
|
||||
Power.powerDown()
|
||||
elif is_charge == 1:
|
||||
self.tracker.energy_led_show(energy)
|
||||
|
||||
def gnns_timer(self):
|
||||
self.tracker.locator.gps.quecgnns_read()
|
||||
|
||||
|
||||
class LEDTimer(object):
|
||||
def __init__(self, tracker):
|
||||
self.period = 500
|
||||
self.tracker = tracker
|
||||
self.energy_led_count = 0
|
||||
self.running_led_count = 0
|
||||
self.led_timer = osTimer(self.period, 1, self.led_callback)
|
||||
|
||||
def led_callback(self):
|
||||
self.energy_led_count += 1
|
||||
self.running_led_count += 1
|
||||
|
||||
if self.tracker.energy_led.period == 0 or \
|
||||
(self.tracker.energy_led.period > 0 and int(self.tracker.energy_led.period / self.period) == self.energy_led_count):
|
||||
self.led_timer(self.tracker.energy_led)
|
||||
|
||||
if self.tracker.running_led.period == 0 or \
|
||||
(self.tracker.running_led.period > 0 and int(self.tracker.energy_led.period / self.period) == self.running_led_count):
|
||||
self.led_timer(self.tracker.running_led)
|
||||
|
||||
def led_timer(self, led):
|
||||
led.switch(1)
|
||||
if led.period > 0:
|
||||
led.switch()
|
||||
|
76
code/led.py
76
code/led.py
@ -1,74 +1,16 @@
|
||||
from machine import Timer
|
||||
|
||||
import usr.settings as settings
|
||||
|
||||
# from machine import Pin
|
||||
from usr.common import Singleton
|
||||
from usr.logging import getLogger
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class LED(Singleton):
|
||||
def __init__(self):
|
||||
current_settings = settings.settings.get()
|
||||
self.energy_led_timer = Timer(current_settings['sys']['energy_led_timern'])
|
||||
self.operating_led_timer = Timer(current_settings['sys']['operating_led_timern'])
|
||||
self.on_color = [None, None, None]
|
||||
self.on_period = [None, None, None]
|
||||
self.long_bright = False
|
||||
self.led_type = None
|
||||
class LED(object):
|
||||
def __init__(self, period=None):
|
||||
self.period = None
|
||||
|
||||
# TODO: Three LED
|
||||
self.energy_led = None
|
||||
self.operating_led = None
|
||||
self.third_led = None
|
||||
|
||||
def on(self, led_type):
|
||||
if led_type == 'energy_led':
|
||||
# color = self.on_color[0]
|
||||
pass
|
||||
elif led_type == 'operating_led':
|
||||
pass
|
||||
elif led_type == 'third_led':
|
||||
pass
|
||||
|
||||
def off(self, led_type):
|
||||
if led_type == 'energy_led':
|
||||
pass
|
||||
elif led_type == 'operating_led':
|
||||
pass
|
||||
elif led_type == 'third_led':
|
||||
pass
|
||||
|
||||
def led_timer_cb(self, args):
|
||||
if self.on_color:
|
||||
self.on(self.led_type)
|
||||
if self.long_bright is False:
|
||||
self.off(self.led_type)
|
||||
|
||||
def flashing_mode(self, led_type, period, color=None):
|
||||
self.led_type = led_type
|
||||
self.long_bright = True if period == 0 else False
|
||||
if period == 0:
|
||||
mode = self.energy_led_timer.ONE_SHOT
|
||||
else:
|
||||
mode = self.energy_led_timer.PERIODIC
|
||||
|
||||
if led_type == 'energy_led':
|
||||
if self.on_color[0] != color or self.on_period[0] != period:
|
||||
self.on_color[0] = color
|
||||
self.on_period[0] = period
|
||||
self.energy_led_timer.stop()
|
||||
self.energy_led_timer.start(period=period, mode=mode, callback=self.led_timer_cb)
|
||||
elif led_type == 'operating_led':
|
||||
if self.on_color[1] != color or self.on_period[1] != period:
|
||||
self.on_color[1] = color
|
||||
self.on_period[1] = period
|
||||
self.operating_led_timer.stop()
|
||||
self.operating_led_timer.start(period=period, mode=mode, callback=self.led_timer_cb)
|
||||
elif led_type == 'third_led':
|
||||
if self.on_color[2] != color or self.on_period[2] != period:
|
||||
self.on_color[2] = color
|
||||
self.on_period[2] = period
|
||||
pass
|
||||
def switch(self, flag=None):
|
||||
# TODO:
|
||||
# 1. flag is None Auto Check LED Status ON To OFF or OFF To ON.
|
||||
# 2. flag is 1 LED ON.
|
||||
# 3. flag is 0 LED OFF.
|
||||
pass
|
||||
|
@ -11,11 +11,24 @@ from usr.logging import getLogger
|
||||
from usr.common import Singleton
|
||||
from wifilocator import wifilocator
|
||||
|
||||
try:
|
||||
import quecgnns
|
||||
except ImportError:
|
||||
quecgnns = None
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
gps_data_retrieve_queue = None
|
||||
|
||||
|
||||
class LocationError(Exception):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
||||
def __str__(self):
|
||||
return repr(self.value)
|
||||
|
||||
|
||||
def gps_data_retrieve_cb(para_list):
|
||||
'''
|
||||
GPS data retrieve callback from UART
|
||||
@ -46,19 +59,40 @@ def gps_data_retrieve_thread(argv):
|
||||
|
||||
class GPS(Singleton):
|
||||
def __init__(self, gps_cfg):
|
||||
self.gps_data = ''
|
||||
self.gps_cfg = gps_cfg
|
||||
current_settings = settings.settings.get()
|
||||
if current_settings['app']['gps_mode'] & settings.default_values_app._gps_mode.external:
|
||||
self.uart_init()
|
||||
elif current_settings['app']['gps_mode'] & settings.default_values_app._gps_mode.internal:
|
||||
if quecgnns:
|
||||
quecgnns.init()
|
||||
else:
|
||||
raise LocationError('quecgnns import error.')
|
||||
self.quecgnns_init()
|
||||
|
||||
def uart_init(self):
|
||||
global gps_data_retrieve_queue
|
||||
self.uart_obj = UART(
|
||||
gps_cfg['UARTn'], gps_cfg['buadrate'], gps_cfg['databits'],
|
||||
gps_cfg['parity'], gps_cfg['stopbits'], gps_cfg['flowctl']
|
||||
self.gps_cfg['UARTn'], self.gps_cfg['buadrate'], self.gps_cfg['databits'],
|
||||
self.gps_cfg['parity'], self.gps_cfg['stopbits'], self.gps_cfg['flowctl']
|
||||
)
|
||||
self.uart_obj.set_callback(gps_data_retrieve_cb)
|
||||
self.gps_data = ''
|
||||
gps_data_retrieve_queue = Queue(maxsize=8)
|
||||
_thread.start_new_thread(gps_data_retrieve_thread, (self,))
|
||||
|
||||
def uart_read(self, nread):
|
||||
return self.uart_obj.read(nread).decode()
|
||||
|
||||
def quecgnns_read(self):
|
||||
if quecgnns.get_state() == 0:
|
||||
quecgnns.gnssEnable(1)
|
||||
|
||||
data = quecgnns.read(4096)
|
||||
self.gps_data = data[1].decode()
|
||||
|
||||
return self.gps_data
|
||||
|
||||
def read(self):
|
||||
return self.gps_data
|
||||
|
||||
@ -201,6 +235,10 @@ class Location(Singleton):
|
||||
if r:
|
||||
data.append(r)
|
||||
|
||||
r = self.gps.read_location_GxVTG()
|
||||
if r:
|
||||
data.append(r)
|
||||
|
||||
if len(data):
|
||||
return (settings.default_values_app._loc_method.gps, data)
|
||||
|
||||
|
@ -1,46 +0,0 @@
|
||||
|
||||
'''
|
||||
check if network, gps, and all the sensors work normally
|
||||
'''
|
||||
|
||||
import sim
|
||||
import net
|
||||
import utime
|
||||
import usr.settings as settings
|
||||
from usr.location import GPS
|
||||
|
||||
|
||||
def net_check():
|
||||
# return True if OK
|
||||
if sim.getStatus() == 1:
|
||||
if net.getModemFun() == 1:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def gps_check():
|
||||
# return True if OK
|
||||
gps = GPS(settings.default_values_sys._gps_cfg)
|
||||
|
||||
retry = 0
|
||||
gps_data = None
|
||||
sleep_time = 1
|
||||
while retry < 5:
|
||||
gps_data = gps.read()
|
||||
if gps_data:
|
||||
break
|
||||
else:
|
||||
retry += 1
|
||||
utime.sleep(sleep_time)
|
||||
sleep_time *= 2
|
||||
if gps_data:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def sensor_check():
|
||||
# return True if OK
|
||||
# TODO: How To Check Light & Movement Sensor?
|
||||
return True
|
@ -6,7 +6,6 @@ import ure
|
||||
import _thread
|
||||
import quecIot
|
||||
from machine import UART
|
||||
from machine import Timer
|
||||
from usr.logging import getLogger
|
||||
from usr.common import Singleton
|
||||
|
||||
@ -61,6 +60,11 @@ class default_values_app(object):
|
||||
onVoiceRecord = 0x8
|
||||
all = 0xF
|
||||
|
||||
class _gps_mode(object):
|
||||
none = 0x0
|
||||
internal = 0x1
|
||||
external = 0x2
|
||||
|
||||
class _drive_behavior(object):
|
||||
suddenly_start = 0
|
||||
suddenly_stop = 1
|
||||
@ -70,16 +74,14 @@ class default_values_app(object):
|
||||
'''
|
||||
variables of App default settings below MUST NOT start with '_'
|
||||
'''
|
||||
loc_timern = Timer.Timer0
|
||||
energy_led_timern = Timer.Timer1
|
||||
operating_led_timern = Timer.Timer2
|
||||
battery_timern = Timer.Timer3
|
||||
|
||||
phone_num = ''
|
||||
|
||||
loc_method = _loc_method.gps
|
||||
|
||||
loc_mode = _loc_mode.none
|
||||
gps_mode = _gps_mode.external
|
||||
|
||||
loc_mode = _loc_mode.cycle
|
||||
|
||||
loc_cycle_period = 1
|
||||
|
||||
|
156
code/tracker.py
156
code/tracker.py
@ -1,9 +1,8 @@
|
||||
# import _thread
|
||||
import sim
|
||||
import net
|
||||
import utime
|
||||
|
||||
# from queue import Queue
|
||||
from machine import Timer
|
||||
from misc import USB
|
||||
from misc import Power
|
||||
from misc import PowerKey
|
||||
|
||||
import usr.settings as settings
|
||||
@ -12,40 +11,35 @@ from usr.led import LED
|
||||
from usr.sensor import Sensor
|
||||
from usr.remote import Remote
|
||||
from usr.battery import Battery
|
||||
from usr.common import Singleton, Controller
|
||||
from usr.location import Location
|
||||
from usr.common import Singleton, Controller, TrackerTimer, LEDTimer
|
||||
from usr.location import Location, GPS
|
||||
from usr.alert import AlertMonitor
|
||||
from usr.logging import getLogger
|
||||
from usr.selfcheck import net_check, gps_check, sensor_check
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class Tracker(Singleton):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.led = LED()
|
||||
self.energy_led = LED()
|
||||
self.running_led = LED()
|
||||
self.sensor = Sensor()
|
||||
self.locator = Location(self.loc_read_cb)
|
||||
self.alert = AlertMonitor(self.alert_read_cb)
|
||||
self.battery = Battery(self.batter_read_cb)
|
||||
self.controller = Controller(self.remote)
|
||||
self.controller = Controller(self)
|
||||
self.remote = Remote(self, self.remote_read_cb)
|
||||
|
||||
current_settings = settings.settings.get()
|
||||
self.loc_timer = Timer(current_settings['sys']['loc_timern'])
|
||||
self.loc_timer_init()
|
||||
self.tracker_timer = TrackerTimer(self)
|
||||
self.led_timer = LEDTimer(self)
|
||||
|
||||
self.power_key = PowerKey()
|
||||
self.power_key.powerKeyEventRegister(self.pwk_callback)
|
||||
self.usb = USB()
|
||||
self.usb.setCallback(self.usb_callback)
|
||||
self.check = SelfCheck()
|
||||
|
||||
def remote_read_cb(self, *data):
|
||||
if data:
|
||||
if data[0] == 'object_model':
|
||||
for item in data[1]:
|
||||
if item[0] == 'loc_mode':
|
||||
self.loc_timer_init()
|
||||
pass
|
||||
|
||||
def loc_read_cb(self, data):
|
||||
if data:
|
||||
@ -65,70 +59,46 @@ class Tracker(Singleton):
|
||||
alert_data = {data[0]: data[1]}
|
||||
self.remote.post_data(data_type, alert_data)
|
||||
|
||||
def batter_read_cb(self, *data):
|
||||
def machine_info_report(self, power_switch=True):
|
||||
current_settings = settings.settings.get()
|
||||
energy = data[0]
|
||||
is_charge = USB.getStatus()
|
||||
if is_charge == 0:
|
||||
self.energy_led_show(energy)
|
||||
if current_settings['app']['sw_low_power_alert']:
|
||||
if energy <= current_settings['app']['low_power_alert_threshold']:
|
||||
# TODO: low_power_alert
|
||||
pass
|
||||
if energy <= current_settings['app']['low_power_shutdown_threshold']:
|
||||
# TODO: low_power_shutdown
|
||||
self.led.off()
|
||||
Power.powerDown()
|
||||
elif is_charge == 1:
|
||||
if energy == 100:
|
||||
self.led.flashing_mode('energy_led', 0, 'green')
|
||||
|
||||
def machine_info_report(self):
|
||||
pass
|
||||
self.locator.trigger()
|
||||
# TODO: Other Machine Info.
|
||||
machine_info = {
|
||||
'power_switch': power_switch,
|
||||
'energy': self.battery.energy(),
|
||||
'local_time': utime.mktime(utime.localtime()),
|
||||
'phone_num': current_settings['app']['phone_num'],
|
||||
}
|
||||
self.remote.post_data(self.remote.DATA_NON_LOCA, machine_info)
|
||||
|
||||
def energy_led_show(self, energy):
|
||||
color = None
|
||||
if energy <= 5:
|
||||
self.led.off()
|
||||
elif 5 < energy <= 20:
|
||||
color = 'red'
|
||||
elif 20 < energy <= 40:
|
||||
color = 'orange'
|
||||
elif 40 < energy <= 70:
|
||||
color = 'yellow'
|
||||
elif 70 < energy <= 100:
|
||||
color = 'green'
|
||||
if color:
|
||||
self.led.flashing_mode('energy_led', 0, color)
|
||||
|
||||
def loc_timer_cb(self, args):
|
||||
self.locator.trigger()
|
||||
|
||||
def loc_timer_init(self):
|
||||
current_settings = settings.settings.get()
|
||||
if (current_settings['app']['loc_mode'] & settings.default_values_app._loc_mode.cycle) \
|
||||
and current_settings['app']['loc_cycle_period']:
|
||||
log.debug('[.] loc_timer to restart.')
|
||||
self.loc_timer.stop()
|
||||
log.debug('[.] loc_timer stop.')
|
||||
self.loc_timer.start(period=current_settings['app']['loc_cycle_period'] * 1000, mode=self.loc_timer.PERIODIC, callback=self.loc_timer_cb)
|
||||
log.debug('[.] loc_timer start.')
|
||||
else:
|
||||
self.loc_timer.stop()
|
||||
log.debug('[.] loc_timer stop forever.')
|
||||
if energy <= current_settings['app']['low_power_shutdown_threshold']:
|
||||
self.energy_led.period = None
|
||||
self.energy_led.switch(0)
|
||||
elif current_settings['app']['low_power_shutdown_threshold'] < energy <= current_settings['app']['low_power_alert_threshold']:
|
||||
self.energy_led.period = 1
|
||||
elif current_settings['app']['low_power_alert_threshold'] < energy:
|
||||
self.energy_led.period = 0
|
||||
|
||||
def pwk_callback(self, status):
|
||||
if status == 0:
|
||||
# TODO: Power On SelfCheck
|
||||
log.info('PowerKey Release.')
|
||||
net_check_res = net_check()
|
||||
gps_check_res = gps_check()
|
||||
sensor_check_res = sensor_check()
|
||||
net_check_res = self.check.net_check()
|
||||
gps_check_res = self.check.gps_check()
|
||||
sensor_check_res = self.check.sensor_check()
|
||||
if net_check_res and gps_check_res and sensor_check_res:
|
||||
self.led.flashing_mode('operating_led', 2000)
|
||||
self.running_led.period = 2
|
||||
else:
|
||||
self.led.flashing_mode('operating_led', 500)
|
||||
# TODO: Post Fault Error Info
|
||||
self.running_led.period = 0.5
|
||||
if not net_check_res:
|
||||
self.alert.post_alert(20000, {'fault_code': 20001})
|
||||
if not gps_check_res:
|
||||
self.alert.post_alert(20000, {'fault_code': 20002})
|
||||
if not sensor_check_res:
|
||||
# TODO: Need To Check What Sensor Error To Report.
|
||||
pass
|
||||
self.machine_info_report()
|
||||
elif status == 1:
|
||||
log.info('PowerKey Press.')
|
||||
else:
|
||||
@ -141,11 +111,41 @@ class Tracker(Singleton):
|
||||
self.energy_led_show(energy)
|
||||
elif status == 1:
|
||||
log.info('USB is connected.')
|
||||
if energy <= 5:
|
||||
self.led.flashing_mode('energy_led', 1000, 'red')
|
||||
elif 5 < energy < 100:
|
||||
self.led.flashing_mode('energy_led', 1000, 'yellow')
|
||||
elif energy == 100:
|
||||
self.led.flashing_mode('energy_led', 0, 'green')
|
||||
self.energy_led_show(energy)
|
||||
else:
|
||||
log.warn('Unknown USB Stauts:', status)
|
||||
|
||||
|
||||
class SelfCheck(object):
|
||||
def net_check(self):
|
||||
# return True if OK
|
||||
if sim.getStatus() == 1:
|
||||
if net.getModemFun() == 1:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def gps_check(self):
|
||||
# return True if OK
|
||||
gps = GPS(settings.default_values_sys._gps_cfg)
|
||||
|
||||
retry = 0
|
||||
gps_data = None
|
||||
sleep_time = 1
|
||||
while retry < 5:
|
||||
gps_data = gps.read()
|
||||
if gps_data:
|
||||
break
|
||||
else:
|
||||
retry += 1
|
||||
utime.sleep(sleep_time)
|
||||
sleep_time *= 2
|
||||
if gps_data:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def sensor_check(self):
|
||||
# return True if OK
|
||||
# TODO: How To Check Light & Movement Sensor?
|
||||
return True
|
||||
|
Loading…
x
Reference in New Issue
Block a user