pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
8 f) `' H: d& Q6 k" {- E通用板控制见 pyb. - import pyb
8 ~1 _, B3 j6 I. M5 N - $ N1 l+ j4 ~$ r( p
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)0 x8 v; i* O, o, x& H
- pyb.wfi() # pause CPU, waiting for interrupt5 [; W& }1 d* e4 F) v. ?/ Q: V6 m5 q
- pyb.freq() # get CPU and bus frequencies3 O' j& }* M" B) _' `3 l
- pyb.freq(60000000) # set CPU freq to 60MHz
& Q6 T. P$ h* |6 q _; j& M( z, c - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
, j* {3 n. d q* [. f) D1 m5 A- q5 ^
7 R8 n3 i& w. G延迟和计时使用 time模块: - import time$ ?. E0 t7 h) c- C& H0 P# [" Q
- 8 f# O9 a' H+ J3 i, y& x1 t5 A
- time.sleep(1) # sleep for 1 second
2 A+ H0 u0 }7 T$ @. e! s - time.sleep_ms(500) # sleep for 500 milliseconds
: e1 |5 C( d8 H, ~# y0 ~ - time.sleep_us(10) # sleep for 10 microseconds1 O+ N; @, }: f' K+ j
- start = time.ticks_ms() # get value of millisecond counter
& V; h. d1 J; `3 z% N, F6 l - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
/ a6 y8 n [& F& A: p1 X& ^6 P0 r P( l2 M/ _% p* k$ b
内部 LED见 pyb.LED. - from pyb import LED1 z% d! q5 o' M. o$ G9 D0 L1 [
- & E% ]# j7 s( W; F
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
/ G/ f% \8 Z5 |/ {8 k - led.toggle()1 K4 `3 t; E0 N$ E5 U$ \5 D: W
- led.on()
6 [7 P9 M- I0 t/ {7 l- j - led.off()/ u$ |* k4 H- B$ v6 [) K
! c# T; @5 {( G ~% K- # LEDs 3 and 4 support PWM intensity (0-255)6 Y n6 G9 ], K( ?
- LED(4).intensity() # get intensity# R+ E/ w6 `' u |$ Q' w. m' n
- LED(4).intensity(128) # set intensity to half
复制代码 ! A" I( W* ~5 { i: u5 H2 E, H; @
+ t5 R) B$ P3 u) \) |4 N/ y! Y
内部开关请参阅 pyb.Switch. - from pyb import Switch
( t% x5 F! U3 y' @7 O - 7 _4 E/ Z+ [6 f3 E
- sw = Switch()7 B4 N) w, |% @$ L, K
- sw.value() # returns True or False
( I7 ]; o. g# X3 } - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
: b! f, O1 F% r% [+ d @
: {# H; ]+ s3 W7 j2 F: n) D1 J引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
$ ?4 g) I( F1 f
% M! }: N) {. M( l- p_out = Pin('X1', Pin.OUT_PP)0 [" J& y7 @* M2 H& P% Q
- p_out.high()0 ^8 @* v& t' r/ X7 i% ^, G4 j5 t$ |- l
- p_out.low()
0 k j) }( |+ s/ e5 }
4 J0 x8 l. R; q. W- L# r% z- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
4 }8 {1 r0 {" z - p_in.value() # get value, 0 or 1
复制代码
: Y/ k* f; x$ k! h
* `9 i8 ~' k# O O; [- a伺服控制请参阅pyb.Servo. - from pyb import Servo
1 B9 |* p2 {, F- [) h - & R; Q: ]5 y; S6 h* R$ _& }- {
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND) T. i6 ]0 |+ B* X7 A% } `
- s1.angle(45) # move to 45 degrees4 Z/ r+ u) t: s) n8 {; t
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
, V/ L* d' u) K$ S) T6 O; R8 x: m - s1.speed(50) # for continuous rotation servos
复制代码
" v$ Y5 A2 Y9 S) |- h% K
+ L! y; p+ B. F$ z: m/ g) R外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
. ~+ u5 O4 h5 b, I! Z f7 W - * ^4 g( y3 V; H! E r( [6 D" J
- callback = lambda e: print("intr")
6 ]3 _3 z5 X/ ]$ t& m) G8 d- M - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 ) h8 S1 X W* q9 N" N6 W
3 W6 Y+ l# _+ }计时器请参阅pyb.Timer. - from pyb import Timer% Y! V, ]* y3 P
- , ?" L$ l& M9 j: Q p. u
- tim = Timer(1, freq=1000)
% _- K% L- E6 f% T - tim.counter() # get counter value
# [9 Y5 T _$ f8 _+ P6 s - tim.freq(0.5) # 0.5 Hz C5 E4 V5 Y0 t6 b/ |- C* ?
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
, r. S0 G9 v* V+ G2 g; {RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC$ } |7 O* Z8 ?' D5 p7 F+ |) W
% ?+ X$ Z1 `& B0 s2 G s6 w. @* h- rtc = RTC()6 s# A1 U/ x3 w3 o l
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
6 Y: t2 R6 h. j) G4 L - rtc.datetime() # get date and time
复制代码 6 B. P7 [/ c; y. `7 r" w3 Q
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
+ ?- B. H; h: f
" C: b. F* i8 m( a: p5 ^4 Z! x- p = Pin('X1') # X1 has TIM2, CH11 a0 ^! T7 M3 Y9 |; a( K( ?" X% t+ D
- tim = Timer(2, freq=1000)
0 N3 p- I0 D4 p/ C* v( L- B) z - ch = tim.channel(1, Timer.PWM, pin=p)
/ V9 C; e$ {3 A' L5 O& z/ N9 } - ch.pulse_width_percent(50)
复制代码 8 Z/ w1 }7 Q2 P2 x8 l
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC$ q6 {- _# ~: L- _" L* Y
- % E! q. L0 E( p( ~9 q0 W/ z6 k
- adc = ADC(Pin('X19'))* B+ {$ v; a* D) \1 ~
- adc.read() # read value, 0-4095
复制代码
+ o, F4 l! A/ V% M& ^# k7 `+ S2 j+ o5 y+ S$ y
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC) M9 A4 \3 D8 L: ^ u) ~+ L
- 1 ?! Y$ v1 [( [: ?1 Q
- dac = DAC(Pin('X5'))! k) c& o/ m& Q) s
- dac.write(120) # output between 0 and 255
复制代码 6 c7 v4 Q& x4 n6 U5 p
9 w, P% A ~4 j8 r2 H+ TUART(串行总线)请参阅 pyb.UART. - from pyb import UART+ P) L. [) i2 O3 b0 e3 K
- # ]) V! Y7 [: g8 \- i# C0 d
- uart = UART(1, 9600)
* ^3 u/ @( a2 Z - uart.write('hello')
- t% m' ^8 z8 U: F" x' a2 F. w - uart.read(5) # read up to 5 bytes
复制代码 & E; d5 x" i/ o5 E
( R% a$ n* A2 \% c* ?! @) y
SPI总线请参阅 pyb.SPI. - from pyb import SPI! s0 y2 c7 g+ h+ |) t
- ( O" R5 F B. m: j
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)5 b3 V. Z" z* V. M
- spi.send('hello')
: ` ?9 i& ~3 T& d* | - spi.recv(5) # receive 5 bytes on the bus1 g2 g( i, v' ?1 x9 Q0 t5 o0 j
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
0 U# j' A7 s# c' n
0 o" |7 M& a+ Y. ?. hI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
. f$ A. j$ l7 A, K' P - ) M9 q6 {! b l; d+ Y
- i2c = I2C('X', freq=400000) # create hardware I2c object
) K% u0 K* z& o! M- w, K! ] - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object) B6 P* z/ p; z4 ^
7 L) F* J) w: ?# b2 M: N0 |- i2c.scan() # returns list of slave addresses
: F' ]4 F5 e; N/ ]* I$ `2 U - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x422 Q! @4 {% K# D5 I v3 L
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
4 u+ E9 F# k; _$ ~ O& d - 7 Y, h3 e8 o+ C, F
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
% e3 R' z/ U* z+ Z, ~ - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
& |' X4 `+ F5 j7 p7 m; [8 `# o8 I' H6 G# v
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
; q" Y3 t$ Q( v* `/ |; lI2S总线参见 machine.I2S. - from machine import I2S, Pin
9 i2 Q6 N6 o! _* p0 ~
0 ]4 V2 ~4 q% l3 p, ^ O- 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
1 \ S( a$ V- Y: r - i2s.write(buf) # write buffer of audio samples to I2S device; A6 x* |8 Z$ G: M- C2 l: z
; X0 p$ r( X7 M5 K$ U6 U( E2 S; h X- 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
* W {7 i# C6 |' D( N! d+ _ - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 " n* g2 L+ \' F3 W/ U0 c6 B
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
# O4 p2 t9 Z: d. \: \% lCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
6 ^% I% `& N# a6 L7 ~ - # W6 T) B* C3 M' |, y* z% h3 B
- can = CAN(1, CAN.LOOPBACK)+ f0 b$ K3 L7 |, H
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
5 R8 v7 _# N# Q6 Y/ V - can.send('message!', 123) # send a message with id 123; Q" H4 X5 [0 ^, S# f3 s0 P0 g! g7 B
- can.recv(0) # receive message on FIFO 0
复制代码
' r. n# G# g/ M' I9 E' ~& Y* I
# j. H9 `, E e7 i: _内部加速度计参见pyb.Accel. - from pyb import Accel
9 v* z0 f1 E6 t
. `8 g# u, T1 B" T- accel = Accel()
1 A) ]# |9 x% _' p5 O: O, g3 D - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
* X# K9 {, S" y( T; k m" [
: i8 t0 Z( Z1 q! D' Z ?& g1 P |