pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: & S1 P \. a. x/ f0 U; L* M* C' Z
通用板控制见 pyb. - import pyb
, M/ b/ J! {8 l; Y
* {; B. C* ?+ {' D- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)5 h+ O$ o- j8 {
- pyb.wfi() # pause CPU, waiting for interrupt
, T: z' M- s; v - pyb.freq() # get CPU and bus frequencies) {1 V5 ]6 B( F, K
- pyb.freq(60000000) # set CPU freq to 60MHz
9 L2 `* s) H4 c5 A0 d8 c+ F0 J& | - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 " |' I# H- o& ]& S2 C7 W
+ X7 S/ O1 W, Q" |延迟和计时使用 time模块: - import time! [# w8 j1 e' j& m6 N' ^0 O
7 w8 {2 @* o( u( G- time.sleep(1) # sleep for 1 second/ Y9 C6 W0 a4 f$ I% p: `
- time.sleep_ms(500) # sleep for 500 milliseconds) W k, C) ~" @
- time.sleep_us(10) # sleep for 10 microseconds6 ?' t9 t! f" N" e! ]4 R
- start = time.ticks_ms() # get value of millisecond counter
' b0 R5 \, R& F# h* z+ } - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
1 b: p/ }. `6 L. r) c' n* K& Z8 A
' N' @2 K- q+ i内部 LED见 pyb.LED. - from pyb import LED
7 ~9 Q2 o1 I. _- l. i0 T; V - $ i* V+ y6 P% d+ [( R6 e8 A% R
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue7 [9 H* L, t2 w
- led.toggle()( J2 X1 h* Z. k+ O( n
- led.on()
/ a- `6 U/ ^: J7 T - led.off()$ j! F9 j. c' x$ j
- ( \/ L! s: u6 I% O
- # LEDs 3 and 4 support PWM intensity (0-255)5 e" e w% z9 y- ?; R6 K; n
- LED(4).intensity() # get intensity
8 E* G/ L! R; v, i% `% K! T0 S - LED(4).intensity(128) # set intensity to half
复制代码 + V- Q. Z( g4 c+ ?/ [: g
8 f% ~+ _8 y. u" w, x+ H
内部开关请参阅 pyb.Switch. - from pyb import Switch, I* b) u5 h" c" d
8 A5 m$ D8 v. N. _8 ^- ?# ?7 g- sw = Switch()
2 {3 u# ~- R3 w. q/ I - sw.value() # returns True or False
& S# Z8 j: {6 Q+ I - sw.callback(lambda: pyb.LED(1).toggle())
复制代码 ' ~. l$ q0 v* {% G
( @; e( Z# T7 M- T0 A8 e
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin p' i. P9 D8 [" A) A
- : i0 Y! y' s7 U3 V) h: b
- p_out = Pin('X1', Pin.OUT_PP)+ d& }- K' i4 }! }: ?: c$ u Y0 D
- p_out.high()& N: }6 f7 w' K# |7 S8 D+ ?
- p_out.low()
: p0 }3 B( r' @9 R8 b5 A
2 ^) v/ b7 L M. f9 h0 _- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
- o3 H& B& H# U P; V& } - p_in.value() # get value, 0 or 1
复制代码 ; k( J0 j) u; c t' o0 i* q
# u- {- z7 D3 @" I6 [0 j
伺服控制请参阅pyb.Servo. - from pyb import Servo. ?9 K( I+ i1 w5 R: |" E1 G
' w; s4 B' C( ~/ O6 y& c- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
( Y: N; ?; S+ c1 ` - s1.angle(45) # move to 45 degrees# y* Z0 a8 b. n3 @ M- J' \
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
1 k% C4 M, |; `- R" I) A; K V - s1.speed(50) # for continuous rotation servos
复制代码 d; `/ M+ `9 H& t
* R. m- b" Y# H" R. O
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
! w7 d& }9 D" h7 O3 P
3 e: m1 L& ]0 m1 V- callback = lambda e: print("intr")
4 f4 v w! r: K& j: }' o9 d - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
* r& o5 D, n5 N: e9 s2 \: u0 P- _/ C: m/ H* X
计时器请参阅pyb.Timer. - from pyb import Timer
q8 r& C( y/ [* e! J& n: Q6 o7 F2 m7 g
6 S: R* s# `, i7 Q6 s- tim = Timer(1, freq=1000)
+ K) ~! `+ _8 {, V7 ^ - tim.counter() # get counter value# r4 q* g8 G6 S; a) a* O6 q- x
- tim.freq(0.5) # 0.5 Hz
, i+ X( _5 E& L0 G; |$ m - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
- T6 _/ X, H1 L5 `' T# `RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC3 |: f# s, Y; n( D( V
- : K, R& _& z" v" @7 u n$ D* r% F
- rtc = RTC()
( d/ h P) U g2 {, _* C* j3 c - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
- h1 O( [7 x0 J# I0 g: j. i - rtc.datetime() # get date and time
复制代码
% ]; ~* I! y3 M# D$ |2 HPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer9 ~2 G! u# e! w5 M0 d6 k: W2 S2 b
- ) u8 Q* g9 C6 h; Q8 n" d
- p = Pin('X1') # X1 has TIM2, CH1
6 ?- M, q9 e, b+ i7 A) R - tim = Timer(2, freq=1000)! M" _+ j4 ?4 K
- ch = tim.channel(1, Timer.PWM, pin=p), b- {9 B @: i: A* E" O
- ch.pulse_width_percent(50)
复制代码
0 l) v) B9 G5 J sADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
8 L4 D8 L. [# t8 ?9 M+ x - # q2 }- \$ Q$ @7 y, n5 m" ]
- adc = ADC(Pin('X19'))
, }, q7 M/ }" T8 v7 r2 {2 @ - adc.read() # read value, 0-4095
复制代码 - L8 A. @. |5 g( m* ~; Q7 y
9 a+ Q& J. X6 y B4 \DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
5 K5 f) n' R2 Y( \/ c# p - - K$ x) h: @5 X! H5 ^
- dac = DAC(Pin('X5'))
$ e `6 {$ D$ ?) F9 L V - dac.write(120) # output between 0 and 255
复制代码
$ W) S/ Q1 B5 m$ y! V% Q, x# S: X3 s7 f8 B8 u+ |9 y" D
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
7 [ `4 t; x( e- [$ H
# _+ X! o H4 o7 o8 F3 g- uart = UART(1, 9600)& F* v1 x" ], ?# m
- uart.write('hello')' V8 @1 `% ?+ B" Z9 i9 H ?
- uart.read(5) # read up to 5 bytes
复制代码 9 }/ C/ a: |0 m
: U/ H: @. } }$ U/ aSPI总线请参阅 pyb.SPI. - from pyb import SPI
6 n* a' x: T+ B# j0 n
* E9 o. p* U0 Y8 L- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)! z3 L) S7 g4 U ^3 C# E4 R# @0 E' }
- spi.send('hello')
" [& b1 R+ D: g6 Q9 B: x - spi.recv(5) # receive 5 bytes on the bus
4 i, |5 y+ V1 s( K% q$ @ - spi.send_recv('hello') # send and receive 5 bytes
复制代码 - A) E1 u6 Y+ O$ M, ]
; G0 C- k/ q' |8 s Y2 _/ }! TI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
5 f4 m4 r" \/ u5 S" H$ c - / i8 l' v! C9 N3 q5 |
- i2c = I2C('X', freq=400000) # create hardware I2c object% J9 l7 D; W1 H( o2 |6 \
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object$ x8 w- h, P' }
0 d* L- E& d( {- i2c.scan() # returns list of slave addresses+ A' {+ K+ v% t' M! v* j5 W- u8 r0 T
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42* e. j# a' Q+ w7 G/ F' r
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
1 N. L9 D: e) O5 b- H - / p( h6 Y- ~. z1 ~( p
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10: m! f" _- d4 K u: X
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 5 w: L2 m8 W' P( ~
; g, b9 B4 p0 u3 \6 _) [3 X6 c
注意:对于传统 I2C 支持,请参阅 pyb.I2C。 8 i9 D1 ~: D- S. m @
I2S总线参见 machine.I2S. - from machine import I2S, Pin4 s! m9 X# Y" |/ [
- , @* L; [: t& m# a
- 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/ A" g! U0 I- ^9 H7 g) K2 b* E
- i2s.write(buf) # write buffer of audio samples to I2S device
! m9 u, W9 x+ R. e9 X# |
2 M6 Y* [, T) V4 x- |- 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
2 Z3 J( o4 ~4 o Z) L' T. r7 _ - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
% O& {' l% i1 q% x- RI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
4 N( {; O/ c7 L) W( [CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
0 v" l! R# B; `, y: m
" B5 @# x o. p) ^! }- can = CAN(1, CAN.LOOPBACK)
4 m) }2 N( D, \ m1 O' B: W - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))( \5 e1 _, o5 u
- can.send('message!', 123) # send a message with id 123
: f8 d( p, s& j8 y, ]' b; J - can.recv(0) # receive message on FIFO 0
复制代码
- f1 j( ]7 Q6 g# g/ v# _9 _- I* x$ ?* p2 ^5 E+ [
内部加速度计参见pyb.Accel. - from pyb import Accel) |$ H6 B: [7 y$ B7 p4 ^
- 6 `1 w2 H( N, ]& A. Z3 y3 m
- accel = Accel()
2 {3 b+ O+ _ h2 [, W2 x - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 : d% ^+ E1 H4 `1 H
) Y1 v* U3 K& [, V# `2 [. r3 `
|