ENG-CANSAT-PICO-HowTo
MicroPython How To
This section of the tutoriel contains small portion of code explaining how to use digital pins, analog pins, buses and all the fundamentals to control the board with Python code.
Everything you learned about python language like variables, loops, conditionals, object programming, ... does applies to MicroPython.
A large part of standard Python libraries have been ported to MicroPython (partially or completely). Keep in mind that MicroControler doesn't have as much power and as much memory than a regular computer. So choice has been made: no gregorian calandar, no numpy (it exists some port anyway), no TKinter.
Print and Waits
This first example how to output text with print() and wait a moment with sleep() .
Everything you will print() will be sent to REPL (so over the USB-Serial line) and being visible in Thonny.
from time import sleep, sleep_ms
for x in range( 10 ): # 0..9
print( "Value %i" % x )
sleep( 0.5 ) # half second
You can also sleep for milliseconds with sleep_ms(x)
Control an output
The onboard LED is tied to the GPIO 25. Here how to control it.
from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1) # Switch on the LED
led.value(0) # Switch off the LED
This will work the same with any GPIO pins.
Input Reading
The following code will read the state of the GP15 configured as input pin.
>>> from machine import Pin
>>> p = Pin( 15, Pin.IN )
>>> p.value()
0 <--- Pin tied to GND
>>> p.value()
1 <--- Pin tied to 3.3V
When the Pin is neither tied to GND, neither to 3.3V, then the pin voltage is said "floating". |
The logical state of a floating pin is unpredictable, it may be High, it may be Low... we don't know.
To avoids that issue, the best is to use a pull-up resistor. Many microcontroler have internal pull-up resistor (it just needs to be activated).
Input Reading with Pull-Up
The pico can activates a Pull-up resistor on any of its input pins.
When the Pin is tied to ground then the input is Low (0) otherwise, the pull-up resistor will drive back the pin voltage to 3.3V.
The following code will read the state of the GP15 configured as input pin + pull-up.
>>> from machine import Pin
>>> p = Pin( 15, Pin.IN, PIN.PULL_UP )
>>> p.value()
0 <--- Pin tied to GND
>>> p.value()
1 <--- Pin tied to 3.3V or floating.
Analog Reading
Lets read some voltage from the ADC1 (attached to GPIO 27).
The value is read on the ADC via the common read_u16() method.
That method returns a 16 bits value, so a number between 0 and 65535.
Even if the read_u16() returns a 16 bits values, the effective ADC resolution is still 12 bits. The MicroPython internal will just upscale the ADC value from 0..4095 to returned value 0..65535 by applying a multiplier. |
from machine import Pin, ADC
p = Pin( 27 )
analog = ADC( p )
#
# Read the ADC value
value = analog.read_u16()
print( 'value: %i' % value )
#
# Transform into volts
volts = 3.3*value/65535
print( 'Volts: %f' % volts )
This may produce the following output in the REPL.
value: 8706
Volts: 0.438389
PWM Output
The onboard LED is tied to the GPIO 25. Here how to control it.
from machine import Pin
x
x
x
x
Hardware buses
I2C Bus
The onboard LED is tied to the GPIO 25. Here how to control it.
from machine import Pin
x
x
x
x
UART Bus
The onboard LED is tied to the GPIO 25. Here how to control it.
from machine import Pin
x
x
x
x
SPI Bus
The onboard LED is tied to the GPIO 25. Here how to control it.
from machine import Pin
x
x
x
x
Additional tutorials
Anyway, the followings are also goods and complete references.
Written by Meurisse D. for MCHobby