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_IF
和AP_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:
可以通過調整sin
函式的係數,來調節呼吸的頻率;通過調節佔空比的基礎數值(上述程式中為523),來調節亮,滅的時間範圍;
其他
後面還有其他的類和方法,都是介面相關的,想要等到後面有小製作的時候,再結合實物,詳細的說明。
如果感興趣,可以根據官網的教程走一遍,內容有ADC,SPI bus,I2C bus,RTC,Deep-sleep mode,OneWire driver,NeoPixel driver,APA102 driver,DHT dirver等,MciroPython官網連線教程在此 。
結束語
第三回比較緩和,適合自行嘗試,學習。這部分內容學習之後,就會有很多想法,對於物的操作是需要根據需求來實現的。
接下來,一起學習第四回,初入聯網,使用ESP8266模組接入貝殼物聯。
2020-12-20;