pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: 4 R2 |/ w% Y% n2 `1 m3 |8 [
通用板控制见 pyb. - import pyb
7 m+ y/ m) U$ L! v3 I& n6 D - 1 g! f4 ~" h$ H: R. n4 _
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1); |6 m, Y0 T7 I2 C$ ]" f M( L
- pyb.wfi() # pause CPU, waiting for interrupt2 V# n- i) z2 B4 B
- pyb.freq() # get CPU and bus frequencies
/ @# M/ n1 X- V - pyb.freq(60000000) # set CPU freq to 60MHz
1 f X- o; [* c$ Q/ n - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 2 B6 T8 q7 e+ U) f+ a
; [" i+ P3 C/ h9 Q$ g5 J0 i3 ^
延迟和计时使用 time模块: - import time
, @1 ]! Z+ z9 b& E# `) B3 l - * ]4 y, x4 K* f4 I8 x8 S
- time.sleep(1) # sleep for 1 second# m L% Q4 W, k4 \
- time.sleep_ms(500) # sleep for 500 milliseconds1 V7 w( C" u9 g: r1 v
- time.sleep_us(10) # sleep for 10 microseconds5 D: W- H' H( P9 M1 C
- start = time.ticks_ms() # get value of millisecond counter
; j+ C; E: l# d& T% m - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 / y; E: _- h% s0 \
6 M6 G, v, e( P7 H9 q. S内部 LED见 pyb.LED. - from pyb import LED& D) b5 F# G' U0 x! `, ]( X
* }8 s0 Y! L4 _3 X- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
# t/ t' A7 c# A" V - led.toggle()
, w4 T* e$ `% G; D: U - led.on()7 v% c, f5 ^1 d& V+ B! N! b
- led.off()
! C, {$ ]! w2 Z+ I4 u, `0 c0 [
: ^2 U/ r; L L& H% B- # LEDs 3 and 4 support PWM intensity (0-255)
) W: q4 q1 o" R! j - LED(4).intensity() # get intensity; T* [4 u1 Y+ s J/ S
- LED(4).intensity(128) # set intensity to half
复制代码 ) ?7 h' `4 Z" d. a
( x; i( {: P2 a6 M! ~
内部开关请参阅 pyb.Switch. - from pyb import Switch/ p* p' G* _ q$ E6 J( O
. P/ d" E* f! `) } Y# M2 N- X0 ~- sw = Switch()
$ d; q m3 a3 _ - sw.value() # returns True or False
% F: g9 W0 s, r4 i& r - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
. ^3 r5 l y+ e( B; W9 L& `6 h: b0 S y, I; ]7 J3 F" u8 l
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
2 A( z6 S, J% A
2 n$ O' U6 S* S/ J- p_out = Pin('X1', Pin.OUT_PP)1 G4 ^) G. i. p; F! D. c! `
- p_out.high()5 z4 ^4 n+ K3 h
- p_out.low()$ c" }3 [ x" d/ F; P- T: `
5 e" R0 `4 w+ ], i, j) @5 j& A- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
" Y% k% o. w' n - p_in.value() # get value, 0 or 1
复制代码
: D) a3 s& ?& ^) ]5 F8 R; o$ q2 {! ]& \8 k1 J
伺服控制请参阅pyb.Servo. - from pyb import Servo
0 v3 c# R9 ]' X0 X5 @
: m" r( T2 X0 u; W2 Q* x: {, a$ j; t- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)! }& F( T& B. |0 a
- s1.angle(45) # move to 45 degrees: u1 L, ^+ ?! C# E- @
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms0 z& ?$ X" I: O7 p) p
- s1.speed(50) # for continuous rotation servos
复制代码
1 `" N4 ^' x( D, A0 e
% D! k+ d) `9 m. v, o9 B# B+ y外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
* j5 w" t3 X! b2 i- o+ e' f+ U! q - 8 L7 R" k9 {8 T" z L
- callback = lambda e: print("intr")
7 i' W0 \; s2 c* t" [4 m - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 ) `( \- p! a' I; b1 M
3 [. N, ^2 |1 m( m7 D. i8 ?计时器请参阅pyb.Timer. - from pyb import Timer
" T& f- H; n% d0 K+ h% E: c4 p' Y3 f
2 U7 j+ w3 M3 u6 l0 D- tim = Timer(1, freq=1000) }3 n8 A, l& ]* L# l
- tim.counter() # get counter value) ^' [* ? q0 E
- tim.freq(0.5) # 0.5 Hz
* h9 F/ r+ H; g# k - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
1 I \& ^9 e6 n2 ^) x' e" gRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC- w" V# j5 f+ }* M1 `
- 2 s: D/ |" G4 E$ @$ L% h/ @, X
- rtc = RTC()9 y; g' ~9 d# b/ x
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time. b+ t* w1 i$ v P, d5 ~& k
- rtc.datetime() # get date and time
复制代码
9 V4 D$ l9 n+ H) Z; q% `. S" f% YPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer3 K7 B+ m4 o4 Q. U% f6 q
' ^! F7 p4 I0 E- p = Pin('X1') # X1 has TIM2, CH1. J4 n5 T% M6 W5 X: I8 a7 G
- tim = Timer(2, freq=1000)) A+ ~) ?& o# j$ U7 ]- B, I0 f
- ch = tim.channel(1, Timer.PWM, pin=p)$ b- {6 e# `5 B) g! v/ N5 m" u
- ch.pulse_width_percent(50)
复制代码 ) Z2 G6 o# s3 y9 i# `( ^$ ^
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
% {( s& U# @; n4 N0 V$ ` - ; e8 @2 X* @& r
- adc = ADC(Pin('X19'))) Q0 n" _1 S$ c; z4 B0 w& ]
- adc.read() # read value, 0-4095
复制代码 2 S- s9 p X& [# E7 I5 \5 G. z2 N {
) } {% U8 I+ Y- @. J& z& }- o! w
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
( {; }2 g& T1 J. G) \/ } - 8 C: V/ ?8 Z7 T% K: T
- dac = DAC(Pin('X5')): [7 q; u7 Q3 L& L3 u. C
- dac.write(120) # output between 0 and 255
复制代码 & U$ f2 M. \4 t) j
) u* o3 E7 g0 |; @2 o# K, [. O# O
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
' }# B0 g7 `: v - 6 I7 D8 _7 Z# U z- G
- uart = UART(1, 9600)8 K& u, H# {' G: X" h4 @9 E
- uart.write('hello')
3 N9 g5 U# L+ h8 n - uart.read(5) # read up to 5 bytes
复制代码
7 g3 P) R& p& i6 k: Y% Y$ C2 ^5 `9 Q1 S0 A
SPI总线请参阅 pyb.SPI. - from pyb import SPI5 b- j8 {. _ W1 U5 B9 G r) @ c
- 8 m" @1 t7 b1 O! j1 s
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
, r) i1 _$ ^ j; E2 @5 O - spi.send('hello')7 b x1 E/ c: I0 }1 ?. Z
- spi.recv(5) # receive 5 bytes on the bus9 H0 c6 p; i- S' l. T! ^
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
9 M7 a# D! i( S2 V6 d( \) @$ r9 m8 p' O0 w' Y- E
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
* y4 c. i! O* b* W5 U
+ ?4 n: |; H; t( |- i2c = I2C('X', freq=400000) # create hardware I2c object
+ U! a/ ^0 x$ n' q5 s0 w" b - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object' g9 X+ c( v, v+ R
- W; O# [7 m4 y7 [0 L/ J- i2c.scan() # returns list of slave addresses/ M0 P3 v+ v+ \7 L
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x421 M2 F! [3 v. \' z8 w
- i2c.readfrom(0x42, 5) # read 5 bytes from slave+ F: e/ g) R3 ]: l
. P! ]9 o/ v7 Z4 \) k- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10: @, O& M( H/ ]* S2 ]+ G* W0 r' a: ^
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 / d7 r" S+ n8 B% B& {% s
8 Z# p: j; i; I R/ w
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
) v1 B9 [2 e9 @' g- n. T8 ~8 HI2S总线参见 machine.I2S. - from machine import I2S, Pin! R% w% e7 k7 D1 e9 e! D
. g# f$ v6 R6 n4 x3 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
, S8 u4 r3 h \" k6 M - i2s.write(buf) # write buffer of audio samples to I2S device
( @$ H" m) y5 ~" [: Q( L$ d
" ]- ?8 b; L& x# H- 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
4 i) a4 L$ G O& q3 j; {4 { - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
; ]" \( Z: v% q& n9 QI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
5 v. {2 `; p; S5 o$ e9 \# Q: z0 tCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
0 F9 S3 I9 ~8 n8 V" B
- U# Z; [! Z6 n& ?1 Y- can = CAN(1, CAN.LOOPBACK)9 d! n( M9 w4 `$ ~, G( n* ~4 B
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))8 j) ?* o/ x8 U2 x L6 o
- can.send('message!', 123) # send a message with id 123& Y' ^( c; S( j3 _. l
- can.recv(0) # receive message on FIFO 0
复制代码
Z# f$ E% l- l& [1 C' t' [4 @( u6 j* x0 D6 a0 {' d: Q
内部加速度计参见pyb.Accel. - from pyb import Accel
) M5 n U/ i& |. ^+ _( `0 O - ! a; X4 o; B' ^, G7 f7 j* P
- accel = Accel()3 z8 ~2 e8 f v. y3 Q/ F! ^
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 3 U% c/ c) G3 g/ A2 L
/ R) T1 e \; _* `
|