pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: / ~8 W, r P$ O; C* W8 c6 Y6 h
通用板控制见 pyb. - import pyb! e! l5 h1 K! t4 @
+ _' P. e5 Y& G2 @. n2 y- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)5 }5 A3 n0 }8 e" J1 @
- pyb.wfi() # pause CPU, waiting for interrupt
" d3 F. J" V' N' a# Z - pyb.freq() # get CPU and bus frequencies' E* x. S* I! N/ _7 U
- pyb.freq(60000000) # set CPU freq to 60MHz& N! ~6 I1 ~5 i. O' \6 m Y
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 2 C9 w' ]" y2 I- l4 |
. p3 i, Y0 m" w3 a4 _, `1 ?/ g延迟和计时使用 time模块: - import time! e% k$ N0 U' w+ c9 U4 M. v0 Q
- . _: r( Y0 c9 i; p6 _# H( g' o
- time.sleep(1) # sleep for 1 second
# y9 E' {+ q2 P( P' p& I: b - time.sleep_ms(500) # sleep for 500 milliseconds6 _9 Z* @ }7 T3 Y. O+ T$ i
- time.sleep_us(10) # sleep for 10 microseconds
- b9 D# p7 R, W" L; O: N0 s2 o' R - start = time.ticks_ms() # get value of millisecond counter9 ?, m' x T( O. [
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 3 m. w3 O( F% v# |) z
. D. v' i8 u+ w/ u8 ~) M内部 LED见 pyb.LED. - from pyb import LED5 k% |8 @$ Q& y% l h1 [
- % B/ G! }) B' K3 i z
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue8 { Y5 H8 p9 e0 V
- led.toggle()$ S, }. Z7 l6 d# V6 c6 U3 i% Z
- led.on()
- Y7 W. g+ ]" W& @' V - led.off()
e: w- ?7 O( k - 6 ]" n( ]/ u: C- D
- # LEDs 3 and 4 support PWM intensity (0-255)
0 {- }5 J7 D/ ]5 d' q9 |# j- j - LED(4).intensity() # get intensity" }3 l7 h2 G t/ K* i
- LED(4).intensity(128) # set intensity to half
复制代码 / O/ V! b2 ~# `' d
; @) i. R! {* F
内部开关请参阅 pyb.Switch. - from pyb import Switch
% u6 A1 U; j8 w
" d7 L. r0 O! T( F5 u% @# z2 Q) ?2 p- sw = Switch()) ^+ ?! a7 U. d3 ~4 {
- sw.value() # returns True or False7 V3 U6 e1 Z0 R" c
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
, w- X: ~/ T, ^) T t
3 q3 W" m! w9 ?- g引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
* k7 ^7 x# V. ^5 Q - " O4 h7 C8 j$ i; l$ e9 ]5 X
- p_out = Pin('X1', Pin.OUT_PP)/ l o6 H" m4 j2 A
- p_out.high()
: ?# \6 `: |% z; a1 B - p_out.low()
) S6 E2 y; ~% t- t# B' \5 a7 S - , f: m' E% ~: Q k: E/ L: W
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
_3 c2 S. B2 u- c1 w0 b( w - p_in.value() # get value, 0 or 1
复制代码
; a- r; v, w1 z8 A# F$ `; p
6 x: c% G$ T' d3 h) p伺服控制请参阅pyb.Servo. - from pyb import Servo8 F$ ]/ f. _9 W! [' s) @% A
- 3 T# e* I- M) U+ m$ \9 ?
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
9 \7 n# o. |' d8 p4 ?' A - s1.angle(45) # move to 45 degrees
( V( i$ k( t9 x" H - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
. s8 @- E- L- Y4 T5 M - s1.speed(50) # for continuous rotation servos
复制代码 # o2 @7 [- O* Y: O' M
' E6 j* L2 b) _7 A1 x7 b外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
* H( S7 z1 H' `% Y2 f - ' p; W7 V9 ^$ ^
- callback = lambda e: print("intr"), X. T8 U/ J' W$ ^
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
N- _- a: M: F% D6 p2 G
/ R' D" X4 d9 v5 k; f6 d7 [+ P计时器请参阅pyb.Timer. - from pyb import Timer
7 |$ ~2 p; i: Y2 S2 K - 2 i# O* R! D. \) t! L; F% ]
- tim = Timer(1, freq=1000)) Y4 s5 t6 F( k5 R, r4 Y
- tim.counter() # get counter value4 {4 e. X- F8 o" ~. S0 a L5 p
- tim.freq(0.5) # 0.5 Hz
2 w- u7 @* }1 Q! v7 V+ Z2 o [ ] - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 3 {- i" l5 ~/ w9 @0 Z) m. k! h
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC# @+ ` X4 u) }& m
/ F0 `- q$ I; G z- rtc = RTC()
. e5 b, x" Q# q4 w& Y C4 ~ - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
: U c7 ^2 s; O o - rtc.datetime() # get date and time
复制代码
3 c! B: V" C( |5 tPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
$ c( E% E; C/ N( q- a& k
! u: L) ^1 M; U) D0 y7 I2 `- p = Pin('X1') # X1 has TIM2, CH1/ }/ e/ \4 T8 D3 d" n
- tim = Timer(2, freq=1000), E2 F' g% r; |6 N* @/ @
- ch = tim.channel(1, Timer.PWM, pin=p)
$ Y6 B# e# e% L( |: }" s - ch.pulse_width_percent(50)
复制代码 , U3 v9 V) P S [9 d# z8 ]
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC0 B5 q1 G, x% [2 I, I, a: z2 V; [
- % i: m* f& p+ ^1 ^
- adc = ADC(Pin('X19'))& s$ m& r6 r' ]5 G7 B
- adc.read() # read value, 0-4095
复制代码 ) Q6 l- U3 n# H$ |
7 J: Y# ~( D# t: ^. g! O& t
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
8 X! ?# Y5 e1 [9 o
% f- S* [' R9 v( d: l1 m- dac = DAC(Pin('X5'))8 c) ?- m, ]' j$ Y
- dac.write(120) # output between 0 and 255
复制代码 2 ^2 {& s% M6 s$ ]' a
# D0 z. n% `, K) f b. gUART(串行总线)请参阅 pyb.UART. - from pyb import UART5 }; Z' E Y% i7 Y; u4 x4 A% R
! O5 q5 g, N! d- uart = UART(1, 9600)3 Q3 w, y# D# q+ s! M7 {3 {, R
- uart.write('hello')$ ?9 s9 p* E! D# A- A. m) G
- uart.read(5) # read up to 5 bytes
复制代码 * o' I4 c0 p2 ?2 P% Y. W( q Z; p
+ ^1 m& e/ E7 u% TSPI总线请参阅 pyb.SPI. - from pyb import SPI
! o7 R) V0 J% b0 S* O - 7 Q: X$ x3 i3 q9 B: S
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
. s: ]6 e2 Y K - spi.send('hello')$ M0 w, B) W" T
- spi.recv(5) # receive 5 bytes on the bus
{* T. C; G3 O: t - spi.send_recv('hello') # send and receive 5 bytes
复制代码
0 }* y7 P" F9 B% ]6 H. e/ c
# ?! G- }4 }$ ?& vI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
6 w h) U1 n) b+ p; _/ P# F& v - 3 k+ w% [8 m: [8 u# q
- i2c = I2C('X', freq=400000) # create hardware I2c object# u( U- b2 K: t% e7 A
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
0 E( `. \/ \# g0 G" ? - # `* @2 P% i8 ]1 I" O$ r/ U
- i2c.scan() # returns list of slave addresses1 u: w, }( J+ o1 y5 A
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x420 F& W, B7 B: W8 l& N: p3 L
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
3 p; E6 \8 y$ L7 N, X8 k& ~
; q; o# m/ X) {- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
1 X7 E+ j! A) q/ H1 k& D - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
. m5 ~1 R o |! J6 I. l/ ]" ~$ d+ t
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
7 u9 _/ ^: A, _! k2 |I2S总线参见 machine.I2S. - from machine import I2S, Pin' L8 T* Z$ \ `) D6 Q+ Y
! ]5 Z6 z9 X2 |- 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
4 m6 P$ [9 _; H, Q9 O - i2s.write(buf) # write buffer of audio samples to I2S device
8 B5 f3 L7 S( P - * Z: F4 H5 o0 J j9 ^0 n
- 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 j) \0 [! C2 j0 K( z$ ~ - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 ) w3 m% k) k1 \, c- q
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 4 ?2 G A3 H/ g. j6 H4 E5 q
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN# T7 T/ g3 P3 p! J1 I& w6 c# _) y
9 Q9 k' U8 k* x- can = CAN(1, CAN.LOOPBACK)& z1 c8 {& z* q
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))& l B" y h; V' y
- can.send('message!', 123) # send a message with id 123( V; N9 s: s; J9 j7 g4 S0 F* _$ s
- can.recv(0) # receive message on FIFO 0
复制代码 ( r) H9 B3 f+ C
" G- D9 F7 J) H5 S
内部加速度计参见pyb.Accel. - from pyb import Accel
. ^9 a/ d; d8 x+ S( h- i) j! A. M' X - # _+ R0 w. l" f- Q6 o2 c# v, K! c
- accel = Accel()
0 m) C# d1 K) O9 I4 ? - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 " ?- U! Y+ v3 I- b
, F" Y0 g& z+ G6 k+ F |