pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: 0 m- r$ O0 Q( h+ P& X- h# l, {; r
通用板控制见 pyb. - import pyb+ {' w% N+ N4 n
- ) ]- y0 ~: p7 a# o
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
- Q; c. j& a. g5 u - pyb.wfi() # pause CPU, waiting for interrupt
7 Q5 b8 _/ }. o- R - pyb.freq() # get CPU and bus frequencies
$ h- Z8 k1 C! f% h4 Q0 r7 ` - pyb.freq(60000000) # set CPU freq to 60MHz
6 A3 h2 F9 r9 g6 Q1 ^, C - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 8 }, g, Z2 t& g* o9 X7 f
; V2 H$ n' P2 |延迟和计时使用 time模块: - import time0 D$ ?6 \& A$ `9 p
9 F/ I+ z G' l6 i- time.sleep(1) # sleep for 1 second
# E, N* Q- y4 n1 `4 T - time.sleep_ms(500) # sleep for 500 milliseconds
! K5 W9 f4 ^5 ~& N8 _6 b+ p3 @ - time.sleep_us(10) # sleep for 10 microseconds# V* i5 J; o" u+ S
- start = time.ticks_ms() # get value of millisecond counter6 @# U& h7 h5 {9 N8 N k
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 0 H, e8 u2 H5 g# }0 c2 c
; v, b# b) `! B" P) c2 D内部 LED见 pyb.LED. - from pyb import LED+ b) o" K `% N- D+ e6 E* G
- % l7 e) X- w: _8 d
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue) _( U% I/ v* u u
- led.toggle()
C1 o8 b4 k8 f1 [# {& y( j - led.on()
, E: i8 H" v2 E5 E! S! f5 }* M - led.off()
$ E% J) C6 v, w0 _6 k
' Q3 u5 I) B7 u- # LEDs 3 and 4 support PWM intensity (0-255)
& v/ M! [7 N6 v. @( \" {. ~ - LED(4).intensity() # get intensity; i) {% \5 f5 @9 `+ Z- C
- LED(4).intensity(128) # set intensity to half
复制代码 ( I' R* P# |9 y
9 r0 N& c( x( e/ ?& T
内部开关请参阅 pyb.Switch. - from pyb import Switch \5 S/ F( Y* U0 Y0 Q0 b6 E0 Y
0 h+ E& w9 a v! q P- sw = Switch() I! d% U _2 ~/ F# \/ k( w0 e5 U
- sw.value() # returns True or False+ s2 [7 w+ D9 g3 K
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
/ Z, e5 W2 }2 H0 Z
4 L, o; W4 u$ P) T1 `4 V$ E引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
; P6 {- _2 q" B( {/ w' u; M - 3 L! \9 T; N7 v: B
- p_out = Pin('X1', Pin.OUT_PP)
. L: o6 F# v( d/ G - p_out.high()
& o4 s! H1 E6 i: u: y( G" Q+ u' ] - p_out.low()
3 p6 h4 Q; G8 { - ! |5 k# `; U4 L v
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP). u4 {3 z3 V S1 H9 z
- p_in.value() # get value, 0 or 1
复制代码 $ q" G5 f9 c0 N+ H' ]
$ S6 i2 B; e2 K4 T1 k1 d9 z
伺服控制请参阅pyb.Servo. - from pyb import Servo' c& \7 v) r) T- P% B9 k2 F5 k
- ' R2 p+ A5 z+ X
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
3 W" O" A, t2 b7 S }5 f+ I - s1.angle(45) # move to 45 degrees
) T9 W' p- }, j/ d6 n - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
1 Q0 @2 v. w3 c$ K- e8 `; z - s1.speed(50) # for continuous rotation servos
复制代码 8 E( k: N* B9 X Q: M
$ S$ w& z) a. |+ o
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt+ J3 V( c9 ^6 X
- & D" @8 q4 K5 [6 z/ I
- callback = lambda e: print("intr")
( ]7 y" ^& t2 B/ O8 i8 E" o - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 5 h* v, @. R% x
4 B; s& u0 h6 n, G: u. h! D" j计时器请参阅pyb.Timer. - from pyb import Timer
0 p$ Y v2 S U. }/ J& ^
7 f8 f# q8 U& z2 I- tim = Timer(1, freq=1000)
& P! n6 f7 h* ], D/ W5 g. A9 Q3 ~ k3 \ - tim.counter() # get counter value
, W! d+ U8 _) B - tim.freq(0.5) # 0.5 Hz
" B; Q% c! @: {" P8 O1 L - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 ; {2 J+ q/ ?" }, w/ k9 U- y$ F! h2 v! `
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
; P! c9 C( b1 A/ X7 Z
+ P: a1 m2 _ e- rtc = RTC()* C" ]* j8 _% n$ C) v! l0 `
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time3 V% ?) _- e1 Q2 ^, _: Q9 _9 i
- rtc.datetime() # get date and time
复制代码 , Q; t M3 a! g1 B( q/ v% ]1 s
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
9 V9 a' a% J) f% H4 S6 ^5 [# e# q - 3 S x7 f) Q, ~
- p = Pin('X1') # X1 has TIM2, CH1: K2 q0 t: Q' b4 K6 |
- tim = Timer(2, freq=1000)
6 A" A1 W5 U2 ^" t. u - ch = tim.channel(1, Timer.PWM, pin=p), c" B4 M4 W' {6 V. y( B t
- ch.pulse_width_percent(50)
复制代码
1 L( W: ]7 O- X& S: J# T" Y7 C! rADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
, c! M, j2 F0 ] - , A6 j2 W6 d. |% Q
- adc = ADC(Pin('X19'))/ y2 h; J, c! G' p
- adc.read() # read value, 0-4095
复制代码 ) Z6 q7 f* M# {6 ?! ]
0 u/ V' _4 Q/ q/ N
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC% }) @: _( z# A
- $ }( f9 l9 [2 X$ ~! n# T* O
- dac = DAC(Pin('X5'))
7 ~5 a- Y0 Z' J: [, g, _$ u - dac.write(120) # output between 0 and 255
复制代码 " y! o8 V3 q! [$ i
: U5 i6 h; |2 t( OUART(串行总线)请参阅 pyb.UART. - from pyb import UART& H7 u) H. P- M, |0 e( C- [: Q
. C& H( `+ Z- F8 ]4 ~: |- uart = UART(1, 9600)
6 v/ P% d9 ^6 Q0 l4 m) s - uart.write('hello')6 C3 B5 P( C* g
- uart.read(5) # read up to 5 bytes
复制代码 ; `" H4 R0 h& o; g# i9 j
/ G# R* b& @: ]
SPI总线请参阅 pyb.SPI. - from pyb import SPI% V' T: V2 J I3 m
3 O* q9 p" g) o' k- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)0 d' J3 S2 f/ M+ {2 _' p4 b s- j
- spi.send('hello')5 F H/ m9 P c) Z2 n
- spi.recv(5) # receive 5 bytes on the bus2 E( J# z. d H) B; E2 Y" U
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
& O5 R& b* K! |( m7 y" }. j' D3 j: l# W6 M
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
( ?/ [/ y! B. c9 P9 q* ]$ G" h - / z: x# \$ N+ i. T R) O
- i2c = I2C('X', freq=400000) # create hardware I2c object+ F8 @( @2 R' H, A) t1 `
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object, a5 i# K0 `; f7 ^* u/ k
8 g- I8 i6 f# q- i2c.scan() # returns list of slave addresses
# F( c8 n# A( `) n - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
# w. y/ |" D. x) J - i2c.readfrom(0x42, 5) # read 5 bytes from slave
( [' Y: P2 b1 G8 E6 K2 s - % y+ R/ G' v' }9 w% i. {* s
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
. M, Q% L1 x4 i* r - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 3 K3 K; R1 k! @8 o8 g1 ?8 Y
7 Z m/ ~, U0 m
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
, i' b# K5 i; v: A+ W, C3 Y! iI2S总线参见 machine.I2S. - from machine import I2S, Pin& p1 [/ H9 V3 a; o% V
3 P( k$ [& e2 p M- i' 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
, K4 c5 \- n9 P+ R - i2s.write(buf) # write buffer of audio samples to I2S device8 n6 F# m3 e2 z4 r5 H, }; i) ^8 k
- : v* b9 [' Z, g& M
- 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 object5 I p, m2 k, B+ k
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 4 L3 }& n$ G' C/ R
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 9 C, ~# N% s8 r, e
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN' ?7 l; S; y6 O5 ?* n% k
- 8 A9 ]3 T1 ?- t5 J) u& z2 s
- can = CAN(1, CAN.LOOPBACK)
3 U% r: x9 o' b% e! N, f: l( \ - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
; g' U+ i! @# w j - can.send('message!', 123) # send a message with id 123
, l, y7 ^7 e t" X, }! W0 U6 ^ - can.recv(0) # receive message on FIFO 0
复制代码
8 |' h( |* Q. C. s# Z" [! U
1 C. Y" R- F7 ?1 L' @! d内部加速度计参见pyb.Accel. - from pyb import Accel+ Q8 h( O) E2 _
- " i$ S0 p. P* I$ \; M
- accel = Accel()
4 m$ f( }* v$ F0 B) D - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 ; o n" G6 }. k5 E4 s
" |- r/ d9 u/ w7 [& ` C# m |