{"id":16617601,"url":"https://github.com/ddworken/2200087-serial-protocol","last_synced_at":"2025-10-29T19:31:28.083Z","repository":{"id":20222823,"uuid":"23494581","full_name":"ddworken/2200087-Serial-Protocol","owner":"ddworken","description":"A reverse engineered protocol description and accompanying code for Radioshack's 2200087 multimeter","archived":false,"fork":false,"pushed_at":"2017-05-21T05:36:53.000Z","size":288,"stargazers_count":13,"open_issues_count":4,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-02T04:41:10.618Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://daviddworken.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ddworken.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-30T15:27:16.000Z","updated_at":"2024-04-30T20:34:52.000Z","dependencies_parsed_at":"2022-07-27T01:02:16.246Z","dependency_job_id":null,"html_url":"https://github.com/ddworken/2200087-Serial-Protocol","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddworken%2F2200087-Serial-Protocol","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddworken%2F2200087-Serial-Protocol/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddworken%2F2200087-Serial-Protocol/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddworken%2F2200087-Serial-Protocol/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ddworken","download_url":"https://codeload.github.com/ddworken/2200087-Serial-Protocol/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238882344,"owners_count":19546491,"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-10-12T02:17:17.474Z","updated_at":"2025-10-29T19:31:27.748Z","avatar_url":"https://github.com/ddworken.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"#2200087-Serial-Protocol\n\nThe 2200087 is an inexpensive DMM sold at radioshack. It supports logging and graphing data on a computer, but the supplied code only supports Windows. This is a python script to allow for connecting to the multimeter over USB on Linux or Mac OSX. Due to radioshack not supplying any serial specifications, the below protocol was reverse engineered from simply observing the output of the DMM. \n\n#Installation and Usage\n\nStart by cloning this repository:\n\n``` bash\ngit clone https://github.com/ddworken/2200087-Serial-Protocol.git\n```\n\nThen install dependencies:\n\n``` bash\npip install numpy pyserial\n```\n\nThen you're ready to go. So just run the program:\n\n``` bash\nsudo python serialDecoder.py -p /dev/ttyUSB0\n```\n\nIf you want a graph as your output, first install GNUPlot:\n\n```\nsudo apt-get install gnuplot\n```\n\nthen run:\n\n``` bash\nsudo python serialDecoder.py -p /dev/ttyUSB0 --graph\n```\n\nYou also can read from multiple multimeters at the same time and get a CSV output like so:\n\n``` bash\nsudo python serialDecoder.py -p /dev/ttyUSB0 /dev/ttyUSB1\n```\n\nIf you only want the actual values and not information about what mode the multimeter is on, use the -q flag:\n\n``` bash\nsudo python serialDecoder.py -p /dev/ttyUSB0 -q\n```\n\n#Protocol Description\n\n|         | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3      | Bit 2    | Bit 1     | Bit 0    | \n|---------|-------|-------|-------|-------|------------|----------|-----------|----------| \n| Byte 1  | 0     | 0     | 0     | 1     | Minus      | AC       | SEND      | AUTO     | \n| Byte 2  | 0     | 0     | 1     | 0     | Continuity | Diode    | Low Batt  | Hold     | \n| Byte 3  | 0     | 0     | 1     | 1     | MAX        | E4       | F4        | A4       | \n| Byte 4  | 0     | 1     | 0     | 0     | D4         | C4       | G4        | B4       | \n| Byte 5  | 0     | 1     | 0     | 1     | DP3        | E3       | F3        | A3       | \n| Byte 6  | 0     | 1     | 1     | 0     | D3         | C3       | G3        | B3       | \n| Byte 7  | 0     | 1     | 1     | 1     | DP2        | E2       | F2        | A2       | \n| Byte 8  | 1     | 0     | 0     | 0     | D2         | C2       | G2        | B2       | \n| Byte 9  | 1     | 0     | 0     | 1     | DP1        | E1       | F1        | A1       | \n| Byte 10 | 1     | 0     | 1     | 0     | D1         | C1       | G1        | B1       | \n| Byte 11 | 1     | 0     | 1     | 1     | Percent    | HFE      | Rel Delta | MIN      | \n| Byte 12 | 1     | 1     | 0     | 0     | u (1e-6)   | n (1e-9) | dBm       | Seconds  | \n| Byte 13 | 1     | 1     | 1     | 1     | Farads     | Amps     | Volts     | m (1e-3) | \n| Byte 14 | 1     | 1     | 1     | 0     | Hz         | Ohms     | K (1e3)   | M (1e6)  | \n\nAll bytes are sent over in hexadecimal numbered one through fourteen. Bytes 3-4 contain digit 4, bytes 5-6 contain digit 3 and so on. All other parts of the display are turned on as shown in the above table. \n\n![Number](https://cloud.githubusercontent.com/assets/5304541/6250379/6ab9de40-b75b-11e4-9444-c7d69e58e5ff.png)\n![Display](https://cloud.githubusercontent.com/assets/5304541/6250469/03216f4a-b75c-11e4-92eb-9b6d7568b3a8.png)\n\n========================\n\nserialDecoder.py is a python program to decode the serial output from this DMM. Run:\n\n```bash\nsudo python serialDecoder.py -p /dev/ttyUSB0\n```\n\nto display a text output of the data. Run:\n\n```bash\nsudo python serialDecoder.py -p /dev/ttyUSB0 graph\n```\n\nto display a graph of the data. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddworken%2F2200087-serial-protocol","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fddworken%2F2200087-serial-protocol","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddworken%2F2200087-serial-protocol/lists"}