micropython / micropython-lib

Core Python libraries ported to MicroPython

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

"TypeError: can't convert NoneType to int" on Raspberry Pi Pico W with aioble

jxpd opened this issue · comments

I am writing a program for the Raspberry Pi Pico W that sends commands to control the blinkers of a Lumos Kickstart Bluetooth helmet via BLE to later hook it up with the blinkers of my Ninebot e-Scooter.

Device: Raspberry Pi Pico W (sysname='rp2', nodename='rp2', release='1.22.2', version='v1.22.2 on 2024-02-22 (GNU 13.2.0 MinSizeRel)', machine='Raspberry Pi Pico W with RP2040')
MicroPython version: 1.22.2
aioble version: 0.4.1 (installed via the package manager in Thonny)

I have managed to send the first command (Blink right) successfully, but every time I intend to send another command with the method await temp_characteristic.write(), I get an error like this with "TypeError: can't convert NoneType to int":

Sent 'blink right' command to LumosHelmet.
Sent 'turn off' command to LumosHelmet.
Traceback (most recent call last):
  File "<stdin>", line 97, in <module>
  File "asyncio/core.py", line 1, in run
  File "asyncio/core.py", line 1, in run_until_complete
  File "asyncio/core.py", line 1, in run_until_complete
  File "<stdin>", line 75, in main
  File "aioble/client.py", line 288, in write
TypeError: can't convert NoneType to int

I must admit that I am still a beginner at python, and I would be thankful if anyone could tell me where the problem lies.
Here is the part of the code that causes the problem (in the while True loop):

async def main():
    device = await scan_and_connect()
    if not device:
        print("Lumos Helmet not found.")
        return
    try:
        print("Connecting to ", device)
        connection = await device.connect()
    except asyncio.TimeoutError:
        print("Timeout during connection")
        return
    
    async with connection:
        try:
            # Get the service and characteristic for the UART Tx
            temp_service = await connection.service(SERVICE_UUID)
            temp_characteristic = await temp_service.characteristic(UART_TX_UUID)
        except asyncio.TimeoutError:
            print("Timeout discovering services/characteristics")
            return
        
        while True:
            if temp_characteristic is not None:
                # Send the "blink right" command
                await temp_characteristic.write(BLINK_RIGHT_CMD)
                print("Sent 'blink right' command to LumosHelmet.")
                
                # Sleep a bit            
                await asyncio.sleep_ms(2000)
            else:
                print("Characteristic not found.")
            
            if temp_characteristic is not None:
                # Send the "turn off" command
                await temp_characteristic.write(TURN_OFF_CMD)
                print("Sent 'turn off' command to LumosHelmet.")

It seems like the issue is because of the helmet disconnecting after a few seconds from the Raspberry Pi Pico W. Therefore, I will close this issue as it does not seem like it is directly related to aioble.