硬石各類功能模塊使用手冊_第1頁
硬石各類功能模塊使用手冊_第2頁
硬石各類功能模塊使用手冊_第3頁
硬石各類功能模塊使用手冊_第4頁
硬石各類功能模塊使用手冊_第5頁
已閱讀5頁,還剩142頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

技術(shù): (硬石電 析,文檔以模塊與YS-F1Pro開發(fā)板和YS-F4Pro開發(fā)板連接來說明。第1 MPU-6050模 MPU-6050模塊基本介 MPU-6050硬件電路設(shè) MPU-6050程序?qū)?MPU-6050模塊接線(YS_F4Pro開發(fā)板 MPU-6050模塊接線(YS_F1Pro開發(fā)板 第2 繼電器模 模塊基本介 繼電器模塊接線(YS_F4Pro開發(fā)板 繼電器模塊接線(YS_F1Pro開發(fā)板 第3 US-100超聲波測距模 模塊基本介 US-100模塊程序?qū)?超聲波模塊接線(YS_F4Pro開發(fā)板 超聲波模塊接線(YS_F1Pro開發(fā)板 第4 RC522射頻卡模 RFID介 模塊基本介 RC522硬件電路設(shè) RC522程序?qū)?RC522模塊接線(YS_F4Pro開發(fā)板 RC522模塊接線(YS_F1Pro開發(fā)板 第5 光敏傳感 光敏傳感器簡 光敏傳感器接線(YS_F4Pro開發(fā)板 光敏傳感器接線(YS_F1Pro開發(fā)板 第6 熱敏傳感 熱敏傳感器簡 熱敏傳感器接線(YS_F4Pro開發(fā)板 熱敏傳感器接線(YS_F1Pro開發(fā)板 第7 傳感器模 SW-420傳感器模塊簡 SW-420傳感器接線(YS_F4Pro開發(fā)板 SW-420傳感器接線(YS_F1Pro開發(fā)板 第8 紅外模 紅外模塊簡 紅外接線實物圖(YS_F4Pro開發(fā)板 紅外接線實物圖(YS_F1Pro開發(fā)板 第9 SI4432遠(yuǎn)距離無線模 SI4432遠(yuǎn)距離無線模塊簡 SI4432遠(yuǎn)距離無線模塊接線(YS_F4Pro開發(fā)板 SI4432遠(yuǎn)距離無線模塊接線(YS_F1Pro開發(fā)板 第10章HC- 感應(yīng)模 HC-SR501感應(yīng)模塊簡 HC-SR501感應(yīng)模塊接線(YS_F4Pro開發(fā)板 HC-SR501感應(yīng)模塊接線(YS_F1Pro開發(fā)板 第11章OLED模 OLED模塊簡 字模的制 OLED模塊接線方法(YS_F4Pro開發(fā)板 OLED模塊接線方法(YS_F1Pro開發(fā)板 第12章ESP-01WIFI模 ESP-01WIFI模塊簡 ESP-01WIFI模塊程序?qū)?通過APP控制開發(fā)板.................................................................ESP-01WIFI模塊接線(YS_F4Pro開發(fā)板 ESP-01WIFI模塊接線(YS_F1Pro開發(fā)板 第13章NRF2L01模 NRF24L01模塊簡 NRF24L01程序?qū)?NRF24L01模塊接線(YS_F4Pro開發(fā)板 NRF24L01模塊接線(YS_F1Pro開發(fā)板 第14章心率傳感器模 心率傳感器模塊簡 心率傳感器程序?qū)?心率傳感器上位機(jī)..............................................................................心率傳感器接線(YS_F4Pro開發(fā)板 模塊接線實物 第15章MH-Z14A二氧化碳傳感器模 MH-Z14A二氧化碳模塊簡 MH-Z14A二氧化碳程序?qū)?MH-Z14A二氧化碳模塊接線(YS_F4Pro開發(fā)板 MH-Z14A二氧化碳模塊接線(YS_F1Pro開發(fā)板 第16章藍(lán)牙模 藍(lán)牙2.0模塊簡 HC-05模塊程序?qū)?HC-05模塊接線及操 HC-05模塊接線實物圖(YS_F4Pro開發(fā)板 藍(lán)牙4.0模塊簡 藍(lán)牙4.0程序?qū)?藍(lán)牙4.0接線及操作(YS_F4Pro開發(fā)板 第17章溫濕度傳感器模 AM2302模塊簡 AM2302模塊程序?qū)?AM2302模塊接線(YS_F4Pro開發(fā)板 AM2302模塊接線(YS_F1Pro開發(fā)板 DHT11模塊簡 DHT11程序?qū)?DHT11模塊接線(YS_F4Pro開發(fā)板 DHT11模塊接線(YS_F1Pro開發(fā)板 DS18B20簡 DS18B20模塊程序?qū)?DS18B20模塊接線(YS_F4Pro開發(fā)板 DS18B20模塊接線(YS_F1Pro開發(fā)板 第18章NFC近場通信模塊 NFC簡 PN532模塊概 PN532模塊程序?qū)?PN532模塊接線(YS_F4Pro開發(fā)板 PN532模塊接線(YS_F1Pro開發(fā)板 陀螺儀,3MEMSDMP(DigitalProcessorMPU-6050VLOGICI2C輸出提供邏輯電平。VLOGIC電壓可取1.8±5%或者VDD。(qunon歐拉角格式(EulerAngleForma)的融合演算數(shù)據(jù)。具有131LSBs/o/ses敏感度與全格感測范圍為±250、±5001000±2000o/ses3軸角速度感測器(陀螺儀可程式控制,且程式控制范圍為±2g、±4g、±8g和±16g的3軸數(shù)據(jù)、感測器同步化、感應(yīng)等的負(fù)荷。運(yùn)動處理數(shù)據(jù)庫支持Android、戶須另行校準(zhǔn)的需求。速下降中斷、High-G中斷、零動作感應(yīng)、觸擊感應(yīng)、搖動感應(yīng)功能。內(nèi)建振蕩器在工作溫度范圍內(nèi)僅有±1%頻率變化??蛇x外部時鐘輸入32.768KHz19.2MHz。圖1- 根據(jù)圖1-1的引腳圖,我們列表對每個引腳進(jìn)行解釋說明表格1-1MPU-605016789中斷數(shù)字輸出(開漏或推挽I2CI2C其中,SCLSDAMCUI2C接口,MCUI2C接口來控制MPU6050I2C接口:AUX_CL、AUX_DA,這個接口可用來連接外MPU-60501-2是MPU-6050模塊的正面圖,該圖顯示的是模塊,中間的才是MPU-6050,通過電路的鋪墊,引出較為圖1-2MPU引腳說明,而表格1-1則是MPU-6050的引腳說明。表格1-2MPU60501-3圖1-3MPU-6050用我們的I2C接口即可。這里以YS-F4Pro開發(fā)板的例程作為講解。代碼1-1I2C#define I2C通信速率(#define I2C#define #define#define#define#define

#define #define #define 代碼1-2I2C0101函數(shù)功能I2C輸入?yún)?shù)::*07void0819=======使用7位尋找模式;OwnAddress1設(shè)置I2C設(shè)備自己的地址。代碼1-3I2C0101輸入?yún)?shù)::*明:I2CstaticvoidI2C_MPU6050_Error{/*I2C /*I2C通信總線1517函數(shù)功能:I2C輸入?yún)?shù)Addr:I2C***:*明:voidI2C_MPU6050_WriteData(uint16_tAddr,uint8_tReg,uint8_t{HAL_StatusTypeDefstatus= status=HAL_I2C_Mem_Write(&hi2c_mpu6050,Addr,(uint16_t)Reg,I2C_MEMADD_SIZE_8BIT,&Value,1,I2cxTimeout);/*I2Cif(status!=HAL_OK)/*I2C 3638*函數(shù)功能:I2C*輸入?yún)?shù)Addr:I2C *HAL_StatusTypeDef* 明:在循環(huán)調(diào)用是需加一定延時時HAL_StatusTypeDefI2C_MPU6050_WriteBuffer(uint16_tAddr,uint8_tReg,uint16_tRegSize,*pBuffer,50 status=HAL_I2C_Mem_Write(&hi2c_mpu6050,Addr,(uint16_t)Reg,RegSize,pBuffer,Length,/*I2Cif(status!=HAL_OK)/*I2C return6164*函數(shù)功能:通過I2C一個指定寄存器內(nèi)*輸入?yún)?shù)Addr:I2C *uint8_t* 明:uint8_tI2C_MPU6050_ReadData(uint16_tAddr,uint8_t{HAL_StatusTypeDefstatus=uint8_tvalue= status=HAL_I2C_Mem_Read(&hi2c_mpu6050,Addr,Reg,I2C_MEMADD_SIZE_8BIT,&value,1,/*I2Cif(status!=HAL_OK)/*I2C return8587*函數(shù)功能:*輸入?yún)?shù)Addr:I2C*****HAL_StatusTypeDef*明:97HAL_StatusTypeDefI2C_MPU6050_ReadBuffer(uint16_tAddr,uint8_tReg,uint16_tRegSize,98{HAL_StatusTypeDefstatus=status=HAL_I2C_Mem_Read(&hi2c_mpu6050,Addr,(uint16_t)Reg,RegSize,pBuffer,/*I2Cif(status!=HAL_OK)/*I2C return109111:**HAL_StatusTypeDef*明:{121代碼1-3I2C的相關(guān)處理函數(shù),包括:I2C通信錯誤處理函數(shù)、寫入一個I2C設(shè)備是否處于準(zhǔn)備好通信該文件內(nèi)容主要是對MPU-6050模塊各個寄存器的宏定義以及一些參數(shù)的代碼1-40101函數(shù)功能:MPU6050輸入?yún)?shù)::*明:voidMPU6050_WriteReg(uint8_treg_add,uint8_t{1012函數(shù)功能:MPU6050輸入?yún)?shù)::*明:voidMPU6050_ReadData(uint8_treg_add,unsignedchar*Read,uint8_t{211-4MPU6050寄存器的寫數(shù)據(jù)和讀數(shù)據(jù)操作。直接I2C讀寫操作函數(shù),MPU6050器件的地址為:MPU6050_SLAVE_ADDRESS0xD0(為啥是這個值呢,這里需要說明下,由于I2C87位由MPU6050_RA_WHO_AM_I寄存器決定,第八位由引腳AD0決定,下面有函數(shù)該寄存器的值,這個值為0x68,也就是AD0I2C的從器件地址為,也就是0xD0。代碼1-5ID以及相關(guān)數(shù)0101函數(shù)功能 MPU6050的輸入?yún)?shù)::*明:07uint8_t08unsignedcharRe= if(Re!=0x68){return0;}elsereturn1;}1921*函數(shù)功能:MPU6050的加速度數(shù)*輸入?yún)?shù):*:* 明:voidMPU6050ReadAcc(short{accData[0]=(buf[0]<<8)|accData[1]=(buf[2]<<8)|accData[2]=(buf[4]<<8)|3436*函數(shù)功能:MPU6050的角速度數(shù)*輸入?yún)?shù):*:* 明:voidMPU6050ReadGyro(short{gyroData[0]=(buf[0]<<8)|gyroData[1]=(buf[2]<<8)|gyroData[2]=(buf[4]<<8)|4951*函數(shù)功能:MPU6050的原始溫度數(shù)*輸入?yún)?shù):*:* 明:voidMPU6050ReadTemp(short{ //溫度*tempData=(buf[0]<<8)|6264*函數(shù)功能:MPU6050的溫度數(shù)據(jù),轉(zhuǎn)化成攝氏*輸入?yún)?shù):*:* 明:void{short//溫度temp3=(buf[0]<<8)|*Temperature=(((double)(temp3+13200))/280)-78也就是上述所講的MPU6050_RA_WHO_AM_I寄存器的值是否為0x68。圖1-4接線實物圖圖1-5接線實物圖 繼電器模靜觸點(diǎn)(閉觸點(diǎn))釋放。2-1,簡單的理解,就是IN1LED1導(dǎo)通(前提是接好相應(yīng)的跳線帽,出廠已接好OPE圖2-1圖2-2根據(jù)我們的程序,當(dāng)我們按下KEY2的時候,PF12輸出低電平,此時開端和公共端(3.3V)導(dǎo)通。圖2-3實物接線圖2-4根據(jù)我們的程序,當(dāng)我們按下KEY2的時候,PB0輸出低電平,此時開端和公共端(3.3V)導(dǎo)通,也就是有電流給LED1供電,使LED1亮。圖2-5接線實物 US-100超聲波測距模同時具有GPIO,串口等多種通信方式,內(nèi)帶看門狗,工作溫度可靠。US-100-20~70圖3-1通訊840KHz的超聲波脈沖,然后檢測回波信號,當(dāng)檢測校準(zhǔn),叫校準(zhǔn)后的結(jié)果通過RX管腳輸出。0x55的指令給模塊,然后等回傳的數(shù)值,我們Trig10us840KHzEcho管腳10us以上的高電平,然后開啟定時器的輸入捕獲中斷,得到高電平的持續(xù)時間,并代入計算。3.3V3.3V圖3-2接線實物3.3V3.3V圖3-3接線實物 RC522射頻卡模RFIDRFID:RadioFrequencyIdentification的英文簡稱,目前可供射頻卡使用的幾射頻卡又稱為非接觸式IC卡,由IC、感應(yīng)天線組成,并完成密封在一個標(biāo)準(zhǔn)PVC卡片中,無外露部分。非接觸式IC卡的讀寫過程,通接觸式提供給工作。另一部分則是結(jié)合數(shù)據(jù)信號,指揮完成數(shù)據(jù)、修改、調(diào)制和解調(diào)的原理,并將它們完全集成到各種非接觸式通信方法和協(xié)議中(13.56MHzISO14443幀和錯誤檢測。MFRC522MIFARE更告訴的非接觸式ISO14443/MIFARE50mm,取決于天線的長3.3V的電源電源,CRCI/OUART用來處理與主機(jī)通信時的協(xié)議要求,F(xiàn)IFOUART之間的數(shù)圖4-1MFRC522RC522SPI接口,所以我們直接配置好STM32SPI外設(shè),設(shè)置和模塊對應(yīng)的參數(shù),即可實現(xiàn)與RC522的通信。圖4-24-3RC522圖4-3RC522STM32F4的例程作為講解,F(xiàn)1SPISPI操作函數(shù)的宏定義。相應(yīng)的內(nèi)容代碼4-1SPI0101函數(shù)功能RC522輸入?yún)?shù)::*明:07void08RC522spi.Init.Mode=SPI_MODE_MASTER;RC522spi.Init.DataSize=SPI_DATASIZE_8BIT;RC522spi.Init.NSS=SPI_NSS_SOFT;RC522spi.Init.FirstBit=SPI_FIRSTBIT_MSB;RC522spi.Init.TIMode=RC522spi.Init.CRCPolynomial=10;27特率的預(yù)分頻值為32,起始位為MSB。代碼4-2RC5220101*函數(shù)功能:uint8_t*0814return代碼4-3RC5220101**描述:讀RC522*輸入:ucAddress*返回:*調(diào)用09{ucAddr=((ucAddress<<1)&0x7E)| return2325*函數(shù)名:Wri*描述:寫RC522*輸入:ucAddress *返回:*調(diào)用:內(nèi)部調(diào)用voidWriwRC(uint8_tucAddress,uint8_tucValue{ucAddr=(ucAddress<<1)&SPI_RC522_SendByte(ucAddr46RC522代碼4-40101*=====:=charPcdRequest(uint8tucReqcode,uint8t*pTagType{char MF522Buf[MAXRLEN42ClearBitMask(Status2Reg,0x08 wRCBitFramingReg,0x07//SetBitMaskTxControlReg0x03);//TX1,TX213.56MF522Buf[0]=cStatusMF522(MF522Buf,MF522Buf,&ulLen//ifcStatusMI_OK&&ulLen0x10)){//pTagType(pTagType+1)MF522Buf[0MF522Buf[1}cStatus=return代碼4-4為尋卡函數(shù),將我們的尋卡命令PICC_REQALL裝填到數(shù)組 MF522函數(shù)發(fā)送出去,如果沒有尋找到卡,那么返回MI_ERR,若返回MI_OK,并且uILen為0x10位兩個字節(jié)則說明尋卡成功。代碼4-5010102*函數(shù)名:PcdAnticoll03*描述:防沖撞*輸入:pSnr,卡片序列號,4*返回: =*調(diào)用charPcdAnticoll(uint8_t*pSnr)10{charuint8_tuc,ucSnr_check=uint32_tClearBitMaskStatus2Reg,0x08 wRCBitFramingReg, ClearBitMaskCollReg0x80 MF522Buf00x93//MF522Buf[1]=cStatusMF522(MF522Buf,ifcStatusMI_OK)//for(uc=0;uc<4;uc++)*(pSnr+uc)MF522Buf[ucMF522Buf[uc}if(ucSnr_check MF522Buf[uc]}SetBitMask(CollReg,0x80return37的防沖撞命令字PICC_ANTICOLL1(0x930x20。功能,等待卡片進(jìn)入范圍,相應(yīng)的ID。代碼4-60101函數(shù)功能:輸入?yún)?shù)::*明:07voidIC_test(void08charcStr[30unsignedcharucArray_ID4];//ICUID(IC卡序列號while(1)if((ucStatusReturn=PcdRequest(PICCREQALL,ucArrayID))!=MIOKucStatusReturn=PcdRequest(PICC_REQALL,ucArray_ID);if(ucStatusReturn==MI_OK){?作 if(PcdAnticoll(ucArray_ID)==MI_OK)sprintf(cStr,"TheCardIDis:%02X%02X%02X%02X",ucArrayID[0],ucArrayID[1ucArray_ID[2ucArray_ID[3]printf("%s\r\n",cStrLCDDispStringEN(10,200,cStr,BROWN,RED,USBFONT}30}}我們這里僅僅是IC卡的ID,并沒有更深入的操作過程,當(dāng)然,相應(yīng)的函數(shù)圖4-4接線實物圖 光敏傳感光敏傳感器用語光線亮度檢測,光線亮度傳感器,智能小車尋光模塊。亮度超過設(shè)定閥值,D0端輸出低電平。例程采用ADC傳感器模擬量的方式對傳感器的值進(jìn)行。另外一個圖5-1接線實物例程采用ADC傳感器模擬量的方式對傳感器的值進(jìn)行。另外一個5-2圖5-2接線實物 熱敏傳感NTCLM393比較器輸出的信號1)A0PCB尺寸為:3.2cm*1.4cm。50度時,模塊則在相應(yīng)環(huán)境溫度調(diào)節(jié)到其綠燈亮,D0輸出低D0輸出端可以直接驅(qū)動我們的繼電器模塊,由此可以組成一個簡易的溫控本模塊溫度檢測范圍為:20~80,當(dāng)單片機(jī)檢測到高電平的值時,3個LED亮。圖6-1接線實物,當(dāng)單片機(jī)檢測到高電平的值時,3個LED亮。圖6-2實物接線 傳感器模 采用SW-420閉型傳感器,當(dāng)產(chǎn)品不時,開關(guān)呈閉合導(dǎo)通狀端輸出高電平,綠色指示燈不亮。輸出端接入開發(fā)板的一個IO口,由此檢測高低電平,判斷其及不狀態(tài)。工作電壓:3.3V~5V輸出形式:數(shù)字開關(guān)量輸出(01PCB尺寸:3.2cm*1.4cm 圖7-1接線實物 圖7-2接線實物 紅 模振為455KHz,對應(yīng)的發(fā)射頻率(載波頻率)為38KHz,ID為0(識別碼編碼信號,再發(fā)送給單片機(jī),經(jīng)單片機(jī)并得到相應(yīng)的按鍵數(shù)據(jù)。 圖8-1接線實物 體見圖8-2。圖8-2接線實物 SI4432遠(yuǎn)距離無線模118dBm和能力。最大:+20dBm,可配置+11到溫度范圍:- 圖9-1圖9-2接線實物圖9-3接線實物第10章HC- HC-SR501感應(yīng)模L不可重復(fù)觸發(fā)/H<100-15~70感應(yīng)模塊采用雙元探頭,探頭的窗口為長方形,雙元(A元,B元)位于較差值,差值越大,感應(yīng)越靈敏,當(dāng)從正面探頭或從上到下或從小到 VCC10-1中接紅色方框那端,OUT之后便是準(zhǔn)確的檢測時間,接線端的左邊畫紅色框端口為VCC。圖10-1接線實物 VCC10-2OUT圖10-2接線實物第11章OLED可以說,一代的移動終端設(shè)備,大多采用OLED,也是未來的趨勢。圖11-1OLED高分辨率:128*64(12864LCDOLED屏的單位面積像素點(diǎn))兼容3.3V和5V控制的I/O電平(無需設(shè)置,直接兼容PctoLCD200211-2生產(chǎn)的字模數(shù)據(jù)到工程中。圖11-2圖11-3接線實物圖11-4接線實物第12章ESP-01WIFITensilicaL10632MCU16位精簡模式,主頻支持80MHz和160MHz,支持RTOS,集成Wi-Fi無線標(biāo)準(zhǔn):IEEE無線標(biāo)準(zhǔn):IEEE802.11b、IEEE802.11g、IEEEWIFISTA、WIFIAP、WIFISTA+WIFISTA模式:模塊通過路由器連接互聯(lián)網(wǎng),或電腦通過互聯(lián)網(wǎng)實現(xiàn)對設(shè)備HSPI2(MISI(1(I(Demo中提供4路(用戶可自IRIRRemoteContorlNEC編碼及調(diào)制解調(diào),采用38KHz的調(diào)制載波。ADCTOUT(Pin6)的輸入電I2C4(UART(U0RXDIO13(CTS)下載: 或(AT0:U0TXD(GPIO2UART0ESP8266上電默認(rèn)會輸出將MTDOMTCK連接到對應(yīng)的外部I2SI2S輸入:(I2SI_DAIO13(I2S_BCK;IO1(I2SI_WS和客戶端都連接至yingshi的無線路由器下。將設(shè)置為服務(wù)器端,是否代碼12-1staticstaticvoidESP8266_GPIO_Config(void{24GPIOInitTypeDefGPIOESP8266RSTGPIOClK/*串口外設(shè)功能GPIO配置*/GPIO_InitStruct.Pin=ESP8266_USARTx_Tx_PIN;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Pin=ESP8266_USARTx_Rx_PIN;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Pin=ESP8266_RST_PIN;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;代碼12-2USARTstaticstaticvoidESP8266_USART_Config(void{/*ESP8266GPIOhusartx_esp8266.Instance=ESP8266_USARTx;husartx_esp8266.Init.WordLength=UART_WORDLENGTH_8B;husartx_esp8266.Init.StopBits=UART_STOPBITS_1;husartx_esp8266.Init.Parity=UART_PARITY_NONE;husartx_esp8266.Init.Mode=UART_MODE_TX_RX;husartx_esp8266.Init.HwFlowCtl=UART_HWCONTROL_NONE;24/*使能接收,進(jìn)入中斷回調(diào)函數(shù)*/級設(shè)置,最后調(diào)用HAL_UART_Receive_IT使能接收。代碼12-3ATboolboolESP8266_AT_Test(void{14charwhile(count<10)}return于判斷函數(shù)的執(zhí)行情況,也就是0和1。代碼12-40101boolESP8266_Net_Mode_Choose(ENUM_Net_ModeTypeDefenumMode)02{boolcharwhile(count<10)switch(enumMode)caseresult=ESP8266_Cmd("AT+CWMODE=1","OK","nochange",2500caseresult=ESP8266_Cmd("AT+CWMODE=2","OK","nochange",2500caseresult=ESP8266_Cmd("AT+CWMODE=3","OK","nochange",2500 if(result)return24}return代碼12-5連接外部boolboolESP8266_JoinAP(char* ,char*pPassWord{11charcCmdcharsprintf(cCmd,"AT+CWJAP=\"%s\",\"%s\"",pwhile(count<10){,pPassWord}return用于加入AP。代碼12-6{11charcStrcharsprintf(cStr,"AT+CIPMUX=%d",(enuwhile(count<10){nvarnishTx?1:0)if(ESP8266Cmd(cStr,"OK",0,500))return}return代碼12-70101boolESP8266_Link_Server(ENUM_NetPro_TypeDefenumE,char*ip,char*02{charcStr[100]={0},cCmdswitch(enumE)casesprintf(cStr,"\"%s\",\"%s\",%s","TCP",ip,ComNum);casesprintf(cStr,"\"%s\",\"%s\",%s","UDP",ip,ComNum);26}if(id<5sprintf(cCmd,"AT+CIPSTART=%d,%s",id,sprintf(cCmd,"AT+CIPSTART=%s",cStrreturnESP8266_Cmd(cCmd,"OK","ALREAYCONNECT",4000我們知道該例程是將作為服務(wù)器端,等待ESP-01模塊作為客戶端連接。服務(wù)器IP字符串、服務(wù)器斷開字符串、模塊連接服務(wù)器的ID。代碼12-8charchar*ESP8266_ReceiveString(FunctionalState {20char*pRecStr=strEsp8266_Fram_Record.InfBit.FramLength=while(!strEsp8266_Fram_Record.InfBit.FramFinishFlagstrEsp8266_Fram_Record.Data_RX_BUF[strEsp8266_Fram_Record.InfBit.FramLength]=if(nvarnishTxelseif(strstr(strEsp8266_Fram_Record.Data_RX_BUF,"+IPD"))pRecStr=strEsp8266_Fram_Record.Data_RX_BUF;}return模塊接收到網(wǎng)絡(luò)數(shù)據(jù)時向串口發(fā)送+IPD和數(shù)據(jù),最后返回接收到的字符串首地代碼12-9voidvoid{if({ strEsp8266_Fram_Record.InfBit.FramFinishFlag= 09ucTcpClosedFlag=strstr(strEsp8266_Fram_Record.Data_RX_BUF,"CLOSED\r\n")?1:}代碼12-100101函數(shù)功能:輸入?yún)?shù)::*{// 12代碼12-110101int02/*Flash/**/SystemClock/**/printf("正在配置 \n"if{printf("ATtest}printf("\n<1 printf("\n<2printf("\n<3printf("\n<4whileprintf("ESP8266完畢/*無限循環(huán)while(1)if(strEsp8266_Fram_Record.InfBit.FramFinishFlag)strEsp8266_Fram_Record.Data_RX_BUF[strEsp8266_Fram_Record.InfBit.FramLength]switch(pCH)casecasecasecasecasecasecasecase HAL( doucStatus while( }while}}88據(jù)接收,使用switch來進(jìn)行接收數(shù)據(jù)的處理。APP模塊使用前端的準(zhǔn)備,這里只有安卓端的支持。首先,我們要先確定手圖12- IP地頂部寫著“正在的端口:xxxx”我這里是1234,記錄此端口,待會要用。左右滑動窗口,來到圖12-3。圖12- 圖12-3LED和一個蜂鳴器,此時,需是對例程進(jìn)行修改,因為每個人IP不同,按鈕的設(shè)置也可能不同。圖12-4圖12-5ESP-01圖12-6接線實物圖12-7接線實物第13章NRF2L01NRF2L012.4~2.5GHzISM頻段的單片無線收發(fā)器芯SchockBurst模式控制器、功率放大SPI接口進(jìn)行設(shè)置。極低的電流消耗:當(dāng)工作在發(fā)射模式下為-6dBm時電流消耗,接收模式時為MUC可與該模塊通過SPI接口的寄存器進(jìn)行配置,達(dá)到控制模塊、發(fā)射模式下,電流消耗接收模式下電流消耗-里貼出時序圖是為了說明下面SPI初始化時CPOLCPHA設(shè)置。圖13-1SPI代碼13-1#define#define#defineNRF24L01SPIxRCCCLK#define#defineNRF24L01SPISCKClK#define#defineNRF24L01SPISCK09#defineNRF24L01SPIMSSClK#define#define#define#define#define#defineHALRCCSPI1CLKHALRCCGPIOACLKENABLE()GPIOPINHALRCCGPIOBCLKENABLE()22#define23#define24#define#defineNRF24L01_CE_LOW() #defineNRF24L01_CE_HIGH() NRF24L01_CE_PIN,GPIO_PIN_SET)#define #define #define #defineNRF24L01_IRQ_PIN_READ()NRF24L01#define #define #define #define #define 0x00//讀配置寄存器,5#define 0x20//寫配置寄存器,5#define 0x61//RX有效數(shù)據(jù),1~32#define 0xA0//TX有效數(shù)據(jù),1~32#define 0xE1//TXFIFO寄存器.#define 0xE2//RXFIFO寄存器.#define 0xE3//重新使用上一包數(shù)據(jù),CE為高,數(shù)據(jù)包被不斷發(fā)送#define 0xFF//空操作,#defineCONFIG 0x00//配置寄存器地址;bit0:1接收模式,0發(fā)射模式;bit1:電選擇;bit2:CRC模式;bit3:CRC使能#define 0x01//使能自動應(yīng)答功能bit0~5,#define 0x02//接收地址允許,bit0~5,#defineSETUP_AW 0x03//設(shè)址寬度(所有數(shù)據(jù)通道):bit1,0:00,3字節(jié);01,4字節(jié);02,5字#defineSETUP_RETR 0x04//建立自動重發(fā);bit3:0,自動重發(fā)計數(shù)器;bit7:4,自動重發(fā)延時#define 0x05//RF通道,bit6:0,工作通道頻率#define 0x06//RF寄存器;bit3:傳輸速率(0:1Mbps,1:2Mbps);bit2:1,#defineSTATUS 0x07//狀態(tài)寄存器;bit0:TXFIFO滿標(biāo)志;bit3:1,接收數(shù)據(jù)通道號(最發(fā)#define 0x10//#define 0x20//TX#define 0x40//#define 0x08//發(fā)送檢測寄存器,bit7:4,數(shù)據(jù)包丟失計數(shù)器;bit3:0,#define 0x09//載波檢測寄存器,bit0,載波檢測#define 0x0A//0接收地址,5個字節(jié),#define 0x0B//1接收地址,5個字節(jié),#define 0x0C//2接收地址,最低字節(jié)可設(shè)置,高字節(jié),相等#define#define相等相等相等#define#define#define#define#define#define#define#define志0x0D//3接收地址,最低字節(jié)可設(shè)置,高字節(jié),0x0E//4接收地址,最低字節(jié)可設(shè)置,高字節(jié),0x0F//5接收地址,最低字節(jié)可設(shè)置,高字節(jié),0x10//發(fā)送地址(),ShockBurstTM模式下,RX_ADDR_P00x11//0有效數(shù)據(jù)寬度(1~32字節(jié)),00x12//1有效數(shù)據(jù)寬度(1~32字節(jié)),00x13//2有效數(shù)據(jù)寬度(1~32字節(jié)),00x14//3有效數(shù)據(jù)寬度(1~32字節(jié)),00x15//4有效數(shù)據(jù)寬度(1~32字節(jié)),00x16//5有效數(shù)據(jù)寬度(1~32字節(jié)),00x17//FIFO狀態(tài)寄存器;bit0,RXFIFO寄存器空標(biāo)志;bit1,RXFIFO89//bit4,TXFIFO空標(biāo)志;bit5,TXFIFO滿標(biāo)志;bit6,1,循環(huán)發(fā)送上一數(shù)據(jù)包.0,不循環(huán)代碼13-2NRF24L01voidvoid{hspi_NRF24L01.Init.Mode=SPI_MODE_MASTER;hspi_NRF24L01.Init.DataSize=SPI_DATASIZE_8BIT;hspi_NRF24L01.Init.CLKPolarity=SPI_POLARITY_LOW;hspi_NRF24L01.Init.CLKPhase=SPI_PHASE_1EDGE;hspi_NRF24L01.Init.NSS=SPI_NSS_SOFT;hspi_NRF24L01.Init.FirstBit=SPI_FIRSTBIT_MSB;hspi_NRF24L01.Init.TIMode=SPI_TIMODE_DISABLE;hspi_NRF24L01.Init.CRCPolynomial=10;}SPI操作的要求。代碼13-3intint{35uint8_ttmp_buf[33]="NRF24L01實驗/*Flash/**//*LED*//**//*while(NRF24L01_Check())}printf("NRF24L01無線模塊硬件連接正/**/while(1){}else}}我們對應(yīng)好程序就可以將相應(yīng)的引腳接到開發(fā)板的IO口。圖13-23.3V圖13-3接線實物CN14接口上,拔掉JP8JP9圖13-4接線實物第14章心率傳感器模塊PulseSensor是一款用于脈搏心率測量的光電反射式模擬傳感器。將其佩戴arduinoProcessing程序,其適用于心率方面的科學(xué)研究和教學(xué)演示,也非適用于二次開發(fā)。光電容積法的基本原理是利用組織在血管搏動時造成透光率不同來進(jìn)根據(jù)相關(guān)文獻(xiàn)和實驗結(jié)果,560nm波長左右的撥可以反映皮膚淺部微脈動號為AM2520,而光采用了APDS-9008,這是一款環(huán)境光感受器,感受峰565nm,兩者的峰值波長相近,靈敏度較高。此外,由于脈搏信號的0.05~200Hz之間,信號幅度均很小,一般在豪伏級水平,容易受到各種。在傳感器后面使用了低通濾波器和由運(yùn)放MCP6001構(gòu)成的放大使放大后的信號可以很好地被單片機(jī)的AD到。圖14-1代碼14-1ADC#define#define#define09//#define#define#define#define#define

HAL_RCC_ADC1_CLK_ENABLE()HAL_RCC_ADC2_CLK_ENABLE()HAL_RCC_ADC3_CLK_ENABLE()代碼14-2ADC0101函數(shù)功能AD輸入?yún)?shù)::*07void0831 ypeDefhadcx.Init.Resolution=ADC_RESOLUTION_12B;hadcx.Init.ScanConvMode=DISABLE;hadcx.Init.ContinuousConvMode=ENABLE;hadcx.Init.DiscontinuousConvMode=DISABLE;hadcx.Init.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T3_TRGO;hadcx.Init.DataAlign=ADC_DATAALIGN_RIGHT;hadcx.Init.NbrOfConversion=1;hadcx.Init.DMAContinuousRequests=DISABLE;//配置采樣通道sConfig.Rank=1;HAL_ADC_ConfigChannel(&hadcx,&sConfig);14-2ADC12位的連續(xù)轉(zhuǎn)換模式,設(shè)置為定時器3的外部觸發(fā)模式。最后配置好采樣通道及采樣時間。代碼14-3#define#define#define#define#define#defineHAL_RCC_TIM3_CLK_DISABLE()//#define 83// 11#define 1999//定時器產(chǎn)生中斷頻率為:1MHz/1000=1KHz1ms13////這里設(shè)置獲取得到1ms的定時周期,也就是中斷頻率為1ms。代碼14-40101函數(shù)功能:輸入?yún)?shù)::*明:07void080925htimx.Instance=htimx.Init.Prescaler=GENERAL_TIM_PRESCALER;htimx.Init.CounterMode=TIM_COUNTERMODE_UP;htimx.Init.Period=GENERAL_TIM_PERIOD;HAL_TIM_ConfigClockSource(&htimx,&sClockSourceConfig);sMasterConfig.MasterOutputTrigger=TIM_TRGO_UPDATE;HAL_TIMEx_MasterConfigSynchronization(&htimx,&sMasterConfig);該文件主要的內(nèi)容是在定時器的中斷中對獲取到的ADC值進(jìn)行相應(yīng)的處理,voidvoid{/*USERCODEBEGINTIM3_IRQn0uint8_ti;if(HAL_TIM_GET_IT_SOURCE(&htimx,TIM_IT_UPDATE)!=RESET) 2位,12位-->10Signal=//readthePulse//sampleCounter+=2; //keeptrackofthetimeinmSwiththisNum=sampleCounter-lastBeatTime; //monitorthetimesincethelastbeattoavoid//findthepeakandtroughofthepulseif(Signal<thresh&&Num>(IBI/5)*3){//avoiddichroticnoisebywaiting3/5oflastif(Signal<T) //TistheT= //keeptrackoflowestpointinpulse if(Signal>thresh&&Signal>P) //threshconditionhelpsavoidP= //Pisthe //keeptrackofhighestpointinpulse//NOWIT'STIMETOLOOKFORTHEHEART//signalsurgesupinvalueeverytimethereisaif(Num>250) //avoidhighfrequencyif((Signal>thresh)&&(Pulse==false)&&(Num>(IBI/5)*3))Pulse=//setthePulseflagwhenwethereisaIBI=sampleCounter-//measuretimebetweenbeatsinlastBeatTime=//keeptrackoftimefornextif(secondBeat)//ifthisisthesecondbeat,ifsecondBeatsecondBeat=//clearsecondBeatfor(i=0;i<=9;i++)//seedtherunningtotaltogetarealisiticatrate[i]=} if(firstBeat){ //ifit'sthefirsttimewefoundabeat,iffirstBeat==TRUEfirstBeat= //clearfirstBeatsecondBeat= //setthesecondbeat //IBIvalueisunreliablesodiscard //keeparunningtotalofthelast10IBI//runningTotal= //cleartherunningTotalfor(i=0;i<=8;i++) //shiftdataintheraterate[i]= //anddroptheoldestIBIrunningTotal+= //addupthe9oldestIBI rate[9]= //addthelatestIBItotheraterunningTotal+= //addthelatestIBItoBPM=//howmanybeatscanBPM=//howmanybeatscanfitintoaQS=//QSFLAGISNOTCLEAREDINSIDETHIS//fiedSelf} if(Signal<thresh&&Pulse==true){//whenthevaluesaregoingdown,thebeatisPulse= //resetthePulseflagsowecandoit84amp=P-P=thresh;T=//getamplitudeofthepulse//setthreshat50%ofthe//resetthesefornext}if(Num>{thresh=P=T=firstBeat=true;secondBeat=//if2.5secondsgobywithouta//setthresh//setP//setT//bringthelastBeatTimeupto//setthesetoavoid//whenwegettheheartbeat}mian函數(shù)將其輸出代碼14-50101函數(shù)功能:主函數(shù)輸入?yún)?shù)::*明:07int08char/*Flash*//**//**//*/*ADC*//*3.5TFT*/lcdid=BSPLCDInit();/**/printf("LCDID=0x%08X\n",lcdid);/*開背光345658/*ADC/*ADC*//**/while(1){//sendProcessingtherawPulseSensorif(QS==true)sprintf(str,"*BPM:%d",BPM);sprintf(str,"*IBI:%d",IBI);QS= //reset fiedSelfflagfornext}HAL_Delay(20);//delayfor}函數(shù)功能:輸入?yún)?shù)::*明:voidsendDataToProcessing(charsymbol,intdat{68//symbol lsProcessingwhattypeofdatais//thedatatosendculminatinginacarriage我們打開心率傳感器模塊資料里面的《processing-3.0a8》文件夾,打開圖14-2run快捷按鈕,上位機(jī)的顯示界面就會彈出來,這時先不要管,看一下原程序的下方會顯示出軟件識別出的com口,找到如圖14-3所示位如果是識別出多個,比如“COM3,COM5”,serial.list()[0]COM3,serial.list()[1]表示COM5。圖14-3com以看到脈搏波形了,當(dāng)然,STM32方面也要準(zhǔn)備完成。圖14-4S+3.3VS+3.3V-圖14-5圖14-6接線實物第15章MH-Z14AMH-Z14A二氧化碳?xì)怏w傳感器是一個通用智能小型傳感器,利用非色散紅性,長。內(nèi)置溫度補(bǔ)償;同時具有數(shù)字輸出、模擬輸出及輸出,方便(UART(DAC使用4.5~5.5V<60mA(@5V供電150mA(@5V供電(ART(TT模擬輸出(DAC(0.4~2V(0~2.5V) >5校準(zhǔn)零點(diǎn)校準(zhǔn)零點(diǎn)校準(zhǔn)跨度點(diǎn)開啟/該模塊的程序并不難,只要通過STM32發(fā)送相應(yīng)令至模塊,然后比如我們的例程,通過串口發(fā)送讀取命令:、、、、、、、、、按照所述接線方法,程序復(fù)位后,等待一段時間(3分鐘圖15-1MH-Z14A接線實物、、、、、、、、、圖15-2接線實物第16章藍(lán)牙模塊2.0 (Master牙規(guī)工作狀態(tài)。USB線連接至電腦,在電腦然后上電,模塊進(jìn)入AT命令響應(yīng)狀態(tài)。進(jìn)入AT模式,此時波特率為38400。模塊配對成功,此時指示燈雙閃(一次閃兩下,兩秒閃一次一般只需要接TXD、RXD、VCC、GND和EN引腳。圖16-1HC05圖16-2HC05代碼16-1#define#define#define

#define#define

#define #define #define 宏定義,并將波特率定義為38400。代碼16-2voidvoidHC05USARTx{18/*GSM通信功能引腳GPIO初始化husartx_HC05.Instance=HC05_USARTx;husartx_HC05.Init.BaudRate=HC05_USARTx_BAUDRATE;husartx_HC05.Init.WordLength=UART_WORDLENGTH_8B;husartx_HC05.Init.StopBits=UART_STOPBITS_1;husartx_HC05.Init.Parity=UART_PARITY_NONE;husartx_HC05.Init.Mode=UART_MODE_TX_RX;husartx_HC05.Init.HwFlowCtl=UART_HWCONTROL_NONE;代碼16-30101函數(shù)功能:::*voidUsart_SendByte(uint8_tch{while(HAL_UART_GET_FLAG(&husartx_HC05,UART_FLAG_TXE)==0);//循環(huán)發(fā)送,/*UART41315*函數(shù)功能:*輸入?yún)?shù)str*: 明:voidUsart_SendStr_length(uint8_t*str,uint32_tstrlen{unsignedintdoUsart_SendByte(*(str+k)}while(k<2931::*voidUsart_SendString(uint8_t{unsignedintdoUsart_SendByte(*(str+k) }while(*(str+4416-3為發(fā)送數(shù)據(jù)的函數(shù),第一個函數(shù)是發(fā)送一個數(shù)據(jù)。第二個函數(shù)根代碼16-4#defineUART_BUFF_SIZE03IOuint16_tuart_p=0; 函數(shù)功能:輸入?yún)?shù)::*{HALUARTReceiveIT(&husartx}elseclean 2123*函數(shù)功能:*輸入?yún)?shù):*:*{*len=return(char3335函數(shù)功能:輸入?yún)?shù)::*void{48uart_p=whileuart_buff數(shù)組為全局變量作存放數(shù)據(jù),這樣我們在中斷接收中接收數(shù)get_rebuffclean_rebuff函數(shù)代碼16-5HC050101#define#define#defineGPIO*/#define /*GPIO/*GPIO/*連接到HC05EN07#defineHC05_EN_LOW()10/*信息輸出11#define12#define14#define15#define16#define21#define00printf("<<-HC05-DEBUG->>[%d]"fmt"\n",LINEFunc:%s@Line:%d\n",func,LINE);\

HC05HC05信息輸出的引腳定義,HC05_ERROR、HC05_DEBUGHC05_DEBUG_FUNC打印相應(yīng)的HC05信息。

代碼16-6HC050101函數(shù)功能向HC05OKOK:令***:命令應(yīng)答狀態(tài):1OK**0:成功發(fā)送并接收到OK{while(retry--)Usart_SendString((uint8_t*)cmd);{uint16_tlen;if(len>0){if(redata[0]!=0)HC05_DEBUG("receive%s",redata);}{ifreturn0;}}else}}HC05_DEBUG("HC05sendCMDfail%d}HC05_DEBUG("HC05sendHC05_DEBUG("HC05sendCMDfailifreturn146HC05Usart_SendString函數(shù)發(fā)送指令,等待一定get_rebuffstrstr對數(shù)據(jù)進(jìn)行對比,如果為:OK,那么返回0,發(fā)送數(shù)據(jù)成功。代碼16-70101函數(shù)功能:GPIOHC05輸入?yún)?shù)::*07void0817for(i=0;}EV_MAX_NUM;i++) evList.num=代碼16-801*函數(shù)功能:掃描藍(lán)牙設(shè)備,并連接名稱中含有"HC05"*輸入?yún)?shù):*00* uint8_t{ char for(i=0; evList.num;i++) evL[i],"HC05"NULL//非NULLHC05HC05_INFO("搜索到HC05模塊,即將進(jìn)行配對連接 return return29/*Flash/**//*LED*//*/*Flash/**//*LED*//**//**/while(KEY1_StateRead()==KEY_UP&&(hc05_mode==0))05模塊內(nèi)按鍵進(jìn)入配置默認(rèn)\n");1:ATuint8_thc05_connect=0;0:uint8_thc05_mode=0;//0:SPP規(guī)范charhc05_mode_str[10]="SLAVE";uint8_ti=0;charhc05_nameCMD[40];明:*01明:*01函數(shù)功能:主函數(shù)輸入?yún)?shù)::0707int08/*AT/*for(i=0;i<20;++i)if(len==4) ifhc05_mode==1){//ATHC05Send ifhc05_role==0){//if(HC05_Send_CMD("AT+ROLE=0\r\n",1)==0)HC05_INFO("hc05_mode=%s",hc05_mode_str); }elseif(HC05_Send_CMD("AT+ROLE=1\r\n",1)==0)HC05_INFO("HC05mode= bevList.num= }else while(1)ifhc05_role1while(linkHC05()==1)}else{// redata=linelen=if(linelen<200&&linelen!=0)}elseif(strcmp(redata,"AT+LED1=OFF")==0)}elseswitch(redata[len-1]-'0')casecasecasecasecasecase}}}}staticuint8_t}}204無無我們首先將模塊與開發(fā)板接線完成,個人建議在通電前按住模塊的的按鈕,LED1呈現(xiàn)亮的狀態(tài),那么打開我們的藍(lán)牙軟件“藍(lán)牙串口”一般在各大APP商店都有,本人是在APP助手到的。在軟件的右上角點(diǎn)擊“連接”,然后出現(xiàn)圖16-3中的界面。再點(diǎn)擊右上角的圖16-3搜索到相應(yīng)的設(shè)備后,可以直接點(diǎn)擊“取消”,或者等待搜索過程過去,然后配對完成后,HC-05模塊向APP不停的發(fā)送數(shù)據(jù),在初始界面的左右滑HC-05模塊。當(dāng)開發(fā)板中斷接收到數(shù)據(jù),就會做出相應(yīng)的操作,圖16-4表格16-1接線實物4.0藍(lán)牙4.0是2012年藍(lán)牙版本,是3.0的升級版本,較3.0更省電,成本低,3ms低延遲,超長有效連接距離,AES-1284.0很重要的一個V4.0BLEAT指令,用戶可以根據(jù)需要更改串口波特率、設(shè)備名稱、配對等參數(shù)。UARTSPP藍(lán)牙串口協(xié)議,具有成本低、體積小、在自動休眠模式下的待機(jī)電流為400uA~1.5mA,傳輸時8.5mA。圖16-5LEDLED4.0代碼16-10#define#define#define#define#define#define#define#define#define10#define0#define printf("<<-HC05-DEBUG->>[%d]"fmt"\n",LINE,該文件的內(nèi)容和藍(lán)牙2.0的文件內(nèi)容類似,只是將發(fā)送指令的函數(shù)代碼16-110101uint8tCC2541SendCMD(char*cmd,uint8tclean)02{char*while(retry--) for(i=0;i<20;i++)if(len>0) if(redata[0]!=0) ifreturn }else}}}if31return1代碼16-120101函數(shù)功能:主函數(shù)輸入?yún)?shù)::*明:07int08char*/*Flash/**//*LED*//**//**//**//*使能接收,中斷進(jìn)入回調(diào)函數(shù)*/while(1)if{}if{}if(Task_Delay[0]==0){if(redata[0]!=0){switch(redata[1]){case78casecasecasecasecase}}}}無圖16-6接線實物下面講解如何通過APP連接藍(lán)牙模KEY0進(jìn)入從模式,等待此時在端,打開藍(lán)牙設(shè)置,點(diǎn)擊搜索設(shè)備,如果搜索到BT-05的藍(lán)牙設(shè)備,那么點(diǎn)擊配對,配對為: 當(dāng)搜索到BT-05后,點(diǎn)擊它進(jìn)入下一界面。圖16-7APPP操進(jìn)入此界面后,等待連接成功,有相應(yīng)的提示,如果連接成功,那么模塊的LED燈是呈現(xiàn)長亮的形式。我們在發(fā)送區(qū),發(fā)送相應(yīng)的指令,開發(fā)板就會做圖16-8第17章溫濕度傳感器模塊AM2302電容數(shù)字溫濕度模塊是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度8位單片機(jī)相連接。每個傳感器都在極為精確的濕度校驗室中進(jìn)行校20米以上,使其成為各類應(yīng)用甚至苛刻應(yīng)用場合的最佳選擇。305.1K30米3.3V100cm,否則縣衙壓降會導(dǎo)致傳傳感器最小間隔時間為2s,間隔時間小于2s,可能導(dǎo)致溫濕度據(jù)交換、控制均由此數(shù)據(jù)線完成。單總線通要求外接一個5.1KΩ的上拉電SDAAM230240位數(shù)據(jù),高位先出,具體通訊時序如圖17-1所示。圖17-1800us數(shù)據(jù)格式:收到主機(jī)起始信號后,傳感器從數(shù)據(jù)總線SDA傳出40位數(shù)據(jù),先出。10校驗位:校驗位=濕度+濕度低位+溫度+溫度低位17-2圖17-2代碼17-10101typedefstruct humi_low8bit;//原始數(shù)據(jù):濕度低8//原始數(shù)據(jù):溫度高809}11/*宏定 12 AM2302連接引腳定義13#define 14#define 15#define 17 AM2302函數(shù)宏定義18#defineAM2302_Dout_LOW()19#defineAM2302_Dout_HIGH()20#defineAM2302_Data_IN()進(jìn)行各種處理。然后是AM2302引腳及函數(shù)的宏定義。代碼17- 0101函數(shù)功能:輸入?yún)?shù)::一個字節(jié),MSB*07staticuint8_tAM2302_ReadByte(void0831uint8_ti,for(i=0;i<8;i++)/*bit50us50us*/while(AM2302_Data_IN()==GPIO_PIN_RESET);/*AM230226~28us的高電平表示“0”70us高電平表示*xusxif(AM2302_Data_IN()==GPIO_PIN_SET/*xus后仍為高電平表示數(shù)據(jù)“1/*1whiletemp|=(uint8_t)(0x01<<(7-i//7-i1,MSBelsexus后為低電平表示數(shù)據(jù)}}return26~28us的高電平表示“0”70us高電平表示“1”,通過大于數(shù)據(jù)“0”的代碼17-30101函數(shù)功能:輸入?yún)?shù)AM2302_Data:AM2302*:** 明:8bit濕度整數(shù)+8bit濕度小數(shù)+8bit溫度整數(shù)+8bit溫度小數(shù)+8bit校驗09 if(AM2302_Data_IN()==GPIO_PIN_RESET)while/*80uswhileAM2302_Data->humi_high8bit=AM2302_Data->humi_low8bit=AM2302Data->templow8bit=AM2302 =/*humitemp=AM2302Data->humihigh8bit*256+AM2302Data->humiAM2302_Data->humidity {return}return}return63取的數(shù)據(jù)是否正,返回相應(yīng)的結(jié)果。圖17-3代碼17-4DHT11是廣州生產(chǎn)的一款溫濕度的數(shù)字傳感器。該傳感NTC8位單片機(jī)DHT11與單片機(jī)之間能采用簡單的單總線進(jìn)行通信,僅僅需要一個I/O口。傳感器內(nèi)部濕度和溫度數(shù)據(jù)40bit的數(shù)據(jù)傳給單片機(jī),數(shù)據(jù)采用校驗和方式進(jìn)平均最大電流0.5mA。濕度分辨率:1%RH8溫度分辨率:1℃8采樣周期數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和17-4所示,根據(jù)傳感器數(shù)據(jù)輸出的數(shù)據(jù),我們可以得到相應(yīng)的濕度溫圖17-4YS_F1ProYS_F4Pro的例子也可以正代碼17-5DHT110101typedefstruct humi_low8bit;//原始數(shù)據(jù):濕度低8temp_high8bit;//原始數(shù)據(jù):溫度高809}11/*宏定 12 DHT11連接引腳定義#define #define #define 1718#defineDHT1119#defineDHT11_Dout_HIGH()20#defineDHT11_Data_IN()AM2302代碼17-6一個字節(jié)數(shù)0101函數(shù)功能:輸入?yún)?shù)::一個字節(jié),MSB*07staticuint8_tDHT11_ReadByte(void0831uint8_ti,for(i=0;i<8;i++)/*bit50us50us*/while(DHT11_Data_IN()==GPIO_PIN_RESET);/*DHT1126~28us的高電平表示“0”70us高電平表示*xusxif(DHT11_Data_IN()==GPIO_PIN_SET)/*xus后仍為高電平表示數(shù)據(jù)“1/*1while(DHT11DataIN()==GPIOPINtemp|=(uint8_t)(0x01<<(7-i//7-i1,MSBelsexus后為低電平表示數(shù)據(jù)}}return代碼17-70101函數(shù)功能::***明:8bit8bit8bit8bit溫度小數(shù)8bit09 if(DHT11_Data_I

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論