OSError: Network card not available



  • OSError: Network card not available What does this mean?



  • @livius Ah shoot, I thought I was enabling manual garbage collectin with gc.enable(). And the UART duplication is obviously a mistake. Thanks for pointing those out !



  • @soren
    two things but i do not suppose that are releated to the issue:
    you initialize twice UART and do dupterm

    uart = UART(0, 115200)
    os.dupterm(uart)
    print('starting up...')
    print(gc.mem_free())
    gc.enable()
    uart = UART(0, 115200)
    os.dupterm(uart)
    

    all above initialization can be ommited because dupterm is done in frozen _boot.py

    second, you have enabled automatic garbage collecion gc.enable()
    but then you use it manually gc.collect() - of course you can do this but is this intentional?



  • @jmarcelino Yes of course. Strange thing is, after unplugging the power completely (hard reset was not enough), problem stopped for now. Anyway, if there's something fishy, this is my boot:

    import machine
    import gc
    from machine import UART
    from network import WLAN
    import pycom
    import os
    uart = UART(0, 115200)
    os.dupterm(uart)
    print('starting up...')
    print(gc.mem_free())
    gc.enable()
    uart = UART(0, 115200)
    os.dupterm(uart)
    pycom.heartbeat(False)
    pycom.rgbled(0x7f0000) # red
    
    wlan = WLAN()
    if machine.reset_cause() != machine.SOFT_RESET:
        print('setting wlan config...')
        wlan.init(mode=WLAN.STA)
        wlan.ifconfig(config=('10.42.0.14', '255.255.255.0', '10.42.0.1', '8.8.8.8'))
    
    if not wlan.isconnected():
        print('looking for network...')
        wlan.connect('cooppifi', auth=(WLAN.WPA2, 'PasswordRemoved'), timeout=5000)
        while not wlan.isconnected():
            machine.idle()
    print('connected to wifi!')
    print(gc.mem_free())
    

    and this is my main. the issue happens where i send to the socket:

    
    from network import Bluetooth
    import socket
    #from network import socket
    import pycom
    import gc
    import time
    import machine
    import binascii
    from machine import Timer
    pycom.heartbeat(False)
    pycom.rgbled(0x000000) # turn off led
    gc.enable()
    lopyID = 4 # set this unique to each lopy
    print('started! lopy id: ', lopyID)
    print("a")
    gc.collect()
    print(gc.mem_free())
    bluetooth = Bluetooth()
    bluetooth.stop_scan()
    time.sleep(1)
    bluetooth.start_scan(-1)
    adv = None # bluetooth advertisementa
    
    time.sleep(1)
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    pycom.rgbled(0x007f00)
    
    #print(gc.mem_free())
    def sendToSocket(beaconID, rssi):
        print(gc.mem_free())
        RSSIpositive = rssi * -1
        string = str(lopyID) + "," + str(beaconID) + "," + str(RSSIpositive) + ","
        data = bytearray(string)
        addr = socket.getaddrinfo('10.42.0.1', 7007)[0][-1]
        s.sendto(data, addr)
    
    # new mac adresses:
    #C7:C3:83:EE:AA:A4
    #FB:6F:11:25:79:9B
    #F7:F0:BB:A6:ED:F7
    #C3:C7:E7:73:7C:3F
    
    while True:
    
        gc.collect()
        pycom.rgbled(0x007f00)
        advList = bluetooth.get_advertisements()
        for adv in advList:
            macRaw = adv[0] # binary mac address
            macReal = binascii.hexlify(macRaw) # convert to hexadecimal
            if macReal == b'fb6f1125799b': # old: b'f3bc0b6feb4c':
                print('beacon A rssi: ', adv[3]) # adv[3] is rssi
                sendToSocket(beaconID = 1, rssi = adv[3])
            elif macReal == b'f7f0bba6edf7': # old: b'edbed48d0b87':
                print('beacon B rssi: ', adv[3])
                sendToSocket(beaconID = 2, rssi = adv[3])
            elif macReal == b'c7c383eeaaa4': # <-- old
                print('beacon C rssi: ', adv[3])
                sendToSocket(beaconID = 3, rssi = adv[3])
            elif macReal == b'c3c7e7737c3f': # old: b'cd87e6a38dc2':
                print('beacon D rssi: ', adv[3])
                sendToSocket(beaconID = 4, rssi = adv[3]) # adv[3]
            gc.collect()
    s.close()
    


  • @soren
    Can you post your code? or at least the network initialisation / sockets part.

    Without more details it's impossible to help since you could be trying to initialise WiFi, LoRa, Sigfox...



  • @xykon i'm getting this error for no apparent reason... even though i'm doing a hard reset.
    is there a dev who knows what's happening?


  • administrators

    The error is thrown when creating a socket but the esp32 cannot find a network card available to handle the request.

    The error is thrown in modnetwork.c which is called by modsocket.c


Log in to reply
 

Pycom on Twitter

Looks like your connection to Pycom Forum was lost, please wait while we try to reconnect.