New firmware release 1.2.0.b1

  • Pybytes Beta

    @daniel Can you also give us access to older firmware updates? Sometimes I need that because of breaking updates.

  • @abilio I appreciate your effort and your response. I started one week ago having no experience in python but having a lot in Enterprise Infrastructure & Software (Banking & Finance) and offcourse made plenty projects with atmega and ESP8266. Check my pyCom coda library in github

  • @Wembly, thanks for reporting the issue with the sockets, we've tracked it to the GIL (global interpreter lock) not being taken care of inside the sockets code. I've already tested a fix, so it should be included for the next firmware release.

  • @constantinos, thanks again for your report. We found the cause of the issue inside the garbage collector code. We're fixing it right now. It should be fixed for the next firmware release.

  • @daniel Thanks for reply, nevermind my comment. It was my bad. Interrupts works !

    Edit: however, interrupts will not work if waiting for socket operation (which was the only reason to why I needed them to work). I have added an issue here:

  • @constantinos I just tested your example, and I even enabled the print statement, but I can't reproduce the crash... (still running for ~10 minutes)

    EDIT: OK got the guru meditation error now getting closer to the 11 minutes. We'll investigate. Thanks for the report.


  • @toribios_people debouncing by measuring time like you show on your code should work. Could you share with us the complete pin handler so that I can test it? Other than that, instead of:

    button1.callback(handler=pin_handler, trigger=Pin.IRQ_LOW_LEVEL and Pin.IRQ_FALLING)

    you should write it like this:

    button1.callback(handler=pin_handler, trigger=Pin.IRQ_FALLING)

    Doing that AND operation on the trigger doesn't have the effect that you expect as this are just bit flags that are passed to the internal interrupt registers. Besides that, if you want to detect the button push, the falling edge is enough (plus some of that debounce code).


  • @daniel just a gc.collect() before the instance of Clock()

    import micropython
    from machine import Timer
    import gc
    SECONDS = 0
    class Clock:
        def __init__(self):
            self.__alarm = Timer.Alarm(self._seconds_handler, 1, periodic=True)
        def _seconds_handler(self, alarm):
            global SECONDS
            SECONDS += 1
            #print("%02d seconds have passed" % nemet_global.SECONDS)
    clock = Clock()

  • @daniel I have a project with three buttons, which I debounce and use them to activate some relays. I tried to simplify my code using the pin.callback, but every time I push the button, the handler gets called several times because of the noise. How could I solve this?

    The code I'm using is:

    button1 = Pin("G8", mode=Pin.IN, pull=Pin.PULL_UP)
    button2 = Pin("G9", mode=Pin.IN, pull=Pin.PULL_UP)
    button3 = Pin("G10", mode=Pin.IN, pull=Pin.PULL_UP)
    button1.callback(handler=pin_handler, trigger=Pin.IRQ_LOW_LEVEL and Pin.IRQ_FALLING)
    button2.callback(handler=pin_handler, trigger=Pin.IRQ_LOW_LEVEL and Pin.IRQ_FALLING)
    button3.callback(handler=pin_handler, trigger=Pin.IRQ_LOW_LEVEL and Pin.IRQ_FALLING)

    The code I previously used and works fine is:

    while True:
    reading1 = button1()
    reading2 = button2()
    reading3 = button3()
    if(reading1 != lastButton1State):
    lastDebounceTime = current_milli_time()
    if(reading2 != lastButton2State):
    lastDebounceTime = current_milli_time()
    if(reading3 != lastButton3State):
    lastDebounceTime = current_milli_time()

        if((current_milli_time() - lastDebounceTime) > debounceDelay):
            if(reading1 != button1State):
                button1State = reading1
                if(button1State == True):
                    relay1State = not relay1State
                    print("button pushed")
            if(reading2 != button2State):
                button2State = reading2
                if(button2State == True):
                    relay2State = not relay2State
                    print("button pushed")
            if(reading3 != button3State):
                button3State = reading3
                if(button3State == True):
                    relay3State = not relay3State
                    print("button pushed")
        lastButton1State = reading1
        lastButton2State = reading2
        lastButton3State = reading3

  • @Wembly are you trying any of the examples from the docs or something else? Could you share your code?

  • @constantinos can you show how did you get to that Guru Meditation Error ?

  • @Wembly I tested because I desperate need them. It looks like working. I tested on WiPy 2

  • I don't seem to get the interrupts working either...

  • Thank you for your new release.

    I tested the timer.alarm and I just get a reset.

    Guru Meditation Error of type InstrFetchProhibited occurred on core 0. Exception was unhandled.
    Register dump:
    PC : 0x02625a00 PS : 0x00060a30 A0 : 0x800e823c A1 : 0x3ffc1ab0
    A2 : 0x3ffc3470 A3 : 0x00000001 A4 : 0x00000000 A5 : 0x3ffc1ad0
    A6 : 0x400de118 A7 : 0x3ffc46b0 A8 : 0x800e81f8 A9 : 0x3ffc1a90
    A10 : 0x3ffc3470 A11 : 0x00000001 A12 : 0x00000000 A13 : 0x3ffc1ad0
    A14 : 0xb33fffff A15 : 0x00060023 SAR : 0x00000014 EXCCAUSE: 0x00000014
    EXCVADDR: 0x02625a00 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0xffffffff

    Backtrace: 0x02625a00:0x3ffc1ab0 0x400e823c:0x3ffc1ad0 0x400de127:0x3ffc1b00 0x400df7a6:0x3ffc1b20 0x400d7d6c:0x3ffc1ba0


  • Ahh, excellent !

  • Hi @Wembly, a few releases ago (1.0.0.b1) we improved the updater tool so you don't need to reinstall it every time we release a new firmware. It will fetch the new firmware releases by itself.

    The number 1.0.0.b1 you see corresponds to the installer version and not to the firmware.

    Hope it helps,

  • @daniel Hi, good stuff. The link does not seem to work yet though ? It is directing me to 1.0.0.b1 software (windows link).

Log in to reply

Pycom on Twitter