Exemple #1
0
def Input_Capture():
    KEY_log.debug("I_C start!")
    global state
    global key_time
    timer1 = Timer(Timer.Timer1)  #定时器1
    timer1.start(period=1, mode=timer1.PERIODIC, callback=Time1_fun)
    extint1 = ExtInt(ExtInt.GPIO1, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU,
                     I_C_fun)
    extint1.enable()
    while True:
        if gpio2.read() == 0:
            utime.sleep_ms(10)
            if gpio2.read() == 0:
                KEY_log.info("GPIO2 levels:{}".format(gpio2.read()))
                break
        if key_time != 0:
            KEY_log.info("key_time:{}ms".format(key_time))
            if key_time <= key_short:
                pass
            elif key_short < key_time <= key_log:
                print(" key short input ")
            elif key_log < key_time <= key_out:
                print(" key log input ")
            else:
                print(" key out ")
                pass
            key_time = 0
    state = 0
    KEY_log.debug("I_C end!")
Exemple #2
0
class UART:
    def __init__(self, checkInterval):
        from machine import Timer
        self.timer = Timer(Timer.TIMER0, Timer.CHANNEL0, start=False, callback=self.inputCheck, period=checkInterval, mode=Timer.MODE_PERIODIC)
    checking = False
    uart = False
    timer = False
    def connect(self):
        from fpioa_manager import fm
        import machine
        fm.register(35, fm.fpioa.UART2_RX, force=True)
        fm.register(34, fm.fpioa.UART2_TX, force=True)
        self.uart = machine.UART(machine.UART.UART2, 115200, 8, 0, 2, timeout=1000, read_buf_len=4096)
        self.uart.init()
        self.timer.start()
        return self.uart

    def inputCheck(self, timerobj):
        if (self.uart.any() > 0 and self.checking == False):
            self.checking = True
            self.checking = self.onMessage(actionManager)

    def onMessage(self, callback):
        while self.uart.any() > 0:
            msg = self.uart.readline()
            print("new message")
            print(msg)
            if callback != None:
                callback(msg.decode("utf-8"), self)
        return False
Exemple #3
0
def test_power_module():
    # 创建一个定时器对象
    T = Timer(Timer.Timer1)
    # period 单位为 ms
    T.start(period=5000, mode=Timer.ONE_SHOT, callback=CallBack)  # 启动定时器
    # wait
    while True:
        time.sleep_ms(1)
    print("The main function has exited")
Exemple #4
0
def tone(pin_number, frequency, duration):
    global board_info
    value = 50
    tim = Timer(Timer.TIMER2, Timer.CHANNEL0, mode=Timer.MODE_PWM)
    tim.start()
    _pin = board_info['gpio'][pin_number]
    PWM(tim, freq=frequency, duty=value, pin=_pin)
    time.sleep_ms(duration)
    tim.stop()
Exemple #5
0
def init_wdt():
    global timer0, wdt
    wdt = WDT(30)

    period = 5000
    system_log.info(
        "Feeding dog service is running per {} millseconds".format(period))

    timer0 = Timer(Timer.Timer0)
    timer0.start(period=period, mode=timer0.PERIODIC, callback=feed_dog)
Exemple #6
0
def main():
    # 创建一个定时器对象
    T = Timer(Timer.Timer1)
    # 设置周期为1秒,
    T.start(period=1000, mode=Timer.PERIODIC, callback=CallBack)  # 启动定时器
    # wait
    while state:
        time.sleep_ms(1)
        pass
    T.stop()  # 结束该定时器实例
    print("The main function has exited")
    def start(self, id, period, mode, callback_func):
        if id not in self._avaliable_timer_list:
            _timer_log.info(
                "Cannot start a new timer, the timer id {} is invalid".format(
                    id))
            return

        if period is None:
            period = 1000
        if mode is None:
            mode = Timer.PERIODIC

        timer = Timer(id)
        timer.start(period=period, mode=mode, callback=callback_func)
        _timer_log.info("Start a new timer, id={}, period={}, mode={}".format(
            id, period, mode))
