#!/usr/bin/python3 import argparse import asyncio import logging import serial_asyncio # pyserial-asyncio Debian: python3-serial-asyncio log = logging.getLogger(__name__) class LineBuffer: def __init__(self): self.buffer = '' def write(self, data: bytes): self.buffer += data.decode() class Receiver(asyncio.Protocol): def __init__(self): self.transport = None def connection_made(self, transport): self.transport = transport log.debug('port opened') def data_received(self, data): data = data.decode() print(data, end='', flush=True) def connection_lost(self, exc): log.debug('port closed') self.transport.loop.stop() def main(): parser = argparse.ArgumentParser('Logs CO2 and temperature from MH-Z19B sensor.') parser.add_argument('--device', '-d', default='/dev/ttyACM0', help='Device where Arduino is connected to') args = parser.parse_args() logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(message)s') loop = asyncio.new_event_loop() coro = serial_asyncio.create_serial_connection(loop, Receiver, args.device, baudrate=115200) loop.run_until_complete(coro) loop.run_forever() loop.close() if __name__ == '__main__': main()