pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
/ \; o5 u8 W+ o! F4 {8 |* A通用板控制见 pyb. - import pyb1 k' `, k2 i/ R: C9 x2 S5 V% L
% n4 f- q [0 C- t I& V. V% M- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)) U& p/ j6 r) r. @& L' @' g
- pyb.wfi() # pause CPU, waiting for interrupt
1 G( q, H/ x r - pyb.freq() # get CPU and bus frequencies0 h1 l5 v7 @; ?) x
- pyb.freq(60000000) # set CPU freq to 60MHz
) t- X& F9 w: }4 E* @ - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 7 e. S: d( X2 n& j; g
" c* H/ @! R. @, f% @
延迟和计时使用 time模块: - import time
0 x2 E0 K0 o% M1 z. E- U* h
. l% Y9 \: m! L4 ^& H- F& A- time.sleep(1) # sleep for 1 second/ }- n$ |1 i9 \- P' w" H
- time.sleep_ms(500) # sleep for 500 milliseconds
1 U& g! R9 _5 Q/ y - time.sleep_us(10) # sleep for 10 microseconds
* P# g: [+ X9 q4 S, k; N - start = time.ticks_ms() # get value of millisecond counter/ w; b3 H/ `. x) i+ {2 Q
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
" X* |+ @% f! Y# I* F4 D; [; B% s9 C6 {3 [
内部 LED见 pyb.LED. - from pyb import LED
' F$ o- E6 j7 b
1 [ L( p$ ^0 ?* M, M7 A( z: D- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue2 a" ?+ \6 F8 p" n' A
- led.toggle()
/ {% b j; Z/ Q - led.on()1 G' ]2 o; @ i4 k) a
- led.off()( \- [/ \# k+ ]- A. A( ~
7 F/ \( M [4 j; i- # LEDs 3 and 4 support PWM intensity (0-255)
: X# @& e( b/ y1 M, d) _ - LED(4).intensity() # get intensity$ r& p# q5 {5 \! s; c/ L
- LED(4).intensity(128) # set intensity to half
复制代码 2 t) I4 |. c" r2 a! T7 _- T
2 J' W- }7 y5 _. ]1 ]内部开关请参阅 pyb.Switch. - from pyb import Switch
+ G$ T; n# A; x( D - 1 A& b. Q! e" N: B' e5 H# V
- sw = Switch()* I5 A$ J+ m" l5 f" v( ^
- sw.value() # returns True or False
" p7 Z# U% `) N( s( [4 `, {8 j( _. U - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
1 o% u; m) u0 C, d4 Y: y4 R5 m
' f- K) z" v+ v p* c* j4 L引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin) W- i3 ^$ [$ h2 I2 C, v+ @; n
- / I/ s4 B$ f. a1 s+ Y6 q- ?
- p_out = Pin('X1', Pin.OUT_PP)
. V/ B7 q v0 r" F) ]3 [1 T- } - p_out.high()
|7 j; a2 y# e+ ^ - p_out.low()( D" L8 h0 g4 ]' ?# _
- 8 S" O4 W. H' u9 C1 z& x( M
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
! e! C1 H, s P - p_in.value() # get value, 0 or 1
复制代码
6 @" T3 J( L' b" z* @) r. P( T) A
- S2 R4 e1 w& q+ ~0 G; q+ G4 j3 S伺服控制请参阅pyb.Servo. - from pyb import Servo
$ C% ~ j8 x3 O; i$ S$ P+ ^" j5 Z
1 u. w5 ?6 a& {0 U, m- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)6 T1 S, B: Y1 h6 z6 i9 J
- s1.angle(45) # move to 45 degrees5 }1 M3 u. e# Z+ S+ o: B! w
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
) `& p& i q7 l& j! s0 R; k5 R - s1.speed(50) # for continuous rotation servos
复制代码 - T* O1 g: w/ I: D3 Q
0 z/ X8 y/ X& H S5 L6 p' h3 E
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt% ^$ u; s, n T8 z p: P
- , ^* ]3 B$ W+ Q. x# `1 o# w
- callback = lambda e: print("intr")
4 _) H( ~1 i4 \ - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
5 b: y$ B4 J% S0 s6 E
( Z8 t( P( h q# i& c计时器请参阅pyb.Timer. - from pyb import Timer* Y$ _7 y5 ?5 W$ ^* a' ]
2 a3 L, ~4 ~! ?+ }- tim = Timer(1, freq=1000)5 t" K* x' X0 }
- tim.counter() # get counter value9 L7 @! _; x# ?- i0 B2 ^
- tim.freq(0.5) # 0.5 Hz& j! ]9 v0 J- i, S' }' P
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
: {: N5 W& W1 B8 l' y" H3 a$ R) P- e2 SRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC- B9 y4 \" n$ s/ @* r
- 6 o4 H+ x* t% }$ `+ I+ x, h
- rtc = RTC()
2 J# y2 ^4 A4 C7 S - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
9 b1 U3 A4 [ G( m) t - rtc.datetime() # get date and time
复制代码 ' P: U5 Z) {) t
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
# |# g2 w# g8 L+ h0 }2 c- O
2 w2 a1 Q& T* S& G: W+ [+ ]- p = Pin('X1') # X1 has TIM2, CH1' g3 P5 R8 [/ u5 v9 \) `
- tim = Timer(2, freq=1000)+ ?) F" o! b; C8 z
- ch = tim.channel(1, Timer.PWM, pin=p), e% j# m* H' U8 T K) V$ w
- ch.pulse_width_percent(50)
复制代码 ' O: w& C N5 h7 K% [$ L
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
1 F7 U: j- z8 N! J/ S4 U
/ Z+ U% T/ {- f2 H0 I3 u- adc = ADC(Pin('X19'))
/ m2 e- q! ~! }8 s - adc.read() # read value, 0-4095
复制代码
8 Y# Z$ m% {! J- j' N
u" Z6 U+ p% NDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
# v& p( I7 c( m - / W5 A8 v' {- t/ I! {4 C$ j. Z
- dac = DAC(Pin('X5'))5 S( b! ?' Q% S G0 ^+ h1 T: A6 A, J, `
- dac.write(120) # output between 0 and 255
复制代码 + _9 j+ h+ ?/ f! `5 \3 a9 J
/ C% v" b) }: P' H, M- j" R9 n
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
8 S$ U% ^+ Y& E
* P2 x- c5 x% \/ G- uart = UART(1, 9600), f, n) Y: h* y$ N$ e1 I! y. R r
- uart.write('hello'); R+ D% ]1 \& I7 E9 `
- uart.read(5) # read up to 5 bytes
复制代码 " U1 Y$ r! Z) |! ?. P0 x2 C+ K6 `, z
7 E: F" l3 u( g" d nSPI总线请参阅 pyb.SPI. - from pyb import SPI
; e. w- F6 y* m- A& {# o/ l8 z) m4 E - 6 k. z5 j K" T4 G9 U* d
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)5 ]2 D( ]# y; B- p. R; ^4 i# {; v1 O
- spi.send('hello')
3 y3 z3 o4 O. v9 z9 @6 }3 L/ h - spi.recv(5) # receive 5 bytes on the bus
+ I; I8 D9 y9 R2 p - spi.send_recv('hello') # send and receive 5 bytes
复制代码 9 p7 U, x9 \1 ^+ w# m8 h
2 h# s" H: _6 C2 s$ t& S2 n4 J
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C4 X, P5 V! o. D, Q
' J8 x6 P* i5 J* ]) @5 ^( h& a8 R* A- i2c = I2C('X', freq=400000) # create hardware I2c object
, X/ k4 d2 g( o - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
. S8 F( F8 L6 k# Z, X* p
( |6 C5 j- {- a4 c' u- i2c.scan() # returns list of slave addresses
" U- Y4 m- _# _7 ^% ?6 n( k - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x429 {( M3 j2 o+ I0 m8 U7 T, G
- i2c.readfrom(0x42, 5) # read 5 bytes from slave4 u$ K( F4 ]6 N! e
& E* b* s: |- J( \: g- U- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10; A! ^7 v K( N' H& R
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 $ i a4 w; |5 a9 D+ {: M; f* {, o% i6 H
% _1 w/ G! P! b6 p, c2 ~' S
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
% [6 F% B- H' O' YI2S总线参见 machine.I2S. - from machine import I2S, Pin
$ R4 m, `0 N8 b( e - ! `/ y4 v1 j; `# A/ i. E( N) h
- 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
6 O: d9 n3 S- T5 M# E& x - i2s.write(buf) # write buffer of audio samples to I2S device
7 C8 o- C! Y5 |
' D% z' c) x. ]1 ?5 a- 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
% L/ M7 s1 `9 u" J$ r0 d( R/ n3 @# \ - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
) z+ v4 D2 q( w3 r% D2 ^7 H/ E% ^' gI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 8 J, O3 M/ t# G" t% {
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
9 p4 h& Q' Q1 U1 m9 t
* | R1 E5 D0 Z n, d- can = CAN(1, CAN.LOOPBACK)
( }3 K% P+ T9 `* [! }( v# F7 h - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
6 z; ~ A) u) G( v* i1 q - can.send('message!', 123) # send a message with id 123- V2 m' r, s/ A. w% N$ T! i6 Q' H3 q) l
- can.recv(0) # receive message on FIFO 0
复制代码 # n v8 j0 _& W% |% v) q
0 \5 F) a9 m# K# R) L5 f3 L: g+ t! D8 S
内部加速度计参见pyb.Accel. - from pyb import Accel4 {9 h+ a5 t0 f) w% i
- 1 B( ]2 c. _ P- D% Z
- accel = Accel()
6 }9 V' e5 S. _ _ - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
8 A2 s4 n- C; A# [ \: I9 D1 U+ K9 [4 {, G
|