乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       拾叁億人 2019-07-13

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

      今天我們先來(lái)學(xué)習(xí)ESP12系列的基礎(chǔ)功能和應(yīng)用。

      中斷功能

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

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

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

      參數(shù):

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

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

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

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

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

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

      返回值: 無(wú);

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

      函數(shù): detachInterrupt(pin)

      參數(shù):

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

      返回值: 無(wú);

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

      函數(shù): digitalPinToInterrupt(pin)

      參數(shù):

      pin:要獲取中斷號(hào)的GPIO引腳。

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

      模擬輸入(ADC)

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

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

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

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

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

      編寫一個(gè)讀取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 對(duì)應(yīng) 外部輸入電壓 0-1.0v //延時(shí)1s delay(1000);}

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

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

      注意點(diǎn)

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

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

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

      例程

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

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

      模擬輸出(PWM)

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

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

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

      1.analogWrite()不解釋

      2.analogWriteRange() 該功能用于改變PWMRANGE數(shù)值。可以理解為PWM精度范圍。同樣的PWM頻率下,默認(rèn)占空數(shù)值0-123。如果你改變PWMRANGE為2047,那么占空數(shù)值就變成0-2047。精度高了一倍。

      函數(shù): analogWriteRange(new_range)

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

      函數(shù): analogWriteFreq(new_frequency)

      串口通信(Serial)

      NodeMcu上有兩組串口,Serial和Serial1。Serial使用UART0,默認(rèn)對(duì)應(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。不過(guò),一般情況下,默認(rèn)就好。

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

      Serial1使用UART1,默認(rèn)對(duì)應(yīng)引腳是GPIO2(TX)。Serial1不能用于接收數(shù)據(jù),因?yàn)樗腞X引腳被用于flash芯片連接。要使用Serial1,請(qǐng)調(diào)用Serial.begin(baudrate)。代碼如下:

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

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

      默認(rèn)情況下,當(dāng)調(diào)用Serial.begin后,將禁用WiFi庫(kù)的診斷輸出。要想再次啟動(dòng)調(diào)試輸出,請(qǐng)調(diào)用Serial.setDebugOutput(true)。要將調(diào)試輸出映射到Serial1時(shí),需要調(diào)用Serial1.setDebugOutput(true)。

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

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

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

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

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

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多