pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
7 f1 d" }! v1 F/ k; A+ N通用板控制见 pyb. - import pyb
. @( m4 p( c6 e2 F
# i1 b" p* U' N4 s/ l- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)$ X# f$ Y$ Z: Z$ `+ D
- pyb.wfi() # pause CPU, waiting for interrupt
6 Q: U# _) Z/ S) j5 S) a4 i2 X& ` - pyb.freq() # get CPU and bus frequencies3 m, O7 ^# Y y6 z% W: r/ O
- pyb.freq(60000000) # set CPU freq to 60MHz
7 v+ x" k- Q( v - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 , E) M4 T' ^7 O6 m" ]
7 U5 d( [2 B& Q0 O& b+ U& W$ O; G' o, O延迟和计时使用 time模块: - import time
. b0 s0 j* t/ k
+ G" ~3 F9 t, E- y1 M4 d2 I- time.sleep(1) # sleep for 1 second1 U' U1 y% u# q
- time.sleep_ms(500) # sleep for 500 milliseconds. Z7 o; l6 O: v
- time.sleep_us(10) # sleep for 10 microseconds1 u) Q- V/ f ?+ L% C) M1 C
- start = time.ticks_ms() # get value of millisecond counter
' u; E5 V$ K& q. Q' c6 { - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
8 ]! g/ _1 `3 v: U: Z1 X( Q6 h7 t5 ]8 c5 o
内部 LED见 pyb.LED. - from pyb import LED
( r! m' d2 i9 @/ k. ~
2 c0 O6 ~5 D: z- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue% w1 u, ~2 ^0 i- O
- led.toggle()
2 P1 V8 o( _; s' e) `9 _6 f - led.on()9 I. B m0 O8 c% G0 T& E
- led.off(). }& }5 ^; [! o" j, `
% L: j( o7 a7 J/ g/ }- # LEDs 3 and 4 support PWM intensity (0-255)' [4 ]: ^+ c: s; ]& n
- LED(4).intensity() # get intensity
y# h9 u. k8 j' J p1 C2 c - LED(4).intensity(128) # set intensity to half
复制代码
, }2 P$ R2 B. R" i
$ J2 } a0 D N3 J! @内部开关请参阅 pyb.Switch. - from pyb import Switch7 ?6 H) [6 j: d" d3 }
- - g: O7 w1 [1 C8 ^( C5 @
- sw = Switch()8 ^* W* C3 O0 k1 n! y
- sw.value() # returns True or False
u/ x/ t# X3 ?9 Y$ r# q - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
. ~8 |( ?4 }, H; G t5 M* E- [1 `1 J$ ?6 ?3 o% w. v
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
: k; \: R5 Z' ]% s% d* z/ b - ' f8 W0 n' ?$ E/ M! Y
- p_out = Pin('X1', Pin.OUT_PP)$ D: D! X/ }' R5 n8 X9 V
- p_out.high()
8 a/ m7 d! o& U6 A4 ^ - p_out.low(), c* @# L8 z: a
- 2 g* `# ^. d/ b; L0 V" f# w1 @
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
7 `. t8 t& \1 w: y, F - p_in.value() # get value, 0 or 1
复制代码
/ s; K9 K% B# F$ O
) U; C9 h' {; H5 X( j伺服控制请参阅pyb.Servo. - from pyb import Servo
2 G" y' y- I2 W6 U+ j6 W. V
; g6 T. @7 `0 S7 C) G- s1 = Servo(1) # servo on position 1 (X1, VIN, GND): p, {* y! Q4 _, h/ r
- s1.angle(45) # move to 45 degrees
! \9 b1 k8 `% {# \' a0 X& |3 X1 b - s1.angle(-60, 1500) # move to -60 degrees in 1500ms9 u& @& M* Y% a* H
- s1.speed(50) # for continuous rotation servos
复制代码
% u! d7 g# a, O: `0 G' h: a2 u3 k
7 f c7 z: ~+ {) q E9 g外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt9 f( U, x+ T; O& i# i( }! x
- % F2 R: m6 r' X" g# x+ ^ |$ }
- callback = lambda e: print("intr")8 E. Y# {- I# _* k
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
~: ?+ _) y L$ N3 I) A& u: Q/ z# g+ C, r% S8 q a
计时器请参阅pyb.Timer. - from pyb import Timer6 U; W1 O8 t6 j6 G
- 1 E8 ~1 e9 N" ~" t% y8 g/ j6 Y
- tim = Timer(1, freq=1000)
9 l9 R$ |5 I; g6 ~- } - tim.counter() # get counter value* \1 v' r$ }3 `1 x0 _( [& R7 G
- tim.freq(0.5) # 0.5 Hz
* Q; H& c2 ~5 a, g1 Z - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
5 Z$ v! [0 @# g* U o. oRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
$ \) q: q" I5 e4 }1 x
/ k+ ~) `% h1 Y: H2 ]- rtc = RTC(); x# y a6 }6 ~" n
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time4 x9 \2 Z0 J2 i" t
- rtc.datetime() # get date and time
复制代码
& U) d, y. ^0 W9 R8 w# N V; t5 zPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
" h1 k$ G# U9 b
* Z9 b! e6 r& [: f+ c9 R G- p = Pin('X1') # X1 has TIM2, CH1
. e: h" }$ x( J/ |: v u& a0 I - tim = Timer(2, freq=1000)/ y; ]" h0 b: Q$ N. N6 E' t
- ch = tim.channel(1, Timer.PWM, pin=p)
7 U* p3 P, \) v: X# Q - ch.pulse_width_percent(50)
复制代码
@+ e) q/ Q9 M7 jADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
; F8 B! k9 N( ?$ U8 N3 X. S7 B
. ]* H! K. M0 t9 p% }% K2 r- adc = ADC(Pin('X19'))7 M7 i, E; z' A/ \! q* i
- adc.read() # read value, 0-4095
复制代码
2 `! i) G- b5 N ?* v2 B
: y4 b* p( l1 h2 M7 T' bDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC3 n8 T7 C% { J
2 z# v, V8 T, I4 p! {% k- dac = DAC(Pin('X5'))7 u$ f) b9 i9 L# d* A) H! ~
- dac.write(120) # output between 0 and 255
复制代码
! u0 e& e2 T( g3 y, v, [8 r" F) X: \
; h* H9 C, R* `1 M1 w* n& iUART(串行总线)请参阅 pyb.UART. - from pyb import UART9 |" I, z6 b9 K& ^: B4 W
, @- n0 i/ F4 f. [$ V2 I1 _, @- G4 Z- uart = UART(1, 9600)8 P8 n/ M I: @* K1 k' r
- uart.write('hello'). W, Z. c% z& r) a: w
- uart.read(5) # read up to 5 bytes
复制代码 ' r. V& i/ H6 `1 N, {6 m
0 k4 R3 f$ p) T4 L- H+ mSPI总线请参阅 pyb.SPI. - from pyb import SPI: c& a! z5 Z& F% r' X& [+ X
- + P: S4 b3 P- B7 H
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
D5 Q1 W. A% G$ M* u* \ - spi.send('hello')8 C1 ^% N4 a( y# t4 l
- spi.recv(5) # receive 5 bytes on the bus4 e% X, n" }5 t9 P9 E D: ]( K
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 2 e2 q( p* p6 z2 _& z5 K8 a4 p' O
; ~/ h! l. J3 g3 N
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
; P+ m- j6 B. \8 E
9 c7 E/ Y O4 j9 m) \- i2c = I2C('X', freq=400000) # create hardware I2c object' C0 U8 R1 q+ F+ p5 t8 W8 {( {, v
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object/ P, Q2 x8 G5 ^2 n$ x
- : R' x: _9 a1 c7 R2 S
- i2c.scan() # returns list of slave addresses* w0 r$ c9 _ }6 J1 d
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
! L) l* B( g9 x) E- A8 M) e - i2c.readfrom(0x42, 5) # read 5 bytes from slave
8 l) p, h7 l8 q
& Q5 z% X3 z; n0 R0 G' \9 V% Y: v- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
# V2 k' ]2 b }) B. e8 t - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
8 W/ d; {# y/ e, ^7 h# F+ `, W
) f! g( } E7 K; M' ]( H注意:对于传统 I2C 支持,请参阅 pyb.I2C。
( n3 S+ R n( K; a) c' G+ O4 Z. |I2S总线参见 machine.I2S. - from machine import I2S, Pin
* r) y/ o1 c* Y/ u3 p3 s# d+ e - + y# X. L! x4 l/ B: o/ U" S
- 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
Q, s+ g# _7 J5 ^2 D# B - i2s.write(buf) # write buffer of audio samples to I2S device
: q* E% d3 X$ X$ i! _: Q7 L
# `* k; P$ F1 ]9 k3 k- 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 O& c! j; O- d- L/ X9 g( z6 F
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
) p# q, [) W/ T& z; z# r1 VI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 + }) t, L( J4 c% H. Z o3 E
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN2 M- U$ ?0 N' v. s/ H0 ?
- ! @; F/ E7 u) P% E& V) g
- can = CAN(1, CAN.LOOPBACK)
: f t- ]+ @( v& }! g& p% B) O ` - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))/ R$ W9 ?6 b' w4 P8 C
- can.send('message!', 123) # send a message with id 123" |0 w1 [/ Y. B5 W
- can.recv(0) # receive message on FIFO 0
复制代码 0 R( Y9 o8 ` ] T, Z3 k' g
3 v# [4 T! `, j# K/ e( X3 T2 G+ u# U
内部加速度计参见pyb.Accel. - from pyb import Accel
- C7 r v4 _8 j8 s8 u6 ]4 p9 L9 u
, A- C) Y3 v/ r6 Q R0 h- accel = Accel(), n' v `3 O6 i8 {0 W
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 ; d( X' `* R1 g1 p! A' s! E# N
4 J$ i- d! w# N m |