




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2相關(guān)知識34任務(wù)小結(jié)與練習(xí)1任務(wù)實(shí)施任務(wù)引入與目標(biāo)ESP32的Serial2操作一、任務(wù)引入與目標(biāo)任務(wù)目標(biāo)任務(wù)7實(shí)現(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。如果我們要改變使用的引腳,則只需要修改這個宏定義,而不需要修改整個程序。強(qiáng)制類型轉(zhuǎn)換在Arduino中,強(qiáng)制類型轉(zhuǎn)換是將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種數(shù)據(jù)類型的值的過程。強(qiáng)制類型轉(zhuǎn)換可以幫助我們在不同數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換,并允許我們使用不同的算術(shù)和邏輯操作。比較常見的是C語言風(fēng)格的強(qiáng)制類型轉(zhuǎn)換,這種轉(zhuǎn)換使用括號將要轉(zhuǎn)換的值包圍起來,并指定要轉(zhuǎn)換的目標(biāo)類型。例如:intx=10;floaty=(float)x;在這個例子中,我們將整數(shù)變量x強(qiáng)制轉(zhuǎn)換為浮點(diǎn)數(shù),并將結(jié)果存儲在浮點(diǎn)型變量y中。三、任務(wù)實(shí)施實(shí)施設(shè)備部署了Arduino開發(fā)環(huán)境的計(jì)算機(jī)。實(shí)施過程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ù)實(shí)施連接示意如圖1-19所示。實(shí)物連接如圖1-20所示。圖1-19任務(wù)7硬件連接示意圖圖1-20任務(wù)7硬件連接實(shí)物圖三、任務(wù)實(shí)施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ù)實(shí)施下載運(yùn)行,發(fā)現(xiàn)每按下一次,設(shè)備A的Serial會打印很多條內(nèi)容,說明按下一次會檢測到多次,如圖1-21所示。這是什么原因呢?需要了解一下按鍵的知識,如圖1-22所示。從按鍵按下之后輸出電平的變化可知:對按鍵的檢測,需要考慮干擾情況(需要延時(shí)再檢測),再考慮按鍵長按的情況(需要等待釋放)。圖1-21打印按鍵檢測結(jié)果圖1-22按鍵電路輸出電平變化情況三、任務(wù)實(shí)施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);//延時(shí)消抖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ù)實(shí)施延時(shí)的時(shí)間為10ms,運(yùn)行發(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ù)實(shí)施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ù)實(shí)施圖1-25開燈效果4.結(jié)果展示設(shè)備A每按下一次按鍵,會發(fā)送一個命令給設(shè)備B,比如某一次按下后控制LED熄滅,如圖124所示;下一次按下后,就可以控制LED點(diǎn)亮,如圖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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國OPP標(biāo)簽數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國GPS一體機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國CNC高速單座模切機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025年中國3.0mm束狀二芯光纜數(shù)據(jù)監(jiān)測報(bào)告
- 2025至2030年中國食品級特丁基對苯二酚市場分析及競爭策略研究報(bào)告
- 2025至2030年中國藍(lán)寶石晶體市場分析及競爭策略研究報(bào)告
- 2025至2030年中國磁療床墊市場分析及競爭策略研究報(bào)告
- 2025至2030年中國電容式料位控制器市場分析及競爭策略研究報(bào)告
- 2025至2030年中國煙霧燃?xì)鈭?bào)警器市場分析及競爭策略研究報(bào)告
- 2025至2030年中國汽車頂隔音墊市場分析及競爭策略研究報(bào)告
- 2025年醫(yī)療美容行業(yè)私密整形技術(shù)與市場規(guī)范報(bào)告
- 2025至2030中國海洋生物技術(shù)行業(yè)市場發(fā)展現(xiàn)狀及競爭格局與投資發(fā)展報(bào)告
- 教師學(xué)雷鋒管理制度
- 湖南2025年湖南江華瑤族自治縣招聘184名事業(yè)單位工作人員筆試歷年參考題庫附帶答案詳解
- 2025至2030中國化妝品檢測行業(yè)發(fā)展分析及競爭策略與趨勢預(yù)測報(bào)告
- 盤古java面試題及答案
- 2024中儲糧考試題庫與答案
- 2025年個人租房合同范本下載
- T/CAMIR 002-2022企業(yè)技術(shù)創(chuàng)新體系建設(shè)、管理與服務(wù)要求
- 多模態(tài)學(xué)習(xí)算法的實(shí)證分析及其未來發(fā)展趨勢
- 口腔合伙股東協(xié)議書
評論
0/150
提交評論