1. 程式人生 > 其它 >MicroPython_ESP8266_IoT——第三回 紙上得來(學習手冊知識點)

MicroPython_ESP8266_IoT——第三回 紙上得來(學習手冊知識點)

技術標籤:# MicroPython_ESP8266_IoT 正傳MicroPythonIoTESP8266貝殼物聯

第三回 紙上得來(學習手冊知識點)

已經會使用UART prompt進行MicroPython在ESP8266模組上的使用了,即將解鎖眾多玩法。

本系列是想通過ESP8266做IoT裝置,就先來挖掘“物”的使用,學習ESP8266模組配合MicroPython常用的外設驅動。

核心時鐘

可以通過模組machine,對CPU核心時鐘進行修改,預設是80MHz,可超頻至160MHz:

import machine

machine.freq()          # get the current frequency of the CPU
machine.freq(160000000) # set the CPU frequency to 160 MHz

沒有嘗試過最高多少,一般情況下,當然是設定為160 MHz,速度快用起來才爽。

可以通過模組esp,開啟或關閉除錯資訊重定向(此處預設應為開啟):

import esp

esp.osdebug(None)       # turn off vendor O/S debugging messages
esp.osdebug(0)          # redirect vendor O/S debugging messages to UART(0)

網路連結

用ESP8266模組,那聯網的功能肯定不能少,網路連結模組工作方式在network中。

其中wlan可以工作在STA_IFAP_IF兩種狀態,STA_IF狀態可以通過connect方法輸入WIF賬號和密碼連線到網路;AP_IF狀態可以建立名稱特定的熱點。

import network

wlan = network.WLAN(network.STA_IF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect('essid', 'password') # connect to an AP wlan.config('mac') # get the interface's MAC adddress wlan.ifconfig() # get the interface's IP/netmask/gw/DNS addresses ap = network.WLAN(network.AP_IF) # create access-point interface ap.active(True) # activate the interface ap.config(essid='ESP-AP') # set the ESSID of the access point

可以通過下面這種方式連線到本地的WIFI網路:

def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('essid', 'password')
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())

上述程式中需要替換essid為要連線的WIFI名稱,替換password為要連線的WIFI密碼。

一旦網路連線建立,socket模組就可以被建立使用。

後續設計中可以先以AP_IF方式,輸入需要連結的WIFI賬號和密碼,再以STA_IF方式接入網路。

延時和時間

可以使用time模組:

import time

time.sleep(1)           # sleep for 1 second
time.sleep_ms(500)      # sleep for 500 milliseconds
time.sleep_us(10)       # sleep for 10 microseconds
start = time.ticks_ms() # get millisecond counter
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference

模組中延時引數是可以傳輸float(小數)型別。

引腳和GPIO

可以使用machine.Pin類:

from machine import Pin

p0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.on()                 # set pin to "on" (high) level
p0.off()                # set pin to "off" (low) level
p0.value(1)             # set pin to on/high

p2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1

p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation

這個類就定義引腳輸入和輸出型別,仔細觀察發現還可以設定內部上拉。

通過配置GPIO控制LED點亮和熄滅,在前面已經瞭解過了;能夠配置GPIO高低電平,那麼後面的操作就是錦上添花了。

PWM

PWM可以在除了PIN(16)的所有Pin使用。所有通道都有一個頻率,從1 Hz到1000 Hz,佔空比從0 到 1023;

使用machine.PWM類:

from machine import Pin, PWM

pwm0 = PWM(Pin(0))      # create PWM object from a pin
pwm0.freq()             # get current frequency
pwm0.freq(1000)         # set frequency
pwm0.duty()             # get current duty cycle
pwm0.duty(200)          # set duty cycle
pwm0.deinit()           # turn off PWM on the pin

pwm2 = PWM(Pin(2), freq=500, duty=512) # create and configure in one go

通過調節佔空比,可以調整pin 2上連線的LED燈的亮度。如果進行合理的時間搭配,還可以達到呼吸燈的效果:

import time, math, machine

led = machine.PWM(machine.Pin(2), freq=1000)

def pulse(l, t):
    for i in range(400):
        l.duty(int(math.sin(i / 200 * math.pi) * 500 + 523))
        time.sleep_ms(t)
        
def fading():
    for i in range(50):
    	pulse(led, 5)

可以看一下實際效果圖GIF:

breath

可以通過調整sin函式的係數,來調節呼吸的頻率;通過調節佔空比的基礎數值(上述程式中為523),來調節亮,滅的時間範圍;

其他

後面還有其他的類和方法,都是介面相關的,想要等到後面有小製作的時候,再結合實物,詳細的說明。

如果感興趣,可以根據官網的教程走一遍,內容有ADC,SPI bus,I2C bus,RTC,Deep-sleep mode,OneWire driver,NeoPixel driver,APA102 driver,DHT dirver等,MciroPython官網連線教程在此

結束語

第三回比較緩和,適合自行嘗試,學習。這部分內容學習之後,就會有很多想法,對於物的操作是需要根據需求來實現的。

接下來,一起學習第四回,初入聯網,使用ESP8266模組接入貝殼物聯。

2020-12-20;