項目1任務(wù)7-ESP32的Serial2操作_第1頁
項目1任務(wù)7-ESP32的Serial2操作_第2頁
項目1任務(wù)7-ESP32的Serial2操作_第3頁
項目1任務(wù)7-ESP32的Serial2操作_第4頁
項目1任務(wù)7-ESP32的Serial2操作_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

2相關(guān)知識34任務(wù)小結(jié)與練習(xí)1任務(wù)實施任務(wù)引入與目標(biāo)ESP32的Serial2操作一、任務(wù)引入與目標(biāo)任務(wù)目標(biāo)任務(wù)7實現(xiàn)串口設(shè)備A的按鍵按下后,通過Serial2發(fā)送控制命令給串口設(shè)備B。其中,A設(shè)備以JSON格式發(fā)送字符串,B設(shè)備接收解析后控制LED亮滅。任務(wù)引入前面幾個任務(wù)都是針對Serial操作的,Serial比較適合用于程序打印調(diào)試信息。如果要進(jìn)行與其他串口設(shè)備的串口通信,則使用Serial2串口是比較方便的。二、相關(guān)知識Arduino中的宏定義在Arduino中,宏定義是一種預(yù)處理指令,可以用來創(chuàng)建常量或簡化代碼。通過宏定義,程序員可以在程序中使用自定義的符號來代替常量或表達(dá)式。例如:#defineLED_PIN13該宏定義13為LED_PIN,這樣我們就可以在程序中使用LED_PIN來代替數(shù)字13。如果我們要改變使用的引腳,則只需要修改這個宏定義,而不需要修改整個程序。強制類型轉(zhuǎn)換在Arduino中,強制類型轉(zhuǎn)換是將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種數(shù)據(jù)類型的值的過程。強制類型轉(zhuǎn)換可以幫助我們在不同數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,并允許我們使用不同的算術(shù)和邏輯操作。比較常見的是C語言風(fēng)格的強制類型轉(zhuǎn)換,這種轉(zhuǎn)換使用括號將要轉(zhuǎn)換的值包圍起來,并指定要轉(zhuǎn)換的目標(biāo)類型。例如:intx=10;floaty=(float)x;在這個例子中,我們將整數(shù)變量x強制轉(zhuǎn)換為浮點數(shù),并將結(jié)果存儲在浮點型變量y中。三、任務(wù)實施實施設(shè)備部署了Arduino開發(fā)環(huán)境的計算機。實施過程1.硬件連接串口的引腳可以查看表1-2。引腳連接如下:Button_out———ESP32A_IO26

Button_GND———ESP32A_GNDButton_VCC———ESP32A_VCC

ESP32A_IO17———ESP32B_IO16ESP32A_IO16———ESP32B_IO17

ESP32A_GND———ESP32B_GNDLED_R———ESP32B_IO25

