pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
- f/ B" w( c: z8 \$ t k通用板控制见 pyb. - import pyb
$ n9 p, u) w& {$ `8 Q3 y5 v4 R
! g! P' C! k9 p) j- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)+ x7 N9 B0 G- B9 o5 `8 w0 B
- pyb.wfi() # pause CPU, waiting for interrupt
- c6 \& d# d7 S& o$ h! y; s - pyb.freq() # get CPU and bus frequencies6 u9 N0 R {0 Z) Y
- pyb.freq(60000000) # set CPU freq to 60MHz
: v& r \" d0 F' j! O+ L; U3 h" Q - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
/ _! V; f" f! S! ]% W- Q s. w U( {% F, m T
延迟和计时使用 time模块: - import time
0 t, k) J' n8 W- ]6 x& s
J8 b+ i( f1 w2 ]& W5 B- time.sleep(1) # sleep for 1 second9 b/ q& {& z! r: |) }5 ~; m
- time.sleep_ms(500) # sleep for 500 milliseconds
7 V' @* s1 b/ H" z5 J5 q0 L, O - time.sleep_us(10) # sleep for 10 microseconds
9 m, \( Z( N3 o - start = time.ticks_ms() # get value of millisecond counter
1 a% F/ n/ _+ k# [! u3 q4 b" _6 E; ~ - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
8 l" N# o8 K) }; Y( [& `. G3 J+ o
6 o2 F, v1 y% W' `内部 LED见 pyb.LED. - from pyb import LED
: v$ J. Q# y9 N( L- t
" S6 Q" D6 K. n# Q' g& r0 T% ^; P3 e- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
- R4 g, C4 H- r8 k - led.toggle()& N" t" Q8 A- a; k
- led.on()" ?1 F/ ?2 f4 y _$ p* X8 @ p
- led.off()! Y; T3 f! o$ d
- - T8 X, g/ W8 ]* \) _7 G& h2 ]
- # LEDs 3 and 4 support PWM intensity (0-255)
; b' |: Y, w: c7 X - LED(4).intensity() # get intensity
3 P- L% [6 ^% Y: Y% W - LED(4).intensity(128) # set intensity to half
复制代码
9 N% e4 O" K! V) W6 j+ t4 x: r
+ v3 ]( k" k# S" [4 t) ^) E, s内部开关请参阅 pyb.Switch. - from pyb import Switch7 \* f0 p- }! F, B- O* j" p
- " @) J* C, n8 E2 ?6 M
- sw = Switch()
: E0 Z/ \ N& V$ q& E- \/ D, U - sw.value() # returns True or False- B. W) I5 Y& Q. @& a) O0 B
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 7 u4 w; H: g4 H
1 U P* p9 o4 t3 G3 [' _
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
& r5 d8 O- ^/ @. _" z3 N" N
3 `5 j9 V5 {3 e1 T, A; b2 y- p_out = Pin('X1', Pin.OUT_PP)
2 Z3 {9 I5 P8 `* M* |/ G) x - p_out.high()* J6 a% D+ F; m
- p_out.low()
. E4 m( }/ \$ i% C. `+ O
8 M' V! v$ `( \/ Q* y- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
4 u6 o5 k6 F; N - p_in.value() # get value, 0 or 1
复制代码
7 k! ?/ }7 K+ A9 B$ Y* @4 F" [
( A2 k- m; t" U7 ]1 N伺服控制请参阅pyb.Servo. - from pyb import Servo/ n3 ]. u+ a+ o$ K7 o% x
- : f- O& \# B8 Z5 K5 z: T* K
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
. u# v; k( S3 W5 o" a" A - s1.angle(45) # move to 45 degrees7 ?% {" `4 c" m. k( {/ @: z
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms, \ l% z8 K% e' M5 H
- s1.speed(50) # for continuous rotation servos
复制代码 ( F5 c0 o. B( g* [( a
! \. t4 f) p5 [$ W% E3 u/ r- P
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
( a# `. H, d0 L2 \- W# K - 5 x5 q% L a; x* u# r
- callback = lambda e: print("intr")
) K$ F, \# A" p, r6 z - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 2 k+ B8 n2 B0 Y+ p! a: b/ Y- ?
6 A3 D+ E( i% b! D计时器请参阅pyb.Timer. - from pyb import Timer! P; V% H9 t/ n W# y
U8 j" m, ?, ?, D, L- tim = Timer(1, freq=1000)+ D! s. W/ L* s" _1 I
- tim.counter() # get counter value4 B4 O* y" M$ D. t d6 s
- tim.freq(0.5) # 0.5 Hz
# v# H) M/ e( Z' C( G4 u - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
2 C8 l) G" @3 D( p% l( A9 CRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC8 o5 [4 e( X& r2 K# S3 u: b
- t9 I) ]- K, `
- rtc = RTC(): t+ c# L, f+ J: j
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time- i6 X/ c7 r% w1 z/ z
- rtc.datetime() # get date and time
复制代码 6 V( b i, F; w' ]! Z
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
$ x, A1 a+ y+ u- Z5 a! D - ) r0 H) Y! [8 n( k' p
- p = Pin('X1') # X1 has TIM2, CH1, N; w, T% [) e
- tim = Timer(2, freq=1000)
8 R5 }0 p6 ]6 v1 S$ s2 Q' a2 u6 O - ch = tim.channel(1, Timer.PWM, pin=p)
; `, ]5 m' b* [* Q4 E$ U - ch.pulse_width_percent(50)
复制代码 9 ~% v" I; {* f0 ?6 z9 C
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
0 [7 L* r, h( |" Y' X; f - 3 U" v+ d% u- F$ J, i( ^
- adc = ADC(Pin('X19'))
`3 g, r; a# k2 }0 m2 g& n - adc.read() # read value, 0-4095
复制代码
/ i7 j2 p- m) F' ]" {
, u/ D) `; P8 m' Z2 F9 Y' }' a' SDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
" z1 ~4 F7 L+ O0 P7 w9 Q: H; G - 3 N+ O& c5 L1 T7 Y7 @7 L
- dac = DAC(Pin('X5'))
% R5 C) M+ O1 K. b" E - dac.write(120) # output between 0 and 255
复制代码 5 X+ P. U, q. I" I: g5 e$ l
# |0 w. `- j* D1 r4 P% l7 OUART(串行总线)请参阅 pyb.UART. - from pyb import UART) S" a' n/ m& z& z4 _* A
- 6 l9 [; Z' ~* b
- uart = UART(1, 9600)
+ `: ~# L% E0 z1 J9 m - uart.write('hello')
! } M# y5 G0 e0 z# K7 ]% [! o6 G - uart.read(5) # read up to 5 bytes
复制代码 0 Q" b2 T& C8 L6 w& F. a
& N2 x7 B, ]1 V) x& e8 o$ G/ BSPI总线请参阅 pyb.SPI. - from pyb import SPI: j% g+ W; k- ]" [ _
- 7 K/ ?( i6 C2 `1 a
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
6 j/ r+ [# o4 C; f6 G8 \% M - spi.send('hello')
- m7 ~: u0 I8 Y - spi.recv(5) # receive 5 bytes on the bus
2 O- Y! I* ?- v$ a' r, l - spi.send_recv('hello') # send and receive 5 bytes
复制代码
$ q! d! I4 ~6 p' V
+ k+ t ^. O' J/ N- MI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C/ ~; s3 W( c% y) I4 U
- F& |9 }: s6 G* x. K; H: ^6 A# w- b
- i2c = I2C('X', freq=400000) # create hardware I2c object
9 I1 H" R$ ]' |; @2 z+ i$ M5 l - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
D0 Q0 p P2 R C r% y7 N - 7 w$ u9 T$ f) P0 s! y
- i2c.scan() # returns list of slave addresses
. A7 I+ e8 L V; H- N - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42' ^6 h9 o+ O5 ]8 X- I; V: G
- i2c.readfrom(0x42, 5) # read 5 bytes from slave2 s p* `% ]' ?% R/ \) D8 G
- 8 r( ~3 |3 p& ?4 D3 S
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
( Q# P6 u" E$ D% r - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 ! B H0 x5 z* o1 }
; Q8 f0 ^/ i5 K1 a! v. I注意:对于传统 I2C 支持,请参阅 pyb.I2C。 ; N6 V% D; C2 `( T
I2S总线参见 machine.I2S. - from machine import I2S, Pin
h5 U& N0 j2 v
: D& |: T2 c7 X6 D- i2s = I2S(2, sck=Pin('Y6'), ws=Pin('Y5'), sd=Pin('Y8'), mode=I2S.TX, bits=16, format=I2S.STEREO, rate=44100, ibuf=40000) # create I2S object& ]# e- O. o7 V+ l( T; w
- i2s.write(buf) # write buffer of audio samples to I2S device. q& }' A8 x9 A9 \; k1 B% v
- . l; b( ^! P" C0 m
- i2s = I2S(1, sck=Pin('X5'), ws=Pin('X6'), sd=Pin('Y4'), mode=I2S.RX, bits=16, format=I2S.MONO, rate=22050, ibuf=40000) # create I2S object
" D; V4 T9 w" E7 w - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
4 Y- Q; Q, U. Q8 Y1 X% XI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
1 G9 M, Q3 [, }! ~6 d5 `: A, z& X7 zCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
' e7 R8 D- L. T$ _
, {1 K7 \! H. f, y6 I0 O0 P- can = CAN(1, CAN.LOOPBACK)
9 t# m {9 t- i' T - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
# E4 G% S% i3 g8 p - can.send('message!', 123) # send a message with id 123
/ G( v1 _4 ?* G+ t5 T, i c$ K - can.recv(0) # receive message on FIFO 0
复制代码
- I/ p# `8 T) x, l5 x! {( `4 r! a4 j5 n8 v) A! b1 p
内部加速度计参见pyb.Accel. - from pyb import Accel% m9 [( f/ }* {- S2 N( C) E
) Q8 N+ ]% b0 I% }- accel = Accel(): V! T. u+ n$ [" I. i
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 1 y" n$ ?) M# Z. v
# @' W- L, \" n2 w1 O- Z' F1 z |