micropython函式筆記

 micropython函式筆記

執行micropython所須載入的模組

from machine import Pin

設定接腳輸出入

Pin(腳位, Pin.OUT)----輸出
Pin(腳位, Pin.IN)----輸入

value()讀取值

例:
button=Pin(2, Pin.IN)
button.value()

PWM

匯入PWM模組
from machine import PWM

設定引腳和頻率
PWM(Pin(引腳), freq=頻率)--一般用5000即可

設定占空比
變數.duty(占空比)---0~1023

例:
from machine import PinPWM
from time import sleep

led = PWM(Pin(4), freq=5000)
while True:
    for duty_cycle1 in range(0100010):
        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 引腳具有 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

讀取值
變數.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.recv(bufsize)

函数说明:接收数据,返回接收到的数据对象。

  • bufsize:指定一次接收的最大数据量

示例:

data = conn.recv(1024)

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  白色


Timer定時器

Timer(編號)---編號可以是0~3,(esp8266編號是-1)
init(週期, 模式, 回呼)---計時器啓動執行
  • preiod(週期)--間隔時間以ms(毫秒)
  • mode(模式)--Timer.PERIODIC(週期定時執行)/Timer.ONE_SHOT(只執行一次)
  • callback()--事件發生被執行的函式
deinit()---解除計時器

用法

from machine import PinTimer

led = Pin(13Pin.OUT)

tim = Timer(-1)
tim.init(period=500mode=Timer.PERIODICcallback=lambda t:led.value(not led.value()))
try:
    while True:
        pass
except KeyboardInterrupt:
    tim.deinit()
    print('stopped')

留言

這個網誌中的熱門文章

使用PWM控制伺服馬達-micropython

DHT11+OLED+IFTTT+LINE-notity-micropython

BMP280氣壓,溫度模組-micropython