<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=MicroPython_Basics</id>
	<title>MicroPython Basics - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bespokerobotsociety.org/index.php?action=history&amp;feed=atom&amp;title=MicroPython_Basics"/>
	<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=MicroPython_Basics&amp;action=history"/>
	<updated>2026-04-25T09:52:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.bespokerobotsociety.org/index.php?title=MicroPython_Basics&amp;diff=82&amp;oldid=prev</id>
		<title>John: Created page with &quot;{{Tutorial |name=MicroPython Basics |competency=Software |difficulty=Beginner |time=3-5 hours (split across multiple sessions) |prerequisites=None - complete beginner friendly |materials=Raspberry Pi Pico ($4), USB cable, computer with Thonny IDE (free), LED, resistor (220Ω), breadboard |next_steps=SimpleBot assembly, MicroPython Programming, Electronics Fundamentals }}  &#039;&#039;&#039;MicroPython Basics&#039;&#039;&#039; is your introduction to programming microcontrollers for ro...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.bespokerobotsociety.org/index.php?title=MicroPython_Basics&amp;diff=82&amp;oldid=prev"/>
		<updated>2025-10-11T20:15:06Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Tutorial |name=MicroPython Basics |competency=&lt;a href=&quot;/wiki/Software&quot; title=&quot;Software&quot;&gt;Software&lt;/a&gt; |difficulty=Beginner |time=3-5 hours (split across multiple sessions) |prerequisites=None - complete beginner friendly |materials=Raspberry Pi Pico ($4), USB cable, computer with Thonny IDE (free), LED, resistor (220Ω), breadboard |next_steps=&lt;a href=&quot;/wiki/SimpleBot&quot; title=&quot;SimpleBot&quot;&gt;SimpleBot&lt;/a&gt; assembly, &lt;a href=&quot;/wiki/MicroPython_Programming&quot; title=&quot;MicroPython Programming&quot;&gt;MicroPython Programming&lt;/a&gt;, &lt;a href=&quot;/wiki/Electronics_Fundamentals&quot; title=&quot;Electronics Fundamentals&quot;&gt;Electronics Fundamentals&lt;/a&gt; }}  &amp;#039;&amp;#039;&amp;#039;MicroPython Basics&amp;#039;&amp;#039;&amp;#039; is your introduction to programming microcontrollers for ro...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Tutorial&lt;br /&gt;
