pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
& K4 Y8 ~- u: O6 f$ }5 z通用板控制见 pyb. - import pyb
. z5 l7 C% o& @( Z7 O, d* Q - 8 B8 R) ? r2 }( E: U3 O; K- X
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
2 D1 J$ {0 {; x) G/ B, n" s; } - pyb.wfi() # pause CPU, waiting for interrupt8 V, U+ s4 h9 g* ~$ a: U
- pyb.freq() # get CPU and bus frequencies
, I9 s7 r# U& B7 H - pyb.freq(60000000) # set CPU freq to 60MHz; `. L/ S! H: y' L3 A2 {4 F
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
b4 ?9 O% v3 E. ^
* ~( P7 T( M# O4 H6 z延迟和计时使用 time模块: - import time( f4 t2 P( u8 M2 T+ c, R: X
- ) H4 Q- R) w$ Q7 j1 D u
- time.sleep(1) # sleep for 1 second
8 x, t0 \5 S8 a Z: S& V - time.sleep_ms(500) # sleep for 500 milliseconds. q* N0 j; F( R& L4 h$ O) u% B! _+ ?. X( I
- time.sleep_us(10) # sleep for 10 microseconds
6 D5 @. ~' p3 a4 q5 T+ q - start = time.ticks_ms() # get value of millisecond counter
% ` |2 p* @5 Z, { ?& ~ - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
$ o7 }* c; W# N; o% s2 O" u' k* e
8 N- K. l& ~( O# ~内部 LED见 pyb.LED. - from pyb import LED
; i: J# g7 K0 Z: C& x- {
0 R" `% c& Q+ T, | E- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
: W+ @6 p; Y8 c) y7 V3 T) O$ A0 ^* R - led.toggle()
V! P/ L4 P' E7 ?' _ - led.on()
" Y4 T5 J" @5 M+ r. F- W4 t - led.off(); ]6 D$ t* d2 ]( v
- - N/ @. q$ A, R: ?
- # LEDs 3 and 4 support PWM intensity (0-255)
- v( V* N ` i- I - LED(4).intensity() # get intensity
: C( J2 g0 _6 k! `* s - LED(4).intensity(128) # set intensity to half
复制代码
7 `& ]3 B- r, t6 W( E; ~: O, X% [+ K) K& x4 s1 ?& |8 e" w
内部开关请参阅 pyb.Switch. - from pyb import Switch
( k" h! w5 q# \0 c9 F - ) Y! r1 y4 `: X7 v. u# t( }3 h1 d
- sw = Switch()5 p* r& L5 W+ Y1 `: e- D/ e
- sw.value() # returns True or False3 F% B* a. d2 ~, l' ]
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
; k& n: g) z: C) D. f5 E: n" Y* u0 z6 C. ?: M* v$ M0 f
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
5 \* a, c: j) u n" A
) K$ U) y. ?6 E* f% f- p_out = Pin('X1', Pin.OUT_PP)9 {/ m% F3 B/ E6 @8 T! B
- p_out.high()5 L% t& [. a4 B1 h3 \: a5 P( u
- p_out.low()7 d6 \& r3 `9 ~. W4 e, M
/ U+ ?5 {8 }: h# D( [/ z7 t* p- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)& _0 ~, s9 K G) j& F6 M$ r
- p_in.value() # get value, 0 or 1
复制代码
* C/ W# H1 G% V, ]% D( S, Z' O$ Y: b2 N6 q: s
伺服控制请参阅pyb.Servo. - from pyb import Servo
3 X4 N8 _2 Q$ Z, q5 R4 S
a8 Y: N5 x, C) t4 o# R- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)4 h4 D/ }6 [8 A6 [& K$ c( ~7 A1 _7 F
- s1.angle(45) # move to 45 degrees
0 ^$ |4 \! Y* d8 Y1 H1 R - s1.angle(-60, 1500) # move to -60 degrees in 1500ms6 B0 Z4 Y" {$ K# {
- s1.speed(50) # for continuous rotation servos
复制代码
1 Q; c! g5 L& B' T: _0 t ^
+ A: j( u; s+ w3 e7 m# T外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
/ E4 n {! b# D4 | - 5 a5 j: i3 |0 s" a# M% s
- callback = lambda e: print("intr")
, M$ _' e- W& r4 V$ F$ B5 u: D% X - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 , d7 i! \6 Y) }, r m3 ^* C
( `5 W u: x; c o, g2 G; O* v
计时器请参阅pyb.Timer. - from pyb import Timer+ g! F3 @; Q) w! e% Y( G6 m
- ( K5 ?. w; k6 Z2 ^! l1 u# w1 X
- tim = Timer(1, freq=1000)
$ Z: F$ @4 d8 }' M$ z* O9 q) Z. I - tim.counter() # get counter value* B0 W! j7 ]2 j" J) i3 V- l3 w$ Z% y4 d
- tim.freq(0.5) # 0.5 Hz: k* _& d2 x7 H) o" p5 j, s( a
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 , t7 [4 v. T; M. C$ I
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC. S. }( }5 }: q0 g# o
0 L+ y3 X6 D# F# E) w- rtc = RTC()
& ^5 ^3 D0 M: R- N/ h) g2 M - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
3 s( {# S5 L: P2 k$ W$ z0 _ l/ X1 M - rtc.datetime() # get date and time
复制代码
+ Q+ k/ @! o" O) j8 oPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer0 ~# I3 r; @4 r
- 8 z5 A/ a& x: @7 M
- p = Pin('X1') # X1 has TIM2, CH1
3 {% f* h( Z: s9 X - tim = Timer(2, freq=1000)" H5 X& J1 c& D4 D/ Q% y
- ch = tim.channel(1, Timer.PWM, pin=p)
8 |1 ]/ G* b; R6 A) j! E - ch.pulse_width_percent(50)
复制代码
% }3 S" |! v) n$ z* jADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC- c: t' w* ^/ h& M8 J. O
/ R. @( T2 y2 X- s: I8 l2 M$ G1 w- adc = ADC(Pin('X19'))
- \1 C7 b0 q$ w* t3 R( R) H' a - adc.read() # read value, 0-4095
复制代码 1 Z+ Q3 n. |4 }
; {9 I( I4 X$ u0 R* }+ R2 }DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
: u( v) w- X( K( L" H* w u% b- ^7 @
) Y# U2 o' T. b% u. z) {9 w0 p! ~- dac = DAC(Pin('X5'))2 {! m5 a D. Y& x5 b& ?/ |
- dac.write(120) # output between 0 and 255
复制代码 # q3 c' ~7 ^1 ?. @1 O9 m1 ^
) t. h' ^; ]# M+ a+ N/ H' aUART(串行总线)请参阅 pyb.UART. - from pyb import UART1 y0 W0 `1 w' a1 x
- ! p: y7 b( N, n7 M0 n9 c% ]
- uart = UART(1, 9600)
2 }6 p! i3 e4 Z6 ?9 n - uart.write('hello')- y& q+ G2 T6 P; Q
- uart.read(5) # read up to 5 bytes
复制代码 * F, |5 t1 o( ]$ t4 u ]2 P. v
& {; b4 Y" a; n8 O$ \
SPI总线请参阅 pyb.SPI. - from pyb import SPI
1 v% @, X) e( j$ G5 J- u' A% T - f1 p6 @$ {; {- w: g* E
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
/ \) E& n1 r/ x% P' J - spi.send('hello')* q7 q4 ]$ @4 ?* {0 x- N$ X
- spi.recv(5) # receive 5 bytes on the bus9 X$ T$ o8 Y7 b9 m2 `9 i" {9 }) c
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
" Y# z/ z3 \& p ?6 N0 d/ P; B" F, A* N
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
5 z7 N( d* n! E$ m( X5 q1 C( | - / u4 t u4 C* b- ]$ u
- i2c = I2C('X', freq=400000) # create hardware I2c object
5 R3 I- m7 ^+ O; \ - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object! {3 q9 A! h N7 x- u% o
, c |* B# b. \7 m5 D- i2c.scan() # returns list of slave addresses
0 ]! O k1 e1 b - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42% b0 V/ D, T+ k" c+ ~
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
! f/ S* i# [* }! j- p
* `+ b6 y$ C, H( t* ?# z. x- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10) ?& n2 u2 C% e% Y
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
( o: r" p7 x: _6 A+ a; ^7 y6 T e3 j
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
8 ]$ p2 g" l, @8 @# \I2S总线参见 machine.I2S. - from machine import I2S, Pin; i9 ]0 y& P% B2 o( q
- ( u- ^/ z+ B/ J$ Y
- 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
' N" [+ V$ G: |) W7 H1 g$ H - i2s.write(buf) # write buffer of audio samples to I2S device7 @/ R+ _, w, j
, e& H% c( @3 k) w, r7 R8 p- 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
9 e- x( g! \ g7 b0 j2 z" ` - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 _# @9 H+ x5 }4 Q( q6 z
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 9 u9 n- s# S$ Q5 L
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
8 ]' [% w' I; p: K
4 p; h. s- V3 v2 i4 I. X' R! `# K- can = CAN(1, CAN.LOOPBACK)
: T3 V# v" z6 s# Y& g - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
& I m( H: R8 M o$ ?) { - can.send('message!', 123) # send a message with id 123
" j+ K. p1 }" n2 @ - can.recv(0) # receive message on FIFO 0
复制代码
4 u+ B* g* H! Q6 W% L1 S
- [$ Q: p: c# Y2 ~! a内部加速度计参见pyb.Accel. - from pyb import Accel
/ y9 V$ H+ g. u8 G3 J( `
0 Q7 T2 y! `" T# h4 P" G7 I- accel = Accel()8 ?9 p0 [* q H2 r8 `
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
/ D# N7 r9 A* _0 D5 Q
: B5 O( L4 V- Z; a n |