Wio RP2040 mini dev board - Please provide complete API or repo

Hello,

I want to use your WIO RP2040 for a small project. I’ve been very disapointed by the quality of the micropython image available. Nothing is implemented as it should, half of the expected methods is not working as intended.
I’ve been experimenting with micro python and arduino.
From what I have seen, resolving a DNS query from a hostname doesn’t work. I checked the firmware that others believe is the source for your Micropython port at:

There is a problem in the get_hostbyname method. I managed to fix it and rebuild the micropython package, but still other functions are missing or not working:
recv : is broken (i know it was solved in the 3rd update of the firmware but the fix is not in the repo) so I can’t have the DNS
bind, listen, recvfrom : simply not implemented.

I’m not saying that your product should have all these features, but at least advertise it correctly and inform on your page about what is working or not.
I’ll probably manage to make it work for my needs based on the arduino code and the repo above, but I’ll have to spend a lot of unecessary time for such.

Could you at least clarify the situation about which repo is the base for the micropython port, keep it up to date and provide some technical details. At least people with time will manage to provide a decent port for micropython or circuit_python.

2 Likes

Same thing here, Leonel. At the beginning of the month I studied to see if I could port Circuitpython to the board. Even the electrical schematic is incomplete. The ideal was to know how the RP2040 is connected to the ESP8285 (Wifi) to start. There are other boards from other manufacturers that use the same solution, but without the correct pins, it is not possible to use the libraries properly. I already requested this information on the forum, but as you may have noticed, it takes time…
Here is what I’ve discovered: Trying to port Circuitpython to WIO RP2040

“There is a problem in the get_hostbyname method.”

I can confirm that.

“I managed to fix it and rebuild the micropython package,”

Can you please show how?

“but still other functions are missing or not working:
recv : is broken (i know it was solved in the 3rd update of the firmware but the fix is not in the repo) so I can’t have the DNS”

I can confirm that recv is still broken on 3rd firmware if the response is bigger than few bytes (the freechess.org Wiki example does abort always):
https://forums.raspberrypi.com/viewtopic.php?p=1978647#p1978647

Last, but not least, the inside module communication is not reliable :frowning:

>>> import forum 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "forum.py", line 7, in <module> 
OSError: couldn't init nic esp8285 ,try again please 
 
>>>

I made the lan example to send the message every second:

...
    while True:
        s.send('Hello! Wio RP2040\n')
        sleep(1)

send() is not reliable either, errors out after 19 seconds:

>>> import lan2
API list:
wifi list:
3,"FRITZ!Box 7362 SL",-34,"34:81:c4:0e:05:33",12,-1,-1,4,4,7,1
3,"WLAN-115487",-62,"44:fe:3b:95:01:be",1,-1,-1,4,4,6,1
3,"WLAN-115487",-66,"78:dd:12:cb:f8:6e",1,-1,-1,4,4,7,1
3,"EasyBox-Ja",-77,"e0:60:66:8c:fe:8c",11,-1,-1,4,4,7,0
    ip               gateway           netmask            MAC            ssid
('192.168.178.95', '255.255.255.0', '192.168.178.1', '34:81:c4:0e:05:33', 'FRIT)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "lan2.py", line 25, in <module>
OSError: 32
>>> 

Summary for now:

  1. Latest v1.3 MicroPython firmware old (9/2021) and unfixed
  2. gettaddrinfo() does not work
  3. recv() is unreliable even with latest firmware
  4. send() unreliable as well as shown here
  5. bind, listen, recvfrom : simply not implemented (according 1st post)
  6. no C demo code available
    Therefore Wio RP2040 module is unusable for networking as of now.

Hello,

For a quick answer, here is what I looked so far.

At those 2 lines, I don’t know if the flashed program on the esp8285 is wrong or not, but the response does not match the expected format, that is why it fails. I analysed the result received over SPI and it comes without the “+”.
Changing the line to the following fixes the get_host_byname method.

index = data_find(nic->buffer.buffer,ESP8285_BUF_SIZE,"CIPDOMAIN:");
sscanf((char*)nic->buffer.buffer + index,"CIPDOMAIN:\"%[^\"]\"",IP_buf);

For the rest that is not working, with some time it should be achievable to implement a full implementation of socket. Esp8285 AT commands are available online, just don’t have the link to it now. Basing it on Esp8266 implementation one should be able to produce a reliable implementation.
That is actually what was done in the module. Most of the missing feature are actually commented but in the code. I just don’t have much time to put the effort currently.

Nonetheless, for C examples, even though there is none per say (the repo above is just a guess), one can look at the Arduino code.
It includes pretty much all the information to make this work at C level, and for this one we know, it is the one supplied by the company.
All the pinout is described there and the SPI driver is very similar to the one from the repo above.

Hope this helps somehow, if more details are, just ping, I’ll try to update with useful links from what I could find so far.

Good luck for the braves, and I hope Wio sees that they don’t need much more effort to do a good product. On my side for the moment, I just reoriented myself for next projects to nano rp2040 connect or ESP32.

1 Like

Thanks for the update.
I just created 4 new (the first 4) issues in the github repo we are not sure is the base of Seeed Wio RP2040 firmware:
https://github.com/IsQianGe/rp2040-spi/issues

Perhaps that will trigger any reaction …

1 Like

Here is my adventure so far: The Adventures of Porting Circuitpython to Wio RP2040 - Share Project - PCBWay

1 Like

Do you have a solution? Without DNS resolution, the board is pretty much useless.
I am stuck… did someone found a workaround. I can’t use IPs as I am targeting a LoadBalancer.

Here is what I tested.

import network
import usocket
N1 = network.WLAN_SPI(network.STA_IF)
N1.active(True)

N1.connect(“BlablablaWIFI”,“xxxxxxxxxxxx”)
if N1.isconnected():
print(N1.ifconfig())
addr_info = usocket.getaddrinfo(‘www.google.com’, 80)
print(addr_info)

%Run -c $EDITOR_CONTENT
(‘192.168.3.110’, ‘255.255.255.0’, ‘192.168.3.1’, ‘38:d5:47:63:da:5a’, ‘xxxxxxxxxxx’)
[(2, 1, 0, ‘’, (‘0.0.0.0’, 80))]

Thanks for your precious help.