pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: 4 m$ N4 E. O \ L: u* t/ K
通用板控制见 pyb. - import pyb
) P* _1 v$ C3 Q - 0 w) n$ P! w0 t2 X7 a1 w
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1), t$ |4 T r9 Q/ j, } l9 c8 U1 z
- pyb.wfi() # pause CPU, waiting for interrupt7 G, C, ~" v% F% U! S1 o3 k# m5 K
- pyb.freq() # get CPU and bus frequencies$ b0 N5 I+ F; J ^- K* V2 k
- pyb.freq(60000000) # set CPU freq to 60MHz( w( v( j) `; d
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
2 D( j2 c0 I0 ^- |- J' ? d7 v u4 g, B: Z
延迟和计时使用 time模块: - import time
3 _) n( L- b9 Z8 b$ { `
1 m( m' i6 J6 ~) t% I- time.sleep(1) # sleep for 1 second5 i0 q, t& x9 j0 X
- time.sleep_ms(500) # sleep for 500 milliseconds* e" E) E/ ?7 D) C; ?7 p# R" \
- time.sleep_us(10) # sleep for 10 microseconds- s& d8 q$ b" c
- start = time.ticks_ms() # get value of millisecond counter. u: ]' Q* T; Y6 o% L% `! w' u
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 1 o. s: L, D& L+ y
" b/ H1 X( s+ w, ~内部 LED见 pyb.LED. - from pyb import LED
0 ]! e6 ^/ ~2 D" |6 @: ? - ! U' J6 X H" u1 v+ Z
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue6 d7 L+ M2 r3 j7 ]
- led.toggle()
# M& r: A6 a/ X/ { - led.on()1 J3 N$ `- q2 g6 e
- led.off()
) m" D2 [6 ]+ o- h5 k
& ~: P* {3 W$ ~- # LEDs 3 and 4 support PWM intensity (0-255)- `% Y y5 o; |6 n% }
- LED(4).intensity() # get intensity
% ], t F, K5 T. M/ Y - LED(4).intensity(128) # set intensity to half
复制代码
8 Y+ e0 e2 i0 X, _
9 P; v1 T6 Q; E0 S O内部开关请参阅 pyb.Switch. - from pyb import Switch
$ `# L& s. }! u1 W9 O - 2 d, h. a$ C2 q! B
- sw = Switch()1 v! i; P( _& b- E
- sw.value() # returns True or False5 a2 h+ P6 A9 {! ^8 [; m
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 ( x* [9 e, _4 l5 D8 b
* b1 H1 r/ Z. i* |9 c, m
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
6 v Y+ @6 X) q% R/ l0 Z. w
7 O3 i/ A# R3 k, b5 l2 k6 n+ R- p_out = Pin('X1', Pin.OUT_PP)
5 i" n! z# l% N, x' P - p_out.high()! n3 s0 o+ T: ^
- p_out.low()
- E; ?: `4 _* c! n
+ r6 G' f: ]; C. y, q; b5 Z- p_in = Pin('X2', Pin.IN, Pin.PULL_UP): K, k! x2 t( i. R3 D6 G2 ^8 T0 G" g
- p_in.value() # get value, 0 or 1
复制代码
7 W& }& m3 J4 I2 T8 U7 X, S% m) P$ }2 s2 E4 J
伺服控制请参阅pyb.Servo. - from pyb import Servo
+ z5 W3 j, {( |* W6 U - 9 c- Q, i1 c7 B4 ]- }, e
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
9 a, a2 T: ~& s - s1.angle(45) # move to 45 degrees; K9 m/ N; ^- f7 E L b' j, g
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
; U& P+ Y& r# m; X- Y/ ] - s1.speed(50) # for continuous rotation servos
复制代码
, d6 o$ k- v2 u' F3 I
2 P7 M" |( j/ w/ a+ y7 D5 u外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt2 _1 D9 Z0 x- G6 p2 L
4 t. _7 j g% s( f$ ^" v- callback = lambda e: print("intr"), ~- g4 E& Q1 T4 t) w6 e
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 - I: X/ d1 J/ s; D
$ U/ j6 f( {# ^ j; M) V
计时器请参阅pyb.Timer. - from pyb import Timer
* @7 M& E* I j M- b) c7 ]
9 l1 y7 C6 n% U% p- tim = Timer(1, freq=1000)1 s' A. b5 h% ~; {$ @
- tim.counter() # get counter value
0 S* k& r+ J% ] - tim.freq(0.5) # 0.5 Hz& O# _( F9 Q: t7 O- a
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 ' N ]. K1 }0 ?+ s \
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC$ D' ^3 A* \ b. l2 _ G
- 8 F* G. E- n" v6 r* r( J6 z
- rtc = RTC()
. b+ E, q7 ?" f2 h3 h& T - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
! e$ f# |7 x4 C. p+ }) X% ? - rtc.datetime() # get date and time
复制代码
- z4 W& F! q1 d; o0 _PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer& m' Q5 G$ H1 m0 X
+ r0 P% j1 U/ k" F- p = Pin('X1') # X1 has TIM2, CH1( }1 i6 u, s4 h- R: d; i
- tim = Timer(2, freq=1000)
) V9 m( k9 n$ R1 V - ch = tim.channel(1, Timer.PWM, pin=p)2 I$ z# _9 n4 E) D! y
- ch.pulse_width_percent(50)
复制代码
8 N6 [5 z* \$ W; g6 A( `- e% m) CADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC; C( X2 Z: K5 ~
( j4 L4 X( p' b, P- H& f- adc = ADC(Pin('X19'))
6 H$ k+ F7 Y& {5 C8 ]( H; W4 O( H. S - adc.read() # read value, 0-4095
复制代码 ' g( T3 [5 @$ T/ T1 o7 B
! ]5 }+ l' P& uDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC& @9 R, y6 P, {( m
; `+ r6 { U0 [ `$ ?6 T- dac = DAC(Pin('X5'))
& j0 L0 |9 Z t - dac.write(120) # output between 0 and 255
复制代码
, j, `1 F0 O0 K2 J; g* {# S" G# h$ C, c
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
% C5 b; l2 P0 i% l - 4 q$ |7 X+ x. E4 F. h6 g' S
- uart = UART(1, 9600)
) r' q) t# v# v! V2 R V - uart.write('hello')
! m3 P2 u8 F1 f - uart.read(5) # read up to 5 bytes
复制代码 . p3 F0 u( v f9 `; {( P
) E& A* z2 q: l& r' c' M3 Z) z
SPI总线请参阅 pyb.SPI. - from pyb import SPI$ M! J, c( a& h+ J" E2 l4 p/ X
- + c8 b7 _" Y5 s, R- D7 F
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0). d- d6 D8 y+ z8 o7 R$ ?
- spi.send('hello')
) E k5 Y* J0 e% s. N4 g; p - spi.recv(5) # receive 5 bytes on the bus# O9 i, F- _( q: a+ u: z/ J/ G
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 5 h+ z0 C. [& w
- D: I4 D) z; D- i/ oI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C) ^5 k- C4 g9 F; n7 X3 t( e5 k* E
$ E0 d" ~' G2 L5 J2 A8 k7 B5 Y- i2c = I2C('X', freq=400000) # create hardware I2c object
% W o% s1 N1 \2 h: H% q - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object( |! m- S. R8 q/ m! p( d% N
; @, ~9 D! l# e- \8 u, Y8 G- i2c.scan() # returns list of slave addresses+ p' { j$ Z# q$ i
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
# j, _8 |/ Y, d3 X0 v6 ^0 Q; C - i2c.readfrom(0x42, 5) # read 5 bytes from slave) i- T" e2 Z# S' i" B
$ Q+ {6 y% {6 }1 n* P, E- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
2 W* K" F* V9 G0 J' |6 l+ ?9 S - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
3 o' ~# }3 y D+ D6 p% [/ |: @( _3 e9 ^2 X
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
1 d4 B u: M2 Z$ q ?I2S总线参见 machine.I2S. - from machine import I2S, Pin
2 K) c" D( g6 i6 `6 H# l
& ?3 x# x6 ]: e; O" n$ w- 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 object0 V% o# r# f, J' ~" @" L
- i2s.write(buf) # write buffer of audio samples to I2S device. m/ k# f B% _
6 D6 A# u% Z9 e* r; e- 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
: o9 i- A/ L/ j% V - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 ) c6 O% ~! `! \
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 , q+ J+ }- t, g- M$ x! z
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN$ f! f% @& b6 L$ u I
/ S- O( u: L& E' l+ E0 S: R) L- can = CAN(1, CAN.LOOPBACK)
0 E' z1 N6 z2 v" p' I - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
) H5 L# ]! G9 R$ q$ k5 x3 J9 p, l - can.send('message!', 123) # send a message with id 1237 L& y- H2 b; j7 R, [
- can.recv(0) # receive message on FIFO 0
复制代码 ! W% p5 }; p: s+ s* G1 B
3 w4 |# @2 S3 z* g# @. r
内部加速度计参见pyb.Accel. - from pyb import Accel* k- s: {! u* u1 E
, K z& H$ Z x- accel = Accel()
5 m+ M" r+ S# S* K3 ?. D# p - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 ; x4 k" z% ?, A* w) ?
$ y1 f' t- F! ]# {" Y+ g$ g' }# q
|