class UART:
    def __init__(self, checkInterval,callback):
        from machine import Timer
        self.callback = callback
        self.timer = Timer(Timer.TIMER0, Timer.CHANNEL0, start=False, callback=self.inputCheck, period=checkInterval, mode=Timer.MODE_PERIODIC)
        self.checking = False
        self.sending = False
        self.uart = False

    def connect(self):
        from fpioa_manager import fm
        import machine
        fm.register(35, fm.fpioa.UARTHS_RX, force=True)
        fm.register(34, fm.fpioa.UARTHS_TX, force=True)
        self.uart = machine.UART(machine.UART.UARTHS, 115200, 8, 0, 1, timeout=1000, read_buf_len=4096)
        self.uart.init()
        self.timer.start()
        return self.uart

    def send(self, data):
        if not self.sending:
            self.sending = True
            self.uart.write(data)
            self.sending = False

    def inputCheck(self, timerobj):
        if (self.uart.any() > 0 and self.checking == False):
            self.checking = True
            self.checking = self.onMessage(self.callback)

    def onMessage(self, callback):
        while self.uart.any() > 0:
            msg = self.uart.readline()
            if callback != None:
                callback(msg)
        return False
def on_timer(timer):
    #print("time up:",timer)
    #print("param:",timer.callback_arg())
    timer.callback_arg().state()


try:
    # default: maix dock / maix duino set shift=0
    t = maix_asr(0x500000, I2S.DEVICE_0, 3, shift=0)  # maix bit set shift=1
    tim = Timer(Timer.TIMER0,
                Timer.CHANNEL0,
                mode=Timer.MODE_PERIODIC,
                period=64,
                callback=on_timer,
                arg=t)
    tim.start()

    #for i in range(50):
    #time.sleep_ms(100)
    #t.stop()
    #for i in range(50):
    #time.sleep_ms(100)
    #t.run()

    t.config({
        'xiao-ai-ya': 0.3,
        'hao-de-ya': 0.2,
        'ni-hao-ya': 0.3,
    })

    print(t.get())
