{"id":20989818,"url":"https://github.com/robtillaart/ds28cm00","last_synced_at":"2026-03-04T10:31:19.760Z","repository":{"id":45367705,"uuid":"254868314","full_name":"RobTillaart/DS28CM00","owner":"RobTillaart","description":"Arduino library for I2C unique ID ic.  [48 bit]","archived":false,"fork":false,"pushed_at":"2024-04-13T08:59:45.000Z","size":26,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T22:02:54.964Z","etag":null,"topics":["arduino","identification"],"latest_commit_sha":null,"homepage":"","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/RobTillaart.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"github":"RobTillaart","custom":"https://www.paypal.me/robtillaart"}},"created_at":"2020-04-11T12:58:45.000Z","updated_at":"2024-02-10T15:31:40.000Z","dependencies_parsed_at":"2023-12-11T14:42:09.862Z","dependency_job_id":"e6ae70bb-9194-4890-9db7-5ca8fc9432ff","html_url":"https://github.com/RobTillaart/DS28CM00","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/RobTillaart/DS28CM00","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobTillaart%2FDS28CM00","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobTillaart%2FDS28CM00/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobTillaart%2FDS28CM00/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobTillaart%2FDS28CM00/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RobTillaart","download_url":"https://codeload.github.com/RobTillaart/DS28CM00/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RobTillaart%2FDS28CM00/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30078308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["arduino","identification"],"created_at":"2024-11-19T06:26:20.523Z","updated_at":"2026-03-04T10:31:19.644Z","avatar_url":"https://github.com/RobTillaart.png","language":"C++","funding_links":["https://github.com/sponsors/RobTillaart","https://www.paypal.me/robtillaart"],"categories":[],"sub_categories":[],"readme":"\n[![Arduino CI](https://github.com/RobTillaart/DS28CM00/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)\n[![Arduino-lint](https://github.com/RobTillaart/DS28CM00/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/DS28CM00/actions/workflows/arduino-lint.yml)\n[![JSON check](https://github.com/RobTillaart/DS28CM00/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/DS28CM00/actions/workflows/jsoncheck.yml)\n[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/DS28CM00.svg)](https://github.com/RobTillaart/DS28CM00/issues)\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/DS28CM00/blob/master/LICENSE)\n[![GitHub release](https://img.shields.io/github/release/RobTillaart/DS28CM00.svg?maxAge=3600)](https://github.com/RobTillaart/DS28CM00/releases)\n[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/DS28CM00.svg)](https://registry.platformio.org/libraries/robtillaart/DS28CM00)\n\n\n# DS28CM00\n\nArduino library for I2C DS28CM00 unique identification chip.  \\[48 bit\\]\n\n\n## Description\n\nTHe DS28CM00 IC has a 64 bit address consisting of one type byte, 0x50, 6 bytes unique serial and a CRC\nover the previous 7 bytes. This results in an 48 bits unique ID giving 281.474.976.710.656 combinations.\nIf that number is not unique enough, you could use 2 or more of them with an I2C multiplexer.\n\nSince version 0.3.0 the library supports reading only the first n bytes from the serial.\nSometimes less bytes are sufficient, and less bytes takes less time.\n\nThe DS28CM00 IC has the same addressing scheme as the better known DS18B20, except for the type byte.\nTherefore one could use an DS18B20 as an unique ID chip in a similar way and getting a temperature sensor\nas bonus. \n\nThe DS28CM00 can work in 2 modes, I2C and SMBus mode. Check datasheet for details.\n\n\n#### 0.4.0 Breaking change\n\nVersion 0.4.0 introduced a breaking change.\nYou cannot set the pins in **begin()** any more.\nThis reduces the dependency of processor dependent Wire implementations.\nThe user has to call **Wire.begin()** and can optionally set the Wire pins \nbefore calling **begin()**.\n\n\n#### Related\n\n- https://github.com/RobTillaart/UUID\n\n\n## Interface\n\n```cpp\n#include \"DS28CM00.h\"\n```\n\n- **DS28CM00(TwoWire \\*wire = \u0026Wire)** Constructor, with default Wire as I2C bus.\nThe device has a fixed address of 0x50.\n- **bool begin()** initializes library, sets default DS28CM00_I2C_MODE.\nReturns false if mode cannot be set or if device cannot be found.\n- **bool isConnected()** returns true if device can be found on I2C bus.\n- **bool getUID(uint8_t \\* buffer, uint8_t size = 8)** copy unique serial number into buffer.\nSize is default 8, maximum size, size = 0 returns false. \nLess unique bytes can be enough sometimes.\nReturns false if action failed.\n- **bool setI2CMode()** set DS28CM00_I2C_MODE (0x00). Returns false if action failed.\n- **bool setSMBusMode()** set DS28CM00_SMBUS_MODE (0x01). Returns false if action failed.\n- **bool getMode(uint8_t \u0026mode)** returns mode set above. Returns false if action failed.\n\n\n|  value  |  mode                   |\n|:-------:|:-----------------------:|\n|  0x00   |  DS28CM00_I2C_MODE      |\n|  0x01   |  DS28CM00_SMBUS_MODE    |\n|  0xFF   |  DS28CM00_MODE_UNKNOWN  |\n\n\n## Operation\n\nSee examples.\n\nThe class is not tested extensively e.g. with ESP32 / ESP8266.\nAn example sketch for ESP32 exist and compiles. Feedback welcome.\n\n\n## Future\n\n#### Must\n\n- test with ESP32 and other platforms. (feedback welcome).\n\n#### Should\n\n- only extend on request / bugs\n- measure performance I2C 400 500 600 kHz ...\n\n#### Could\n\n- cache the serial? (costs 8 bytes) + one flag.\n  - If (cached filled) =\u003e faster!\n\n#### Wont\n\n- **uint8_t getError()** add error handling? - I2C; #bytes; mode; ...(too much for simple device)\n- **bool setMode()** public? no.\n\n## Support\n\nIf you appreciate my libraries, you can support the development and maintenance.\nImprove the quality of the libraries by providing issues and Pull Requests, or\ndonate through PayPal or GitHub sponsors.\n\nThank you,\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobtillaart%2Fds28cm00","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobtillaart%2Fds28cm00","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobtillaart%2Fds28cm00/lists"}