From 8e01d4287b716f1513a33397074ae6e085ecbe4c Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Sun, 30 Mar 2025 12:28:11 +0100 Subject: [PATCH 1/7] DRIVERS.md: Add note re Delay_ms.deinit(). --- v3/docs/DRIVERS.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/v3/docs/DRIVERS.md b/v3/docs/DRIVERS.md index d1570b8..aebb691 100644 --- a/v3/docs/DRIVERS.md +++ b/v3/docs/DRIVERS.md @@ -1070,7 +1070,9 @@ Synchronous methods: the `Task` instance. This allows the `Task` to be cancelled or awaited. 6. `callback` args `func=None`, `args=()`. Allows the callable and its args to be assigned, reassigned or disabled at run time. - 7. `deinit` No args. Cancels the running task. See [Object scope](./TUTORIAL.md#44-object-scope). + 7. `deinit` No args. Cancels the running task. To avoid a memory leak this + should be called before allowing a `Delay_ms` object to go out of scope. See + [Object scope](./TUTORIAL.md#44-object-scope). 8. `clear` No args. Clears the `Event` described in `wait` below. 9. `set` No args. Sets the `Event` described in `wait` below. From 4001e28f402b9567d9e01318ba2e30d28151d6d1 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Thu, 8 May 2025 18:35:17 +0100 Subject: [PATCH 2/7] broker.py: Provide instance. Pub message defaults to None. --- v3/docs/DRIVERS.md | 40 ++++++++++++++++-------------- v3/primitives/__init__.py | 1 + v3/primitives/broker.py | 9 ++++--- v3/primitives/tests/broker_test.py | 4 +-- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/v3/docs/DRIVERS.md b/v3/docs/DRIVERS.md index aebb691..dcaf218 100644 --- a/v3/docs/DRIVERS.md +++ b/v3/docs/DRIVERS.md @@ -1139,14 +1139,15 @@ finally: # 9. Message Broker ```python -from primitives import Broker # broker.py +from primitives import Broker, broker # broker.py ``` The `Broker` class provides a flexible means of messaging between running tasks. It uses a publish-subscribe model (akin to MQTT) whereby the transmitting task publishes to a topic. Objects subscribed to that topic will receive the message. This enables one to one, one to many, many to one or many to many messaging. -A task subscribes to a topic via an `agent`. This is stored by the broker. When +A task subscribes to a topic via an `agent`: this term describes a set of Python +types which may be used in this role. An `agent` is stored by the broker. When the broker publishes a message, every `agent` subscribed to the message topic will be triggered. In the simplest case the `agent` is a `Queue` instance: the broker puts the topic and message onto the subscriber's queue for retrieval. @@ -1159,6 +1160,12 @@ no "knowledge" of the number or type of agents subscribed to a topic. The module is not threadsafe: `Broker` methods should not be called from a hard ISR or from another thread. +A `Broker` instance `broker` is provided. Where multiple modules issue +```python +from primitives import broker +``` +all will see the same instance, facilitating message passing between modules. + #### Broker methods All are synchronous. @@ -1168,12 +1175,17 @@ with a matching `topic`. Any additional args will be passed to the `agent` when it is triggered. * `unsubscribe(topic, agent, *args)` The `agent` will stop being triggered. If args were passed on subscription, the same args must be passed. -* `publish(topic, message)` All `agent` instances subscribed to `topic` will be -triggered, receiving `topic` and `message` plus any further args that were -passed to `subscribe`. +* `publish(topic, message=None)` All `agent` instances subscribed to `topic` +will be triggered, receiving `topic` and `message` plus any further args that +were passed to `subscribe`. The `topic` arg is typically a string but may be any hashable object. A -`message` is an arbitrary Python object. +`message` is an arbitrary Python object. Where string topics are used, wildcard +subscriptions are possible. + +#### Broker class variable + +* `Verbose=True` Enables printing of debug messages. #### Agent types @@ -1198,16 +1210,11 @@ Note that synchronous `agent` instances must run to completion quickly otherwise the `publish` method will be slowed. See [Notes](./DRIVERS.md#93-notes) for further details on queue behaviour. -#### Broker class variable - -* `Verbose=True` Enables printing of debug messages. - #### example ```py import asyncio -from primitives import Broker, RingbufQueue +from primitives import broker, RingbufQueue -broker = Broker() async def sender(t): for x in range(t): await asyncio.sleep(1) @@ -1245,11 +1252,10 @@ The following illustrates a use case for passing args to an `agent` (pin nos. are for Pyoard 1.1). ```py import asyncio -from primitives import Broker +from primitives import broker from machine import Pin red = Pin("A13", Pin.OUT, value=0) # Pin nos. for Pyboard V1.1 green = Pin("A14", Pin.OUT, value=0) -broker = Broker() async def flash(): broker.publish("led", 1) @@ -1275,9 +1281,8 @@ asyncio.run(main()) A task can wait on multiple topics using a `RingbufQueue`: ```python import asyncio -from primitives import Broker, RingbufQueue +from primitives import broker, RingbufQueue -broker = Broker() async def receiver(): q = RingbufQueue(10) @@ -1316,9 +1321,8 @@ should run to completion quickly. ```py import asyncio -from primitives import Broker, Agent +from primitives import broker, Agent -broker = Broker() class MyAgent(Agent): def put(sef, topic, message, arg): print(f"User agent. Topic: {topic} Message: {message} Arg: {arg}") diff --git a/v3/primitives/__init__.py b/v3/primitives/__init__.py index fe15c4f..ceaad77 100644 --- a/v3/primitives/__init__.py +++ b/v3/primitives/__init__.py @@ -54,6 +54,7 @@ def _handle_exception(loop, context): "Keyboard": "sw_array", "SwArray": "sw_array", "Broker": "broker", + "broker": "broker", "Agent": "broker", "RegExp": "broker", } diff --git a/v3/primitives/broker.py b/v3/primitives/broker.py index 4ee9b37..73072bb 100644 --- a/v3/primitives/broker.py +++ b/v3/primitives/broker.py @@ -1,6 +1,6 @@ # broker.py A message broker for MicroPython -# Copyright (c) 2024 Peter Hinch +# Copyright (c) 2024-2025 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file # Inspired by the following @@ -11,7 +11,7 @@ import re -class Agent: +class Agent: # ABC for user agent pass @@ -58,7 +58,7 @@ def unsubscribe(self, topic, agent, *args): elif Broker.Verbose: print(f"Unsubscribe topic {topic} fail: topic not subscribed.") - def publish(self, topic, message): + def publish(self, topic, message=None): agents = set() # Agents which are triggered by this topic if isinstance(topic, str): # Check regexps # Are any keys RegExp instances? @@ -84,3 +84,6 @@ def publish(self, topic, message): res = agent(topic, message, *args) if isinstance(res, type_coro): asyncio.create_task(res) + + +broker = Broker() diff --git a/v3/primitives/tests/broker_test.py b/v3/primitives/tests/broker_test.py index 50fc87c..ad1357e 100644 --- a/v3/primitives/tests/broker_test.py +++ b/v3/primitives/tests/broker_test.py @@ -3,9 +3,7 @@ # import primitives.tests.broker_test import asyncio -from primitives import Broker, Queue, RingbufQueue, RegExp - -broker = Broker() +from primitives import broker, Queue, RingbufQueue, RegExp # Periodically publish messages to two topics async def test(t): From 84c70cbf49ba3b69ffb59fc8f3cb5e0c9f41d4b0 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Thu, 15 May 2025 10:50:04 +0100 Subject: [PATCH 3/7] INTERRUPTS.md: fix garbled text. --- v3/docs/INTERRUPTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v3/docs/INTERRUPTS.md b/v3/docs/INTERRUPTS.md index 138a2b0..a2c684c 100644 --- a/v3/docs/INTERRUPTS.md +++ b/v3/docs/INTERRUPTS.md @@ -8,7 +8,7 @@ interrupts in `asyncio` applications. Writing an interrupt service routine (ISR) requires care: see the [official docs](https://docs.micropython.org/en/latest/reference/isr_rules.html). There are restrictions (detailed below) on the way an ISR can interface with -`asyncio`. Finally, on many platformasyncioupts are a limited resource. In +`asyncio`. Finally, on many platforms interrupts are a limited resource. In short interrupts are extremely useful but, if a practical alternative exists, it should be seriously considered. From 41ea4488a330393ea6615c09a4150d30766cf298 Mon Sep 17 00:00:00 2001 From: Godfrey van der Linden Date: Sun, 22 Jun 2025 21:17:20 -0700 Subject: [PATCH 4/7] as_drivers/nec_ir/aremote.py: bad message import #139 Commit f7c44fa in 2022 moved message from primitives to threadsafe. This reference got missed in that move. --- v3/as_drivers/nec_ir/aremote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v3/as_drivers/nec_ir/aremote.py b/v3/as_drivers/nec_ir/aremote.py index ed152a5..ee116d4 100644 --- a/v3/as_drivers/nec_ir/aremote.py +++ b/v3/as_drivers/nec_ir/aremote.py @@ -6,7 +6,7 @@ from sys import platform import asyncio -from primitives.message import Message +from threadsafe.message import Message from micropython import const from array import array from utime import ticks_ms, ticks_us, ticks_diff From 6e5d6e6d8280a61ac46257966506868f031792f4 Mon Sep 17 00:00:00 2001 From: Godfrey van der Linden Date: Mon, 23 Jun 2025 10:24:37 -0700 Subject: [PATCH 5/7] Use flattened threadsafe namespace to import Message. Feedback from project owner, Peter --- v3/as_drivers/nec_ir/aremote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v3/as_drivers/nec_ir/aremote.py b/v3/as_drivers/nec_ir/aremote.py index ee116d4..cdfb177 100644 --- a/v3/as_drivers/nec_ir/aremote.py +++ b/v3/as_drivers/nec_ir/aremote.py @@ -6,7 +6,7 @@ from sys import platform import asyncio -from threadsafe.message import Message +from threadsafe import Message from micropython import const from array import array from utime import ticks_ms, ticks_us, ticks_diff From 2258b693281508aeda119757875a9d0c9b9e5f5d Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Thu, 20 Nov 2025 17:27:32 +0000 Subject: [PATCH 6/7] All: Purge references to uasyncio. --- v3/as_demos/auart.py | 2 +- v3/as_demos/iorw.py | 4 ++-- v3/as_demos/rate.py | 10 +++++----- v3/as_demos/roundrobin.py | 4 ++-- v3/as_drivers/as_GPS/as_GPS.py | 2 +- v3/as_drivers/as_GPS/as_rwGPS_time.py | 4 ++-- v3/as_drivers/as_GPS/astests_pyb.py | 2 +- v3/as_drivers/as_GPS/baud.py | 2 +- v3/as_drivers/client_server/heartbeat.py | 2 +- v3/as_drivers/client_server/uclient.py | 6 +++--- v3/as_drivers/client_server/userver.py | 8 ++++---- v3/as_drivers/hd44780/alcd.py | 4 ++-- v3/as_drivers/hd44780/alcdtest.py | 2 +- v3/as_drivers/i2c/asi2c.py | 6 +++--- v3/as_drivers/i2c/asi2c_i.py | 4 ++-- v3/as_drivers/i2c/i2c_esp.py | 2 +- v3/as_drivers/i2c/i2c_init.py | 4 ++-- v3/as_drivers/i2c/i2c_resp.py | 2 +- v3/as_drivers/sched/primitives/__init__.py | 2 +- v3/as_drivers/sched/sched.py | 2 +- v3/as_drivers/syncom/syncom.py | 2 +- v3/docs/TUTORIAL.md | 6 ------ v3/primitives/__init__.py | 2 +- v3/primitives/encoder.py | 2 +- v3/primitives/queue.py | 4 ++-- v3/primitives/tests/switches.py | 2 +- v3/threadsafe/__init__.py | 4 ++-- 27 files changed, 45 insertions(+), 51 deletions(-) diff --git a/v3/as_demos/auart.py b/v3/as_demos/auart.py index 1a312b0..75b8138 100644 --- a/v3/as_demos/auart.py +++ b/v3/as_demos/auart.py @@ -1,4 +1,4 @@ -# Test of uasyncio stream I/O using UART +# Test of asyncio stream I/O using UART # Author: Peter Hinch # Copyright Peter Hinch 2017-2022 Released under the MIT license # Link X1 and X2 to test. diff --git a/v3/as_demos/iorw.py b/v3/as_demos/iorw.py index 8d91f5d..04ee64b 100644 --- a/v3/as_demos/iorw.py +++ b/v3/as_demos/iorw.py @@ -72,12 +72,12 @@ def readline(self): self.ridx += 1 return chr(ch) - # Emulate unbuffered hardware which writes one character: uasyncio waits + # Emulate unbuffered hardware which writes one character: asyncio waits # until hardware is ready for the next. Hardware ready is emulated by write # timer callback. def write(self, buf, off=0, sz=0): self.wch = buf[off] # Hardware starts to write a char - return 1 # 1 byte written. uasyncio waits on ioctl write ready + return 1 # 1 byte written. asyncio waits on ioctl write ready async def receiver(myior): diff --git a/v3/as_demos/rate.py b/v3/as_demos/rate.py index 46cb5b2..b835f33 100644 --- a/v3/as_demos/rate.py +++ b/v3/as_demos/rate.py @@ -1,11 +1,11 @@ -# rate.py Benchmark for uasyncio. Author Peter Hinch Feb 2018-Apr 2020. -# Benchmark uasyncio round-robin scheduling performance -# This measures the rate at which uasyncio can schedule a minimal coro which +# rate.py Benchmark for asyncio. Author Peter Hinch Feb 2018-Apr 2020. +# Benchmark asyncio round-robin scheduling performance +# This measures the rate at which asyncio can schedule a minimal coro which # mereley increments a global. # Outcome on a Pyboard 1.1 -# 100 minimal coros are scheduled at an interval of 195μs on uasyncio V3 -# Compares with ~156μs on official uasyncio V2. +# 100 minimal coros are scheduled at an interval of 195μs on asyncio V3 +# Compares with ~156μs on official asyncio V2. # Results for 100 coros on other platforms at standard clock rate: # Pyboard D SF2W 124μs diff --git a/v3/as_demos/roundrobin.py b/v3/as_demos/roundrobin.py index 79bc60d..205b8e0 100644 --- a/v3/as_demos/roundrobin.py +++ b/v3/as_demos/roundrobin.py @@ -3,9 +3,9 @@ # Copyright Peter Hinch 2017-2020 Released under the MIT license # Result on Pyboard 1.1 with print('Foo', n) commented out -# executions/second 5575.6 on uasyncio V3 +# executions/second 5575.6 on asyncio V3 -# uasyncio V2 produced the following results +# asyncio V2 produced the following results # 4249 - with a hack where sleep_ms(0) was replaced with yield # Using sleep_ms(0) 2750 diff --git a/v3/as_drivers/as_GPS/as_GPS.py b/v3/as_drivers/as_GPS/as_GPS.py index f1f553c..8298b05 100644 --- a/v3/as_drivers/as_GPS/as_GPS.py +++ b/v3/as_drivers/as_GPS/as_GPS.py @@ -11,7 +11,7 @@ # astests.py runs under CPython but not MicroPython because mktime is missing # from Unix build of utime -# Ported to uasyncio V3 OK. +# Ported to asyncio V3 OK. import asyncio diff --git a/v3/as_drivers/as_GPS/as_rwGPS_time.py b/v3/as_drivers/as_GPS/as_rwGPS_time.py index 5cf94cd..3e266b6 100644 --- a/v3/as_drivers/as_GPS/as_rwGPS_time.py +++ b/v3/as_drivers/as_GPS/as_rwGPS_time.py @@ -13,10 +13,10 @@ # Sending: $PMTK251,38400*27\r\n' import asyncio -from uasyncio import Event +from asyncio import Event from threadsafe.message import Message import pyb -import utime +import time import math from .as_tGPS import GPS_RWTimer from .as_rwGPS import FULL_COLD_START diff --git a/v3/as_drivers/as_GPS/astests_pyb.py b/v3/as_drivers/as_GPS/astests_pyb.py index 171714f..93c001e 100755 --- a/v3/as_drivers/as_GPS/astests_pyb.py +++ b/v3/as_drivers/as_GPS/astests_pyb.py @@ -9,7 +9,7 @@ # Copyright (c) 2018-2020 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file -# Ported to uasyncio V3 OK. +# Ported to asyncio V3 OK. from .as_GPS import * from machine import UART diff --git a/v3/as_drivers/as_GPS/baud.py b/v3/as_drivers/as_GPS/baud.py index 29852c3..3d04225 100644 --- a/v3/as_drivers/as_GPS/baud.py +++ b/v3/as_drivers/as_GPS/baud.py @@ -1,4 +1,4 @@ -# baud.py Test uasyncio at high baudrate +# baud.py Test asyncio at high baudrate import pyb import asyncio import utime diff --git a/v3/as_drivers/client_server/heartbeat.py b/v3/as_drivers/client_server/heartbeat.py index 8045921..3b9612c 100644 --- a/v3/as_drivers/client_server/heartbeat.py +++ b/v3/as_drivers/client_server/heartbeat.py @@ -1,4 +1,4 @@ -# flash.py Heartbeat code for simple uasyncio-based echo server +# flash.py Heartbeat code for simple asyncio-based echo server # Released under the MIT licence # Copyright (c) Peter Hinch 2019 diff --git a/v3/as_drivers/client_server/uclient.py b/v3/as_drivers/client_server/uclient.py index f052d18..db9439b 100644 --- a/v3/as_drivers/client_server/uclient.py +++ b/v3/as_drivers/client_server/uclient.py @@ -1,11 +1,11 @@ -# uclient.py Demo of simple uasyncio-based client for echo server +# uclient.py Demo of simple asyncio-based client for echo server # Released under the MIT licence # Copyright (c) Peter Hinch 2019-2020 -import usocket as socket +import socket import asyncio -import ujson +import json from heartbeat import heartbeat # Optional LED flash server = "192.168.0.41" diff --git a/v3/as_drivers/client_server/userver.py b/v3/as_drivers/client_server/userver.py index 509bcd9..fe74651 100644 --- a/v3/as_drivers/client_server/userver.py +++ b/v3/as_drivers/client_server/userver.py @@ -1,12 +1,12 @@ -# userver.py Demo of simple uasyncio-based echo server +# userver.py Demo of simple asyncio-based echo server # Released under the MIT licence # Copyright (c) Peter Hinch 2019-2020 -import usocket as socket +import socket import asyncio -import uselect as select -import ujson +import select +import json from heartbeat import heartbeat # Optional LED flash diff --git a/v3/as_drivers/hd44780/alcd.py b/v3/as_drivers/hd44780/alcd.py index 908a322..1315bc1 100644 --- a/v3/as_drivers/hd44780/alcd.py +++ b/v3/as_drivers/hd44780/alcd.py @@ -1,7 +1,7 @@ -# LCD class for Micropython and uasyncio. +# LCD class for Micropython and asyncio. # Author: Peter Hinch # Copyright Peter Hinch 2017 Released under the MIT license -# V1.1 24 Apr 2020 Updated for uasyncio V3 +# V1.1 24 Apr 2020 Updated for asyncio V3 # V1.0 13 May 2017 # Assumes an LCD with standard Hitachi HD44780 controller chip wired using four data lines diff --git a/v3/as_drivers/hd44780/alcdtest.py b/v3/as_drivers/hd44780/alcdtest.py index f057c23..3a515ac 100644 --- a/v3/as_drivers/hd44780/alcdtest.py +++ b/v3/as_drivers/hd44780/alcdtest.py @@ -1,7 +1,7 @@ # alcdtest.py Test program for LCD class # Author: Peter Hinch # Copyright Peter Hinch 2017-2020 Released under the MIT license -# Updated for uasyncio V3 +# Updated for asyncio V3 # runs for 20s import asyncio import utime as time diff --git a/v3/as_drivers/i2c/asi2c.py b/v3/as_drivers/i2c/asi2c.py index 4a72eaf..5eaf316 100644 --- a/v3/as_drivers/i2c/asi2c.py +++ b/v3/as_drivers/i2c/asi2c.py @@ -1,5 +1,5 @@ # asi2c.py A communications link using I2C slave mode on Pyboard. -# Channel and Responder classes. Adapted for uasyncio V3, WBUS DIP28. +# Channel and Responder classes. Adapted for asyncio V3, WBUS DIP28. # The MIT License (MIT) # @@ -25,7 +25,7 @@ import asyncio import machine -import utime +import time from micropython import const import io @@ -114,7 +114,7 @@ def read(self, n): # Set .txbyt to the required data. Return its size. So awrite returns # with transmission occurring in tha background. - # uasyncio V3: Stream.drain() calls write with buf being a memoryview + # asyncio V3: Stream.drain() calls write with buf being a memoryview # and no off or sz args. def write(self, buf): if self.synchronised: diff --git a/v3/as_drivers/i2c/asi2c_i.py b/v3/as_drivers/i2c/asi2c_i.py index d9f47e5..644d43c 100644 --- a/v3/as_drivers/i2c/asi2c_i.py +++ b/v3/as_drivers/i2c/asi2c_i.py @@ -1,5 +1,5 @@ # asi2c_i.py A communications link using I2C slave mode on Pyboard. -# Initiator class. Adapted for uasyncio V3, WBUS DIP28. +# Initiator class. Adapted for asyncio V3, WBUS DIP28. # The MIT License (MIT) # @@ -25,7 +25,7 @@ import asyncio import machine -import utime +import time import gc from .asi2c import Channel diff --git a/v3/as_drivers/i2c/i2c_esp.py b/v3/as_drivers/i2c/i2c_esp.py index d61d50f..85f6828 100644 --- a/v3/as_drivers/i2c/i2c_esp.py +++ b/v3/as_drivers/i2c/i2c_esp.py @@ -1,4 +1,4 @@ -# i2c_esp.py Test program for asi2c.py. Adapted for uasyncio V3, WBUS DIP28. +# i2c_esp.py Test program for asi2c.py. Adapted for asyncio V3, WBUS DIP28. # Tests Responder on ESP8266. # The MIT License (MIT) diff --git a/v3/as_drivers/i2c/i2c_init.py b/v3/as_drivers/i2c/i2c_init.py index bdadc6b..4b56563 100644 --- a/v3/as_drivers/i2c/i2c_init.py +++ b/v3/as_drivers/i2c/i2c_init.py @@ -1,4 +1,4 @@ -# i2c_init.py Test program for asi2c.py. Adapted for uasyncio V3, WBUS DIP28. +# i2c_init.py Test program for asi2c.py. Adapted for asyncio V3, WBUS DIP28. # Tests Initiator on a Pyboard # The MIT License (MIT) @@ -27,7 +27,7 @@ from pyb import I2C # Only pyb supports slave mode from machine import Pin from .asi2c_i import Initiator -import ujson +import json import os i2c = I2C(2, mode=I2C.SLAVE) diff --git a/v3/as_drivers/i2c/i2c_resp.py b/v3/as_drivers/i2c/i2c_resp.py index b3bf799..f65c246 100644 --- a/v3/as_drivers/i2c/i2c_resp.py +++ b/v3/as_drivers/i2c/i2c_resp.py @@ -1,4 +1,4 @@ -# i2c_resp.py Test program for asi2c.py. Adapted for uasyncio V3, WBUS DIP28. +# i2c_resp.py Test program for asi2c.py. Adapted for asyncio V3, WBUS DIP28. # Tests Responder on a Pyboard. # The MIT License (MIT) diff --git a/v3/as_drivers/sched/primitives/__init__.py b/v3/as_drivers/sched/primitives/__init__.py index 0a824d5..d6ffcf1 100644 --- a/v3/as_drivers/sched/primitives/__init__.py +++ b/v3/as_drivers/sched/primitives/__init__.py @@ -1,4 +1,4 @@ -# __init__.py Common functions for uasyncio primitives +# __init__.py Common functions for asyncio primitives # Copyright (c) 2018-2020 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file diff --git a/v3/as_drivers/sched/sched.py b/v3/as_drivers/sched/sched.py index 99a6651..aec41b6 100644 --- a/v3/as_drivers/sched/sched.py +++ b/v3/as_drivers/sched/sched.py @@ -9,7 +9,7 @@ from sched.cron import cron -# uasyncio can't handle long delays so split into 1000s (1e6 ms) segments +# asyncio can't handle long delays so split into 1000s (1e6 ms) segments _MAXT = const(1000) # Wait prior to a sequence start: see # https://github.com/peterhinch/micropython-async/blob/master/v3/docs/SCHEDULE.md#71-initialisation diff --git a/v3/as_drivers/syncom/syncom.py b/v3/as_drivers/syncom/syncom.py index 209095c..b1aef77 100644 --- a/v3/as_drivers/syncom/syncom.py +++ b/v3/as_drivers/syncom/syncom.py @@ -1,6 +1,6 @@ # syncom.py Synchronous communication channel between two MicroPython # platforms. 4 June 2017 -# Uses uasyncio. +# Uses asyncio. # The MIT License (MIT) # diff --git a/v3/docs/TUTORIAL.md b/v3/docs/TUTORIAL.md index b818d58..98c183b 100644 --- a/v3/docs/TUTORIAL.md +++ b/v3/docs/TUTORIAL.md @@ -8,12 +8,6 @@ which can be cut and pasted at the REPL. See [this overview](../README.md) for a summary of resources for `asyncio` including device drivers, debugging aids, and documentation. -The name of the module was formerly `uasyncio`. To run the demo scripts on old -firmware please use -```python -import uasyncio as asyncio -``` - # Contents 0. [Introduction](./TUTORIAL.md#0-introduction) diff --git a/v3/primitives/__init__.py b/v3/primitives/__init__.py index ceaad77..2d4a178 100644 --- a/v3/primitives/__init__.py +++ b/v3/primitives/__init__.py @@ -1,4 +1,4 @@ -# __init__.py Common functions for uasyncio primitives +# __init__.py Common functions for asyncio primitives # Copyright (c) 2018-2024 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file diff --git a/v3/primitives/encoder.py b/v3/primitives/encoder.py index ef9b561..0fb5c5a 100644 --- a/v3/primitives/encoder.py +++ b/v3/primitives/encoder.py @@ -96,7 +96,7 @@ async def _run(self, vmin, vmax, div, mod, cb, args): lcv = lcv if mod is None else lcv % mod self._cv = lcv # update ._cv for .value() before CB. if lcv != plcv: - cb(lcv, lcv - plcv, *args) # Run user CB in uasyncio context + cb(lcv, lcv - plcv, *args) # Run user CB in asyncio context self._trig.set() # Enable async iterator pcv = cv plcv = lcv diff --git a/v3/primitives/queue.py b/v3/primitives/queue.py index e2cdba2..64ad2fe 100644 --- a/v3/primitives/queue.py +++ b/v3/primitives/queue.py @@ -1,10 +1,10 @@ -# queue.py: adapted from uasyncio V2 +# queue.py: adapted from asyncio V2 # Copyright (c) 2018-2020 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file # Code is based on Paul Sokolovsky's work. -# This is a temporary solution until uasyncio V3 gets an efficient official version +# This is a temporary solution until asyncio V3 gets an efficient official version import asyncio diff --git a/v3/primitives/tests/switches.py b/v3/primitives/tests/switches.py index 8d93c9b..8055cd0 100644 --- a/v3/primitives/tests/switches.py +++ b/v3/primitives/tests/switches.py @@ -1,6 +1,6 @@ # Test/demo programs for Switch and Pushbutton classes # Tested on Pyboard but should run on other microcontroller platforms -# running MicroPython with uasyncio library. +# running MicroPython with asyncio library. # Copyright (c) 2018-2022 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file diff --git a/v3/threadsafe/__init__.py b/v3/threadsafe/__init__.py index a60c707..4637508 100644 --- a/v3/threadsafe/__init__.py +++ b/v3/threadsafe/__init__.py @@ -1,4 +1,4 @@ -# __init__.py Common functions for uasyncio threadsafe primitives +# __init__.py Common functions for asyncio threadsafe primitives # Copyright (c) 2022 Peter Hinch # Released under the MIT License (MIT) - see LICENSE file @@ -10,7 +10,7 @@ "Context": "context", } -# Copied from uasyncio.__init__.py +# Copied from asyncio.__init__.py # Lazy loader, effectively does: # global attr # from .mod import attr From 74e4dbcece1baa51e0e1df48cb474bcf304373c5 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Thu, 20 Nov 2025 17:55:38 +0000 Subject: [PATCH 7/7] All: Purge code references to u libraries. --- v3/as_demos/apoll.py | 4 ++-- v3/as_drivers/as_GPS/as_GPS.py | 14 +++++++------- v3/as_drivers/as_GPS/as_GPS_time.py | 6 +++--- v3/as_drivers/as_GPS/as_rwGPS_time.py | 4 ++-- v3/as_drivers/as_GPS/as_tGPS.py | 12 ++++++------ v3/as_drivers/as_GPS/baud.py | 4 ++-- v3/as_drivers/client_server/uclient.py | 4 ++-- v3/as_drivers/client_server/userver.py | 2 +- v3/as_drivers/hd44780/alcd.py | 2 +- v3/as_drivers/hd44780/alcdtest.py | 2 +- v3/as_drivers/htu21d/htu21d_mc.py | 4 ++-- v3/as_drivers/i2c/asi2c.py | 8 ++++---- v3/as_drivers/i2c/asi2c_i.py | 8 ++++---- v3/as_drivers/i2c/i2c_esp.py | 8 ++++---- v3/as_drivers/i2c/i2c_init.py | 12 ++++++------ v3/as_drivers/i2c/i2c_resp.py | 8 ++++---- v3/as_drivers/metrics/metrics.py | 2 +- v3/as_drivers/nec_ir/aremote.py | 2 +- v3/as_drivers/syncom/sr_init.py | 2 +- v3/as_drivers/syncom/syncom.py | 10 +++++----- v3/primitives/delay_ms.py | 2 +- v3/primitives/pushbutton.py | 2 +- v3/primitives/switch.py | 2 +- 23 files changed, 62 insertions(+), 62 deletions(-) diff --git a/v3/as_demos/apoll.py b/v3/as_demos/apoll.py index abb609d..cc8d8aa 100644 --- a/v3/as_demos/apoll.py +++ b/v3/as_demos/apoll.py @@ -7,7 +7,7 @@ import asyncio import pyb -import utime as time +import time class Accelerometer(object): @@ -33,7 +33,7 @@ def poll(self): # Device is noisy. Only update if change exceeds a threshold def vector(self): return self.coords - def timed_out(self): # Time since last change or last timeout report + def timed_out(self): # Time since last change or last timeout reptimeort if time.ticks_diff(time.ticks_ms(), self.last_change) > self.timeout: self.last_change = time.ticks_ms() return True diff --git a/v3/as_drivers/as_GPS/as_GPS.py b/v3/as_drivers/as_GPS/as_GPS.py index 8298b05..6a78dc7 100644 --- a/v3/as_drivers/as_GPS/as_GPS.py +++ b/v3/as_drivers/as_GPS/as_GPS.py @@ -9,7 +9,7 @@ # Released under the MIT License (MIT) - see LICENSE file # astests.py runs under CPython but not MicroPython because mktime is missing -# from Unix build of utime +# from Unix build of time # Ported to asyncio V3 OK. @@ -102,14 +102,14 @@ def __init__( self._fix_cb_args = fix_cb_args self.battery = False # Assume no backup battery - # CPython compatibility. Import utime or time for fix time handling. + # CPython compatibility. Import time or time for fix time handling. try: - import utime + import time - self._get_time = utime.ticks_ms - self._time_diff = utime.ticks_diff - self._localtime = utime.localtime - self._mktime = utime.mktime + self._get_time = time.ticks_ms + self._time_diff = time.ticks_diff + self._localtime = time.localtime + self._mktime = time.mktime except ImportError: # Otherwise default to time module for non-embedded implementations # Should still support millisecond resolution. diff --git a/v3/as_drivers/as_GPS/as_GPS_time.py b/v3/as_drivers/as_GPS/as_GPS_time.py index 5742c33..0f2b98e 100644 --- a/v3/as_drivers/as_GPS/as_GPS_time.py +++ b/v3/as_drivers/as_GPS/as_GPS_time.py @@ -8,7 +8,7 @@ import asyncio import pyb -import utime +import time import math from .as_tGPS import GPS_Timer from threadsafe.message import Message @@ -129,8 +129,8 @@ def time(minutes=1): def us_cb(my_gps, tick, led): global us_acquired # Time of previous PPS edge in ticks_us() if us_acquired is not None: - # Trigger Message. Pass time between PPS measured by utime.ticks_us() - tick.set(utime.ticks_diff(my_gps.acquired, us_acquired)) + # Trigger Message. Pass time between PPS measured by time.ticks_us() + tick.set(time.ticks_diff(my_gps.acquired, us_acquired)) us_acquired = my_gps.acquired led.toggle() diff --git a/v3/as_drivers/as_GPS/as_rwGPS_time.py b/v3/as_drivers/as_GPS/as_rwGPS_time.py index 3e266b6..110063e 100644 --- a/v3/as_drivers/as_GPS/as_rwGPS_time.py +++ b/v3/as_drivers/as_GPS/as_rwGPS_time.py @@ -184,8 +184,8 @@ def time(minutes=1): def us_cb(my_gps, tick, led): global us_acquired if us_acquired is not None: - # Trigger event. Pass time between PPS measured by utime.ticks_us() - tick.set(utime.ticks_diff(my_gps.acquired, us_acquired)) + # Trigger event. Pass time between PPS measured by time.ticks_us() + tick.set(time.ticks_diff(my_gps.acquired, us_acquired)) us_acquired = my_gps.acquired led.toggle() diff --git a/v3/as_drivers/as_GPS/as_tGPS.py b/v3/as_drivers/as_GPS/as_tGPS.py index 78bebf3..6e7d752 100644 --- a/v3/as_drivers/as_GPS/as_tGPS.py +++ b/v3/as_drivers/as_GPS/as_tGPS.py @@ -14,7 +14,7 @@ rtc = pyb.RTC() except ImportError: on_pyboard = False -import utime +import time import micropython import gc from .as_GPS import RMC, AS_GPS @@ -90,7 +90,7 @@ def close(self): # If update rate > 1Hz, when PPS edge occurs the last RMC message will have # a nonzero ms value. Need to set RTC to 1 sec after the last 1 second boundary def _isr(self, _): - acquired = utime.ticks_us() # Save time of PPS + acquired = time.ticks_us() # Save time of PPS # Time in last NMEA sentence was time of last PPS. # Reduce to integer secs since midnight local time. isecs = (self.epoch_time + int(3600 * self.local_offset)) % 86400 @@ -142,7 +142,7 @@ async def set_rtc(self): # local time. def _get_rtc_usecs(self): y, m, d, weekday, hrs, mins, secs, subsecs = rtc.datetime() - tim = 1000000 * utime.mktime((y, m, d, hrs, mins, secs, weekday - 1, 0)) + tim = 1000000 * time.mktime((y, m, d, hrs, mins, secs, weekday - 1, 0)) return tim + ((1000000 * (255 - subsecs)) >> 8) # Return no. of μs RTC leads GPS. Done by comparing times at the instant of @@ -164,7 +164,7 @@ async def _await_pps(self): st = rtc.datetime()[7] while rtc.datetime()[7] == st: # Wait for RTC to change (4ms max) pass - dt = utime.ticks_diff(utime.ticks_us(), self.acquired) + dt = time.ticks_diff(time.ticks_us(), self.acquired) trtc = self._get_rtc_usecs() - dt # Read RTC now and adjust for PPS edge tgps = 1000000 * (self.epoch_time + 3600 * self.local_offset + 1) return trtc, tgps @@ -234,7 +234,7 @@ def get_ms(self): t = self.t_ms acquired = self.acquired machine.enable_irq(state) - return t + utime.ticks_diff(utime.ticks_us(), acquired) // 1000 + return t + time.ticks_diff(time.ticks_us(), acquired) // 1000 # Return accurate GPS time of day (hrs: int, mins: int, secs: int, μs: int) # The ISR can skip an update of .secs if a day rollover would occur. Next @@ -249,7 +249,7 @@ def get_t_split(self): isecs, ims = divmod(t, 1000) # Get integer secs and ms x, secs = divmod(isecs, 60) hrs, mins = divmod(x, 60) - dt = utime.ticks_diff(utime.ticks_us(), acquired) # μs to time now + dt = time.ticks_diff(time.ticks_us(), acquired) # μs to time now ds, us = divmod(dt, 1000000) # If dt > 1e6 can add to secs without risk of rollover: see above. self._time[0] = hrs diff --git a/v3/as_drivers/as_GPS/baud.py b/v3/as_drivers/as_GPS/baud.py index 3d04225..eadd9ad 100644 --- a/v3/as_drivers/as_GPS/baud.py +++ b/v3/as_drivers/as_GPS/baud.py @@ -1,7 +1,7 @@ # baud.py Test asyncio at high baudrate import pyb import asyncio -import utime +import time import as_drivers.as_rwGPS as as_rwGPS # Outcome @@ -53,7 +53,7 @@ async def gps_test(): minlen = min(minlen, l) print(l, maxlen, minlen, res) red.toggle() - utime.sleep_ms(10) + time.sleep_ms(10) def test(): diff --git a/v3/as_drivers/client_server/uclient.py b/v3/as_drivers/client_server/uclient.py index db9439b..4731311 100644 --- a/v3/as_drivers/client_server/uclient.py +++ b/v3/as_drivers/client_server/uclient.py @@ -34,14 +34,14 @@ def close(): data = ["value", 1] while True: try: - swriter.write("{}\n".format(ujson.dumps(data))) + swriter.write("{}\n".format(json.dumps(data))) await swriter.drain() res = await sreader.readline() except OSError: close() return try: - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) except ValueError: close() return diff --git a/v3/as_drivers/client_server/userver.py b/v3/as_drivers/client_server/userver.py index fe74651..b8a97dd 100644 --- a/v3/as_drivers/client_server/userver.py +++ b/v3/as_drivers/client_server/userver.py @@ -38,7 +38,7 @@ async def run_client(self, sreader, swriter): res = b"" if res == b"": raise OSError - print("Received {} from client {}".format(ujson.loads(res.rstrip()), self.cid)) + print("Received {} from client {}".format(json.loads(res.rstrip()), self.cid)) swriter.write(res) await swriter.drain() # Echo back except OSError: diff --git a/v3/as_drivers/hd44780/alcd.py b/v3/as_drivers/hd44780/alcd.py index 1315bc1..5438714 100644 --- a/v3/as_drivers/hd44780/alcd.py +++ b/v3/as_drivers/hd44780/alcd.py @@ -16,7 +16,7 @@ # Site : http://www.raspberrypi-spy.co.uk from machine import Pin -import utime as time +import time import asyncio # ********************************** GLOBAL CONSTANTS: TARGET BOARD PIN NUMBERS ************************************* diff --git a/v3/as_drivers/hd44780/alcdtest.py b/v3/as_drivers/hd44780/alcdtest.py index 3a515ac..f74d2dd 100644 --- a/v3/as_drivers/hd44780/alcdtest.py +++ b/v3/as_drivers/hd44780/alcdtest.py @@ -4,7 +4,7 @@ # Updated for asyncio V3 # runs for 20s import asyncio -import utime as time +import time from .alcd import LCD, PINLIST lcd = LCD(PINLIST, cols=16) diff --git a/v3/as_drivers/htu21d/htu21d_mc.py b/v3/as_drivers/htu21d/htu21d_mc.py index 385ec48..139ad3a 100644 --- a/v3/as_drivers/htu21d/htu21d_mc.py +++ b/v3/as_drivers/htu21d/htu21d_mc.py @@ -7,7 +7,7 @@ # Copyright Peter Hinch 2018-2020 Released under the MIT license import machine -import ustruct +import struct import asyncio from micropython import const @@ -49,7 +49,7 @@ async def _get_data(self, cmd, divisor=0x131 << 15, bit=1 << 23): self.i2c.writeto(self.address, cmd) # Start reading await asyncio.sleep_ms(_PAUSE_MS) # Wait for device value = self.i2c.readfrom(self.address, 3) # Read result, check CRC8 - data, crc = ustruct.unpack(">HB", value) + data, crc = struct.unpack(">HB", value) remainder = (data << 8) | crc while bit > 128: if remainder & bit: diff --git a/v3/as_drivers/i2c/asi2c.py b/v3/as_drivers/i2c/asi2c.py index 5eaf316..d130e26 100644 --- a/v3/as_drivers/i2c/asi2c.py +++ b/v3/as_drivers/i2c/asi2c.py @@ -162,7 +162,7 @@ async def _run(self): def _handler(self, _, sn=bytearray(2), txnull=bytearray(2)): addr = Responder.addr self.rem.irq(handler=None) - utime.sleep_us(_DELAY) # Ensure Initiator has set up to write. + time.sleep_us(_DELAY) # Ensure Initiator has set up to write. self.i2c.readfrom_into(addr, sn) self.own(1) self.waitfor(0) @@ -173,7 +173,7 @@ def _handler(self, _, sn=bytearray(2), txnull=bytearray(2)): self.cantx = not bool(sn[1] & 0x80) # Can Initiator accept a payload? if n: self.waitfor(1) - utime.sleep_us(_DELAY) + time.sleep_us(_DELAY) mv = memoryview(self.rx_mv[0:n]) # allocates self.i2c.readfrom_into(addr, mv) self.own(1) @@ -183,7 +183,7 @@ def _handler(self, _, sn=bytearray(2), txnull=bytearray(2)): self.own(1) # Request to send self.waitfor(1) - utime.sleep_us(_DELAY) + time.sleep_us(_DELAY) dtx = self.txbyt != b"" and self.cantx # Data to send siz = self.txsiz if dtx else txnull if self.rxbyt: @@ -196,7 +196,7 @@ def _handler(self, _, sn=bytearray(2), txnull=bytearray(2)): if dtx: self.own(1) self.waitfor(1) - utime.sleep_us(_DELAY) + time.sleep_us(_DELAY) self.i2c.writeto(addr, self.txbyt) self.own(0) self.waitfor(0) diff --git a/v3/as_drivers/i2c/asi2c_i.py b/v3/as_drivers/i2c/asi2c_i.py index 644d43c..0fe6953 100644 --- a/v3/as_drivers/i2c/asi2c_i.py +++ b/v3/as_drivers/i2c/asi2c_i.py @@ -66,9 +66,9 @@ def __init__( asyncio.create_task(self._run()) def waitfor(self, val): # Wait for response for 1 sec - tim = utime.ticks_ms() + tim = time.ticks_ms() while not self.rem() == val: - if utime.ticks_diff(utime.ticks_ms(), tim) > 1000: + if time.ticks_diff(time.ticks_ms(), tim) > 1000: raise OSError async def reboot(self): @@ -93,9 +93,9 @@ async def _run(self): while True: gc.collect() try: - tstart = utime.ticks_us() + tstart = time.ticks_us() self._sendrx() - t = utime.ticks_diff(utime.ticks_us(), tstart) + t = time.ticks_diff(time.ticks_us(), tstart) except OSError: # Reboot remote. break await asyncio.sleep_ms(Initiator.t_poll) diff --git a/v3/as_drivers/i2c/i2c_esp.py b/v3/as_drivers/i2c/i2c_esp.py index 85f6828..48fc5d9 100644 --- a/v3/as_drivers/i2c/i2c_esp.py +++ b/v3/as_drivers/i2c/i2c_esp.py @@ -26,7 +26,7 @@ import asyncio from machine import Pin, I2C from .asi2c import Responder -import ujson +import json import gc gc.collect() @@ -43,11 +43,11 @@ async def receiver(): print("started") for _ in range(5): # Test flow control res = await sreader.readline() - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) await asyncio.sleep(4) while True: res = await sreader.readline() - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) async def sender(): @@ -55,7 +55,7 @@ async def sender(): txdata = [0, 0] while True: txdata[0] = gc.mem_free() - await swriter.awrite("".join((ujson.dumps(txdata), "\n"))) + await swriter.awrite("".join((json.dumps(txdata), "\n"))) txdata[1] += 1 await asyncio.sleep_ms(1500) gc.collect() diff --git a/v3/as_drivers/i2c/i2c_init.py b/v3/as_drivers/i2c/i2c_init.py index 4b56563..b88ee18 100644 --- a/v3/as_drivers/i2c/i2c_init.py +++ b/v3/as_drivers/i2c/i2c_init.py @@ -44,21 +44,21 @@ async def receiver(): sreader = asyncio.StreamReader(chan) for _ in range(5): # Test flow control res = await sreader.readline() - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) await asyncio.sleep(4) while True: res = await sreader.readline() - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) async def sender(): swriter = asyncio.StreamWriter(chan, {}) txdata = [0, 0] - await swriter.awrite("".join((ujson.dumps("this is a test 1"), "\n"))) - await swriter.awrite("".join((ujson.dumps("this is a test 2"), "\n"))) - await swriter.awrite("".join((ujson.dumps("this is a test 3"), "\n"))) + await swriter.awrite("".join((json.dumps("this is a test 1"), "\n"))) + await swriter.awrite("".join((json.dumps("this is a test 2"), "\n"))) + await swriter.awrite("".join((json.dumps("this is a test 3"), "\n"))) while True: - await swriter.awrite("".join((ujson.dumps(txdata), "\n"))) + await swriter.awrite("".join((json.dumps(txdata), "\n"))) txdata[0] += 1 await asyncio.sleep_ms(800) diff --git a/v3/as_drivers/i2c/i2c_resp.py b/v3/as_drivers/i2c/i2c_resp.py index f65c246..c5b1801 100644 --- a/v3/as_drivers/i2c/i2c_resp.py +++ b/v3/as_drivers/i2c/i2c_resp.py @@ -26,7 +26,7 @@ import asyncio from machine import Pin, I2C from .asi2c import Responder -import ujson +import json import os i2c = I2C(2) @@ -44,18 +44,18 @@ async def receiver(): print("started") for _ in range(5): # Test flow control res = await sreader.readline() - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) await asyncio.sleep(4) while True: res = await sreader.readline() - print("Received", ujson.loads(res)) + print("Received", json.loads(res)) async def sender(): swriter = asyncio.StreamWriter(chan, {}) txdata = [0, 0] while True: - await swriter.awrite("".join((ujson.dumps(txdata), "\n"))) + await swriter.awrite("".join((json.dumps(txdata), "\n"))) txdata[1] += 1 await asyncio.sleep_ms(1500) diff --git a/v3/as_drivers/metrics/metrics.py b/v3/as_drivers/metrics/metrics.py index 3c62db0..e108630 100644 --- a/v3/as_drivers/metrics/metrics.py +++ b/v3/as_drivers/metrics/metrics.py @@ -4,7 +4,7 @@ import asyncio import gc -from utime import ticks_us, ticks_diff +from time import ticks_us, ticks_diff def metrics(): diff --git a/v3/as_drivers/nec_ir/aremote.py b/v3/as_drivers/nec_ir/aremote.py index cdfb177..36b0a93 100644 --- a/v3/as_drivers/nec_ir/aremote.py +++ b/v3/as_drivers/nec_ir/aremote.py @@ -9,7 +9,7 @@ from threadsafe import Message from micropython import const from array import array -from utime import ticks_ms, ticks_us, ticks_diff +from time import ticks_ms, ticks_us, ticks_diff if platform == "pyboard": from pyb import Pin, ExtInt diff --git a/v3/as_drivers/syncom/sr_init.py b/v3/as_drivers/syncom/sr_init.py index 6abb601..a3549bc 100644 --- a/v3/as_drivers/syncom/sr_init.py +++ b/v3/as_drivers/syncom/sr_init.py @@ -26,7 +26,7 @@ from machine import Pin, Signal from pyb import LED import asyncio -from utime import ticks_ms, ticks_diff +from time import ticks_ms, ticks_diff from syncom import SynCom, SynComError diff --git a/v3/as_drivers/syncom/syncom.py b/v3/as_drivers/syncom/syncom.py index b1aef77..1a262ad 100644 --- a/v3/as_drivers/syncom/syncom.py +++ b/v3/as_drivers/syncom/syncom.py @@ -30,10 +30,10 @@ # Instantaneous bit rate running ESP8266 at 160MHz: 1.6Kbps # Mean throughput running test programs 8.8ms per char (800bps). -from utime import ticks_diff, ticks_ms +from time import ticks_diff, ticks_ms import asyncio from micropython import const -import ujson +import json _BITS_PER_CH = const(7) _BITS_SYN = const(8) @@ -112,7 +112,7 @@ def send(self, obj): if self.string_mode: self.lsttx.append(obj) # strings are immutable else: - self.lsttx.append(ujson.dumps(obj)) + self.lsttx.append(json.dumps(obj)) # Number of queued objects (None on timeout) def any(self): @@ -195,8 +195,8 @@ async def _run(self): self.lstrx.append(getstr) else: try: - self.lstrx.append(ujson.loads(getstr)) - except: # ujson fail means target has crashed + self.lstrx.append(json.loads(getstr)) + except: # json fail means target has crashed raise SynComError getstr = "" # Reset for next string rxidx = 0 diff --git a/v3/primitives/delay_ms.py b/v3/primitives/delay_ms.py index 7975eeb..e22389d 100644 --- a/v3/primitives/delay_ms.py +++ b/v3/primitives/delay_ms.py @@ -6,7 +6,7 @@ # Released under the MIT License (MIT) - see LICENSE file import asyncio -from utime import ticks_add, ticks_diff, ticks_ms +from time import ticks_add, ticks_diff, ticks_ms from . import launch diff --git a/v3/primitives/pushbutton.py b/v3/primitives/pushbutton.py index 64c8e2e..81ea74d 100644 --- a/v3/primitives/pushbutton.py +++ b/v3/primitives/pushbutton.py @@ -4,7 +4,7 @@ # Released under the MIT License (MIT) - see LICENSE file import asyncio -import utime as time +import time from . import launch, Delay_ms try: diff --git a/v3/primitives/switch.py b/v3/primitives/switch.py index fe80231..9e46dc5 100644 --- a/v3/primitives/switch.py +++ b/v3/primitives/switch.py @@ -4,7 +4,7 @@ # Released under the MIT License (MIT) - see LICENSE file import asyncio -import utime as time +import time from . import launch