{"id":20186631,"url":"https://github.com/zimbora/esp32-modbusrtu","last_synced_at":"2025-06-10T08:04:27.670Z","repository":{"id":162040892,"uuid":"558885127","full_name":"zimbora/esp32-ModbusRTU","owner":"zimbora","description":"library to communicate with external device using ModbusRTU protocol","archived":false,"fork":false,"pushed_at":"2023-11-04T19:08:23.000Z","size":163,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-10T08:03:45.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zimbora.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-10-28T14:16:18.000Z","updated_at":"2025-05-20T19:18:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"da219922-ce46-4bd8-9b09-e029241ceebc","html_url":"https://github.com/zimbora/esp32-ModbusRTU","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2Fesp32-ModbusRTU","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2Fesp32-ModbusRTU/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2Fesp32-ModbusRTU/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2Fesp32-ModbusRTU/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zimbora","download_url":"https://codeload.github.com/zimbora/esp32-ModbusRTU/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zimbora%2Fesp32-ModbusRTU/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259033829,"owners_count":22795769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T03:18:02.150Z","updated_at":"2025-06-10T08:04:27.633Z","avatar_url":"https://github.com/zimbora.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# esp32-ModbusRTU\n\n## BUGS\n  - !! this packet: 1,16,22,2 used with rs485_read makes program crash\n\n## Description\npackage to read and write on modbus rtu slaves using a serial connection.\n\n## Implementation\nThis library is prepared to receive a decoded packet, calculate crc-16, build the frame, send, wait for response\nand return data received.\nIn case of error, the error can be obtained calling getLastError method.\n\n[static uint8_t rs485_read(uint8_t unit_id, uint8_t fc, uint16_t address, uint16_t len, uint8_t* data, uint16_t* size)](#RS485-read)\n\n[static uint8_t rs485_write(uint8_t unit_id, uint8_t fc, uint16_t address, uint16_t len, uint8_t* data, uint16_t* size)](#RS485-write)\n\n[static String getLastError()](#Get-error)\n\n## Examples\n  Run programs inside examples folder to check how it works\n### demo\n  Request data from slave\n\n## Unit Test with clang\n  \u003e\u003e chmod u+x make.sh\n\n  \u003e\u003e ./make.sh\n\n  If needed uncomment DEBUG FLAGS in Makefile\n\n## TODO\n  Allow configurations for serial port\n\n## Limitations\n  rs485_read method can only store MAX_VALUE_LEN bytes of retrieved payload (check modbus-rtu file to see macro value)\n\n## Public Methods - Extension\n\n### RS485 read\n\n* @param unit_id - unit id\n* @param fc - function code\n* @param address\n* @param len - number of registers to be read\n* @param data - pointer to received payload\n* @param size - maximum size of passed pointer, returns length of data read\n* @return error - 0 in case of no error\n\n```\nstatic uint8_t rs485_read(uint8_t unit_id, uint8_t fc, uint16_t address, uint16_t len, uint8_t* data, uint16_t* size)\n```\n#### Example\n```\nuint16_t size = 32;\nuint8_t* data = (uint8_t*)malloc(size);\nif(data != nullptr){\n  uint8_t error = modbusrtu.rs485_read(1,3,0,2,data,\u0026size);\n}\nfree(data);\n```\n\n### RS485 write\n\n* @param unit_id - unit id\n* @param fc - function code\n* @param address\n* @param len - number of registers to be read\n* @param data - pointer to payload to be written\n* @param size - size of payload to be written\n* @return error - 0 in case of no error\n\n```\nstatic uint8_t rs485_write(uint8_t unit_id, uint8_t fc, uint16_t address, uint16_t len, uint8_t* data, uint16_t* size)\n```\n#### Example\n```\nuint16_t size = 32;\nuint8_t* data = (uint8_t*)malloc(size);\nif(data != nullptr){\n  data[0] = 0x00;\n  data[1] = 0x00;\n  data[2] = 0x00;\n  data[3] = loop_counter++;\n  uint8_t error = modbusrtu.rs485_write(1,16,0,2,data,\u0026size);\n}\nfree(data);\n```\n\n### Get error\n\n* @return error in string format\n\n```\nstatic String getLastError()\n```\n#### Example\n```\nString error_msg = modbusrtu.getLastError();\nif(error_msg != \"\")\n  Serial.println(\"error msg: \"+error_msg);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzimbora%2Fesp32-modbusrtu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzimbora%2Fesp32-modbusrtu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzimbora%2Fesp32-modbusrtu/lists"}