diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..85a13d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.venv +.vscode +build diff --git a/main.py b/main.py index f6616dc..3b1eb98 100644 --- a/main.py +++ b/main.py @@ -1,36 +1,40 @@ from fastapi import FastAPI -import serial +from pymodbus.client import ModbusSerialClient +import time import threading from queue import Queue - serial_port = "COM4" baud_rate = 9600 -serial_conn = serial.Serial(serial_port, baud_rate) +modbus_client = ModbusSerialClient(method='rtu', port=serial_port, baudrate=baud_rate) -line = "0" +modbus_queue = Queue() - -def read_from_arduino(): - global line +def poll_modbus(): while True: - if serial_conn.in_waiting > 0: - line = serial_conn.read().decode() - print(line) - + if modbus_client.connect(): + response = modbus_client.read_holding_registers(address=0, count=1, unit=1) + if not response.isError(): + modbus_queue.put(response.registers[0]) + modbus_client.close() + time.sleep(1) -threading.Thread(target=read_from_arduino, daemon=True).start() +threading.Thread(target=poll_modbus, daemon=True).start() app = FastAPI() -@app.get("/pin_state") -async def get_pin_state(): - return {"pin_state": line} - +@app.get("/modbus_data") +async def get_modbus_data(): + if not modbus_queue.empty(): + modbus_value = modbus_queue.get() + return {"modbus_data": modbus_value} + else: + return {"error": "No data received"} @app.get("/") async def root(): - return {"message": "Hello World"} + return {"message": "Welcome to Modbus with FastAPI"} + if __name__ == "__main__": import uvicorn diff --git a/project1/project1.ino b/project1/project1.ino new file mode 100644 index 0000000..d93b471 --- /dev/null +++ b/project1/project1.ino @@ -0,0 +1,18 @@ +#include +const int GPIOCoil = 0; + +ModbusSerial modbus(Serial, 10); +bool coils[10]; +int pinToRead = 2; + +void setup() { + Serial.begin(9600); + pinMode(pinToRead, INPUT); + modbus.addIsts(0); + +} + +void loop() { + modbus.setIsts(0, digitalRead(pinToRead)); + modbus.task (); +}