pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: " n+ o$ c; s+ L% a6 k. N
通用板控制见 pyb. - import pyb& p) a$ O& n. s \
% @* ^1 j4 D9 |1 W( ?) Z; h* W) [- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
" ?: \" M! X0 `' {9 O m - pyb.wfi() # pause CPU, waiting for interrupt
6 [4 w* S( ?' B - pyb.freq() # get CPU and bus frequencies
8 _, A0 a- i5 [& \& n" I - pyb.freq(60000000) # set CPU freq to 60MHz
9 w5 h1 F/ y* e- S/ [7 | - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
; M, S+ d8 b2 ]; x1 f' Q/ i; \+ K
. m, A2 E$ R5 l1 W3 c0 E$ o延迟和计时使用 time模块: - import time
7 `* y7 g. t/ u) n( q1 J- [4 \ - ' w, q" o2 Z" j* u; u! y
- time.sleep(1) # sleep for 1 second w) B% p1 v5 t+ }2 P
- time.sleep_ms(500) # sleep for 500 milliseconds* U! J5 b# H% }2 N# ]* Y) c
- time.sleep_us(10) # sleep for 10 microseconds% a; G) ^1 V3 ^& _5 L$ c
- start = time.ticks_ms() # get value of millisecond counter* F, Y5 ~( @9 s/ p
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
8 Z; A( V; V: g1 v! p, v& o, ~
/ Q ~) O6 l/ W$ V, y! b内部 LED见 pyb.LED. - from pyb import LED3 }! Z* a! m3 u7 T2 z. ]
/ d+ \4 G0 K7 ]/ s4 y% E- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
" E3 H. S' [, P( ]" g0 u - led.toggle()
- z$ b! N! e6 I* o- x! M - led.on()
! k2 o# e w8 d' |8 `! V7 U% o - led.off()/ i D6 P( J* t( `
& [+ T1 _2 F' O9 G" s( v( x- # LEDs 3 and 4 support PWM intensity (0-255)1 g$ W1 ^- e$ ]& a
- LED(4).intensity() # get intensity
; m @; M! B+ L; H" g V - LED(4).intensity(128) # set intensity to half
复制代码 3 _ E) l; d9 [. T$ G+ P" O3 P# z
9 A! T1 O1 ~3 n9 W& ~& B内部开关请参阅 pyb.Switch. - from pyb import Switch
" a4 t. r* z+ \; Y
' V$ W2 ?- ]/ v4 f- sw = Switch()
, L% B8 A! `' ] - sw.value() # returns True or False
) H+ [) b# d/ t2 C. u/ `3 N U - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
! F( }: T, U( T% W: V
& b8 L E$ g5 B% m) E引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
3 q$ s1 H9 j6 l6 y/ a% d - # r8 j" _. P" ~& R; g6 l( j
- p_out = Pin('X1', Pin.OUT_PP)/ ? I' X7 z! B: S$ s
- p_out.high()5 d1 P- y* p: H( v3 M% [( ~9 l# s
- p_out.low()3 g$ I3 i& e' [3 `. ?
7 X m M1 G2 k$ M$ q- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)( \) _% Y' W2 `4 V$ ]9 C
- p_in.value() # get value, 0 or 1
复制代码
% Q- r9 J' y- t4 P* L
9 D! R5 s1 E# s, ?7 {伺服控制请参阅pyb.Servo. - from pyb import Servo) @. q5 i- g' M7 v
( {$ s8 q2 J% U" D8 X) z- s1 = Servo(1) # servo on position 1 (X1, VIN, GND) b8 h. m( [" [5 v
- s1.angle(45) # move to 45 degrees9 J; d$ \% |* b7 J5 t, f
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
0 q' Z$ g4 F3 @. X, T - s1.speed(50) # for continuous rotation servos
复制代码
2 @$ \8 a, u" Q. ~2 n* F& C& [0 F J' p5 J2 j
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
5 \$ Q- f* l! B7 B- I - * b3 }9 g' X* F
- callback = lambda e: print("intr")
, f5 X, _7 l: `" z4 M% A8 U" F& q! m - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 2 R7 E) G$ r# r9 `
/ I3 I$ Y0 e3 A
计时器请参阅pyb.Timer. - from pyb import Timer9 A% K4 g, Z; O/ v" c; ]0 W
- ! m" j) E* |& [' J7 K5 e( A
- tim = Timer(1, freq=1000)
3 b% ^5 I" }8 C) E8 N - tim.counter() # get counter value$ G( U2 @: H) E- _8 b1 s
- tim.freq(0.5) # 0.5 Hz
# X) [9 k* n) O) b5 J0 _ - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
6 H2 \5 O' C+ u" I) _RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
* j; f+ Z2 ?$ w% z" q8 @8 [ - ( Y e- t+ y! D
- rtc = RTC()+ d. t) O2 O2 v; U# U
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time- O3 F3 q2 g3 C" S6 y
- rtc.datetime() # get date and time
复制代码
6 |) W) s- h. A" YPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer- U* ^, U( n. V) Q. ]2 s
4 Q: t( M9 H0 f0 C4 Y- p = Pin('X1') # X1 has TIM2, CH1
) a! O, K& C2 r - tim = Timer(2, freq=1000), |, F$ R4 l- F1 L g/ G) z, C9 R
- ch = tim.channel(1, Timer.PWM, pin=p)
! A- ]7 J! ^3 z2 u) i$ f - ch.pulse_width_percent(50)
复制代码
- n3 O. a! B6 T4 [2 SADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC; Y" {& N. R! k" ~" ?. r
- : L) U1 I4 |) u* O- B6 S
- adc = ADC(Pin('X19'))8 W$ f0 S# l5 e4 y1 e: C# b) l
- adc.read() # read value, 0-4095
复制代码 9 F5 e+ ?, v6 X* h
$ q8 D4 U5 w0 m0 F
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC& c$ S8 t4 o1 N* V- [ q( f+ _
* K3 N/ t* J3 T- dac = DAC(Pin('X5'))
9 ?$ R2 _2 D! u; @ - dac.write(120) # output between 0 and 255
复制代码 % k3 ~5 h' k. q$ k5 `0 W9 ~7 T
% [6 P0 q$ F/ o: c+ r3 y, G3 zUART(串行总线)请参阅 pyb.UART. - from pyb import UART
7 \! F7 E% D* N# S$ z1 n - ^! r9 a1 D( D2 Z7 n) @. `
- uart = UART(1, 9600)
c3 Q5 G$ V, K - uart.write('hello')
6 g! \. R) V/ ?/ c7 d5 P7 x( j - uart.read(5) # read up to 5 bytes
复制代码
/ [ g2 [: J5 u+ V5 [
8 X C! T- Z" ^& WSPI总线请参阅 pyb.SPI. - from pyb import SPI
) u6 |, q$ C/ y - 2 Y# Y; n5 q( d) `" E, ?- }
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)& V6 n- r. m" H% y6 q# Q
- spi.send('hello')
! |8 J1 f: E7 b. m- a- k- H; s - spi.recv(5) # receive 5 bytes on the bus& a8 W3 p0 ^8 E U" y8 V
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 + d) l* ]" I! o
; R( A, h$ O0 Y9 z7 f9 m
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C9 R* g- P* r/ u* `
- 3 {+ \, L1 ]" M) u! \
- i2c = I2C('X', freq=400000) # create hardware I2c object
- ^2 E! W/ P; g4 u - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object0 O9 q' n4 \0 x3 R2 O
- 7 @1 K5 P" u | s' f
- i2c.scan() # returns list of slave addresses! G8 i$ _5 a3 _3 v7 x4 }% q
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
( S2 U3 Z2 r2 T' D, ?' K - i2c.readfrom(0x42, 5) # read 5 bytes from slave
# ?! D) H. T% z5 L - 9 ]# [% N5 {8 q* k
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
4 F0 w5 n1 g# l) l. z - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 $ r d C+ i# ` o
/ B9 |( T0 b6 G+ E# p+ {注意:对于传统 I2C 支持,请参阅 pyb.I2C。 8 B& r$ x$ R6 q* t) ]
I2S总线参见 machine.I2S. - from machine import I2S, Pin7 @5 g/ ^7 I2 d$ _: G: R6 Y. a8 R
- : c d+ n, X* f' o+ e! u7 V
- 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
- \$ ?2 q. z u" W+ f% i3 a - i2s.write(buf) # write buffer of audio samples to I2S device
* W; ^( ^8 l, L5 g& H9 o
. u& T0 ?1 R6 g3 o# J* F- 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 object7 H- C m7 F0 R4 v
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 ! E- W8 Q0 Y9 M
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
, b; l$ ^5 w0 VCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
# e" ~/ B9 P3 U0 I
, D$ p7 @4 }* u& P6 W- can = CAN(1, CAN.LOOPBACK)
! a" X- g0 R3 G: R, U# l/ n6 U7 s - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))- I- |2 Y/ s) L0 j: w
- can.send('message!', 123) # send a message with id 123
4 o" b( X5 k) s! J - can.recv(0) # receive message on FIFO 0
复制代码 ; G; g \- [0 o- r" ^: v
& m3 D/ G5 ?% v+ E ]" s
内部加速度计参见pyb.Accel. - from pyb import Accel
/ ^# R* @. b. v) q/ P Q - " c! D& {0 y( |8 ?
- accel = Accel()
K! G8 G4 N; J- t9 O2 }$ _1 I - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 9 U. D& I+ k9 X# \0 ~, |& i
/ O- b; T8 K( I3 y% `3 S. n; q- p7 y
|