LED_GND———ESP32B_GND串口名Arduino名TXRXUART0Serialpin1(TXD0)pin3(RXD0)UART1Serial1pin10pin9UART2Serial2pin17pin16表1-2ESP32的串口引腳三、任務(wù)實施連接示意如圖1-19所示。實物連接如圖1-20所示。圖1-19任務(wù)7硬件連接示意圖圖1-20任務(wù)7硬件連接實物圖三、任務(wù)實施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}voidloop(){buttonState=digitalRead(buttonPin);}2.設(shè)備A程序(1)按鍵檢測。在02-Button的示例程序基礎(chǔ)上修改,代碼如下:if(buttonState==HIGH){if(LightStatus==0){Serial2.print("{\"LightStatus\":0}\n");Serial.print("{\"LightStatus\":0}\n");LightStatus=1;}else{Serial2.print("{\"LightStatus\":1}\n");Serial.print("{\"LightStatus\":1}\n");LightStatus=0;}}三、任務(wù)實施下載運行,發(fā)現(xiàn)每按下一次,設(shè)備A的Serial會打印很多條內(nèi)容,說明按下一次會檢測到多次,如圖1-21所示。這是什么原因呢?需要了解一下按鍵的知識,如圖1-22所示。從按鍵按下之后輸出電平的變化可知:對按鍵的檢測,需要考慮干擾情況(需要延時再檢測),再考慮按鍵長按的情況(需要等待釋放)。圖1-21打印按鍵檢測結(jié)果圖1-22按鍵電路輸出電平變化情況三、任務(wù)實施constintbuttonPin=26;//thenumberofthepushbuttonpinintbuttonState=0;//variableforreadingthepushbuttonstatusuint16_tLightStatus=0;voidsetup(){Serial.begin(9600);Serial2.begin(9600);pinMode(buttonPin,INPUT);}(2)增加消抖和等待釋放處理的按鍵檢測。在上面分析的基礎(chǔ)上,修改代碼如下:voidloop(){//buttonState=digitalRead(buttonPin);if(digitalRead(buttonPin)==HIGH){delay(10);//延時消抖if(digitalRead(buttonPin)==HIGH){while(digitalRead(buttonPin));//等待釋放//Serial2發(fā)送給設(shè)備B,并從Serial打印if(LightStatus==0){Serial2.print("{\"LightStatus\":0}\n");Serial.print("{\"LightStatus\":0}\n");LightStatus=1;}else{Serial2.print("{\"LightStatus\":1}\n");Serial.print("{\"LightStatus\":1}\n");LightStatus=0;}}}三、任務(wù)實施延時的時間為10ms,運行發(fā)現(xiàn)工作正常了,每按下一次按鍵,只會打印一次,如圖1-23所示。當(dāng)按鍵按下后,除了從Serial打印{"LightStatus":1}(已經(jīng)看到的效果),也從Serial2輸出同樣的字符串,這個字符串是滿足JSON對象格式的,供Serial所連接的設(shè)備B解析處理。圖1-23考慮消抖和等待釋放后的按鍵檢測結(jié)果3.設(shè)備B程序使用之前的OneKeyValue程序。將Serial接收改為Serial2接收,Serial2也需要初始化,解析過程不變。代碼如下:#include<ArduinoJson.h>StringinputString="";//aStringtoholdincomingdataboolstringComplete=false;//whetherthestringiscomplete//引腳定義#defineLIGHT25//產(chǎn)品標(biāo)識符StringIdentifier="LightStatus";三、任務(wù)實施voidsetup(){//initializeserial:Serial.begin(9600);Serial2.begin(9600);//reserve200bytesfortheinputString:inputString.reserve(200);pinMode(LIGHT,OUTPUT);}voidloop(){//printthestringwhenanewlinearrives:if(stringComplete){Serial.println(inputString);//解析,控制,約定Json格式:{"LightStatus":1},{"LightStatus":0}StaticJsonBuffer<200>jsonBuffer;JsonObject&root=jsonBuffer.parseObject(inputString);if(!root.success()){Serial.println("parseObject()failed");inputString="";stringComplete=false;return;}constchar*val=root[Identifier];if(val!=NULL){constuint16_tLightStatus=root[Identifier];if(LightStatus==1){digitalWrite(LIGHT,HIGH);}else{digitalWrite(LIGHT,LOW);}Serial.print("LightStatus:");Serial.println(LightStatus);}//clearthestring:inputString="";stringComplete=false;}serial2Event();}三、任務(wù)實施圖1-25開燈效果4.結(jié)果展示設(shè)備A每按下一次按鍵,會發(fā)送一個命令給設(shè)備B,比如某一次按下后控制LED熄滅,如圖124所示;下一次按下后,就可以控制LED點亮,如圖1-25所示。通過設(shè)備A的按鍵,控制設(shè)備B的LED燈,工作正常。voidserial2Event(){while(Serial2.available()){//getthenewbyte:charinChar=(char)Serial2.read();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論