{"id":16219789,"url":"https://github.com/dontsovcmc/metf","last_synced_at":"2025-11-02T17:01:48.183Z","repository":{"id":78360722,"uuid":"272019729","full_name":"dontsovcmc/metf","owner":"dontsovcmc","description":"MCU ESP Test Framework (METF). Test you MCU by ESP","archived":false,"fork":false,"pushed_at":"2020-06-13T14:03:36.000Z","size":7,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-14T01:17:32.916Z","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/dontsovcmc.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-13T14:01:32.000Z","updated_at":"2020-06-16T03:33:18.000Z","dependencies_parsed_at":"2023-06-17T01:15:53.462Z","dependency_job_id":null,"html_url":"https://github.com/dontsovcmc/metf","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/dontsovcmc%2Fmetf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dontsovcmc%2Fmetf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dontsovcmc%2Fmetf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dontsovcmc%2Fmetf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dontsovcmc","download_url":"https://codeload.github.com/dontsovcmc/metf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247749966,"owners_count":20989712,"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-10T11:55:49.651Z","updated_at":"2025-11-02T17:01:48.089Z","avatar_url":"https://github.com/dontsovcmc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ESPTestFramework\nTest your hardware by ESP using HTTP requests.\n\nI need to test AVR board firmware. I connect ESP8266 to AVR, run web server and coding Python test scripts.\n\n### Equipment\n- ESP board. It will be a HTTP web server controlled by PC\n- Python or another HTTP request stuff to write a tests\n\nDefault board: NodeMCU.\nChange platformio.ini file to use another WeMos or etc.\n\n## 3 Steps\n\n1. Upload ESPTestFramework firmware to NodeMCU (add you WiFi ssid\u0026pwd)\n2. Connect you device to NodeMCU, turn on NodeMCU. Web server runs.\n3. Write Python test script and run it.\n\n## Actions\n\n### ping\nCheck link\n```\napi.ping()\n```\nWhat ESP do: \nReturn: 'pong'\n\n## DIO\n\n### pinMode\nSet pin mode as you usually do on C.\n```\napi.pinMode(pin, mode) \n```\nWhat ESP do: \n```pinMode(pin, mode)```\nReturn: 'OK'\n\n### digitalRead\nRead DIO pin\n```\napi.digitalRead(pin) \n```\nWhat ESP do: \n```digitalRead(pin)```\nReturn: 1 or 0 \n\n### digitalWrite\nWrite value to DIO pin\n```\napi.digitalWrite(pin, value) \n```\nWhat ESP do: \n```digitalWrite(pin, value)```\nReturn: 'OK'\n\n## i2c communication\n\n### Start\n```\napi.i2c_begin() \n```\nWhat ESP do: \n```Wire.begin(SDA, SCL)```\nReturn: 'OK'\n\nor set your pins\n```\napi.i2c_begin(sda_pin, scl_pin) \n```\n```Wire.begin(sda_pin, scl_pin)```\n\n### Set clock speed\n```\napi.i2c_setClock(value) \n```\nWhat ESP do: \n```Wire.setClock(value)```\nReturn: 'OK'\n\n### Set stretch limit\n```\napi.i2c_setClockStretchLimit(stretch) \n```\nWhat ESP do: \n```Wire.setClockStretchLimit(stretch)```\nReturn: 'OK'\n\n### Send \u0026 receive message\n\nslave_address - address of i2c slave device\nmessage - string\nresponse_length - home many bytes will read after send\n\n```\nret = api.i2c_ask(slave_address, message, response_length) \n```\n\nWhat ESP do: \n```\n\nWire.beginTransmission(slave_address)\n\nLOOP\n\tWire.write(arr[i])\n\nWire.endTransmission()\n\nLOOP \n\tWire.requestFrom(address, 1)\n\tWire.read()\n```\nReturn: \ncode 200: response\ncode 500: error message\n\n\n### ESP Firmware \n\nBased on https://github.com/me-no-dev/ESPAsyncWebServer\n\n\n## Examples\n\n## Blynk\n\nBlynk NodeMCU onboard LED\n```\nfrom ESPTestFramework import ESPTestFramework, LOW, HIGH, INPUT, OUTPUT\n\napi = ESPTestFramework(host)\n\npin = LED_BUILTIN_AUX\n\napi.pinMode(pin, OUTPUT)\napi.digitalWrite(pin, LOW)\n\nassert api.digitalRead(pin) == LOW\n\napi.delay(1000)\napi.digitalWrite(pin, HIGH)\n\nassert api.digitalRead(pin) == HIGH\n```\n\n## Check button pressed\n```\napi = ESPTestFramework(host)\n\napi.pinMode(D5, INPUT_PULLUP)\nassert api.wait_digital(D5, LOW, 3.0), \"Button wasn't pressed\"\n```\n\n## Check button pressed\n```\napi = ESPTestFramework(host)\n\napi.pinMode(D5, INPUT_PULLUP)\nassert api.wait_digital(D5, LOW, 3.0), \"Button wasn't pressed\"\n```\n\n## i2c communication\n```\nfrom ESPTestFramework import ESPTestFramework\n\napi = ESPTestFramework(host)\n\napi.i2c_begin(D3, D4)   #  call Wire.begin(D3, D4)\n\nmessage = 'M'           #  send 1 byte '4D'\nanswer_len = 1          #  read 1 byte in the answer\n\nret = api.i2c_ask(address, message, answer_len)\n\nassert ord(ret[0]) == 1, 'response not 1'\n```\n\n## Unpack binary structures\n\n```\nfrom ESPTestFramework import ESPTestFramework\nfrom ESPTestFramework.utils import DataStruct\n\napi = ESPTestFramework(host)\n\napi.i2c_begin(D3, D4)\n\nfields = [  ('version',      'B'),  # unsigned char\n            ('value_uint16', 'H'),  # unsigned short\n            ('value_uint32', 'L'),  # unsigned long\n        ]\n\nheader_len = DataStruct.calcsize(fields)\n\nret = api.i2c_ask(12, 'A', header_len)\n\nheader = DataStruct(fields, ret)\n\nprint header.version\nprint header.value_uint16\nprint header.value_uint32\n```\n\n## ToDo\n\n1. AVR ISP programmer by ESP to upload firmwares\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdontsovcmc%2Fmetf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdontsovcmc%2Fmetf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdontsovcmc%2Fmetf/lists"}