Exemple #10
0
class SpikePrimeDevice(object):
    def __init__(self, tx_pin, rx_pin, timer=Timer.TIMER0, timer_channel=Timer.CHANNEL0,
            tx_gpio=GPIO.GPIO1, tx_fpioa_gpio=fm.fpioa.GPIO1, uart_num=UART.UART2):

        self.connected = False
        self.uart = None
        self.tx_pin_num = tx_pin
        self.rx_pin_num = rx_pin
        self.data = 0
        self.current_mode = 0
        self.textBuffer = bytearray(b'             ')
        self.timer_num = timer
        self.timer_channel_num = timer_channel
        self.timer = None
        self.tx_gpio = tx_gpio
        self.tx_fpioa_gpio = tx_fpioa_gpio
        self.uart_num = uart_num
        if uart_num == UART.UART2:
            self.uart_tx_fpioa_num = fm.fpioa.UART2_TX
            self.uart_rx_fpioa_num = fm.fpioa.UART2_RX
        elif uart_num == UART.UART1:
            self.uart_tx_fpioa_num = fm.fpioa.UART1_TX
            self.uart_rx_fpioa_num = fm.fpioa.UART1_RX

    def initialize(self):
        assert not self.connected

        print("connecting...")

        fm.register(self.tx_pin_num, self.tx_fpioa_gpio, force=True)
        uart_tx = GPIO(self.tx_gpio, GPIO.OUT)

        uart_tx.value(0)
        time.sleep_ms(500)
        uart_tx.value(1)

        fm.register(self.tx_pin_num, self.uart_tx_fpioa_num, force=True)
        fm.register(self.rx_pin_num, self.uart_rx_fpioa_num, force=True)

        self.uart = UART(self.uart_num, 2400, bits=8, parity=None, stop=1, timeout=10000, read_buf_len=4096)

        self.uart.write(b'\x00')
        self.uart.write(b'\x40\x3e\x81')
        self.uart.write(b'\x49\x07\x07\xb6')
        self.uart.write(b'\x52\x00\xc2\x01\x00\x6e')
        self.uart.write(b'\x5f\x00\x00\x00\x02\x00\x00\x00\x02\xa0')

        self.uart.write(b'\xa7\x00\x66\x6c\x6f\x61\x74\x5f\x61\x72\x72\x61\x79\x00\x00\x00\x00\x00\x0e')
        self.uart.write(b'\x9f\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xeb')
        self.uart.write(b'\x9f\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xe8')
        self.uart.write(b'\x9f\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xe9')
        self.uart.write(b'\x87\x04\x00\x7c')
        self.uart.write(b'\x8f\x05\x10\x00\x65')
        self.uart.write(b'\x97\x80\x04\x03\x02\x01\xec')
        time.sleep_ms(5)

        self.uart.write(b'\xa6\x00\x69\x6e\x74\x33\x32\x5f\x61\x72\x72\x61\x79\x00\x00\x00\x00\x00\x0d')
        self.uart.write(b'\x9e\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xea')
        self.uart.write(b'\x9e\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xe9')
        self.uart.write(b'\x9e\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xe8')
        self.uart.write(b'\x86\x04\x00\x7d')
        self.uart.write(b'\x8e\x05\x10\x00\x64')
        self.uart.write(b'\x96\x80\x04\x02\x03\x00\xec')
        time.sleep_ms(5)

        self.uart.write(b'\xa5\x00\x69\x6e\x74\x31\x36\x5f\x61\x72\x72\x61\x79\x00\x00\x00\x00\x00\x08')
        self.uart.write(b'\x9d\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xe9')
        self.uart.write(b'\x9d\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xea')
        self.uart.write(b'\x9d\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xeb')
        self.uart.write(b'\x85\x04\x00\x7e')
        self.uart.write(b'\x8d\x05\x10\x00\x67')
        self.uart.write(b'\x95\x80\x04\x01\x03\x00\xec')
        time.sleep_ms(5)

        self.uart.write(b'\xa4\x00\x69\x6e\x74\x38\x5f\x61\x72\x72\x61\x79\x00\x00\x00\x00\x00\x00\x36')
        self.uart.write(b'\x9c\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xe8')
        self.uart.write(b'\x9c\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xeb')
        self.uart.write(b'\x9c\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xea')
        self.uart.write(b'\x84\x04\x00\x7f')
        self.uart.write(b'\x8c\x05\x10\x00\x66')
        self.uart.write(b'\x94\x80\x04\x00\x03\x00\xec')
        time.sleep_ms(5)

        self.uart.write(b'\x9b\x00\x66\x6c\x6f\x61\x74\x00\x00\x00\x14')
        self.uart.write(b'\x9b\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xef')
        self.uart.write(b'\x9b\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xec')
        self.uart.write(b'\x9b\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xed')
        self.uart.write(b'\x83\x04\x00\x78')
        self.uart.write(b'\x8b\x05\x10\x00\x61')
        self.uart.write(b'\x93\x80\x01\x03\x02\x01\xed')
        time.sleep_ms(5)

        self.uart.write(b'\x9a\x00\x69\x6e\x74\x33\x32\x00\x00\x00\x17')
        self.uart.write(b'\x9a\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xee')
        self.uart.write(b'\x9a\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xed')
        self.uart.write(b'\x9a\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xec')
        self.uart.write(b'\x82\x04\x00\x79')
        self.uart.write(b'\x8a\x05\x10\x00\x60')
        self.uart.write(b'\x92\x80\x01\x02\x03\x00\xed')
        time.sleep_ms(5)

        self.uart.write(b'\x99\x00\x69\x6e\x74\x31\x36\x00\x00\x00\x12')
        self.uart.write(b'\x99\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xed')
        self.uart.write(b'\x99\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xee')
        self.uart.write(b'\x99\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xef')
        self.uart.write(b'\x81\x04\x00\x7a')
        self.uart.write(b'\x89\x05\x10\x00\x63')
        self.uart.write(b'\x91\x80\x01\x01\x03\x00\xed')
        time.sleep_ms(5)

        self.uart.write(b'\x90\x00\x69\x6e\x74\x38\x24')
        self.uart.write(b'\x98\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xec')
        self.uart.write(b'\x98\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xef')
        self.uart.write(b'\x98\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xee')
        self.uart.write(b'\x80\x04\x00\x7b')
        self.uart.write(b'\x88\x05\x10\x00\x62')
        self.uart.write(b'\x90\x80\x01\x00\x03\x00\xed')
        time.sleep_ms(5)

        self.uart.write(b'\x04')
        time.sleep_ms(5)

        print("waiting for ACK...")
        self.connected = self._wait_for_value(b'\x04')

        if self.connected:
            print("connected")
            self.uart.deinit()

            fm.register(self.tx_pin_num, self.tx_fpioa_gpio, force=True)
            uart_tx = GPIO(self.tx_gpio, GPIO.OUT)

            uart_tx.value(0)
            time.sleep_ms(10)

            fm.register(self.tx_pin_num, self.uart_tx_fpioa_num, force=True)
            fm.register(self.rx_pin_num, self.uart_rx_fpioa_num, force=True)

            self.uart = UART(self.uart_num, 115200, bits=8, parity=None, stop=1, timeout=10000, read_buf_len=4096)
            self.set_data(0)

            self.timer = Timer(self.timer_num, self.timer_channel_num,
                mode=Timer.MODE_PERIODIC, period=200, callback=self._handle_message_callback)
            self.timer.start()
        else:
            print("not connected")

        return self.connected

    def _wait_for_value(self, expected_value, timeout=2):
        starttime = time.time()
        currenttime = starttime
        status = False
        #count = 0
        while (currenttime - starttime) < timeout:
            time.sleep_ms(5)
            #print(count)
            #count += 1
            currenttime = time.time()
            if self.uart.any() > 0:
                data = self.uart.readchar()
                #print(data)
                if data == ord(expected_value):
                    status = True
                    break
        return status

    def set_data(self, data):
        self.data = data

    def _get_checksum(self, values):
        checksum = 0xFF
        for x in values:
            checksum ^= x
        return checksum

    def _send_value(self, data):
        value = data & 0xFF
        payload = bytes([0xC0, value, self._get_checksum([0xC0, value])])
        size = self.uart.write(payload)
        return size

    def _handle_message_callback(self, timer):
        if not self.connected:
            return

        while self.uart.any() > 0:
            x = self.uart.readchar()
            if x == 0:
                pass
            elif x == 0x02:
                pass
            elif x == 0x43:
                mode = self.uart.readchar()
                checksum = self.uart.readchar()
                if checksum == self._get_checksum([x, mode]):
                    self.current_mode = mode
            elif x == 0x46:
                zero = self.uart.readchar()
                b9 = self.uart.readchar()
                if zero == 0 and b9 == 0xb9:
                    size_mode = self.uart.readchar()
                    size = 2 ** ((size_mode & 0b111000) >> 3)
                    mode = size_mode & 0b111
                    checksum = self._get_checksum([x, zero, b9, size_mode])
                    for i in range(len(self.textBuffer)):
                        self.textBuffer[i] = ord(b' ')

                    for i in range(size):
                        self.textBuffer[i] = self.uart.readchar()
                        checksum ^= self.textBuffer[i]

                    expected_checksum = self.uart.readchar()
                    if expected_checksum == checksum:
                        print(self.textBuffer)
            elif x == 0x4C:
                thing = self.uart.readchar()
                checksum = self.uart.readchar()
                if checksum == self._get_checksum([x, thing]):
                    pass
            else:
                print(x)

        size = self._send_value(self.data)
        if not size:
            self.connected = False
