Page 1 of 1
Next stretch goal - uasyncio on esp8266 (general availability)
Posted: Sun Jan 29, 2017 11:39 am
by pfalcon
The work to optimize uasyncio for ESP8266 has been ongoing for few months. The uasyncio.core module (core scheduler, no (networking) I/O) support by now has been optimized pretty well and was available for use. However, in my list there're many optimizations yet to do for the main uasyncio module before it can be proclaimed a supported option for developing non-trivial applications. However, community seems to be anxious to get it running ASAP, we get contributions to make it work and they were merged ahead of planned optimizations, and recently I was shown a screenshot with a simple webapp running using Picoweb pico-framework:
https://github.com/pfalcon/picoweb/pull ... -274184519 .
So, while the plan remains the same - work nice and slow thru the optimizations, I looked thru the code to see what pieces may be problematic for ESP8266, or missing, and fixed/added them. These were released in uasyncio package v.1.1 on PyPI.
So, I'd like to announce a softlaunch of uasyncio for ESP8266 for the interested parties. There's a thread on uasyncio at
http://forum.micropython.org/viewtopic.php?f=15&t=85 . You can see examples at:
All the links above lead to git repositories, and there're more examples, information, and source code around.
As most of other things in MicroPython, uasyncio implements a subset of big Python functionality, with mainline asyncio library described at
https://docs.python.org/3/library/asyncio.html . It's huge read though, and MicroPython's uasyncio implements only small and sane subset of it, with few discrepancies which should be described in the forum thread above. So, if you're completely new to asyncio, feel free to run the examples above, then just look up some asyncio tutorial to get familiar with the concepts. Hopefully, this thread and forum will be also helpful with getting started and questions.
Re: Next stretch goal - uasyncio on esp8266 (soft launch)
Posted: Mon Jan 30, 2017 8:54 pm
by homebrew79
I am so excited about this news! I wanted to try it out as an http client and ran into an error. I hope this is the right place to post my question about this. If not, please point me to the right place. This is my first post here.
I used upip to pull v1.1 of uasyncio. I used ampy to copy my lib directory to my board (Amica NodeMCU). From there I got a REPL and used ctrl+e to paste in the example http client referenced, and immediately got the following exception.
Traceback (most recent call last):
File "<stdin>", line 18, in <module>
File "/lib/uasyncio/core.py", line 131, in run_until_complete
File "/lib/uasyncio/core.py", line 123, in run_forever
File "/lib/uasyncio/core.py", line 81, in run_forever
File "/lib/uasyncio/core.py", line 128, in _run_and_stop
File "<stdin>", line 5, in print_http_headers
File "/lib/uasyncio/__init__.py", line 187, in open_connection
File "/lib/uasyncio/__init__.py", line 187, in open_connection
File "/lib/uasyncio/__init__.py", line 184, in open_connection
OSError: [Errno 110] ETIMEDOUT
Thanks! -Brian
Re: Next stretch goal - uasyncio on esp8266 (soft launch)
Posted: Tue Jan 31, 2017 8:28 am
by pythoncoder
I wrote some notes on using uasyncio for hardware interfacing here
https://github.com/peterhinch/micropyth ... UTORIAL.md which some may find useful.
Myself and @robert-hh developed a touch GUI interface for the Pyboard and a TFT display
https://github.com/peterhinch/micropython-tft-gui.git. As written this used a different scheduler, but we successfully ported it to uasyncio. The uasyncio library has really come of age in terms of supporting physical devices

Re: Next stretch goal - uasyncio on esp8266 (soft launch)
Posted: Sat May 06, 2017 9:24 am
by pfalcon
There were a lot of optimizations for uasyncio to work better on ESP8266. It is going to be included as a frozen bytecode in MicroPython 1.9, facilitating its usage with minimal memory overhead.
Re: Next stretch goal - uasyncio on esp8266 (soft launch)
Posted: Sun May 07, 2017 5:50 am
by pythoncoder
pfalcon wrote:There were a lot of optimizations for uasyncio to work better on ESP8266. It is going to be included as a frozen bytecode in MicroPython 1.9, facilitating its usage with minimal memory overhead.
Will it be frozen on the Pyboard?
Re: Next stretch goal - uasyncio on esp8266 (soft launch)
Posted: Mon Jun 05, 2017 3:10 pm
by pfalcon
Unfortunately, 1.9 went into release with some socket module (modlwip) incompatibilities which affect basic uasyncio operation. However, the basic issues are fixed by now (i.e. available in daily builds), so examples from
https://github.com/micropython/micropyt ... r/uasyncio now work.
Re: Next stretch goal - uasyncio on esp8266 (soft launch)
Posted: Sat Jun 10, 2017 4:04 pm
by pfalcon
The important milestone has been achieved - with a number of optimizations, a reference Picoweb application,
https://github.com/pfalcon/notes-pico, is now able to run on ESP8266. Doing so requires freezing it as bytecode, which means MicroPython should be built from source (which is the whole idea of Open Source and the reason we ran Kickstarter campaign, so if you don't build MicroPython from source, you miss a lot).
Instructions on deploying Notes Pico for ESP8266 port can be found in README, e.g.
https://pypi.python.org/pypi/notes-pico.
This is an important milestone, because it finally answers question whether uasyncio approach would be viable to write non-trivial apps ESP8266. Notes Pico, a simple, but full-stack application proves that yes.
That also means that uasyncio on ESP8266 is out of "soft launch" and suitable for general use.
And to set the expectations right - with this initial success, there's still a lot to be done to make writing reliable, robust full-stack apps possible. So, there will be a lot more optimizations and refactors going forward. In particular, API of Picoweb is expected to change to accommodate that.
Re: Next stretch goal - uasyncio on esp8266 (general availability)
Posted: Sun Jun 11, 2017 12:48 pm
by pfalcon
Updated version of uasyncio will be shipped with MicroPython 1.9.1, to be released shortly.
Interested In PicoWeb
Posted: Tue Aug 01, 2017 8:07 am
by bitninja
This is great news. Once again I am thoroughly impressed with the power and versatility you guys are squeezing from such meager resources. I'm especially interested in PicoWeb and love that you already have a real app running on the ESP8266. I will be digging through the code in short order... but I did have a couple of initial questions since I am new to Python...
- Do I need to understand how to use uasyncio to use the framework?
- You mention templates used in generating responses, but can you serve static content (js,imgs,html...) from the flash file system as well?
Thanks!
Re: Next stretch goal - uasyncio on esp8266 (general availability)
Posted: Sat Jan 06, 2018 11:24 am
by pfalcon
Cross-posted from:
viewtopic.php?f=15&t=85&p=24415#p24415
Note that the latest uasyncio packages on PyPI require the latest MicroPython, built from source. I no longer a comaintainer of the (official) MicroPython, and don't influence when upstream releases are made.
I also test uasyncio with my fork,
https://github.com/pfalcon/micropython , and in the future may imagine that it may work only with my fork.
In my fork, I continue development and optimization of uasyncio and other MicroPython-related components, which I no longer can perform in the upstream.
Note that in the future,
viewtopic.php?f=15&t=85&start=80 topic will be updated with any news.