pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
: O9 m" m6 G) o* Z通用板控制见 pyb. - import pyb
4 r& `2 z9 D# W - 6 T- ~1 ], ~! e- A% `+ O5 a
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
K/ W4 ^! F7 V: s# ^4 r - pyb.wfi() # pause CPU, waiting for interrupt
+ U; B: `) _$ F7 }. i0 R6 p: P - pyb.freq() # get CPU and bus frequencies' E2 `; S' h6 K. `
- pyb.freq(60000000) # set CPU freq to 60MHz
/ D/ k8 d! ]1 g7 B/ P$ G( f6 D/ h9 n - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 % O: H' U+ U+ z6 E5 U! I$ X! L3 q
8 l) N, K3 A/ @ w- f延迟和计时使用 time模块: - import time4 D' R+ n2 Q2 R* `$ N& n
- ' @: Y8 _1 W: ^+ _! S
- time.sleep(1) # sleep for 1 second
3 F- V5 ^+ \: x. R" T+ w' N - time.sleep_ms(500) # sleep for 500 milliseconds
4 x; p* D2 z& R2 l; r4 K - time.sleep_us(10) # sleep for 10 microseconds7 h) Z9 n$ _& L7 n* S& F, X
- start = time.ticks_ms() # get value of millisecond counter
* m9 S: R! F# D/ [7 k - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
& s! R! l6 N, ]3 o& e) ?. o
! q8 _$ e- Q+ A& N* H1 k内部 LED见 pyb.LED. - from pyb import LED5 v* \7 i5 W+ l
- 3 o) }, X2 F" ^6 i9 U
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
, ]9 n" ^ M: l; e" G& Z$ I - led.toggle()
: X4 k# t+ q6 Q& D1 [8 W7 G) S - led.on()
$ \: s5 m/ K% m/ S$ S - led.off(), p6 \; X; @1 T/ ?! W
- 4 z' n. c5 I6 {1 Z- y
- # LEDs 3 and 4 support PWM intensity (0-255)
$ {) `5 z; I* d5 F - LED(4).intensity() # get intensity' n: t7 I3 ]/ M( M5 S
- LED(4).intensity(128) # set intensity to half
复制代码
5 e9 p" i5 Z0 b4 L/ j6 v7 H+ ^9 c0 c$ ^+ k
内部开关请参阅 pyb.Switch. - from pyb import Switch s6 O o' Z: i& }
- 4 s @- y& M/ u. ^, b' x
- sw = Switch()
' m, B G3 _3 Q - sw.value() # returns True or False
* e: l; I' N4 G8 {) \8 J1 n - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
- l6 s' m8 J( \" J( G
2 J q' U, C- y0 x: R: u4 H' I8 K引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
7 r5 c: Z0 E4 L6 I4 j0 I
8 x& I! y7 r2 G/ N1 `3 [) L- p_out = Pin('X1', Pin.OUT_PP)8 d, ?7 F" W0 _4 s; p/ o4 g0 X
- p_out.high(). ]- u3 W2 S7 _- s3 ^- @
- p_out.low()
! C' b& R0 t& M, M' K
6 l" H" V) S+ k$ o+ X3 u7 S0 a- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
( j- K. _( g0 o+ s" x - p_in.value() # get value, 0 or 1
复制代码 1 o, Y8 m: E: L* J# ?8 g0 Y3 S& U
5 N: B, o$ O" d7 B' N$ m伺服控制请参阅pyb.Servo. - from pyb import Servo
S; h& G9 \3 O! o& [ - & U0 ?: l( E+ z' m0 v. A$ q4 @
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
4 v+ }1 {5 v% _- d M - s1.angle(45) # move to 45 degrees* ^; E3 G0 o8 m; L+ L
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms q" @4 J# r/ _( F3 x
- s1.speed(50) # for continuous rotation servos
复制代码 1 V% c' l' T2 A1 O7 v
- M1 k( u5 d9 p* b3 _ t' C外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt" n( B7 p* s6 o8 N" s1 A: o0 G- t$ J
2 k% U; R: M1 E& v+ b9 [. s. X9 w0 K6 P- callback = lambda e: print("intr")
5 f$ D3 L! o# O( e/ ^% B* m+ S0 R9 C - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
) N$ L7 ^& K% {% L* _, l& g- t
3 G2 p( t; |8 d9 T4 p* x计时器请参阅pyb.Timer. - from pyb import Timer
: k* `: a' m% ?" W9 e& i; q* Y; }" m - * K* {: A1 s; N7 m- P+ g$ N
- tim = Timer(1, freq=1000)
K6 \/ Z/ ?# C6 a0 \ - tim.counter() # get counter value% t% _1 m5 D u" t& O# c8 i
- tim.freq(0.5) # 0.5 Hz
1 c) p0 @6 n. T( S8 Z - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
& E, O7 ~" f0 T& TRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC/ ?* D( ~2 \/ X$ G$ }: {
- ' L/ }1 [: {$ W D- |; [' _) J/ |
- rtc = RTC()
; u, s# d$ V, q& n7 c9 v - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
) ^* V' ]/ x% E- g, A - rtc.datetime() # get date and time
复制代码 / Y/ F' s* c* K! {( h- }1 s
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
% \9 k, Y% P9 s6 V1 k, C+ [ - k' D* a( B( P1 Q; B$ o# i. r
- p = Pin('X1') # X1 has TIM2, CH1 G7 t$ H( m+ Q+ z9 J& x3 O
- tim = Timer(2, freq=1000)! o6 `0 f. ]0 v" X1 V) W
- ch = tim.channel(1, Timer.PWM, pin=p)
$ }7 A1 y; c9 S& x - ch.pulse_width_percent(50)
复制代码 6 G+ h& z9 X- S$ j1 j
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC& c4 h- N6 Y0 d1 U/ g1 u
- P; h" T& l+ y& u& @8 C
- adc = ADC(Pin('X19'))+ A& H( C1 h+ k. W
- adc.read() # read value, 0-4095
复制代码 5 _9 v0 O0 Z V
; e9 U* Q5 G& |5 M1 P2 d
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
$ y4 o& K, ^# t8 Y2 J9 n7 X - * T- z7 \' K2 \1 N) N% `& {
- dac = DAC(Pin('X5'))0 z1 g" a. N8 w* C
- dac.write(120) # output between 0 and 255
复制代码 ' @: z, r1 i4 A$ F& ^
* v9 {. z) k+ o( ^; q2 o) f
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
' c( t2 \. [& f( @" z) K& _ - 9 P4 M7 W/ H6 b- j/ H* ]6 y: ~
- uart = UART(1, 9600)& |2 n! S8 ^" D; \. p- i6 W' l
- uart.write('hello') ]2 L. r6 z( E
- uart.read(5) # read up to 5 bytes
复制代码
- H* i+ q& y+ S. z2 U* b* Z+ s# p8 I3 r: U' ^ `
SPI总线请参阅 pyb.SPI. - from pyb import SPI; f# `* j7 U, o$ ^+ i" X! \+ R+ _, W
- & v, p( `# R" ~5 o& Y9 ^
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
( m0 g6 X i; o+ O6 p - spi.send('hello')
, r! d3 k. j1 [. a) z, N - spi.recv(5) # receive 5 bytes on the bus1 n: c* s# J g8 w$ N
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 . g/ d1 P. C t+ O$ u3 Y
* J$ k+ ^. _/ h' MI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C9 [ y3 ]4 q' H- L3 e) s
; m" q2 B/ {+ j9 S1 @* u9 c; @/ O- i2c = I2C('X', freq=400000) # create hardware I2c object6 v# N/ {3 ~5 ^3 @5 B
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
* a) r; c: C8 ~6 {8 m9 z; s - - I6 D Z, m. G1 v$ j
- i2c.scan() # returns list of slave addresses. [) T$ [. V2 `4 N' o, ?6 L, c: Y& I
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42, y9 }3 o, |# p, t- b! c
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
' L6 S. |2 I5 ?; @
& L1 ?! C" Q- {5 }, K. O2 p- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
! ^1 \! ^( a4 {6 Y' ^' J - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 $ r/ {8 S4 T O, t7 j5 b% L
4 O& f% I; n, J" e# u& C# J注意:对于传统 I2C 支持,请参阅 pyb.I2C。
, \( b9 V3 M _% ` n2 qI2S总线参见 machine.I2S. - from machine import I2S, Pin
' t8 v Q: h1 L6 o) n# L' q' q% F - * n( k6 R( x2 c+ W* d, k
- 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
/ Z* h L) p; O7 |% P - i2s.write(buf) # write buffer of audio samples to I2S device# N* ?% g( d4 [5 C! u5 w4 m
- ' `2 `3 L T9 x5 f/ W+ r% }
- 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 object1 l% E% A, R: [& J. b1 c
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
5 n* X3 F- ]. J( wI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
" ~- Q7 \" [7 ?& F4 ZCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN% Z8 D5 o2 |6 T2 g% z
7 f) P/ x9 R4 I: `$ m- can = CAN(1, CAN.LOOPBACK)
) L- s# d* L8 Y7 e. M) V - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126)) t7 t, u& e# t+ f
- can.send('message!', 123) # send a message with id 1231 B1 H* D/ q% ?: r
- can.recv(0) # receive message on FIFO 0
复制代码
$ x8 M& B2 F* L2 a! D+ B% @/ t" [* r5 K0 u
内部加速度计参见pyb.Accel. - from pyb import Accel3 m% _% X* B( [8 \- h
- ( V2 p/ q$ Y7 S! K' J; K, \
- accel = Accel()
+ _; T; o- v8 u" L+ ^ - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 0 Y; T6 X. N$ f
% U8 V0 X$ @ l1 D$ E |