pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
, k( K8 B/ G! a* d通用板控制见 pyb. - import pyb
3 d, l. J) H; e4 U! |2 m - 3 q7 L) J* c+ H$ @
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)& Z& J& [* S' C; Z, d( Z! |7 f$ C: y
- pyb.wfi() # pause CPU, waiting for interrupt
, H4 o7 k! i+ f' a4 l - pyb.freq() # get CPU and bus frequencies. {5 h2 N0 g+ H2 v
- pyb.freq(60000000) # set CPU freq to 60MHz
$ Q0 l2 `8 N) u - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
4 f: |6 b K" s5 v7 { p0 w2 A0 ~5 _* N6 w' ?* e
延迟和计时使用 time模块: - import time% C. z$ P; C$ A
- u; B0 e4 v( d% Y: |2 ]* M3 r- time.sleep(1) # sleep for 1 second" j1 s& r( m& L. x* X/ X
- time.sleep_ms(500) # sleep for 500 milliseconds1 L; \* S k7 i4 e
- time.sleep_us(10) # sleep for 10 microseconds
& n/ Z* e" n N# z1 P' e - start = time.ticks_ms() # get value of millisecond counter
5 _! A3 D5 `- i2 i" C - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 ' ~ b5 L% m/ K+ p7 q/ v
5 w0 i f# y/ N$ ?% H6 O内部 LED见 pyb.LED. - from pyb import LED$ }+ T- ~! x3 p8 r
- + n: I' v, @# r- l4 l Z0 y" g
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
" N/ C$ e6 r7 R: D% M6 T& w - led.toggle()) t* ~! _: X3 O- j4 O* f0 x0 K
- led.on()7 R# ~: ~7 _' ]6 H, Z
- led.off()! a$ Z8 o0 }9 v# Q
9 I& i" t5 N$ d5 m. j0 b4 w! h- # LEDs 3 and 4 support PWM intensity (0-255)' m8 @5 |( Z6 \: e9 u
- LED(4).intensity() # get intensity, V+ R6 F; f. R
- LED(4).intensity(128) # set intensity to half
复制代码
5 H$ y/ b8 B4 f. b1 G% Z( w
) x1 _/ ?" Q3 B) X3 z: @内部开关请参阅 pyb.Switch. - from pyb import Switch
0 J& H2 c8 ^& O$ s
- L+ n% F5 W% b) N6 p; ^% W- sw = Switch()
* s9 f- ?$ {& f, c! I3 r - sw.value() # returns True or False2 k; H0 A5 a; y
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
8 [; x! p8 F0 w$ G
2 P. w5 d8 M; u( a引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin$ j- X Y/ x# I4 v9 \& R# K
- ) [& r$ p& }: g" @
- p_out = Pin('X1', Pin.OUT_PP)1 p) C4 K$ [1 M% a5 ^ \6 T
- p_out.high()3 k3 `# h/ W4 [' [/ Y& Z
- p_out.low()" H9 l; @+ Z/ A! D
- 6 d, z0 I _6 S. H8 t- d1 K7 o, T( Z
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
) {# G2 h+ U' V4 ` Z A4 f - p_in.value() # get value, 0 or 1
复制代码
0 H- N3 M4 I/ u/ _
* O- A- ^% m) A" D9 y2 @, Q9 }伺服控制请参阅pyb.Servo. - from pyb import Servo& \2 @ U# P: J% t: j1 o
- - b0 L: M! Y, A- g
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
) F \# ?1 ^1 \; l1 `$ x: J - s1.angle(45) # move to 45 degrees
+ a9 d1 a" U! d" o [ j - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
, |' T1 P0 i: U( q1 O6 r- R - s1.speed(50) # for continuous rotation servos
复制代码 + q; d2 n3 G( E" R( [
) D, [ e, R2 r: o2 g外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
( P2 ^* A* j5 v. J$ f6 \+ G
& e% D% D* L. P% J' K# r+ E- callback = lambda e: print("intr")
( F/ v/ w; B8 d9 ~. r# _ - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 a& I7 n3 A, T) H8 B4 n+ C
) t% } g6 I6 i. g$ L G4 b
计时器请参阅pyb.Timer. - from pyb import Timer2 Y1 N! ~1 w6 e) |( y
, `& R; Q: t8 k6 l- tim = Timer(1, freq=1000)
3 Q; |- V: X8 e0 y - tim.counter() # get counter value
4 N( X+ l8 g4 e. L& p - tim.freq(0.5) # 0.5 Hz
' B/ O& c2 W. d0 \7 L; u - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 0 n0 u, v4 |# y- h/ F+ K
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
" z7 r* M" O( W- Y
) F9 T+ Y) f3 Y: M( f, Z. L- rtc = RTC()
- h. T$ l! W( v7 Q* s - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time/ m2 t: o6 H& r5 D; c9 z
- rtc.datetime() # get date and time
复制代码 ; ]3 e. R; g1 M( o: Y) t
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer6 M* l# A9 }; ?
- ! J$ O6 f M9 M
- p = Pin('X1') # X1 has TIM2, CH14 r" P" U y V, R+ A
- tim = Timer(2, freq=1000)
4 Q' ] D( E+ L+ d3 B6 J/ c. ], t5 [2 R - ch = tim.channel(1, Timer.PWM, pin=p)
$ Q* _' c: V% W; r- K; v2 S - ch.pulse_width_percent(50)
复制代码
- X# Q ?4 q' S- z8 m- c. hADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
( \: `% P) o7 }; B/ p' I' x% l9 V - & E7 z8 v: C' l7 R! @) w
- adc = ADC(Pin('X19'))
r# W* S& F6 o - adc.read() # read value, 0-4095
复制代码 8 b6 W; i+ [6 S3 p% }0 h6 m5 U. e
, E( k! C. l$ O5 u3 C; A! eDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC; e# l9 I2 A& L6 @
- 5 M5 v5 a% W; }) ]) V8 t( X/ w
- dac = DAC(Pin('X5'))0 S% V' z6 _# H6 O& t. d5 |/ K) _
- dac.write(120) # output between 0 and 255
复制代码
" F% z2 `. X, t. P; ^2 Y; h+ @1 c2 w; b! T/ y z5 G' B0 d
UART(串行总线)请参阅 pyb.UART. - from pyb import UART+ g) x/ L2 Z7 U" u; t* P1 {2 f
$ q* d0 K+ r7 S- g3 t G3 H$ ^- uart = UART(1, 9600)! T: ]3 C3 x6 n
- uart.write('hello')5 M) s0 z x" ^0 g3 V* @9 b
- uart.read(5) # read up to 5 bytes
复制代码 $ h7 L5 d7 ^& U" u: w
$ M! M2 p/ E7 [8 V6 b
SPI总线请参阅 pyb.SPI. - from pyb import SPI
! O* m5 I$ V8 H) _8 q9 P
. l8 l) J8 `/ r- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
: r: X J2 m" m1 m - spi.send('hello')
: l! q3 @) F/ h) S. q - spi.recv(5) # receive 5 bytes on the bus
( ^$ C1 U: n/ m- u7 k- S* s+ V - spi.send_recv('hello') # send and receive 5 bytes
复制代码
& I* S. S2 g3 Y/ _! \/ ^
' d& H! U# ^) }- }0 m: T7 ZI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C7 p( y1 \ n8 ~6 U1 y9 F
- 0 M( E& X( G8 V; L3 D+ N5 }$ v& n
- i2c = I2C('X', freq=400000) # create hardware I2c object
- f+ T4 q" E) a L9 P - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
$ ]/ y. R5 {4 W
3 ?" I9 g9 w# P4 K) n( I! d- i2c.scan() # returns list of slave addresses
" D9 m- B" z9 X) ^5 k - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
* I: W0 X+ J8 M0 L/ w. C - i2c.readfrom(0x42, 5) # read 5 bytes from slave* p" y8 s, V, \3 S' Q
h7 n" J7 v) @9 }0 m+ J- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10/ b: }4 r& {0 T
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 6 m7 Y" u& M; X# B6 Z- P& z7 g0 U+ r) e" \
( B5 G1 N- X# B7 T注意:对于传统 I2C 支持,请参阅 pyb.I2C。
6 Z, d% H2 @/ X4 hI2S总线参见 machine.I2S. - from machine import I2S, Pin
3 @+ q8 V( v; o- x
7 s) R2 s4 D; m- 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
' Y7 l& c r2 q0 d9 O - i2s.write(buf) # write buffer of audio samples to I2S device
) a# P+ u$ O0 a# E& ? - % I' n7 o& {' J7 H! c. |
- 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" o1 A; L) Y: B
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
' `5 y$ U5 |7 e. ^8 m4 \I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
$ n- t. f2 E4 Q/ sCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
. Q( T+ Y8 O3 _8 D, ^ - 7 e9 a' Z; `! L0 k( u1 p. d
- can = CAN(1, CAN.LOOPBACK)
3 c9 {* C) y3 p7 c - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
0 i, |6 r9 b) Q - can.send('message!', 123) # send a message with id 123
0 x& H# ?+ z: p# J+ u( Y - can.recv(0) # receive message on FIFO 0
复制代码 ! g5 u8 N( `, h1 Z- [
% l3 W6 l# I8 E4 B& j8 Q
内部加速度计参见pyb.Accel. - from pyb import Accel" J+ o( @* M1 i% c G9 b* x
- 7 i q- ~7 N! S5 U1 g
- accel = Accel()( F, Z% L' X3 F, N- T# q
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 + ^1 k; r _! z4 d! ~
9 k) P- \/ r+ K$ ]/ G; { |