|name=MicroPython Basics&lt;br /&gt;
|competency=[[Software]]&lt;br /&gt;
|difficulty=Beginner&lt;br /&gt;
|time=3-5 hours (split across multiple sessions)&lt;br /&gt;
|prerequisites=None - complete beginner friendly&lt;br /&gt;
|materials=Raspberry Pi Pico ($4), USB cable, computer with Thonny IDE (free), LED, resistor (220Ω), breadboard&lt;br /&gt;
|next_steps=[[SimpleBot]] assembly, [[MicroPython Programming]], [[Electronics Fundamentals]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MicroPython Basics&amp;#039;&amp;#039;&amp;#039; is your introduction to programming microcontrollers for robotics. This tutorial covers everything you need to write your first robot program, from installing MicroPython to controlling GPIO pins.&lt;br /&gt;
&lt;br /&gt;
By the end of this tutorial, you&amp;#039;ll understand:&lt;br /&gt;
* What MicroPython is and why it&amp;#039;s great for robotics&lt;br /&gt;
* How to install MicroPython on Raspberry Pi Pico&lt;br /&gt;
* How to use Thonny IDE and the REPL&lt;br /&gt;
* Python basics: variables, functions, loops, conditionals&lt;br /&gt;
* How to control LEDs and read buttons&lt;br /&gt;
* How to write simple robot programs&lt;br /&gt;
&lt;br /&gt;
This tutorial is &amp;#039;&amp;#039;&amp;#039;hands-on&amp;#039;&amp;#039;&amp;#039;. You&amp;#039;ll write and run code on real hardware.&lt;br /&gt;
&lt;br /&gt;
== Part 1: What is MicroPython? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MicroPython&amp;#039;&amp;#039;&amp;#039; is a version of Python designed for microcontrollers - tiny computers that control robots.&lt;br /&gt;
&lt;br /&gt;
=== Why MicroPython for Robotics? ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Easy to learn&amp;#039;&amp;#039;&amp;#039; - Python is one of the most beginner-friendly programming languages&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Interactive&amp;#039;&amp;#039;&amp;#039; - Test code immediately with the REPL (Read-Eval-Print Loop)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Fast development&amp;#039;&amp;#039;&amp;#039; - Write code quickly without compiling&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Rich libraries&amp;#039;&amp;#039;&amp;#039; - GPIO, PWM, I2C, SPI built in&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Low cost&amp;#039;&amp;#039;&amp;#039; - Raspberry Pi Pico costs $4 and runs MicroPython perfectly&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Comparison to other options:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Arduino (C/C++)&amp;#039;&amp;#039;&amp;#039; - Faster execution, larger community, but harder to learn&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Python on Raspberry Pi&amp;#039;&amp;#039;&amp;#039; - Full Python ecosystem, but not real-time, more expensive&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MicroPython&amp;#039;&amp;#039;&amp;#039; - Best balance of simplicity and capability for beginners&lt;br /&gt;
&lt;br /&gt;
=== What is a Microcontroller? ===&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;microcontroller&amp;#039;&amp;#039;&amp;#039; is a tiny computer designed to control hardware:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CPU&amp;#039;&amp;#039;&amp;#039; - Processes instructions (runs your code)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RAM&amp;#039;&amp;#039;&amp;#039; - Temporary storage for variables (264 KB on Pico)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Flash&amp;#039;&amp;#039;&amp;#039; - Permanent storage for programs (2 MB on Pico)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GPIO&amp;#039;&amp;#039;&amp;#039; - General-Purpose Input/Output pins to connect sensors and motors&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Raspberry Pi Pico&amp;#039;&amp;#039;&amp;#039; specifications:&lt;br /&gt;
* Dual-core ARM Cortex-M0+ @ 133 MHz&lt;br /&gt;
* 264 KB RAM, 2 MB flash&lt;br /&gt;
* 26 GPIO pins (digital I/O, PWM, ADC, I2C, SPI, UART)&lt;br /&gt;
* USB for programming and power&lt;br /&gt;
* Costs $4&lt;br /&gt;
&lt;br /&gt;
== Part 2: Installing MicroPython ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Download MicroPython Firmware ===&lt;br /&gt;
&lt;br /&gt;
# Go to [https://micropython.org/download/rp2-pico/ MicroPython Downloads]&lt;br /&gt;
# Download the latest &amp;#039;&amp;#039;&amp;#039;.uf2&amp;#039;&amp;#039;&amp;#039; file (e.g., &amp;quot;rp2-pico-latest.uf2&amp;quot;)&lt;br /&gt;
# Save it to your computer&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Flash MicroPython to Pico ===&lt;br /&gt;
&lt;br /&gt;
# Hold the &amp;#039;&amp;#039;&amp;#039;BOOTSEL&amp;#039;&amp;#039;&amp;#039; button on Raspberry Pi Pico&lt;br /&gt;
# While holding BOOTSEL, plug USB cable into computer&lt;br /&gt;
# Release BOOTSEL button&lt;br /&gt;
# Pico appears as a USB drive named &amp;quot;RPI-RP2&amp;quot;&lt;br /&gt;
# Drag the &amp;#039;&amp;#039;&amp;#039;.uf2&amp;#039;&amp;#039;&amp;#039; file to the RPI-RP2 drive&lt;br /&gt;
# Pico automatically reboots with MicroPython installed!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Troubleshooting:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;RPI-RP2 drive doesn&amp;#039;t appear?&amp;#039;&amp;#039;&amp;#039; Make sure you&amp;#039;re holding BOOTSEL &amp;#039;&amp;#039;before&amp;#039;&amp;#039; plugging in USB&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;File won&amp;#039;t copy?&amp;#039;&amp;#039;&amp;#039; Try a different USB cable (some are power-only)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pico disconnects after copying?&amp;#039;&amp;#039;&amp;#039; This is normal! It&amp;#039;s rebooting with MicroPython&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Install Thonny IDE ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Thonny&amp;#039;&amp;#039;&amp;#039; is a beginner-friendly Python IDE with built-in MicroPython support.&lt;br /&gt;
&lt;br /&gt;
# Download from [https://thonny.org/ thonny.org]&lt;br /&gt;
# Install Thonny (Windows: run installer, macOS: drag to Applications, Linux: apt install thonny)&lt;br /&gt;
# Open Thonny&lt;br /&gt;
# Click bottom-right corner where it says &amp;quot;Python&amp;quot; and select &amp;#039;&amp;#039;&amp;#039;MicroPython (Raspberry Pi Pico)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Connect Pico via USB - Thonny should detect it&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;You should see:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* A &amp;#039;&amp;#039;&amp;#039;code editor&amp;#039;&amp;#039;&amp;#039; (top half) - Write programs here&lt;br /&gt;
* A &amp;#039;&amp;#039;&amp;#039;Shell/REPL&amp;#039;&amp;#039;&amp;#039; (bottom half) - Interactive Python console&lt;br /&gt;
&lt;br /&gt;
== Part 3: Your First MicroPython Program ==&lt;br /&gt;
&lt;br /&gt;
=== The REPL (Interactive Shell) ===&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;REPL&amp;#039;&amp;#039;&amp;#039; (Read-Eval-Print Loop) lets you test Python code immediately:&lt;br /&gt;
&lt;br /&gt;
# Type in the Shell (bottom half of Thonny)&lt;br /&gt;
# Press Enter&lt;br /&gt;
# See the result instantly&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Try this:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;Hello, Robot!&amp;quot;)&lt;br /&gt;
Hello, Robot!&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; 2 + 2&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; name = &amp;quot;SimpleBot&amp;quot;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(f&amp;quot;My robot is {name}&amp;quot;)&lt;br /&gt;
My robot is SimpleBot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Why the REPL is amazing:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Test sensor readings instantly&lt;br /&gt;
* Debug code by checking variable values&lt;br /&gt;
* Learn Python by experimenting&lt;br /&gt;
&lt;br /&gt;
=== Blink the Onboard LED ===&lt;br /&gt;
&lt;br /&gt;
Raspberry Pi Pico has an LED on pin 25 (the &amp;quot;onboard LED&amp;quot;). Let&amp;#039;s blink it!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Type this in the REPL:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from machine import Pin&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import time&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; led = Pin(25, Pin.OUT)&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; led.on()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The LED should turn ON!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Now turn it OFF:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; led.off()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Make it blink:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; for i in range(10):&lt;br /&gt;
...     led.toggle()&lt;br /&gt;
...     time.sleep(0.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: After typing &amp;quot;for i in range(10):&amp;quot;, press Enter, then type the indented lines, then press Enter twice to run.&lt;br /&gt;
&lt;br /&gt;
=== Write Your First Program ===&lt;br /&gt;
&lt;br /&gt;
Now let&amp;#039;s write a complete program in the editor (top half):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
led = Pin(25, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.toggle()&lt;br /&gt;
    time.sleep(0.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Run the program:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Click the green &amp;quot;Run&amp;quot; button (or press F5)&lt;br /&gt;
# Thonny will ask &amp;quot;Where to save?&amp;quot; - choose &amp;#039;&amp;#039;&amp;#039;MicroPython device&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Save as &amp;#039;&amp;#039;&amp;#039;blink.py&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# The LED blinks forever!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stop the program:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Click the red &amp;quot;Stop&amp;quot; button or press Ctrl+C&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;What this code does:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;from machine import Pin&amp;#039;&amp;#039;&amp;#039; - Import Pin class for GPIO control&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;import time&amp;#039;&amp;#039;&amp;#039; - Import time module for delays&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;led = Pin(25, Pin.OUT)&amp;#039;&amp;#039;&amp;#039; - Configure pin 25 as output&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;while True:&amp;#039;&amp;#039;&amp;#039; - Loop forever&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;led.toggle()&amp;#039;&amp;#039;&amp;#039; - Switch LED state (on→off or off→on)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;time.sleep(0.5)&amp;#039;&amp;#039;&amp;#039; - Wait 0.5 seconds&lt;br /&gt;
&lt;br /&gt;
== Part 4: Python Basics for Robotics ==&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
Variables store values (sensor readings, motor speeds, states):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Numbers&lt;br /&gt;
speed = 100&lt;br /&gt;
distance = 15.5&lt;br /&gt;
&lt;br /&gt;
# Strings (text)&lt;br /&gt;
robot_name = &amp;quot;SimpleBot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Booleans (True/False)&lt;br /&gt;
line_detected = True&lt;br /&gt;
obstacle_ahead = False&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comments ===&lt;br /&gt;
&lt;br /&gt;
Comments explain code (Python ignores them):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# This is a comment&lt;br /&gt;
speed = 100  # Set motor speed to 100%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Math Operations ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Basic math&lt;br /&gt;
x = 10 + 5    # Addition: 15&lt;br /&gt;
y = 10 - 3    # Subtraction: 7&lt;br /&gt;
z = 10 * 2    # Multiplication: 20&lt;br /&gt;
w = 10 / 4    # Division: 2.5&lt;br /&gt;
q = 10 // 4   # Integer division: 2&lt;br /&gt;
r = 10 % 3    # Modulo (remainder): 1&lt;br /&gt;
&lt;br /&gt;
# Comparisons (result is True or False)&lt;br /&gt;
10 &amp;gt; 5   # Greater than: True&lt;br /&gt;
10 &amp;lt; 5   # Less than: False&lt;br /&gt;
10 == 10 # Equal: True&lt;br /&gt;
10 != 5  # Not equal: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conditionals (If/Else) ===&lt;br /&gt;
&lt;br /&gt;
Make decisions based on sensor readings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
sensor = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
&lt;br /&gt;
if sensor.value() == 0:&lt;br /&gt;
    print(&amp;quot;Line detected!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;No line&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Multiple conditions:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
sensor_left = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
sensor_right = Pin(15, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
&lt;br /&gt;
if sensor_left.value() == 0 and sensor_right.value() == 0:&lt;br /&gt;
    print(&amp;quot;Both sensors on line&amp;quot;)&lt;br /&gt;
elif sensor_left.value() == 0:&lt;br /&gt;
    print(&amp;quot;Left sensor on line&amp;quot;)&lt;br /&gt;
elif sensor_right.value() == 0:&lt;br /&gt;
    print(&amp;quot;Right sensor on line&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;No line detected&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Loops (While and For) ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;While loop&amp;#039;&amp;#039;&amp;#039; - Repeat until condition is false:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
count = 0&lt;br /&gt;
while count &amp;lt; 10:&lt;br /&gt;
    print(count)&lt;br /&gt;
    count += 1  # Shorthand for count = count + 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Infinite loop&amp;#039;&amp;#039;&amp;#039; - Robot main loop:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
while True:&lt;br /&gt;
    # Read sensors&lt;br /&gt;
    # Make decisions&lt;br /&gt;
    # Control motors&lt;br /&gt;
    time.sleep(0.01)  # Small delay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For loop&amp;#039;&amp;#039;&amp;#039; - Repeat a specific number of times:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(5):&lt;br /&gt;
    print(i)  # Prints 0, 1, 2, 3, 4&lt;br /&gt;
&lt;br /&gt;
# Blink LED 10 times&lt;br /&gt;
for i in range(10):&lt;br /&gt;
    led.toggle()&lt;br /&gt;
    time.sleep(0.2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
Functions organize code into reusable blocks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def blink_led(times, delay):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Blink LED a specific number of times&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(times):&lt;br /&gt;
        led.toggle()&lt;br /&gt;
        time.sleep(delay)&lt;br /&gt;
&lt;br /&gt;
# Call the function&lt;br /&gt;
blink_led(5, 0.3)  # Blink 5 times, 0.3 second delay&lt;br /&gt;
blink_led(10, 0.1) # Blink 10 times, 0.1 second delay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Functions with return values:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def read_sensor():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Read sensor and return True if line detected&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    sensor = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
    return sensor.value() == 0  # Returns True or False&lt;br /&gt;
&lt;br /&gt;
# Use the function&lt;br /&gt;
if read_sensor():&lt;br /&gt;
    print(&amp;quot;Line detected!&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Part 5: GPIO Control ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;GPIO&amp;#039;&amp;#039;&amp;#039; (General-Purpose Input/Output) pins connect sensors and actuators to the microcontroller.&lt;br /&gt;
&lt;br /&gt;
=== Digital Output (Control LED) ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wiring:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* LED long leg → GPIO pin 15&lt;br /&gt;
* LED short leg → 220Ω resistor → GND&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Code:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
led = Pin(15, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
led.on()   # Turn LED on (pin = HIGH = 3.3V)&lt;br /&gt;
led.off()  # Turn LED off (pin = LOW = 0V)&lt;br /&gt;
led.value(1)  # Alternative: 1 = on, 0 = off&lt;br /&gt;
led.toggle()  # Switch state&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Digital Input (Read Button) ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wiring:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Button one side → GPIO pin 14&lt;br /&gt;
* Button other side → GND&lt;br /&gt;
* Internal pull-up resistor (no external resistor needed)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Code:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
button = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if button.value() == 0:  # Button pressed (connects to GND = LOW)&lt;br /&gt;
        print(&amp;quot;Button pressed!&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Button not pressed&amp;quot;)&lt;br /&gt;
    time.sleep(0.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Why Pin.PULL_UP?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Without pull-up, the input &amp;quot;floats&amp;quot; (undefined voltage) when button is not pressed&lt;br /&gt;
* Pull-up resistor connects input to 3.3V by default (HIGH)&lt;br /&gt;
* When button pressed, it connects to GND (LOW)&lt;br /&gt;
* This is an &amp;#039;&amp;#039;&amp;#039;active LOW&amp;#039;&amp;#039;&amp;#039; button (pressed = LOW)&lt;br /&gt;
&lt;br /&gt;
=== Example: Button-Controlled LED ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
button = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
led = Pin(15, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    if button.value() == 0:  # Button pressed&lt;br /&gt;
        led.on()&lt;br /&gt;
    else:&lt;br /&gt;
        led.off()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Improvement: Toggle LED on button press&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
button = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
led = Pin(15, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
last_button_state = 1  # Not pressed initially&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    button_state = button.value()&lt;br /&gt;
&lt;br /&gt;
    # Detect button press (transition from HIGH to LOW)&lt;br /&gt;
    if button_state == 0 and last_button_state == 1:&lt;br /&gt;
        led.toggle()&lt;br /&gt;
        time.sleep(0.2)  # Debounce delay&lt;br /&gt;
&lt;br /&gt;
    last_button_state = button_state&lt;br /&gt;
    time.sleep(0.01)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Part 6: Analog Input (Read Variable Voltage) ==&lt;br /&gt;
&lt;br /&gt;
Some sensors output variable voltage (temperature, light, distance). Use ADC (Analog-to-Digital Converter) to read them.&lt;br /&gt;
&lt;br /&gt;
=== Reading a Potentiometer ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wiring:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Potentiometer middle pin → GPIO 26 (ADC0)&lt;br /&gt;
* Potentiometer left pin → 3.3V&lt;br /&gt;
* Potentiometer right pin → GND&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Code:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import ADC, Pin&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
pot = ADC(Pin(26))  # GPIO 26 is ADC0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    value = pot.read_u16()  # Read 16-bit value (0-65535)&lt;br /&gt;
    voltage = value * 3.3 / 65535  # Convert to voltage&lt;br /&gt;
    percent = value / 65535 * 100  # Convert to percentage&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Value: {value}, Voltage: {voltage:.2f}V, Percent: {percent:.1f}%&amp;quot;)&lt;br /&gt;
    time.sleep(0.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;What this does:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pot.read_u16()&amp;#039;&amp;#039;&amp;#039; - Returns 0 (0V) to 65535 (3.3V)&lt;br /&gt;
* Turn potentiometer dial and watch the value change&lt;br /&gt;
* This is how robots read analog sensors (photoresistors, battery voltage)&lt;br /&gt;
&lt;br /&gt;
=== Example: ADC-Controlled LED Brightness ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; This requires PWM, which we&amp;#039;ll cover in [[MicroPython Programming]]. For now, we&amp;#039;ll use a simple threshold:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import ADC, Pin&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
pot = ADC(Pin(26))&lt;br /&gt;
led = Pin(15, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    value = pot.read_u16()&lt;br /&gt;
&lt;br /&gt;
    if value &amp;gt; 32768:  # If pot is more than 50%&lt;br /&gt;
        led.on()&lt;br /&gt;
    else:&lt;br /&gt;
        led.off()&lt;br /&gt;
&lt;br /&gt;
    time.sleep(0.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Part 7: Your First Robot Program ==&lt;br /&gt;
&lt;br /&gt;
Let&amp;#039;s combine everything into a simple robot behavior:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Scenario:&amp;#039;&amp;#039;&amp;#039; A robot with two line sensors that follows a line.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Simplified hardware (for testing without a robot):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* 2 buttons represent line sensors (pressed = line detected)&lt;br /&gt;
* 2 LEDs represent motors (on = motor running)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wiring:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Button 1 (left sensor) → GPIO 14 → GND, with Pin.PULL_UP&lt;br /&gt;
* Button 2 (right sensor) → GPIO 15 → GND, with Pin.PULL_UP&lt;br /&gt;
* LED 1 (left motor) → GPIO 16 → 220Ω → GND&lt;br /&gt;
* LED 2 (right motor) → GPIO 17 → 220Ω → GND&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Code:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Sensors (buttons for testing)&lt;br /&gt;
sensor_left = Pin(14, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
sensor_right = Pin(15, Pin.IN, Pin.PULL_UP)&lt;br /&gt;
&lt;br /&gt;
# Motors (LEDs for testing)&lt;br /&gt;
motor_left = Pin(16, Pin.OUT)&lt;br /&gt;
motor_right = Pin(17, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
def drive_forward():&lt;br /&gt;
    motor_left.on()&lt;br /&gt;
    motor_right.on()&lt;br /&gt;
&lt;br /&gt;
def turn_left():&lt;br /&gt;
    motor_left.off()&lt;br /&gt;
    motor_right.on()&lt;br /&gt;
&lt;br /&gt;
def turn_right():&lt;br /&gt;
    motor_left.on()&lt;br /&gt;
    motor_right.off()&lt;br /&gt;
&lt;br /&gt;
def stop():&lt;br /&gt;
    motor_left.off()&lt;br /&gt;
    motor_right.off()&lt;br /&gt;
&lt;br /&gt;
# Main loop&lt;br /&gt;
while True:&lt;br /&gt;
    left = sensor_left.value()&lt;br /&gt;
    right = sensor_right.value()&lt;br /&gt;
&lt;br /&gt;
    # Both sensors on line (both buttons pressed)&lt;br /&gt;
    if left == 0 and right == 0:&lt;br /&gt;
        drive_forward()&lt;br /&gt;
    # Left sensor on line, right sensor off&lt;br /&gt;
    elif left == 0 and right == 1:&lt;br /&gt;
        turn_left()&lt;br /&gt;
    # Right sensor on line, left sensor off&lt;br /&gt;
    elif left == 1 and right == 0:&lt;br /&gt;
        turn_right()&lt;br /&gt;
    # Neither sensor on line&lt;br /&gt;
    else:&lt;br /&gt;
        stop()&lt;br /&gt;
&lt;br /&gt;
    time.sleep(0.01)  # Small delay&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Try this:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Press left button only → left LED off, right LED on (turning left)&lt;br /&gt;
* Press right button only → left LED on, right LED off (turning right)&lt;br /&gt;
* Press both buttons → both LEDs on (driving forward)&lt;br /&gt;
* Release both buttons → both LEDs off (stopped)&lt;br /&gt;
&lt;br /&gt;
This is the foundation of [[Activity:Line Following]]!&lt;br /&gt;
&lt;br /&gt;
== Part 8: Saving Programs to Pico ==&lt;br /&gt;
&lt;br /&gt;
=== Where Code is Stored ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;main.py&amp;#039;&amp;#039;&amp;#039; - Runs automatically when Pico powers on&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Other .py files&amp;#039;&amp;#039;&amp;#039; - Can be imported as modules&lt;br /&gt;
&lt;br /&gt;
=== Create a Startup Program ===&lt;br /&gt;
&lt;br /&gt;
# Write your code in Thonny&lt;br /&gt;
# Click &amp;quot;Save as...&amp;quot; and choose &amp;#039;&amp;#039;&amp;#039;MicroPython device&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Name it &amp;#039;&amp;#039;&amp;#039;main.py&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Disconnect Pico and reconnect it&lt;br /&gt;
# Your program runs automatically!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Tip:&amp;#039;&amp;#039;&amp;#039; Add a delay at the start so you can interrupt it if needed:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import time&lt;br /&gt;
time.sleep(2)  # 2-second delay before starting&lt;br /&gt;
# Your code here&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Organize Code into Modules ===&lt;br /&gt;
&lt;br /&gt;
You can split code into multiple files:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;robot.py&amp;#039;&amp;#039;&amp;#039; (on Pico):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from machine import Pin&lt;br /&gt;
&lt;br /&gt;
class Robot:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.led = Pin(25, Pin.OUT)&lt;br /&gt;
&lt;br /&gt;
    def blink(self, times):&lt;br /&gt;
        for i in range(times):&lt;br /&gt;
            self.led.toggle()&lt;br /&gt;
            time.sleep(0.2)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;main.py&amp;#039;&amp;#039;&amp;#039; (on Pico):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from robot import Robot&lt;br /&gt;
&lt;br /&gt;
bot = Robot()&lt;br /&gt;
bot.blink(10)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Part 9: Debugging and Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Print Debugging ===&lt;br /&gt;
&lt;br /&gt;
The most useful debugging technique is printing values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
while True:&lt;br /&gt;
    sensor_value = sensor.value()&lt;br /&gt;
    print(f&amp;quot;Sensor: {sensor_value}&amp;quot;)  # See what the sensor reads&lt;br /&gt;
&lt;br /&gt;
    if sensor_value == 0:&lt;br /&gt;
        motor.on()&lt;br /&gt;
        print(&amp;quot;Motor ON&amp;quot;)  # Confirm this branch executes&lt;br /&gt;
    else:&lt;br /&gt;
        motor.off()&lt;br /&gt;
        print(&amp;quot;Motor OFF&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    time.sleep(0.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== LED Indicator Debugging ===&lt;br /&gt;
&lt;br /&gt;
When you can&amp;#039;t connect to serial console (robot is moving), use LED patterns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def indicate_error():&lt;br /&gt;
    for i in range(5):&lt;br /&gt;
        led.toggle()&lt;br /&gt;
        time.sleep(0.1)  # Fast blink = error&lt;br /&gt;
&lt;br /&gt;
def indicate_success():&lt;br /&gt;
    led.on()&lt;br /&gt;
    time.sleep(1)  # Long on = success&lt;br /&gt;
    led.off()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Common Errors ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;IndentationError:&amp;#039;&amp;#039;&amp;#039; Python uses indentation (spaces/tabs) to group code:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Wrong - inconsistent indentation&lt;br /&gt;
if sensor.value() == 0:&lt;br /&gt;
  motor.on()&lt;br /&gt;
    led.on()  # Error: too many spaces&lt;br /&gt;
&lt;br /&gt;
# Correct - consistent indentation&lt;br /&gt;
if sensor.value() == 0:&lt;br /&gt;
    motor.on()&lt;br /&gt;
    led.on()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NameError:&amp;#039;&amp;#039;&amp;#039; Variable not defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Wrong&lt;br /&gt;
print(speed)  # Error: speed not defined&lt;br /&gt;
&lt;br /&gt;
# Correct&lt;br /&gt;
speed = 100&lt;br /&gt;
print(speed)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;AttributeError:&amp;#039;&amp;#039;&amp;#039; Calling wrong method:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Wrong&lt;br /&gt;
led.turnon()  # Error: no such method&lt;br /&gt;
&lt;br /&gt;
# Correct&lt;br /&gt;
led.on()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== REPL Error Messages ===&lt;br /&gt;
&lt;br /&gt;
Read error messages carefully - they tell you what&amp;#039;s wrong:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Traceback (most recent call last):&lt;br /&gt;
  File &amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;, line 5, in &amp;lt;module&amp;gt;&lt;br /&gt;
NameError: name &amp;#039;speed&amp;#039; is not defined&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Line 5&amp;#039;&amp;#039;&amp;#039; - Error is on line 5&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;NameError&amp;#039;&amp;#039;&amp;#039; - Variable name doesn&amp;#039;t exist&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;speed not defined&amp;#039;&amp;#039;&amp;#039; - You forgot to create variable &amp;quot;speed&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Part 10: Skills Checklist ==&lt;br /&gt;
&lt;br /&gt;
By now, you should be able to:&lt;br /&gt;
&lt;br /&gt;
* ☐ Install MicroPython on Raspberry Pi Pico&lt;br /&gt;
* ☐ Use Thonny IDE to write and run code&lt;br /&gt;
* ☐ Use the REPL to test code interactively&lt;br /&gt;
* ☐ Write Python variables, conditionals, loops, functions&lt;br /&gt;
* ☐ Control digital outputs (LEDs)&lt;br /&gt;
* ☐ Read digital inputs (buttons)&lt;br /&gt;
* ☐ Read analog inputs (potentiometer, sensors)&lt;br /&gt;
* ☐ Write a simple robot behavior (line following simulation)&lt;br /&gt;
* ☐ Save programs to Pico (main.py)&lt;br /&gt;
* ☐ Debug with print statements and LED indicators&lt;br /&gt;
&lt;br /&gt;
If you can check most of these boxes, you&amp;#039;re ready to program [[SimpleBot]]!&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
=== Build SimpleBot ===&lt;br /&gt;
Apply your MicroPython knowledge to a real robot:&lt;br /&gt;
* [[SimpleBot]] - Full robot assembly guide&lt;br /&gt;
* [[SimpleBot:Line Following Implementation]] - Real line following code&lt;br /&gt;
* [[SimpleBot:Dead Reckoning Implementation]] - Encoder-based odometry&lt;br /&gt;
&lt;br /&gt;
=== Learn More Programming ===&lt;br /&gt;
* [[MicroPython Programming]] - Interrupts, PWM, I2C, state machines&lt;br /&gt;
* [[State Machine Design]] - Organize complex behaviors&lt;br /&gt;
* [[Software]] - Full competency overview&lt;br /&gt;
&lt;br /&gt;
=== Practice Projects ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Reaction timer&amp;#039;&amp;#039;&amp;#039; - Press button, wait random time, LED lights, measure reaction&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Light tracker&amp;#039;&amp;#039;&amp;#039; - Use photoresistor to control LED brightness&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Morse code&amp;#039;&amp;#039;&amp;#039; - Blink LED in Morse code patterns&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Night light&amp;#039;&amp;#039;&amp;#039; - Turn LED on when photoresistor detects darkness&lt;br /&gt;
&lt;br /&gt;
== Common Beginner Mistakes ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Forgetting to import modules&amp;#039;&amp;#039;&amp;#039; - Always &amp;#039;&amp;#039;&amp;#039;from machine import Pin&amp;#039;&amp;#039;&amp;#039; at the start&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Using time.sleep() in interrupts&amp;#039;&amp;#039;&amp;#039; - Interrupts must be fast (no delays!)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Not configuring pin mode&amp;#039;&amp;#039;&amp;#039; - Always specify Pin.IN or Pin.OUT&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Forgetting pull-up/pull-down resistors&amp;#039;&amp;#039;&amp;#039; - Digital inputs need them to avoid floating&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mixing up HIGH/LOW logic&amp;#039;&amp;#039;&amp;#039; - Check if sensor is active HIGH or active LOW&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Infinite loops without sleep&amp;#039;&amp;#039;&amp;#039; - Always add small delay to avoid maxing out CPU&lt;br /&gt;
&lt;br /&gt;
== Tools and Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Essential Software ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Thonny IDE&amp;#039;&amp;#039;&amp;#039; (Free) - [https://thonny.org/ thonny.org]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MicroPython Firmware&amp;#039;&amp;#039;&amp;#039; (Free) - [https://micropython.org/download/rp2-pico/ micropython.org]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Needed ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Raspberry Pi Pico&amp;#039;&amp;#039;&amp;#039; - $4 from [https://www.raspberrypi.com/products/raspberry-pi-pico/ Raspberry Pi]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;USB cable&amp;#039;&amp;#039;&amp;#039; (micro USB) - $2-5&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Breadboard&amp;#039;&amp;#039;&amp;#039; - $5-10&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Jumper wires&amp;#039;&amp;#039;&amp;#039; - $5-10&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;LEDs and resistors&amp;#039;&amp;#039;&amp;#039; - $5-10 for assorted kit&lt;br /&gt;
&lt;br /&gt;
=== External Resources ===&lt;br /&gt;
* [https://docs.micropython.org/en/latest/rp2/quickref.html MicroPython Quick Reference for Pico]&lt;br /&gt;
* [https://projects.raspberrypi.org/en/projects/getting-started-with-the-pico Raspberry Pi Pico Getting Started]&lt;br /&gt;
* [https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html Raspberry Pi Pico Documentation]&lt;br /&gt;
* [https://docs.python.org/3/tutorial/ Python Tutorial] - Learn Python language&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Software]] - Full software competency overview&lt;br /&gt;
* [[MicroPython Programming]] - Next tutorial in the learning path&lt;br /&gt;
* [[SimpleBot]] - Build a robot using MicroPython&lt;br /&gt;
* [[Electronics Fundamentals]] - Understand the hardware you&amp;#039;re controlling&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Beginner]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
</feed>