MicroPython ModBus TCP and RTU library supporting client and host mode
Forked from Exo Sense Py, based on PyCom Modbus and extended with other functionalities to become a powerfull MicroPython library
The latest documentation is available at MicroPython Modbus ReadTheDocs
This is a quickstart to install the micropython-modbus
library on a
MicroPython board.
A more detailed guide of the development environment can be found in SETUP. Further details about the usage can be found in USAGE
python3 -m venv .venv
source .venv/bin/activate
pip install 'rshell>=0.0.30,<1.0.0'
rshell -p /dev/tty.SLAB_USBtoUART --editor nano
Inside the rshell open a REPL and execute these commands inside the REPL
import machine
import network
import time
import upip
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect('SSID', 'PASSWORD')
time.sleep(1)
print('Device connected to network: {}'.format(station.isconnected()))
upip.install('micropython-modbus')
print('Installation completed')
machine.soft_reset()
After a successful installation of the package and reboot of the system as described in the installation section the following commands can be used to request a coil state of a target/client device. Further usage examples can be found in the examples folder and in the Micropython section of USAGE
from ummodbus.tcp import ModbusTCPMaster
tcp_device = ModbusTCPMaster(
slave_ip='172.24.0.2', # IP address of the target/client/slave device
slave_port=502, # TCP port of the target/client/slave device
# timeout=5.0 # optional, timeout in seconds, default 5.0
)
# address of the target/client/slave device on the bus
slave_addr = 10
coil_address = 123
coil_qty = 1
coil_status = host.read_coils(
slave_addr=slave_addr,
starting_addr=coil_address,
coil_qty=coil_qty)
print('Status of coil {}: {}'.format(coil_status, coil_address))
from umodbus.serial import ModbusRTU
host = ModbusRTU(
addr=1, # address of this Master/Host on bus
# baudrate=9600, # optional, default 9600
# data_bits=8, # optional, default 8
# stop_bits=1, # optional, default 1
# parity=None, # optional, default None
pins=(25, 26) # (TX, RX)
)
# address of the target/client/slave device on the bus
slave_addr = 10
coil_address = 123
coil_qty = 1
coil_status = host.read_coils(
slave_addr=slave_addr,
starting_addr=coil_address,
coil_qty=coil_qty)
print('Status of coil {}: {}'.format(coil_status, coil_address))
To use this package with the provided boot.py
and
main.py
file, additional modules are required,
which are not part of this repo/package. To install these modules on the
device, connect to a network and install them via upip
as follows
import upip
upip.install('micropython-brainelectronics-helpers')
Check also the README of the brainelectronics MicroPython modules and the SETUP guide
See USAGE
Refer to the following table for the list of supported Modbus functions.
ID | Description |
---|---|
1 | Read coils |
2 | Read discrete inputs |
3 | Read holding registers |
4 | Read input registers |
5 | Write single coil |
6 | Write single register |
15 | Write multiple coils |
16 | Write multiple registers |
Big thank you to giampiero7 for the initial implementation of this library.
- sfera-labs - Initial work - giampiero7
- pycom - Initial Modbus work - pycom-modbus
- pfalcon - Initial MicroPython unittest module - micropython-unittest: