{"id":22421909,"url":"https://github.com/auralius/biomedic-iot","last_synced_at":"2026-06-23T15:32:39.907Z","repository":{"id":258020118,"uuid":"873292014","full_name":"auralius/biomedic-iot","owner":"auralius","description":"https://auralius.github.io/biomedic-iot/","archived":false,"fork":false,"pushed_at":"2026-02-02T11:23:46.000Z","size":10794,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"esp32-hivemq","last_synced_at":"2026-02-03T00:49:23.994Z","etag":null,"topics":["esp32","hivemq","iot","mqtt","streaming-data"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/auralius.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-15T23:23:54.000Z","updated_at":"2026-02-02T11:23:51.000Z","dependencies_parsed_at":"2026-02-02T14:14:12.582Z","dependency_job_id":null,"html_url":"https://github.com/auralius/biomedic-iot","commit_stats":null,"previous_names":["auralius/biomedic-iot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/auralius/biomedic-iot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/auralius%2Fbiomedic-iot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/auralius%2Fbiomedic-iot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/auralius%2Fbiomedic-iot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/auralius%2Fbiomedic-iot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/auralius","download_url":"https://codeload.github.com/auralius/biomedic-iot/tar.gz/refs/heads/esp32-hivemq","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/auralius%2Fbiomedic-iot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34696831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["esp32","hivemq","iot","mqtt","streaming-data"],"created_at":"2024-12-05T17:09:56.696Z","updated_at":"2026-06-23T15:32:39.902Z","avatar_url":"https://github.com/auralius.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"## General Topics\n\nBiomedical instrumentation lives in the land of signals, not snapshots. Physiological measurements such as ECG, PPG, EMG, respiration, and blood-pressure waveforms are inherently time-continuous and are typically acquired through continuous sampling. As a result, streaming systems provide a natural and appropriate architectural model for biomedical instrumentation devices.\n\nIn this class, we focus on biomedical instrumentation systems operating at sub-second sampling rates, where data are generated continuously and must be processed, transmitted, or acted upon with low latency.\n\n## Hardware\n\n\u003cimg src=\"https://github.com/auralius/biomedic-iot/blob/esp32-hivemq/hardware/test-platform.png\" width=\"550\"\u003e\n\n\u003cimg src=\"https://github.com/auralius/biomedic-iot/blob/esp32-hivemq/hardware/device.png\" width=\"550\"\u003e\n\n## Software\n\nCopy the `iot-b` folder to `~/Arduino/libraries/`.\nCopy the `example1` folder to `~/Arduino/`.\n\n`iot-b` is a tiny Wi-Fi + MQTT helpers for ESP32 (Arduino core). This layer wraps common tasks—bringing Wi-Fi online (including WPA2-Enterprise), setting up MQTT over TLS or plaintext, handling retries, and publishing efficiently (including chunked streams). Also, `iot-b` also contains some simple UDP / RTP utilities (header build, counters, warm-up). \n\n__Features__\n\n- Wi-Fi helpers\n- Event logging for connect/disconnect/IP acquisition. \n- Scan and lock to the best BSSID for a given SSID (optional). \n- WPA/WPA2-PSK convenience connect (connect_to_home_wifi). \n- WPA2-Enterprise (TTLS/PAP) helper (connect_to_campus_wifi).\n- TLS-ready MQTT, ensuring SNTP time before TLS for certificate validations.\n- HiveMQ and EMQX cerificates. \n- Connect with retries/backoff.\n- Publish small payloads or stream large payloads. \n- Also, simple UDP / RTP utilities (header build, counters, warm-up). \n\n## Demonstrations\n__Example 1__\n- Connect to HiveMQ.\n- Publish arbitrary messages.\n\n__Example 2__\n- Connect to HiveMQ.\n- Simulate a 1-channel ECG.\n- Publish to HiveMQ (binary data frame; publish rate 2 Hz; 125 samples per frame).\n- Plot the ECG signal in Google Colab (Paho-MQTT subscriber).\n\u003cimg src=\"https://github.com/auralius/biomedic-iot/blob/esp32-hivemq/dashboards/dashboard_example2.gif\" width=\"500\"\u003e\n\n__Example 3 (RTP/RTCP over UDP)__\n- Connect to the server on the local network.\n- Simulate a 1-channel ECG.\n- Send the signal to the server (binary data frame; publish rate 2 Hz; 125 samples per frame).\n- Plot the ECG signal in Python (Matplotlib).\n\u003cimg src=\"https://github.com/auralius/biomedic-iot/blob/esp32-hivemq/dashboards/dashboard_example3.gif\" width=\"500\"\u003e\n\n__Example 4__\n- Connect to HiveMQ.\n- Read audio from the microphone.\n- Publish to HiveMQ (binary data frame; publish rate 2 Hz; mono 8 kHz audio).\n- Run a Python subscriber on a computer with speakers.\n- Play the audio through the speakers.\n\n__Example 5__\n- MPU6050 sensor.\n- Publish to HiveMQ (binary data frame; publish rate 2 Hz; 40 samples per frame).\n\u003cimg src=\"https://github.com/auralius/biomedic-iot/blob/esp32-hivemq/example5/example5.png\" width=\"280\"\u003e\n\n__Example 6 (ESP32-S3 RHYX Camera → MQTT JPEG)__\n- Capture VGA (640×480) frames from the ESP32-S3 camera.\n- Encode to **JPEG in software** (RGB565 → JPEG via `frame2jpg`) since RHYX camera doesn’t do HW-JPEG.\n- Publish **one JPEG per MQTT message** over TLS (port 8883) to HiveMQ using `mqtt_publish_stream` (streamed in small chunks).\n- Python subscriber decodes and **displays grayscale** frames in real time (Paho-MQTT + Pillow + Matplotlib).\n- Typical rate: ~2 FPS by default (tuneable). JPEG **size varies** with scene/quality (e.g., 5–30 KB).\n\u003cimg src=\"https://github.com/auralius/biomedic-iot/blob/esp32-hivemq/dashboards/dashboard_example6.gif\" width=\"320\"\u003e\n\nNote: for ESP32-S3 with R8/R16 octal combos (often 8MB PSRAM + 16MB flash): makse sure PSRAM is set to OPI PSRAM.  \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fauralius%2Fbiomedic-iot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fauralius%2Fbiomedic-iot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fauralius%2Fbiomedic-iot/lists"}