New in 8.0.15, we’ve added a
system.serial.port function that returns a “context manager” object that’s useful for scripting. Briefly, context managers are useful with the
with statement (PEP 343) for automatic handling of resources. The new function acts as a complement to the existing functions - no existing code is deprecated, there’s just a new syntax that makes things a little cleaner to write.
So, with the exist functions, you first have to configure the serial port, then specifically open it, then perform your operations on that open port, then close it.
system.serial.configureSerialPort("COM1", bitRate=system.serial.BIT_RATE_9600) system.serial.openSerialPort("COM1") line = system.serial.readLine("COM1", 60000) system.serial.closeSerialPort("COM1")
Notice the repetition of the
The chief advantage of the new style is avoiding repetition; the
system.serial.port function accepts all the same arguments as
system.serial.configureSerialPort, but once you’ve used it you don’t have to manually open or close ports, nor call fully prefixed functions to interact with the port.
The above example becomes, with the new syntax:
with system.serial.port("COM1", bitRate=system.serial.BIT_RATE_9600) as port: line = port.readLine(60000)
The context manager returned by
system.serial.port itself returns a
SerialPort object, with special “partial” implementations of the
system.serial functions - so
port.readLine is valid in the above, as well as
port.sendBreak, etc. There’s no need (and indeed, no capability) to specify a different port with this syntax.
The other chief advantage of the
with statement is that even if an exception is thrown inside your code, the serial port will always be closed; it’s equivalent to a
try/finally block in Python.