pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: " m3 p# s9 ~# h9 H3 a7 g
通用板控制见 pyb. - import pyb
@# L: m }5 g/ i2 v( {6 ? - ( h' B! E1 ^% F: u
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)8 N O" |- ]! m; K u
- pyb.wfi() # pause CPU, waiting for interrupt
+ L8 w3 K4 c+ _ - pyb.freq() # get CPU and bus frequencies o6 Z1 a7 ^$ U4 n
- pyb.freq(60000000) # set CPU freq to 60MHz
7 U2 s- @' Z$ q - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 3 O! H, P/ R3 u0 U+ f5 \2 [
$ h+ \/ K3 Q' T$ O+ B/ O
延迟和计时使用 time模块: - import time
, R% r; Z! a: `' I- i( T) V4 N3 V
* {0 I/ R" H4 k' ~+ D7 R# ^5 X- time.sleep(1) # sleep for 1 second
v' A! I3 \, e - time.sleep_ms(500) # sleep for 500 milliseconds
- W, c! S5 B' m2 R1 H. s* Q3 D - time.sleep_us(10) # sleep for 10 microseconds
' P1 O- ?. }1 d7 F, k - start = time.ticks_ms() # get value of millisecond counter6 Z. x- H% D# M: e& \
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
5 C8 C1 d- @7 x: v: A# M: T8 F$ |# g* e. H1 x
内部 LED见 pyb.LED. - from pyb import LED" J( L* d j7 `2 T- u
6 n) @0 G% ?( V1 J4 K/ a3 Q- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue$ D+ W1 e% r4 n
- led.toggle()
( n b3 J4 n$ A2 H8 [ - led.on()
R+ l1 z/ v' c/ ^* h! _ d - led.off()( p% m% j: E2 r: U3 {' w; s
) E& r `. w) G1 n- # LEDs 3 and 4 support PWM intensity (0-255)
. n# J# ~8 Z( v - LED(4).intensity() # get intensity8 {0 I& z5 z6 B- C
- LED(4).intensity(128) # set intensity to half
复制代码 ; F1 `- ]9 y9 O6 w* ~2 m
: p6 ~$ j% L- J) _1 z$ A- O* B
内部开关请参阅 pyb.Switch. - from pyb import Switch
4 \/ K# T5 d& }' Z ]. Q9 a+ O+ | - 5 w% s# F; W6 S/ v! p. C
- sw = Switch()6 E* p' r" b' Q' `& |( b
- sw.value() # returns True or False
# ?( t2 |( s2 k4 {2 } - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
. I+ _3 V9 J5 I4 m
& r5 a& M* g$ I4 E9 W- G* |引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin S( ]- D @5 W; p9 q, o
% _ b6 y4 X7 U" \5 s: ]/ `, {& n- p_out = Pin('X1', Pin.OUT_PP)
! z. ?; l0 x8 Z" x2 s# {* i1 M- C" i - p_out.high()
' g9 }7 a. H0 M+ |/ c - p_out.low()$ Y, w; X, k6 X( d+ M
8 F0 S% Z) p* \: F4 x( W2 S$ I) J- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)* I: O% m2 Q( }1 E5 C9 e, t0 W
- p_in.value() # get value, 0 or 1
复制代码 8 v+ d2 `; O, ]; n" n' I3 B& ~ L
1 c7 l" \& l& X$ b3 M伺服控制请参阅pyb.Servo. - from pyb import Servo6 C$ _- }5 \( h4 `+ q0 p
! n. }; v9 J7 y/ F. M- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
2 M$ t* \% [8 @& D1 u& X: c - s1.angle(45) # move to 45 degrees
o# r! V" m; k- a9 b( g - s1.angle(-60, 1500) # move to -60 degrees in 1500ms& v. F3 l) A& w& {" S
- s1.speed(50) # for continuous rotation servos
复制代码 ( [3 M4 J* ]9 @' E
: a5 i* B; i. G* I8 M' o+ i
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
5 g7 q+ L& y4 R, z6 G+ e6 U
9 I7 \ w3 v2 I$ ~2 C7 l; o- callback = lambda e: print("intr")
; [! k' Q8 b, i0 D+ R - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
& T2 F0 B) m. \7 l. k' z
7 Z0 Q5 \" G( S* H! n计时器请参阅pyb.Timer. - from pyb import Timer5 c; r& H$ d. g
- ! `: ]3 r. J: `& M2 b S$ ?5 G
- tim = Timer(1, freq=1000)
- T* A, h4 R( m5 h - tim.counter() # get counter value
; n }; }8 G( f8 q3 k) d9 l3 @ - tim.freq(0.5) # 0.5 Hz( G7 D1 C' T+ M6 T4 u- e, R
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
' Q6 s: d3 M1 f9 f3 V+ W4 [RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC! Q8 V- i0 u& [3 r- T
" t2 [+ w* U$ Z- q. \) V- rtc = RTC()( r0 \' g: F A
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time- k# {9 q/ F# v. b2 q3 i2 P
- rtc.datetime() # get date and time
复制代码 6 T( A" S! S4 D. a5 @7 x0 E, G
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
$ @) \# S7 }5 m - " S% x1 ?' _& q" I/ ^+ q+ e2 w. w
- p = Pin('X1') # X1 has TIM2, CH12 j# K+ j6 ]3 A# I$ @/ {/ ~7 b
- tim = Timer(2, freq=1000)! s; z( x$ y9 z5 o# |, f/ |
- ch = tim.channel(1, Timer.PWM, pin=p)
1 O2 O# S# k4 i8 f - ch.pulse_width_percent(50)
复制代码
6 }. b5 L9 p) L0 i5 W* m& U0 O1 HADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC, v S+ |, L' J! Z- [! Z
- & f' W2 _* t e* j! m
- adc = ADC(Pin('X19'))
4 T$ S9 \/ H' c7 z2 i - adc.read() # read value, 0-4095
复制代码 ; ~( x* \) n7 u y, v
# S. z# \7 a2 ]9 p* A d% y
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC1 `- r& b3 d; @: I
- 0 F: _% U: Q7 I) M: [$ h$ r! l
- dac = DAC(Pin('X5')); f, d* _0 H9 K1 |' N% Q; \& F6 j, G' b
- dac.write(120) # output between 0 and 255
复制代码
; g9 |, m& V5 G) d+ T6 s! `1 T" S0 L% s2 S. R5 {! E0 H. i& I1 O: z5 E
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
$ e6 V( z& Z7 b* m3 v - 6 ~: K1 w! \: |/ @9 _6 `3 Z4 U7 R
- uart = UART(1, 9600)4 i, I `! C6 i3 u4 l& N" F' U
- uart.write('hello')1 ^' e' U+ {) q: u% `1 Q! l) D
- uart.read(5) # read up to 5 bytes
复制代码
% B4 I. V: C! _& ^8 d3 t# y' q' E2 F4 ?
SPI总线请参阅 pyb.SPI. - from pyb import SPI# v! ?- F# _8 D
- / p/ f5 A# q& H
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
. L8 V1 D! ?+ R4 f - spi.send('hello')3 I8 ~& i! [1 u
- spi.recv(5) # receive 5 bytes on the bus9 `7 e5 k" M4 d* R9 b" }
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 5 e; S4 i% K0 R. e2 L# G( T
4 @; e0 X! t5 x% W% YI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
' n. n# K2 V- m4 X - ' K& L8 p8 U) U, c/ m9 M P
- i2c = I2C('X', freq=400000) # create hardware I2c object
9 M8 V" j! T4 m/ k - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
6 {7 B2 M5 H' C - " V& u* U# y' [6 n1 r
- i2c.scan() # returns list of slave addresses
. b4 v# \' v I( G% K - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
0 _( |9 ^7 r% [4 x - i2c.readfrom(0x42, 5) # read 5 bytes from slave
: [+ P. a/ n2 l; X
5 Z8 X7 k3 P$ I: h. r( a- }2 i3 O- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10# z9 U0 L6 p* [$ M. Z2 Y9 y
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 , b! [6 D- w8 z: k. @# [) d; ?
E5 d5 C% O& W. q注意:对于传统 I2C 支持,请参阅 pyb.I2C。 9 {& P- X: }3 T+ C# e/ f4 a% d3 i
I2S总线参见 machine.I2S. - from machine import I2S, Pin7 `9 M$ W- G" k. ?' Z7 r- V
- 1 U! C) M5 Y* i: x# d
- 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
- Z8 g) l4 W4 W- N - i2s.write(buf) # write buffer of audio samples to I2S device% f, z4 r5 [* y: s
* g2 L3 p+ o2 q: h" w5 t- 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 object6 Z; {& @/ W2 {1 h9 w8 }
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 * C/ Q& H+ l1 }
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
/ Q/ x* s# W4 ^CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN0 v# J7 T% J/ v I. m9 w$ O
- ; a- ~/ S: V6 T) W
- can = CAN(1, CAN.LOOPBACK)- q3 V1 g! Q6 ?0 n& k& k# H( H! U$ r2 L
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
+ N6 V, x" F; q5 p+ j/ E6 u$ k0 @ - can.send('message!', 123) # send a message with id 123 c* ?9 U% c6 }7 T8 l
- can.recv(0) # receive message on FIFO 0
复制代码 # P! {; Q1 b; @9 U
2 {9 `0 o+ Z7 d
内部加速度计参见pyb.Accel. - from pyb import Accel
, }! n6 G7 J( K1 J ~ u6 v
( u$ R# m1 N1 Y- accel = Accel()7 Z8 l$ O" G9 P/ y% n! A5 w
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 0 E, {7 V% O6 N0 M; ^, J6 f T; D
2 d6 M% x6 N! a5 o: ^& }1 u( G( B w |