Exemple #11
0
# 创建一个执行函数,并将timer实例传入
def timer_test(t):
	global num
	global state
	Timer_Log.info('num is %d' % num)
	num += 1
	if num > 10:
		Timer_Log.info('num > 10, timer exit')
		state = 0
		t.stop()   # 结束该定时器实例


if __name__ == '__main__':
	'''
	手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时,
	否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息
	'''
	utime.sleep(5)
	checknet.poweron_print_once()
	'''
	如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功);
	如果是网络无关代码,可以屏蔽 wait_network_connected()
	【本例程可以屏蔽下面这一行!】
	'''
	# checknet.wait_network_connected()

	t.start(period=1000, mode=t.PERIODIC, callback=timer_test)   # 启动定时器

	while state:
		pass
Exemple #12
0
from machine import WDT
from machine import Timer

count = 0


def feed(t):
    global count
    count += 1
    if count >= 5:
        print('停止喂狗')
        timer1.stop()
    print('喂狗')
    wdt.feed()


timer1 = Timer(Timer.Timer1)
wdt = WDT(2)  # 启动看门狗,间隔时长 单位 秒
timer1.start(period=1000, mode=timer1.PERIODIC, callback=feed)  # 使用定时器喂狗
Exemple #13
0
class timer:
    def __init__(self, timerid):
        self.timerid = timerid
        self.state = 0  # 0:off,1:running,2:paused
        self.starttime = 0
        self.pausetime = 0
        self.lefttime = 0
        self.timer = None
        self.timeractive = False
        self.callback = None
        self.retvalue = [-1, -1]
        self.looping = False
        self.loopcount = 0
        self.maxloops = -1
        self.timeout = 0
        self.laststart = 0

    def addcallback(self, callback):
        self.retvalue = [-1, -1]
        self.callback = callback

    def setretvalue(self, retvalue):
        self.retvalue = retvalue

    def start(self, timeout, usrcall=True, looping=False, maxloops=-1):
        #  print("Timer",self.timerid,"started with timeout:",timeout)
        try:
            if self.timer is not None:
                try:
                    self.timer.deinit()
                except:
                    pass
            self.starttime = time.time()
            self.lefttime = timeout
            self.state = 1
            self.timeractive = True
            self.looping = looping
            if usrcall or self.timeout == 0:
                self.timeout = timeout
                self.maxloops = maxloops
                self.loopcount = 0
            self.loopcount += 1
            self.laststart = time.time()
            self.timer = Timer(self.timerid - 1)
            self.timer.init(mode=Timer.ONE_SHOT,
                            period=get_us_from_sec(timeout),
                            callback=self.stop)
        except Exception as e:
            print(e)

    def stop(self, call=True):
        #  print("Timer",self.timerid,"stopped")
        self.state = 0
        self.starttime = 0
        self.timeractive = False
        try:
            if self.timer is not None:
                self.timer.deinit()
        except:
            pass
        try:
            if call and self.callback:
                if self.retvalue[0] > -1:
                    self.callback(
                        self.timerid,
                        self.retvalue)  # callbacks with saved return value
                else:
                    self.callback(
                        self.timerid)  # call rules with timer id only
        except Exception as e:
            print(e)
        if self.maxloops > -1:
            if self.loopcount >= self.maxloops:  #loop count reached
                self.looping = False
        if self.looping and call:  #autorestart timer
            self.start(self.timeout, False, True, self.maxloops)
        else:
            self.looping = False

    def pause(self):
        if self.state == 1:
            lefttime = time.time() - self.starttime
            #   print("Timer",self.timerid,"runnning paused at",lefttime)
            if lefttime < self.lefttime:
                self.lefttime = self.lefttime - lefttime
                self.state = 2
                try:
                    self.timer.deinit()
                except:
                    pass

    def resume(self):
        if self.state == 2:
            #   print("Timer",self.timerid,"runnning continues for",self.lefttime)
            self.timer = Timer(self.timerid - 1)
            self.timer.init(mode=Timer.ONE_SHOT,
                            period=get_us_from_sec(self.lefttime),
                            callback=self.stop)
            self.starttime = time.time()
            self.state = 1
            self.pausetime = 0
            self.timer.start()
