{"id":49532457,"url":"https://github.com/pyladiesams/robotics-with-micropython-jan2026","last_synced_at":"2026-05-02T08:32:18.918Z","repository":{"id":326263476,"uuid":"1104793279","full_name":"pyladiesams/robotics-with-micropython-jan2026","owner":"pyladiesams","description":"Make A Robot with MicroPython. You’ll learn the fundamentals of robotics using MicroPython and an ESP32 microcontroller. We’ll guide you through building a simple robot that can light up LEDs and move a handmade part. The workshop covers wiring, coding, and basic motion control principles, which you can later expand to include sensors or APIs.","archived":false,"fork":false,"pushed_at":"2026-02-04T20:17:40.000Z","size":63007,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-05T08:29:39.214Z","etag":null,"topics":["micropython","micropython-esp32","robotics","workshop"],"latest_commit_sha":null,"homepage":"","language":"Python","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/pyladiesams.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-26T17:39:54.000Z","updated_at":"2026-02-04T20:17:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pyladiesams/robotics-with-micropython-jan2026","commit_stats":null,"previous_names":["pyladiesams/robotics-with-micropython-jan2026"],"tags_count":0,"template":false,"template_full_name":"pyladiesams/workshoptopic-mmmYYYY","purl":"pkg:github/pyladiesams/robotics-with-micropython-jan2026","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyladiesams%2Frobotics-with-micropython-jan2026","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyladiesams%2Frobotics-with-micropython-jan2026/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyladiesams%2Frobotics-with-micropython-jan2026/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyladiesams%2Frobotics-with-micropython-jan2026/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyladiesams","download_url":"https://codeload.github.com/pyladiesams/robotics-with-micropython-jan2026/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyladiesams%2Frobotics-with-micropython-jan2026/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32528223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"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":["micropython","micropython-esp32","robotics","workshop"],"created_at":"2026-05-02T08:32:16.081Z","updated_at":"2026-05-02T08:32:18.903Z","avatar_url":"https://github.com/pyladiesams.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ✨ Build your first robot with MicroPython ✨\n\n### Presentation: [{Robotics Mini Course in Micropython @ Monumental}](workshop-slides.pdf)\n\nIn this hands-on session, you’ll learn the fundamentals of robotics using MicroPython and an ESP32 microcontroller.\nWe’ll guide you through building a simple robot that can light up LEDs and move a handmade part. The workshop covers wiring, coding, and basic motion control principles, which you can later expand to include sensors or APIs.\nAfter this tutorial you'll know how to actuate a motor and read sensor data with MicroPython.\nEverything you'll need to build your own robot!\n\n## Prerequisites\n\n### Hardware\n\n* ESP32-S3-DevKit development board\n* Micro 180° servo motor (SG90 or similar)\n* Jumpers to connect the motor\n* USB data cable for programming\n\n### Software\n\n* PyLadies Amsterdam uses [uv](https://docs.astral.sh/uv/) for dependency management\n* Python 3.10+\n* On Windows: USB access must be enabled, some enterprise-managed devices may have restrictions\n\n## Setup\n\n0. *Only remote participants:\n   Flash MicroPython to your ESP32 dev board:*\n   1. *Follow the steps* *[here\n      ](https://micropython.org/download/ESP32_GENERIC_S3/)Make sure to use the [.bin firmware file](https://micropython.org/resources/firmware/ESP32_GENERIC_S3-20251209-v1.27.0.bin)*\n1. Clone repository and install dependencies\n   Run the following code:\n\n```bash\n  git clone git@github.com:pyladiesams/robotics-with-micropython-jan2026.git\n  cd robotics-with-micropython-jan2026\n\n  # create and activate venv, install dependencies\n  uv sync\n  source .venv/bin/activate\n```\n\n2. Connect the ESP to your laptop and find out at which serial port it is connected:\n\n```bash\n  # macOS\n  ls /dev/cu.* | grep usb\n\n  # Linux\n  ls /dev/tty*\n  # If many devices show up, run the command twice\n  # once with the ESP connected and once without\n  # afterwards you might need to set additional permissions to upload\n\n  # Windows\n  # Check \"Device Manager\" for COM ports\n  # the port you are \n\n```\n\n## Workshop Steps\n\n### Step 1: LED blink\n\nLED Blink is the \"Hello World\" of hardware development.\n\nThe ESP32 devboard already has an onboard LED we can use. On the devboard it is connected to the ESP32. In order to program it we need to figure out to which PIN of the ESP the LED is connected.\n\nUpdate the code with the right pin.\n`step1_led_blink/main.py`\nAfter uploading press the reset button on the devboard.\nIf everything is correct you should now see the LED blinking.\n\n```bash\npython utils/upload.py \u003cPORT\u003e step1_led_blink/main.py\n```\n\nFeel free to change the blinking behaviour, eg make a nice rainbow pattern or a continuous color change.\n\n### Step 2: Make the motor move\n\nWe control a servo motor using PWM signals.\nPWM (Pulse Width Modulation) sends a repeating signal at a fixed frequency. Each cycle consists of a HIGH pulse followed by a LOW period. The duty cycle is the percentage of time the signal is HIGH during each cycle. For servos, the pulse width (duration of the HIGH signal) determines the motor's behavior. A HIGH signal corresponds to a 1 and a LOW signal corresponds to a 0.\n\nFor 180° position servos as we use in the workshop, the pulse width controls the absolute angle.\nFor 360° continuous rotation servos, the pulse width controls speed and direction.\n\n#### Connect the motor to the ESP\n\n- **Servo Motor:**\n  - Black wire → GND (Ground)\n  - Red wire → 3.3V (Power Supply)\n  - Yellow/Orange wire → GPIO 15 (Signal Pin)\n\n\u003cimg src=\"https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/_images/ESP32-S3_DevKitC-1_pinlayout_v1.1.jpg\" width=\"50%\"\u003e\n\n`step2_motor_move/main.py`\n\n**Upload:**\n\n```bash\npython utils/upload.py \u003cPORT\u003e step2_motor_move/main.py\n```\n\nAfter uploading press the reset button on the devboard.\n\nNow you should see the motor move.\n\n### Step 3: Sensor Integration\n\nA real robot needs to interact with its environment.\nYou can connect sensors or cameras to the ESP. In this mini tutorial we will use the internal capacity sensor of the ESP, which works as a touchpad.\n\nConnect a jumper wire to one of the pins and make the color change based on the capacitance.\n\n`step3_sensor_integration/main.py`\n\nUpload:\n\n```bash\npython utils/upload.py \u003cPORT\u003e step3_sensor_integration/main.py\n```\n\nAfter uploading press the reset button on the devboard.\n\nNow the color of your LED should change once you touch the PIN.\n\nAs a next step make the motor move to the 20° to the left when you touch the pin once and to the right when touching twice.\n\n## Uploading Code\n\nUse the helper script:\n\n```bash\npython utils/upload.py \u003cPORT\u003e \u003cSTEP_FOLDER\u003e/main.py\n```\n\nOr use ampy directly:\n\n```bash\nampy --port /dev/cu.usbserial-0001 put step1_led_blink/main.py /main.py\n```\n\n## Video record\n\nRe-watch [this YouTube stream](https://www.youtube.com/live/6u5wlQamD9E)\n\n## Credits\n\nThis workshop was set up by @pyladiesams and @jquack\n\n## Appendix\n\n### Resources\n\n- [ESP32-S3-DevKitC-1 Datasheet](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32s3/esp32-s3-devkitc-1/user_guide_v1.1.html)\n- [SG90 Servo Motor Datasheet](https://www.kjell.com/globalassets/mediaassets/701916_87897_datasheet_en.pdf?ref=4287817A7A)\n- [MG90S Servo Motor Datasheet](https://www.electronicoscaldas.com/datasheet/MG90S_Tower-Pro.pdf)\n- [ESP32-S3 esptool Documentation](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/)\n- [MicroPython ESP32-S3 Docs](https://docs.micropython.org/en/latest/esp32/quickref.html)\n\n### Pre-Commit Hooks\n\nTo ensure our code looks beautiful, PyLadies uses pre-commit hooks. You can enable them by running `pre-commit install`. You may have to install `pre-commit` first, using `uv sync`, `uv pip install pre-commit` or `pip install pre-commit`.\n\nHappy Coding :)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyladiesams%2Frobotics-with-micropython-jan2026","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyladiesams%2Frobotics-with-micropython-jan2026","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyladiesams%2Frobotics-with-micropython-jan2026/lists"}