# pySerial-asyncio API

## asyncio

Warning

This implementation is currently in an experimental state. Use at your own risk.

Experimental asyncio support is available for Python 3.4 and newer. The module `serial.aio` provides a `asyncio.Transport`: `SerialTransport`.

A factory function (asyncio.coroutine) is provided:

`serial.aio.``create_serial_connection`(loop, protocol_factory, *args, **kwargs)

  Parameters:

  - loop – The event handler
  - protocol_factory – Factory function for a `asyncio.Protocol`
  - args – Passed to the `serial.Serial` init function
  - kwargs – Passed to the `serial.Serial` init function

  Platform: | Posix

  Get a connection making coroutine.

Example:

    class Output(asyncio.Protocol):
        def connection_made(self, transport):
            self.transport = transport
            print('port opened', transport)
            transport.serial.rts = False
            transport.write(b'hello world\n')

        def data_received(self, data):
            print('data received', repr(data))
            self.transport.close()

        def connection_lost(self, exc):
            print('port closed')
            asyncio.get_event_loop().stop()

    loop = asyncio.get_event_loop()
    coro = serial.aio.create_serial_connection(loop, Output, '/dev/ttyUSB0', baudrate=115200)
    loop.run_until_complete(coro)
    loop.run_forever()
    loop.close()