from fastapi import FastAPI from pymodbus.client import ModbusSerialClient import threading import time import logging import sys serial_port = "COM6" baud_rate = 9600 modbus_client = ModbusSerialClient(serial_port, baudrate=baud_rate) modbus_data = "0" # logging.basicConfig() # log = logging.getLogger() # log.setLevel(logging.DEBUG) def poll_modbus(): global modbus_data while True: try: modbus_client.connect() time.sleep(3.0) response = modbus_client.read_discrete_inputs(0, 1, slave=1) #print(response.bits[0]) if not response.isError(): #modbus_data = response.registers[0] modbus_data = response.bits[0] print(modbus_data) except: pass threading.Thread(target=poll_modbus, daemon=True).start() app = FastAPI() @app.get("/modbus_data") async def get_modbus_data(): return {"modbus_data": int(modbus_data)} @app.get("/") async def root(): return {"message": "Welcome to FastAPI with Modbus"} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=12345)