小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ESP 12系列arduino環(huán)境開發(fā)基礎(chǔ)

 拾叁億人 2019-07-13

從今天開始,我們一點點的學習ESP12系列的使用。從基礎(chǔ)開始,到提高,到網(wǎng)絡(luò)應(yīng)用,到實例。過程可能有些枯燥,但是耐下性子學,肯定會有收獲。而且有了arduino的基礎(chǔ),學習這些都不難。限于篇幅,我們只講與arduino不同的地方。

今天我們先來學習ESP12系列的基礎(chǔ)功能和應(yīng)用。

中斷功能

基于ESP8266的NodeMcu的數(shù)字IO的中斷功能是通過attachInterrupt,detachInterrupt函數(shù)所支持的。除了D0/GPIO16,中斷可以綁定到任意GPIO的引腳上。所支持的標準中斷類型有:CHANGE(改變沿,電平從低到高或者從高到低)、RISING(上升沿,電平從低到高)、FALLING(下降沿,電平從高到低)。

1.attachInterrupt() 該功能用于在將指定引腳設(shè)置為響應(yīng)中斷。

函數(shù): attachInterrupt(pin, function, mode);

參數(shù):

pin:要設(shè)置中斷的端口編號,注意,這里不是引腳編號。

function:中斷發(fā)生時運行的函數(shù), 這個函數(shù)不帶任何參數(shù),不返回任何內(nèi)容。

Interrupt type/mode:它定義中斷被觸發(fā)的條件方式。

CHANGE:改變沿,引腳電平從低變?yōu)楦呋蛘邚母咦優(yōu)榈蜁r觸發(fā)中斷。

RISING:上升沿,引腳電平從低變?yōu)楦邥r觸發(fā)中斷。

FALLING:下降沿,引腳電平從高變?yōu)榈蜁r觸發(fā)中斷。

返回值: 無;

2.detachInterrupt() 該功能用于禁用指定GPIO引腳上的中斷。

函數(shù): detachInterrupt(pin)

參數(shù):

pin:要禁用的中斷的GPIO引腳。

返回值: 無;

3.digitalPinToInterrupt() 該功能用于獲取指定GPIO引腳的中斷號。

函數(shù): digitalPinToInterrupt(pin)

參數(shù):

pin:要獲取中斷號的GPIO引腳。