Exemple #14
0
class MindstromsDevice(object):
    def __init__(self,
                 tx_pin,
                 rx_pin,
                 timer=Timer.TIMER0,
                 timer_channel=Timer.CHANNEL0,
                 tx_gpio=GPIO.GPIO1,
                 tx_fpioa_gpio=fm.fpioa.GPIO1,
                 uart_num=UART.UART2):

        self.connected = False
        self.uart = None
        self.tx_pin_num = tx_pin
        self.rx_pin_num = rx_pin
        self.data = 0
        self.current_mode = 0
        self.textBuffer = bytearray(b'             ')
        self.timer_num = timer
        self.timer_channel_num = timer_channel
        self.timer = None
        self.tx_gpio = tx_gpio
        self.tx_fpioa_gpio = tx_fpioa_gpio
        self.uart_num = uart_num
        if uart_num == UART.UART2:
            self.uart_tx_fpioa_num = fm.fpioa.UART2_TX
            self.uart_rx_fpioa_num = fm.fpioa.UART2_RX
        elif uart_num == UART.UART1:
            self.uart_tx_fpioa_num = fm.fpioa.UART1_TX
            self.uart_rx_fpioa_num = fm.fpioa.UART1_RX

    def initialize(self):
        assert not self.connected

        print("connecting...")

        fm.register(self.tx_pin_num, self.tx_fpioa_gpio, force=True)
        uart_tx = GPIO(self.tx_gpio, GPIO.OUT)

        uart_tx.value(0)
        time.sleep_ms(410)
        uart_tx.value(1)

        fm.register(self.tx_pin_num, self.uart_tx_fpioa_num, force=True)
        fm.register(self.rx_pin_num, self.uart_rx_fpioa_num, force=True)

        self.uart = UART(self.uart_num,
                         115200,
                         bits=8,
                         parity=None,
                         stop=1,
                         timeout=10000,
                         read_buf_len=4096)

        # wait for \x52\x00\xc2\x01\x00\x6e
        self.uart.write(b'\x04')  # ACK?
        time.sleep_ms(10)
        self.uart.write(b'\x40\x3e\x81')  # CMD_TYPE(1), TypeID:0x3e, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x51\x07\x06\x08\x00\xa7'
        )  # CMD_MODES(4), 8 modes for EV3, 7 views for EV3, 9 modes, 0 views, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x52\x00\xc2\x01\x00\x6e'
                        )  # CMD_SPEED(4), speed:115200, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x5f\x00\x00\x00\x10\x00\x00\x00\x10\xa0'
        )  # CMD_VERSION(8), fw-version:1.0.00.0000, hw-version:1.0.00.0000, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa0\x20\x43\x41\x4c\x49\x42\x00\x40\x40\x00\x00\x04\x84\x00\x00\x00\x00\xba'
        )  # INFO_NAME(16) | mode:0+8, "CALIB\0" + flags(0x40, 0x40, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(
            b'\x98\x21\x00\x00\x00\x00\x00\x00\x7f\x43\x7a'
        )  # INFO_RAW(8) | mode:0+8, min:0.0, max:255.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x98\x22\x00\x00\x00\x00\x00\x00\xc8\x42\xcf'
        )  # INFO_PCT(8) | mode:0+8, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x98\x23\x00\x00\x00\x00\x00\x00\x7f\x43\x78'
        )  # INFO_SI(8) | mode:0+8, min:0.0, max:255.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x90\x24\x50\x43\x54\x00\x0c'
                        )  # INFO_SYMBOL(4) | mode:0+8, "PCT\0", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x88\x25\x00\x00\x52'
        )  # INFO_MAPPING(2) | mode:0+8, input:0, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x90\xa0\x07\x00\x03\x00\xcb'
        )  # INFO_FORMAT(4) | mode:0+8, data-sets:7, format:0, figures:3, decimals:0, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa7\x00\x41\x44\x52\x41\x57\x00\x40\x00\x00\x00\x04\x84\x00\x00\x00\x00\xd9'
        )  # INFO_NAME(16) | mode:7, "ADRAW\0" + flags(0x40, 0x00, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(
            b'\x9f\x01\x00\x00\x00\x00\x00\x00\x80\x44\xa5'
        )  # INFO_RAW(8) | mode:7, min:0.0, max:1024.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9f\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xe8'
                        )  # INFO_PCT(8) | mode:7, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9f\x03\x00\x00\x00\x00\x00\x00\x80\x44\xa7'
                        )  # INFO_SI(8) | mode:7, min:0.0, max:1024.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x97\x04\x50\x43\x54\x00\x2b'
                        )  # INFO_SYMBOL(4) | mode:7, "PCT\0", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8f\x05\x90\x00\xe5'
        )  # INFO_MAPPING(2) | mode:7, input:0x90, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x97\x80\x01\x01\x04\x00\xec'
        )  # INFO_FORMAT(4) | mode:7, data-sets:1, format:1, figures:4, decimals:0, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa6\x00\x50\x49\x4e\x47\x00\x00\x40\x80\x00\x00\x04\x84\x00\x00\x00\x00\x09'
        )  # INFO_NAME(16) | mode:6, "PING\0\0" + flags(0x40, 0x80, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(b'\x9e\x01\x00\x00\x00\x00\x00\x00\x80\x3f\xdf'
                        )  # INFO_RAW(8) | mode:6, min:0.0, max:1.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9e\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xe9'
                        )  # INFO_PCT(8) | mode:6, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9e\x03\x00\x00\x00\x00\x00\x00\x80\x3f\xdd'
                        )  # INFO_SI(8) | mode:6, min:0.0, max:1.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x96\x04\x50\x43\x54\x00\x2a'
                        )  # INFO_SYMBOL(4) | mode:6, "PCT\0", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8e\x05\x00\x90\xe4'
        )  # INFO_MAPPING(2) | mode:6, input:0, output:0x90, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x96\x80\x01\x00\x01\x00\xe9'
        )  # INFO_FORMAT(4) | mode:6, data-sets:1, format:0, figures:1, decimals:0, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa5\x00\x4c\x49\x47\x48\x54\x00\x40\x20\x00\x00\x04\x84\x00\x00\x00\x00\xe4'
        )  # INFO_NAME(16) | mode:5, "LIGHT\0" + flags(0x40, 0x20, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(b'\x9d\x01\x00\x00\x00\x00\x00\x00\xc8\x42\xe9'
                        )  # INFO_RAW(8) | mode:5, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9d\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xea'
                        )  # INFO_PCT(8) | mode:5, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9d\x03\x00\x00\x00\x00\x00\x00\xc8\x42\xeb'
                        )  # INFO_SI(8) | mode:5, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x95\x04\x50\x43\x54\x00\x29'
                        )  # INFO_SYMBOL(4) | mode:5, "PCT\0", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8d\x05\x00\x10\x67'
        )  # INFO_MAPPING(2) | mode:5, input:0, output:0x10, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x95\x80\x04\x00\x03\x00\xed'
        )  # INFO_FORMAT(4) | mode:5, data-sets:4, format:0, figures:3, decimals:0, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa4\x00\x54\x52\x41\x57\x00\x00\x40\x00\x00\x00\x04\x84\x00\x00\x00\x00\x8b'
        )  # INFO_NAME(16) | mode:4, "TRAW\0\0" + flags(0x40, 0x00, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(
            b'\x9c\x01\x00\x00\x00\x00\x00\xc4\x63\x46\x83'
        )  # INFO_RAW(8) | mode:4, min:0.0, max:14577.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9c\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xeb'
                        )  # INFO_PCT(8) | mode:4, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x9c\x03\x00\x00\x00\x00\x00\xc4\x63\x46\x81'
        )  # INFO_SI(8) | mode:4, min:0.0, max:14577.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8c\x04\x75\x53\x51')  # INFO_SYMBOL(2) | mode:4, "uS", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8c\x05\x90\x00\xe6'
        )  # INFO_MAPPING(2) | mode:4, input:0x90, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x94\x80\x01\x02\x05\x00\xed'
        )  # INFO_FORMAT(4) | mode:4, data-sets:1, format:2, figures:5, decimals:0, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa3\x00\x4c\x49\x53\x54\x4e\x00\x40\x00\x00\x00\x04\x84\x00\x00\x00\x00\xd0'
        )  # INFO_NAME(16) | mode:3, "LISTN\0" + flags(0x40, 0x00, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(b'\x9b\x01\x00\x00\x00\x00\x00\x00\x80\x3f\xda'
                        )  # INFO_RAW(8) | mode:3, min:0.0, max:1.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9b\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xec'
                        )  # INFO_PCT(8) | mode:3, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9b\x03\x00\x00\x00\x00\x00\x00\x80\x3f\xd8'
                        )  # INFO_SI(8) | mode:3, min:0.0, max:1.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8b\x04\x53\x54\x77')  # INFO_SYMBOL(2) | mode:3, "ST", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8b\x05\x10\x00\x61'
        )  # INFO_MAPPING(2) | mode:3, input:0x10, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x93\x80\x01\x00\x01\x00\xec'
        )  # INFO_FORMAT(4) | mode:3, data-sets:1, format:0, figures:1, decimals:0, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa2\x00\x53\x49\x4e\x47\x4c\x00\x40\x00\x00\x00\x04\x84\x00\x00\x00\x00\xc2'
        )  # INFO_NAME(16) | mode:2, "SINGL\0" + flags(0x40, 0x00, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(
            b'\x9a\x01\x00\x00\x00\x00\x00\x40\x1c\x45\x7d'
        )  # INFO_RAW(8) | mode:2, min:0.0, max:2500.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9a\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xed'
                        )  # INFO_PCT(8) | mode:2, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x9a\x03\x00\x00\x00\x00\x00\x00\x7a\x43\x5f'
                        )  # INFO_SI(8) | mode:2, min:0.0, max:250.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8a\x04\x43\x4d\x7f')  # INFO_SYMBOL(2) | mode:2, "CM", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x8a\x05\x90\x00\xe0'
        )  # INFO_MAPPING(2) | mode:2, input:0x00, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x92\x80\x01\x01\x05\x01\xe9'
        )  # INFO_FORMAT(4) | mode:2, data-sets:1, format:1, figures:5, decimals:1, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa1\x00\x44\x49\x53\x54\x53\x00\x40\x00\x00\x00\x04\x84\x00\x00\x00\x00\xc7'
        )  # INFO_NAME(16) | mode:1, "DISTS\0" + flags(0x40, 0x00, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(b'\x99\x01\x00\x00\x00\x00\x00\x00\xa0\x43\x84'
                        )  # INFO_RAW(8) | mode:1, min:0.0, max:320.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x99\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xee'
                        )  # INFO_PCT(8) | mode:1, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x99\x03\x00\x00\x00\x00\x00\x00\x00\x42\x27'
                        )  # INFO_SI(8) | mode:1, min:0.0, max:32.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x89\x04\x43\x4d\x7c')  # INFO_SYMBOL(2) | mode:1, "CM", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x89\x05\xf1\x00\x82'
        )  # INFO_MAPPING(2) | mode:1, input:0xf1, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x91\x80\x01\x01\x04\x01\xeb'
        )  # INFO_FORMAT(4) | mode:1, data-sets:1, format:1, figures:4, decimals:1, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa0\x00\x44\x49\x53\x54\x4c\x00\x40\x00\x00\x00\x04\x84\x00\x00\x00\x00\xd9'
        )  # INFO_NAME(16) | mode:0, "DISTL\0" + flags(0x40, 0x00, 0x00, 0x00, 0x04, 0x84), checksum
        self.uart.write(
            b'\x98\x01\x00\x00\x00\x00\x00\x40\x1c\x45\x7f'
        )  # INFO_RAW(8) | mode:0, min:0.0, max:2500.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x98\x02\x00\x00\x00\x00\x00\x00\xc8\x42\xef'
                        )  # INFO_PCT(8) | mode:0, min:0.0, max:100.0, checksum
        time.sleep_ms(1)
        self.uart.write(b'\x98\x03\x00\x00\x00\x00\x00\x00\x7a\x43\x5d'
                        )  # INFO_SI(8) | mode:0, min:0.0, max:250.0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x88\x04\x43\x4d\x7d')  # INFO_SYMBOL(2) | mode:0, "CM", checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x88\x05\x91\x00\xe3'
        )  # INFO_MAPPING(2) | mode:0, input:0x91, output:0, checksum
        time.sleep_ms(1)
        self.uart.write(
            b'\x90\x80\x01\x01\x05\x01\xeb'
        )  # INFO_FORMAT(4) | mode:0, data-sets:1, format:1, figures:5, decimals:1, checksum
        time.sleep_ms(18)

        self.uart.write(
            b'\xa0\x08\x00\x2d\x00\x33\x05\x47\x38\x33\x30\x31\x32\x36\x00\x00\x00\x00\x05'
        )
        self.uart.write(b'\x04')

        print("waiting for ACK...")
        self.connected = self._wait_for_value(b'\x04')

        if self.connected:
            print("connected")
            self.set_data(0)
            self.timer = Timer(self.timer_num,
                               self.timer_channel_num,
                               mode=Timer.MODE_PERIODIC,
                               period=200,
                               callback=self._handle_message_callback)
            self.timer.start()
        else:
            print("not connected")

        return self.connected

    def _wait_for_value(self, expected_value, timeout=2):
        starttime = time.time()
        currenttime = starttime
        status = False
        #count = 0
        while (currenttime - starttime) < timeout:
            time.sleep_ms(5)
            #print(count)
            #count += 1
            currenttime = time.time()
            if self.uart.any() > 0:
                data = self.uart.readchar()
                #print(data)
                if data == ord(expected_value):
                    status = True
                    break
        return status

    def set_data(self, data):
        self.data = data

    def _get_checksum(self, values):
        checksum = 0xFF
        for x in values:
            checksum ^= x
        return checksum

    def _send_value(self, data):
        mode = self.current_mode  # 0:DISTL, 1:DISTS
        l_value = data & 0xFF
        h_value = (data >> 8) & 0xFF
        payload = bytes([
            0x46, 0x00, 0xB9, 0xC8 | mode, l_value, h_value,
            self._get_checksum([0xC8 | mode, l_value, h_value])
        ])
        size = self.uart.write(payload)
        return size

    def _handle_message_callback(self, timer):
        if not self.connected:
            return

        while self.uart.any() > 0:
            x = self.uart.readchar()
            if x == 0:
                pass
            elif x == 0x02:
                pass
            elif x == 0x43:
                mode = self.uart.readchar()
                checksum = self.uart.readchar()
                if checksum == self._get_checksum([x, mode]):
                    self.current_mode = mode
            elif x == 0x46:
                zero_or_one = self.uart.readchar()
                b9_or_b8 = self.uart.readchar()
                if (zero_or_one == 0
                        and b9_or_b8 == 0xb9) or (zero_or_one == 1
                                                  and b9_or_b8 == 0xb8):
                    size_mode = self.uart.readchar()
                    size = 2**((size_mode & 0b111000) >> 3)
                    mode = (size_mode & 0b111) + (zero_or_one << 3)
                    checksum = self._get_checksum(
                        [x, zero_or_one, b9_or_b8, size_mode])
                    for i in range(len(self.textBuffer)):
                        self.textBuffer[i] = ord(b' ')

                    for i in range(size):
                        self.textBuffer[i] = self.uart.readchar()
                        checksum ^= self.textBuffer[i]

                    expected_checksum = self.uart.readchar()
                    if expected_checksum == checksum:
                        print(self.textBuffer)
            elif x == 0x4C:
                # ex: 4C 20 00 93
                l_value = self.uart.readchar()
                h_value = self.uart.readchar()
                checksum = self.uart.readchar()
                if checksum == self._get_checksum([x, l_value, h_value]):
                    pass
            else:
                print(x)

        size = self._send_value(self.data)
        if not size:
            self.connected = False
Exemple #15
0
 def start(self):
     _thread.start_new_thread(self.__listen, ())
     t = Timer(1)
     t.start(period=20000, mode=t.PERIODIC, callback=self.__loop_forever)
Exemple #16
0
from machine import Timer

def func(args):
	print('###timer callback function###')
	
timer = Timer(Timer.Timer1)
timer.start(period=1000, mode=timer.PERIODIC, callback=func)