pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: ( U- Z* Q5 x, g% z2 r9 ]5 d* E& C7 A, z
通用板控制见 pyb. - import pyb' f9 O, w1 Z3 v" m1 F+ E
- Q1 \% p7 c: R, i" C: \5 F7 H
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)+ x* `8 O1 `, E k8 L
- pyb.wfi() # pause CPU, waiting for interrupt" ^ }5 q0 t, l$ k
- pyb.freq() # get CPU and bus frequencies6 |4 a. K4 \1 R2 c
- pyb.freq(60000000) # set CPU freq to 60MHz
' t$ T0 W7 v) E3 P7 T$ k5 j% T$ Q - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
% X: J# } S+ J% h' X
% `& Y# i6 `- @5 V; j2 k延迟和计时使用 time模块: - import time
. c3 h3 ^3 Z4 Z. w - 4 k- {4 o2 [1 P, w
- time.sleep(1) # sleep for 1 second7 z( B0 E8 V! H
- time.sleep_ms(500) # sleep for 500 milliseconds
3 i; x$ q0 N8 w2 A1 A - time.sleep_us(10) # sleep for 10 microseconds
& A" r$ K9 U+ A' D9 n* \& \ - start = time.ticks_ms() # get value of millisecond counter
" ~+ J: S6 V7 k& E, G O) \0 m2 n - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
; j# Q; ~7 i8 R5 \$ S T2 N+ m' Z8 j6 h; W% G) X# K. B$ f
内部 LED见 pyb.LED. - from pyb import LED+ \$ N) i# f( Q& C
7 ?0 H* }# q% {, {) R+ @7 I- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
' N2 N* J' Q3 T$ x7 x; r4 E2 B2 c - led.toggle()
; N9 [, O' m, u R6 T1 s - led.on()
6 a0 P! s2 _. T2 Q4 a - led.off()
+ o9 J4 F$ X' O/ M. b
1 L! [: I. A: R( b- # LEDs 3 and 4 support PWM intensity (0-255)
2 A) A- p: `/ \ - LED(4).intensity() # get intensity8 G$ Z1 l9 }$ {+ G) |/ ?/ b, \& R
- LED(4).intensity(128) # set intensity to half
复制代码 ; K2 M8 a& w! v
' v/ N+ Z2 q% c' P* q
内部开关请参阅 pyb.Switch. - from pyb import Switch
1 m0 t8 s! U8 p) Z7 X
# K9 b, s) I$ K1 n- v( e; p- sw = Switch()
2 _& ?# j7 o) z E1 A- ?# }$ G - sw.value() # returns True or False
7 @. S* ~9 Z2 {& p! K - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
+ I' w% F/ _2 {% ~ e5 a" E3 l$ w* G( M& U# G: [+ w; \; z" ] k
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
8 W' \! O2 F8 s0 Q! k5 I
% Q- k0 I6 s$ t$ T- p_out = Pin('X1', Pin.OUT_PP)
" C1 J7 g7 b! p/ O4 P% u6 n - p_out.high()' i b/ c& U# b) @3 w$ {
- p_out.low()
: p; k2 Z9 a+ h) J( c: N+ q2 e
0 Q1 N, s: Q# w0 |0 i4 b! E- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
% v) ~' `3 D) V4 `, s - p_in.value() # get value, 0 or 1
复制代码 3 B P( x: l( X. d1 ?+ f6 Q
& E5 ~2 a! Z% N. }0 j. F, K8 [, j4 C
伺服控制请参阅pyb.Servo. - from pyb import Servo
8 T4 x" e6 H& b( s$ R" Y" k - 1 y# ]; S& F2 C, R1 C) ?$ Q
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)3 j+ Y- m2 Y: k8 f
- s1.angle(45) # move to 45 degrees" `! p/ s: S; j7 b% o. d t7 O4 ^; t
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms2 K( t0 v0 b' r& E' @" l6 E8 r$ H+ t; C
- s1.speed(50) # for continuous rotation servos
复制代码
4 L) s! C x, g! ?7 Q0 q# ?. D0 R5 I* q% }- d+ b# r
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt' T. Q2 e2 g8 ?/ J
4 K+ s$ C0 f0 g6 G- callback = lambda e: print("intr")% k0 E: d4 u1 a
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
; P4 s' ?- a. w o( n1 ~/ U }9 s6 K1 q
计时器请参阅pyb.Timer. - from pyb import Timer' \! L }& I7 C6 U( W. `0 u$ V
- - N3 x7 \2 R/ y1 e
- tim = Timer(1, freq=1000)+ f1 D2 K+ O, \( l
- tim.counter() # get counter value; M6 @/ o/ v0 L. h
- tim.freq(0.5) # 0.5 Hz( ~/ J9 ?4 F* L1 p* r( i
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
0 W, ?) \; l2 m+ eRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
4 Q b6 P# e/ O& C+ M, k! V - 4 p8 P% [3 h0 Z y4 P+ f; A* g/ z
- rtc = RTC()
* [2 O% s1 P5 L - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
- {- u3 p$ a* m, | w7 z! k, { - rtc.datetime() # get date and time
复制代码
9 s4 v5 Z# g2 z; vPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
) u7 d3 B5 \- {; a- u% c; B$ q( L$ i
( d, m B% w3 n( w5 _1 K4 Q! n7 D- p = Pin('X1') # X1 has TIM2, CH1& J( R0 b; Z# D* p9 y# C$ P
- tim = Timer(2, freq=1000)' d1 @" e; x2 Q/ {
- ch = tim.channel(1, Timer.PWM, pin=p)
7 E+ w# U0 Q! o; d& f% S, Z - ch.pulse_width_percent(50)
复制代码 5 y+ b# x- |8 n/ p. g0 Q; u
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC8 J: d& r, h( k7 U9 E
2 p; X7 F E2 r! s- adc = ADC(Pin('X19'))
- F- F) z; j3 |$ a - adc.read() # read value, 0-4095
复制代码
! ]! n1 L; ^: s$ q
. |, t/ ~7 c6 a/ g. xDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC A9 b5 w( e9 }0 ^/ R3 `; b
- ' T+ T. T J# C! a" X% L
- dac = DAC(Pin('X5'))' b+ _0 c5 Y& M: R2 V7 o
- dac.write(120) # output between 0 and 255
复制代码
6 x0 e4 _8 ] K( {- C1 v+ J# B7 J
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
9 t9 @+ r d( R8 ~, a
" r! m. e) }8 v. s5 A. w- uart = UART(1, 9600)
' V3 @- }+ Y9 c* B3 m - uart.write('hello')
( S$ J, z( a# K - uart.read(5) # read up to 5 bytes
复制代码 7 U( J# B. N# V
3 c! @9 i! l2 n! nSPI总线请参阅 pyb.SPI. - from pyb import SPI
9 A3 j& ], ^) _! V: O) l7 v - 8 Y8 G; I$ B0 C- B7 H+ O
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
9 h# G' [! P) g - spi.send('hello')
f# _" x" P2 N4 l& N5 n - spi.recv(5) # receive 5 bytes on the bus
8 V+ w( ?0 r- R2 s - spi.send_recv('hello') # send and receive 5 bytes
复制代码
# q5 {7 r& z/ K
+ N" m9 ~4 ~- v0 y4 \I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
7 ~0 t+ A; |4 z- j% K
7 t* h1 f/ q+ ~" Z8 q- Q- i2c = I2C('X', freq=400000) # create hardware I2c object* F2 k e1 G4 q, G# N
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
- K2 M4 A6 r- Z$ B
5 Q0 R- @6 n p4 K/ M$ b4 C" C- i2c.scan() # returns list of slave addresses
' O d3 B! y, S0 y0 p- b0 U - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
" X- u+ |6 z2 L- b, Z - i2c.readfrom(0x42, 5) # read 5 bytes from slave2 m% g9 ?6 \( E% e0 z
8 U/ m+ ]( p, Y/ r0 t- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10. M4 c/ }3 a% A V9 d- Q- ]) t2 ]7 z
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 9 Q% k% H2 { ]/ _: J% Q# W
: S$ T' ^; g2 y# q( C* g注意:对于传统 I2C 支持,请参阅 pyb.I2C。
% Q9 H8 w% V) {: ?% a, NI2S总线参见 machine.I2S. - from machine import I2S, Pin
; m% E \# E) I - | X1 v7 v( H* B* f0 v
- 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 O7 r2 E7 R) v/ C
- i2s.write(buf) # write buffer of audio samples to I2S device& Y% ?) u( O8 x1 m, B; Z7 \) W) P
" k0 B$ ^6 }5 O- 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
5 ~3 h5 D I0 q- E( i - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
% u4 I, W7 [4 QI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
7 A- t3 N$ x! S5 }CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN- b& V% ?3 Z$ n# L5 W* }' v
+ W0 @% C- ?! Z5 Y" @- can = CAN(1, CAN.LOOPBACK)
" I# m# A/ J% |- [ - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))7 g5 p3 m& V8 D/ P/ Z
- can.send('message!', 123) # send a message with id 123/ G: M* c( J/ G. t- c8 {& b7 r
- can.recv(0) # receive message on FIFO 0
复制代码 2 S5 }) V; r8 }6 O+ g2 T
$ ]3 S: \; X: F8 B1 M2 q
内部加速度计参见pyb.Accel. - from pyb import Accel% p7 W. ~ r; Q, E9 m& \! G& |
" z1 K% j( [; c8 {- accel = Accel()
) b, r" K/ s% }, H: o- m9 _ - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 0 V1 V. ^+ q+ M, V: {. D% @; J" i
6 ?5 G4 u' L- S! n
|