void setup() { Serial.begin(115200);//設(shè)置串口波特率 attachInterrupt(digitalPinToInterrupt(D2), InterruptFunc, RISING);//設(shè)置中斷號、響應(yīng)函數(shù)、觸發(fā)方式 } void loop() { } /** * 中斷響應(yīng)函數(shù) */ void InterruptFunc(){ Serial.println('Hello ESP8266'); }

模擬輸入(ADC)

1.測量外部電壓:analogRead(A0),用于讀取施加在模塊的ADC引腳上的外部電壓;

輸入電壓范圍:0 - 1.0V之間;

測量精度:由于ADC具有10位分辨率,因此會給出0-1023的值范圍;

注意點: 為了支持外部電壓范圍(0-3.3v),NodeMcu做了一個電阻分壓器,如圖所示:

ESP 12系列arduino環(huán)境開發(fā)基礎(chǔ)

編寫一個讀取NodeMcu的ADC引腳上的模擬電壓。我們這里使用電位器在ADC引腳上提供0-3.3V的可變電壓。如下圖連接線:

ESP 12系列arduino環(huán)境開發(fā)基礎(chǔ)

void setup() { Serial.begin(115200);//配置波特率}void loop() { Serial.print('ADC Value: '); Serial.println(analogRead(A0));//輸出0-1023 對應(yīng) 外部輸入電壓 0-1.0v //延時1s delay(1000);}

2 測量系統(tǒng)電壓

ESP.getVcc(),讀取NodeMCU模塊的VCC電壓,單位是mV;

注意點

ADC引腳必須保持懸空;在讀取VCC電源電壓之前,應(yīng)更改ADC模式以讀取系統(tǒng)電壓。

在#include行后面使用ADC_MODE(mode)

模式是ADC_TOUT(對于外部電壓),ADC_VCC(對于系統(tǒng)電壓)。默認情況下,它讀取外部電壓。

例程

編寫ESP8266讀取系統(tǒng)電壓,代碼如下:

ADC_MODE(ADC_VCC);//設(shè)置ADC模式為讀取系統(tǒng)電壓void setup() { Serial.begin(115200);}void loop() { Serial.print('ESP8266當前系統(tǒng)電壓(mV): '); Serial.println(ESP.getVcc()); delay(1000);}

模擬輸出(PWM)

NodeMcu PWM引腳:基本上數(shù)字IO都可以作為PWM復(fù)用引腳,除了D0。不過需要注意的是,D3盡量不用,它內(nèi)部連接ESP8266 GPIO0。

ESP 12系列arduino環(huán)境開發(fā)基礎(chǔ)

NodeMcu PWM有關(guān)Arduino函數(shù)

1.analogWrite()不解釋

2.analogWriteRange() 該功能用于改變PWMRANGE數(shù)值??梢岳斫鉃镻WM精度范圍。同樣的PWM頻率下,默認占空數(shù)值0-123。如果你改變PWMRANGE為2047,那么占空數(shù)值就變成0-2047。精度高了一倍。

函數(shù): analogWriteRange(new_range)

analogWriteFreq()該功能用于改變PWM頻率。默認是1kHZ??煽豍WM頻率范圍應(yīng)該是100Hz-40KHz。

函數(shù): analogWriteFreq(new_frequency)

串口通信(Serial)

NodeMcu上有兩組串口,Serial和Serial1。Serial使用UART0,默認對應(yīng)引腳是GPIO1(TX)和GPIO3(RX)。在Serial.begin執(zhí)行之后,調(diào)用Serial.swap()可以將Serial重新映射到GPIO15(TX)和GPIO13(RX)。再次調(diào)用Serial.swap()將Serial重新映射回GPIO1和GPIO3。不過,一般情況下,默認就好。

void setup() { // 這里開始寫初始化代碼,只會執(zhí)行一次 Serial.begin(115200); Serial.println('GPIO1(TX),GPIO3(RX)'); //調(diào)用映射方法 Serial.swap(); Serial.println('GPIO15(TX),GPIO13(RX)'); //重新映射回來 Serial.swap(); Serial.println('GPIO1(TX),GPIO3(RX)');}void loop() { //這里寫運行代碼,重復(fù)執(zhí)行}

Serial1使用UART1,默認對應(yīng)引腳是GPIO2(TX)。Serial1不能用于接收數(shù)據(jù),因為它的RX引腳被用于flash芯片連接。要使用Serial1,請調(diào)用Serial.begin(baudrate)。代碼如下:

void setup() { // 這里開始寫初始化代碼,只會執(zhí)行一次 Serial.begin(115200); Serial.println('Hello Serial'); Serial1.begin(115200); Serial1.println('Hello Serial1');}void loop() { //這里寫運行代碼,重復(fù)執(zhí)行}

如果不使用Serial1并且不映射串口,可以將UART0的TX映射到GPIO2,具體操作是:在Serial.begin()之后調(diào)用Serial.set_tx(2)或者直接調(diào)用Serial.begin(baud,config,mode,2)。

默認情況下,當調(diào)用Serial.begin后,將禁用WiFi庫的診斷輸出。要想再次啟動調(diào)試輸出,請調(diào)用Serial.setDebugOutput(true)。要將調(diào)試輸出映射到Serial1時,需要調(diào)用Serial1.setDebugOutput(true)。

調(diào)用Serial.setRxBufferSize(size_t size)允許定義接收緩沖區(qū)的大小,默認值是256(緩沖區(qū)也是使用內(nèi)存,意味著不能一味地去增大這個值)。

Serial和Serial1對象都支持5,6,7,8個數(shù)據(jù)位,奇數(shù)(O)、偶數(shù)(E)和無(N)奇偶校驗,以及1或者2個停止位。要設(shè)置所需的模式,請調(diào)用Serial.begin(baudrate, SERIAL_8N1), Serial.begin(baudrate, SERIAL_6E2)等。

Serial和Serial1都實現(xiàn)了一種新方法用來獲取當前的波特率設(shè)置。要獲取當前的波特率,請調(diào)用Serial.baudRate(),Serial1.baudRate()。代碼如下:

void setup() { // 這里開始寫初始化代碼,只會執(zhí)行一次 // 設(shè)置當前波特率為57600 Serial.begin(57600); // 獲取當前波特率 int br = Serial.baudRate(); // 將打印 'Serial is 57600 bps' Serial.printf('Serial is %d bps', br);}void loop() { //這里寫運行代碼,重復(fù)執(zhí)行}

Serial和Serial1都屬于硬件串口(HardwareSerial)的實例,如果讀者需要使用ESP8266 軟件串口的功能,請參考以下庫:https://github.com/plerup/espsoftwareserial。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多