pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
. J- V" W* ]7 S: T1 i通用板控制见 pyb. - import pyb
9 s$ X+ b. u; V8 h- {! K* e - $ Q+ C4 \+ d- U# @9 v
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
: ]8 b0 J) v9 t - pyb.wfi() # pause CPU, waiting for interrupt
. |( Y1 q, j6 }( ^8 W5 f- b) U - pyb.freq() # get CPU and bus frequencies
$ q# M1 ?6 X# w) D: |. x+ B+ c - pyb.freq(60000000) # set CPU freq to 60MHz2 m) [+ P1 H i- v' _: C" A
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 / z h4 h6 a- |, d3 b n
7 j* `( C; F5 O; e( i延迟和计时使用 time模块: - import time
, t9 j7 f! I5 `% h - * u4 Y0 y- C/ _! k8 u
- time.sleep(1) # sleep for 1 second
5 j1 _) k3 ^* }) r E* C! U! O - time.sleep_ms(500) # sleep for 500 milliseconds
! L5 w. z3 N! S( `) T) L! _% J' Z - time.sleep_us(10) # sleep for 10 microseconds: `/ I; F# U& V* a0 l
- start = time.ticks_ms() # get value of millisecond counter
$ c( S, j0 G/ z: h) q - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
: }! I6 K5 z. n: D
" T- Y8 a+ _/ T; u5 M8 b N" A8 ^6 c内部 LED见 pyb.LED. - from pyb import LED7 u- x v8 p, P/ d `7 p! G
" U! {. B. k& o1 w) E- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
' G% J$ S2 ?0 o# {/ t3 n - led.toggle()
! n6 ]6 F: s; Z$ w8 Y, D. D - led.on()
( I) d7 A2 K* [9 b3 I' q6 B - led.off()
, d9 A. J( y. ]9 n - 8 z" y5 z l, ^6 o
- # LEDs 3 and 4 support PWM intensity (0-255)( R* D: M8 g; z+ e7 [& E
- LED(4).intensity() # get intensity2 A/ k. c) G* m
- LED(4).intensity(128) # set intensity to half
复制代码 * Z, s9 Z! Q T0 z8 z
- R3 f5 o- Y1 [
内部开关请参阅 pyb.Switch. - from pyb import Switch+ a% [2 P7 l7 H7 D) `$ t) Y& e+ z
- ; ~8 r' c7 n7 X5 ?; M
- sw = Switch()
6 M1 t+ [+ f* D - sw.value() # returns True or False$ ^; v Q9 I: N6 M
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 & {0 h5 r: c( d3 G$ o" w y" t
, a) k# z) @8 V, V( Q$ \. J: K引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin* @7 v% f% h; V" v t4 s/ J( i
8 y/ d& ]6 T& T- p_out = Pin('X1', Pin.OUT_PP)
) v0 o1 s: C# B& J5 l - p_out.high()
% J# m. i) X; q - p_out.low()1 T9 Y( R- f4 n
1 Y4 W. r7 @; ^7 A4 L- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
7 K- f. y6 D. R% ~# ~( J - p_in.value() # get value, 0 or 1
复制代码 : ]( F" E8 p; Y4 R+ G) Z( Q/ Z
, N& \. Z0 S6 u3 j" y
伺服控制请参阅pyb.Servo. - from pyb import Servo3 s. [; D# T7 D6 P* R3 X6 |2 J
) N4 a4 |3 {/ x" g- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
1 i& n, Y: G) ` - s1.angle(45) # move to 45 degrees! S3 U7 n7 Z+ a" Z9 Q
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
$ E" g. v" \ Q+ d - s1.speed(50) # for continuous rotation servos
复制代码 ' K% B5 ^' _) D, a2 j
3 q: R% K7 u$ s" g# o
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt! h8 _6 o# ?! ]; n
- . S2 M( F5 X$ ?
- callback = lambda e: print("intr")3 q' K1 ?8 W* T
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
4 T9 c0 w! t+ @$ @# i1 Q9 V8 I Y- {3 i( l% `* h
计时器请参阅pyb.Timer. - from pyb import Timer
; M4 A7 t- h L2 i) a7 {
* |- j: L5 e3 o# Y- X3 ^! H0 P* I- tim = Timer(1, freq=1000)
3 j: `* T( C6 d+ I - tim.counter() # get counter value
2 X& i, P/ `) A! M - tim.freq(0.5) # 0.5 Hz2 u0 h4 x' B! N2 Z
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 . ?9 H' E# R$ h
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
( }0 M: `. O; F5 @ - 6 j/ H7 }! y* _( P) R
- rtc = RTC()
L+ n9 d ?- T( i. \2 y) x - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time4 Q8 F5 m" v2 I7 r
- rtc.datetime() # get date and time
复制代码 # ^7 L# ?6 ~$ u5 g6 R" _
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
2 J+ r U( s: z; R% E m
+ o( f! X3 H* Z- p = Pin('X1') # X1 has TIM2, CH1- A" r3 l+ `$ ?* o% x
- tim = Timer(2, freq=1000); B( G/ v$ p4 R: `; [* N8 ~
- ch = tim.channel(1, Timer.PWM, pin=p)9 o8 T2 Z) {" W0 Q4 U
- ch.pulse_width_percent(50)
复制代码 ! q3 a* I4 E! j; F- ]
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC v a) M6 M9 w5 ~: Z
- + f) e" l, {9 T$ z
- adc = ADC(Pin('X19'))% p/ O9 x6 B* p% O K5 V2 B% g+ g
- adc.read() # read value, 0-4095
复制代码
, h& S5 P- u8 y1 Q( j2 [+ ?- z. o* e/ m0 d- `# H* b D
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC' n" l9 F/ X6 C' ]! \/ J
- 4 x4 n2 I, ?% U p \& x' I
- dac = DAC(Pin('X5'))
7 p3 U1 j* s! B/ ?& c3 U9 a - dac.write(120) # output between 0 and 255
复制代码
9 R0 B, d6 {# u/ V, J- y9 r2 Q8 ~0 h6 s% N+ K- D; k* L0 K
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
0 X4 z8 a( v4 k( ~5 H* e - ' @7 V: h4 a' H5 q
- uart = UART(1, 9600)
% W5 y9 U9 {3 M' g; D, e) o - uart.write('hello')) B8 [; b$ x2 e
- uart.read(5) # read up to 5 bytes
复制代码 $ B/ g* x: y* [5 K$ v+ w
, {* \+ U" O4 Y, B9 @' W
SPI总线请参阅 pyb.SPI. - from pyb import SPI
& a2 V0 h( g: F: a9 r1 c8 m* r, F - e4 n; s- q, t8 t1 u$ A
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
2 A: n* d! |. M# d) m - spi.send('hello')
, U- ?3 w% z h8 {0 r - spi.recv(5) # receive 5 bytes on the bus
F' c# C' a. y0 h, J1 p' Y. |. {8 ? - spi.send_recv('hello') # send and receive 5 bytes
复制代码
3 w" k: D; G( e, e* S! J3 A }# J. o' k6 Q1 V& E. C
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C7 Q* E( d3 j4 I7 w
* W+ t6 q& I+ K* t- i2c = I2C('X', freq=400000) # create hardware I2c object
6 K# p* Q( L; l( V4 z/ Z - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
( v& |4 q4 w' C6 i) G5 V - & c& b' S* q% E9 v0 `
- i2c.scan() # returns list of slave addresses
1 K% [) t( X6 {- @1 }0 e - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
' S) q8 e; R" p/ _ - i2c.readfrom(0x42, 5) # read 5 bytes from slave( _& [, X$ B8 r4 e
- 0 ~% K. X x% o; G$ g$ d
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
$ d/ c% F, {8 d+ Y - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
) M8 _! X M! |$ X& z: e0 _! N& S6 L2 E# G8 _: \* G; j: B
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
. J/ M& S% E9 h' u- p3 i* {6 rI2S总线参见 machine.I2S. - from machine import I2S, Pin1 Y V, l4 B9 }3 X: A2 a
* f6 V: @8 h4 ?3 `9 c- 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' e6 L; F4 L* j' c' c, j* L
- i2s.write(buf) # write buffer of audio samples to I2S device
2 {7 Y; Y5 ?0 ?! u3 G$ T - ( t+ m- j7 m1 ~* @3 B# Y
- 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
: e$ E+ i8 P/ n. {8 e D - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
3 }3 v9 Y: w* K: T( z$ V0 cI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
0 [9 D V4 E1 t Q! ICAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
9 v w; D& F4 ? O
$ O% J' E, e ^( y4 B6 Q- can = CAN(1, CAN.LOOPBACK)/ f' K+ @' |0 i
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
% w+ n: u, \! J - can.send('message!', 123) # send a message with id 1234 H% q5 d' w; L2 ]+ C
- can.recv(0) # receive message on FIFO 0
复制代码
. ], \3 o6 T6 Q0 _" T4 Q
& y6 E3 c5 g( {* j/ R; V% z& W内部加速度计参见pyb.Accel. - from pyb import Accel5 S! \* Q& y, V+ p( O
) t8 G+ ^$ F/ L- accel = Accel()
6 q% ]7 u* V. c8 {+ U2 p3 q - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
r/ m8 R. ]* Q- \, @8 @; i5 F( U& [0 ~4 W' w q# O8 f5 N$ s
|