micropython函式筆記
micropython函式筆記
執行micropython所須載入的模組
from machine import Pin
設定接腳輸出入
Pin(腳位, Pin.OUT)----輸出
Pin(腳位, Pin.IN)----輸入
value()讀取值
例:
button=Pin(2, Pin.IN)
button.value()
匯入PWM模組
from machine import PWM
設定引腳和頻率
PWM(Pin(引腳), freq=頻率)--一般用5000即可
設定占空比
變數.duty(占空比)---0~1023
例:
from machine import Pin, PWM
from time import sleep
led = PWM(Pin(4), freq=5000)
while True:
for duty_cycle1 in range(0, 1000, 10):
led.duty(duty_cycle1)
sleep(0.05)
類比(analog)
載入ADC
from machine import ADC
設定ADC腳位
ADC(Pin(腳位))
設定衰減值
變數.atten(ADC.ATTN_11DB)----一般ESP32用11DB 3.3V
Atten() 方法可以採用以下參數:
ADC.ATTN_0DB——電壓:1.2V
ADC.ATTN_2_5DB——電壓:1.5V
ADC.ATTN_6DB——電壓:2.0V
ADC.ATTN_11DB——電壓:3.3V
ADC.ATTN_0DB——電壓:1.2V
ADC.ATTN_2_5DB——電壓:1.5V
ADC.ATTN_6DB——電壓:2.0V
ADC.ATTN_11DB——電壓:3.3V
默認情況下 ADC 引腳具有 12 位分辨率。想要獲取其他範圍內的值。可以使用 width() 方法更改分辨率,如下所示:
ADC.width(bit)
參數可以是以下參數之一:
ADC.WIDTH_9BIT:範圍 0 到 511
ADC.WIDTH_10BIT:範圍 0 到 1023
ADC.WIDTH_11BIT:範圍 0 到 2047
ADC.WIDTH_12BIT:範圍 0 到 4095
ADC.WIDTH_9BIT:範圍 0 到 511
ADC.WIDTH_10BIT:範圍 0 到 1023
ADC.WIDTH_11BIT:範圍 0 到 2047
ADC.WIDTH_12BIT:範圍 0 到 4095
讀取值
變數.read()
WiFi
network.WLAN(mode)
mode:模式
network.STA_IF 站點模式,連接到上游WiFi接入點
network.AP_IF 熱點模式,允許其他WiFi客戶端連接
定義WLAN
import network
wlan = network.WLAN(network.STA_IF) #創建WLAN對象
函數
wlan.active(is_active/True/False)
函數說明:帶有參數時,為是否激活WiFi,不帶參數為查詢當前狀態。
is_active:是否激活
True 激活網絡接口
False 停用網絡接口
wlan.scan()
函數說明:掃描可用的無線網絡(僅在STA接口上進行掃描),返回有關WiFi接入點信息的元組列表。
(ssid,bssid,channel,RSSI,authmode,hidden)
bssid:接入點的硬件地址,以二進制形式返回為字節對象。可以使用ubinascii.hexlify()將其轉換為ASCII格式
authmode:
AUTH_OPEN = 0
AUTH_WEP = 1
AUTH_WPA_PSK = 2
AUTH_WPA2_PSK = 3
AUTH_WPA_WPA2_PSK = 4
AUTH_MAX = 6
hidden:
False 可見
True 隱藏
wlan.isconnected()
函數說明:檢查站點是否連接到AP。
在STA模式下,如果連接到WiFi接入點並具有有效的IP地址則返回True,否則返回False。
在AP模式下,當站點連接時返回True,否則返回False。
wlan.connect(essid, password)
函數說明:連接到無線網絡。
ssid:WiFi名稱
password:WiFi密碼
wlan.config(essid, channel)
函數說明: 獲取接口的MAC adddress或者設置WiFi接入點名稱和WiFi通道。
essid:WiFi賬戶名
channel:WiFi通道
wlan.ifconfig([(ip,mask, gateway, dns)])
函數說明:
不帶參數時,返回一個4元組(ip, subnet_mask, gateway, DNS_server)。
ip:IP地址
mask:子網掩碼
gateway:網關
帶參數時,配置靜態IP。例如
wlan.ifconfig(config = ('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8')
wlan.disconnect()
函數說明:斷開與當前連接的無線網絡的連接。
wlan.status()
函數說明:返回無線連接的當前狀態。
Socket通信
socket.socket([af, type, proto])¶
函数说明:创建套接字。
af
:地址type
:类型proto
:协议号
*注意: 一般不指定proto参数,因为有些Micropython固件提供默认参数。 *
示例:
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> print(s) <socket>
socket.socket.accept()¶
函数说明:接收连接请求。
注意:只能在绑定地址端口号和监听后调用,返回conn和address。
conn:新的套接字对象,可以用来收发消息
address:连接到服务器的客户端地址
示例:
conn,addr = s.accept()
socket.socket.send(bytes)¶
函数说明:发送数据,并返回发送的字节数。
- bytes:bytes类型数据
示例:
s.send("hello 1ZLAB, I am TCP Client")
socket.socket.sendall(bytes)¶
函数说明:与send()函数类似,区别是sendall()函数通过数据块连续发送数据。
- bytes:bytes类型数据
示例:
s.sendall("hello 1ZLAB, I am TCP Client")
單總線onewire
構造函數
ow=onewire.OneWire(machine.Pin(id))
構建單總線對象。 id:引腳編號;
使用方法
ow.scan()
掃描總線上的設備。返回設備地址,支持多設備同時掛載。
ow.reset()
總線設備復位。
ow.readbyte()
讀 1 個字節。
ow.writebyte(0x12)
寫入 1 個字節。
ow.write('123')
寫入多個字節。
ow.select_rom(b'12345678')
根據 ROM 編號選擇總線上指定設備。
感測器模組系列
DS18B20水溫感測
構造函數(須配合單總線)
ow=onewire.OneWire(machine.Pin(id))
構建單總線對象。 id:引腳編號;
使用方法
ow.scan()
掃描總線上的設備。返回設備地址,支持多設備同時掛載。
ow.reset()
總線設備復位。
ow.readbyte()
讀 1 個字節。
ow.writebyte(0x12)
寫入 1 個字節。
ow.write('123')
寫入多個字節。
ow.select_rom(b'12345678')
根據 ROM 編號選擇總線上指定設備。
ds=ds18x20.DS18X20(ow)
構建 DS18B20 傳感器對象。 ow:定義好的單總線對象;
使用方法
ds.scan()
掃描總線上的設備。返回設備地址,支持多設備同時掛載。
ds.convert_temp()
溫度轉換。
ds.read_temp(rom)
獲取溫度值。 rom:表示對應的設備號。
OLED
ESP32 默認的 I2C 引腳是 GPIO 22 (SCL) 和 GPIO 21 (SDA)。
須匯入ssd1306模組和i2c通訊模組
import ssd1306
from machine import SoftI2C
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
變數 scl腳位 sda腳位
在以下變量上定義 OLED 寬度和高度:
oled_width = 128
oled_height = 64
建立一個變數,賦予設制好的ssd1306模組並給予所須參數
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text('Hello, World 1!', x, y)
Text() 方法接受以下參數(按此順序):
消息:必須是字符串類型
X 位置:文本開始的位置
Y 位置:文本垂直顯示的位置
文字顏色:可以是黑色或白色。默認顏色為白色,該參數可選。
0 黑色
1 白色
消息:必須是字符串類型
X 位置:文本開始的位置
Y 位置:文本垂直顯示的位置
文字顏色:可以是黑色或白色。默認顏色為白色,該參數可選。
0 黑色
1 白色
Timer定時器
Timer(編號)---編號可以是0~3,(esp8266編號是-1)
init(週期, 模式, 回呼)---計時器啓動執行
- preiod(週期)--間隔時間以ms(毫秒)
- mode(模式)--Timer.PERIODIC(週期定時執行)/Timer.ONE_SHOT(只執行一次)
- callback()--事件發生被執行的函式
deinit()---解除計時器
用法
from machine import Pin, Timer
led = Pin(13, Pin.OUT)
tim = Timer(-1)
tim.init(period=500, mode=Timer.PERIODIC, callback=lambda t:led.value(not led.value()))
try:
while True:
pass
except KeyboardInterrupt:
tim.deinit()
print('stopped')
留言
張貼留言