pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: 8 q: a( v" J) b6 [# s
通用板控制见 pyb. - import pyb7 M; ^( j5 d8 U( }
6 Z4 s. {: w& J2 S+ g- ]1 P- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
1 E& F- C7 z+ E) I' d# x4 t - pyb.wfi() # pause CPU, waiting for interrupt7 @8 C+ f: ]: Y+ b" e, T4 [
- pyb.freq() # get CPU and bus frequencies; E, C! o' N) b Z; h" q2 ]3 @% P- j% x
- pyb.freq(60000000) # set CPU freq to 60MHz
/ b& i% {. g" F( t( B3 p8 m) s8 r - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 & r& O, }5 [0 Z& P7 f4 t/ y9 ?
7 M+ R% ?0 a' D* o/ S6 L延迟和计时使用 time模块: - import time9 N& `( m- `+ j
- , V- _) q9 A/ B e6 u
- time.sleep(1) # sleep for 1 second
& X0 d2 Y# R& {& R% \6 t6 o - time.sleep_ms(500) # sleep for 500 milliseconds$ c+ U. _9 t2 G* \5 S* R2 J
- time.sleep_us(10) # sleep for 10 microseconds- |$ h& o' K7 [7 G
- start = time.ticks_ms() # get value of millisecond counter9 L' G X# K2 ]# ]& S
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
7 r' N( f N0 p0 p" T+ S; Z8 A4 K7 U2 x: f# @/ c( N7 Y8 y* E
内部 LED见 pyb.LED. - from pyb import LED/ V' }, @3 @" N5 n% W
- ' f7 ?+ Q0 D: S2 S" o
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue/ p1 S4 |! r, v) n
- led.toggle()
. _7 }) z( s N5 ~( s6 b) c! Z& o, S - led.on()
' i( n! T$ [2 r8 H - led.off()+ G4 [! i1 {1 k5 Q" _" s3 _
# j' u0 e) G- z: ]6 U/ E) W5 S$ {9 P- # LEDs 3 and 4 support PWM intensity (0-255): p% J4 Q) e6 R F5 b% `4 z
- LED(4).intensity() # get intensity
@7 B% w, f+ q- j - LED(4).intensity(128) # set intensity to half
复制代码 # x* O2 B$ E" E2 {
6 n+ r( c. j u8 x9 g内部开关请参阅 pyb.Switch. - from pyb import Switch- L1 s. |9 e; x
# g6 D! N; z* z4 l6 F4 q- sw = Switch()
- _! O( v6 k6 `; E* k - sw.value() # returns True or False3 ?+ T- D ?' V5 B
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
]$ S- e. ^/ ]% B7 v ?; a$ X# e0 Z) J+ [" C1 G
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin5 t# n7 J2 ~1 [* }* z% B! g$ h
- 7 N: k" l0 `% ?
- p_out = Pin('X1', Pin.OUT_PP)
& y- u7 O; |- E- K# z - p_out.high()
5 d2 P# C3 L# D/ C& e - p_out.low()
! @) v. l: Q3 X% x - - c: y+ v; M- I! n5 ~: x
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)# w( D0 J: s- t
- p_in.value() # get value, 0 or 1
复制代码 " h% X) x% s& Z6 J8 Y4 Y( F* b, b* d
( O0 q6 c( ]" A, C( i3 u伺服控制请参阅pyb.Servo. - from pyb import Servo
5 F1 f8 ]3 b& [% x
1 T8 i7 n, r. ]- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
9 F4 A$ k9 l) ~) B& Q2 y - s1.angle(45) # move to 45 degrees; b8 c# G4 }0 _* Z
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms9 S! c ?' q" z0 _+ [. g) V% X
- s1.speed(50) # for continuous rotation servos
复制代码
$ u: ^0 l* t- X$ `: Z
( M$ d7 f" C) @6 K4 ]- \外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt, L2 A& B: I. |2 F5 V
5 m9 n( p% n8 p. z6 x9 H; f- callback = lambda e: print("intr")* \) E# v4 W0 G/ ]) R
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 " O1 \! V) r) w4 v& V
( C/ x9 c: s9 Q; j" | y) `
计时器请参阅pyb.Timer. - from pyb import Timer$ ^0 q8 c# u5 z1 O& O6 J
) v2 ?1 `) L5 L& |( t% U- tim = Timer(1, freq=1000)
- y: V4 T* \# |# m" O3 I - tim.counter() # get counter value* j+ L& S2 k4 N1 r& z5 x7 t5 I1 D
- tim.freq(0.5) # 0.5 Hz, P4 X! H) P- R& E5 L! c
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 ' {! w$ @7 O; ^3 Z
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
( V& z V# f/ ~- r1 m
4 _; ], @5 Q6 B @- ~# r- rtc = RTC()
6 W: P; F( y5 K. p - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time3 A+ K8 W: {4 a/ R: D' y
- rtc.datetime() # get date and time
复制代码 ( G5 e( r9 H+ h% M/ z! V! @
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
7 l5 U" R5 o1 ~' o8 _- A- \
& ]+ S" P( ^" c. H8 n7 @ ?2 W3 N- p = Pin('X1') # X1 has TIM2, CH17 Z( N. l7 r' i; f5 p
- tim = Timer(2, freq=1000)
- e! \; S7 F9 @, r$ e - ch = tim.channel(1, Timer.PWM, pin=p)& n2 {5 O- G, Y5 ^0 m( F# Y
- ch.pulse_width_percent(50)
复制代码 7 e. g% j" ]/ k3 i; X" I
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC/ f% Z. \& A" r2 q1 f, r; x
3 ?; B0 t2 _% U- adc = ADC(Pin('X19'))
2 t- Z" R' |7 i7 D Z& j - adc.read() # read value, 0-4095
复制代码 * g+ e; f/ u' l! F, a( j; S% C; D
9 u# L2 F4 E# U/ ?" N( Z8 p
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
" O* g" u& [- N* z! M( y
4 f( A& t8 K0 _- dac = DAC(Pin('X5'))+ P4 F, t/ G# K, G0 N6 _
- dac.write(120) # output between 0 and 255
复制代码
9 r/ j2 U4 I$ A# d
- |/ d- v$ `' U: o. @! nUART(串行总线)请参阅 pyb.UART. - from pyb import UART
" U: \. h, \- }$ D8 c. [& c - . \! P; y2 b- b$ @
- uart = UART(1, 9600)8 q1 n6 h! N$ K% a* |: a
- uart.write('hello')* x o0 O* w, U$ O
- uart.read(5) # read up to 5 bytes
复制代码
2 c" `7 w3 B9 R; P# _/ w" s; g1 A# q( z1 C: P' K3 z1 D
SPI总线请参阅 pyb.SPI. - from pyb import SPI1 a& o5 C+ e& ]- ~
# y$ g y3 B% b- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
) K' N# Y0 J; m" k3 Y2 ] - spi.send('hello')/ x5 u3 E# `5 t* R' [! Y
- spi.recv(5) # receive 5 bytes on the bus6 f( K* L2 O& l: u0 z; n
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
( ~ `7 i% O! b' m. A
% @' M. D8 G5 F3 K e \( S/ [I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
! e) C+ ?: }% u. Z
- F6 f4 Z+ A/ j2 l3 R& P X- i2c = I2C('X', freq=400000) # create hardware I2c object1 e4 {1 y5 E; ~! p; _' J0 ~
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
5 d A5 u- t- U% H! _ - + g3 t' V, D8 X# ]; @8 D8 V
- i2c.scan() # returns list of slave addresses4 J; ] H9 G' \! k1 a n) o6 c3 F) q+ A
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
& s- ^: T; M7 v( M( P- Z5 D+ O8 G2 w* Y - i2c.readfrom(0x42, 5) # read 5 bytes from slave2 Z- p& S9 l& z, ]* M/ o6 P8 z
- ( h8 j+ v, A6 Z. q5 k
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10 `# l5 ` D: @1 A$ ?
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 - \% G# V$ I# s
; ]% ]5 ]1 L. Z$ c: T) s: h
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
8 `/ L) }+ Q4 D' n BI2S总线参见 machine.I2S. - from machine import I2S, Pin
, v- C, O7 d/ Y4 \6 q! V - 6 Q8 x( f7 R! V$ k. h4 P$ u2 h
- 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 object1 _: Y" A+ W# V: g0 C
- i2s.write(buf) # write buffer of audio samples to I2S device
, y7 g! o. ^' m8 f( e8 L - , ^ \( e- e) _0 p( \: f1 ~5 ~8 H& u
- 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! N* M. M% k6 T5 B+ T
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
6 {# k6 B& P0 v2 u$ J$ I' FI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 : h0 e5 x; w8 m z9 w
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
3 S% e [% k8 y - * q! n, ~& r0 `7 c
- can = CAN(1, CAN.LOOPBACK)
7 ]6 |2 h3 ?! p# x# l - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))& V$ r0 @0 D2 M' U- Y! j
- can.send('message!', 123) # send a message with id 123" l1 e/ [/ m" P7 x
- can.recv(0) # receive message on FIFO 0
复制代码
4 w6 e1 P( n+ K5 o
- W7 X8 w6 `4 r7 ^内部加速度计参见pyb.Accel. - from pyb import Accel
# p& i4 }, M. M4 T8 w - 2 H% l3 S% f, @; o3 i4 K$ m ^
- accel = Accel(): Y' i# a) ^$ r/ o$ N# e+ H8 y8 o
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 3 {/ w% S. q3 V' W
; F$ Z2 g' y& g7 u0 M |