硬石各类功能模块使用手册_第1页
硬石各类功能模块使用手册_第2页
硬石各类功能模块使用手册_第3页
硬石各类功能模块使用手册_第4页
硬石各类功能模块使用手册_第5页
已阅读5页,还剩142页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

技术: (硬石电 析,文档以模块与YS-F1Pro开发板和YS-F4Pro开发板连接来说明。第1 MPU-6050模 MPU-6050模块基本介 MPU-6050硬件电路设 MPU-6050程序实 MPU-6050模块接线(YS_F4Pro开发板 MPU-6050模块接线(YS_F1Pro开发板 第2 继电器模 模块基本介 继电器模块接线(YS_F4Pro开发板 继电器模块接线(YS_F1Pro开发板 第3 US-100超声波测距模 模块基本介 US-100模块程序实 超声波模块接线(YS_F4Pro开发板 超声波模块接线(YS_F1Pro开发板 第4 RC522射频卡模 RFID介 模块基本介 RC522硬件电路设 RC522程序实 RC522模块接线(YS_F4Pro开发板 RC522模块接线(YS_F1Pro开发板 第5 光敏传感 光敏传感器简 光敏传感器接线(YS_F4Pro开发板 光敏传感器接线(YS_F1Pro开发板 第6 热敏传感 热敏传感器简 热敏传感器接线(YS_F4Pro开发板 热敏传感器接线(YS_F1Pro开发板 第7 传感器模 SW-420传感器模块简 SW-420传感器接线(YS_F4Pro开发板 SW-420传感器接线(YS_F1Pro开发板 第8 红外模 红外模块简 红外接线实物图(YS_F4Pro开发板 红外接线实物图(YS_F1Pro开发板 第9 SI4432远距离无线模 SI4432远距离无线模块简 SI4432远距离无线模块接线(YS_F4Pro开发板 SI4432远距离无线模块接线(YS_F1Pro开发板 第10章HC- 感应模 HC-SR501感应模块简 HC-SR501感应模块接线(YS_F4Pro开发板 HC-SR501感应模块接线(YS_F1Pro开发板 第11章OLED模 OLED模块简 字模的制 OLED模块接线方法(YS_F4Pro开发板 OLED模块接线方法(YS_F1Pro开发板 第12章ESP-01WIFI模 ESP-01WIFI模块简 ESP-01WIFI模块程序实 通过APP控制开发板.................................................................ESP-01WIFI模块接线(YS_F4Pro开发板 ESP-01WIFI模块接线(YS_F1Pro开发板 第13章NRF2L01模 NRF24L01模块简 NRF24L01程序实 NRF24L01模块接线(YS_F4Pro开发板 NRF24L01模块接线(YS_F1Pro开发板 第14章心率传感器模 心率传感器模块简 心率传感器程序实 心率传感器上位机..............................................................................心率传感器接线(YS_F4Pro开发板 模块接线实物 第15章MH-Z14A二氧化碳传感器模 MH-Z14A二氧化碳模块简 MH-Z14A二氧化碳程序实 MH-Z14A二氧化碳模块接线(YS_F4Pro开发板 MH-Z14A二氧化碳模块接线(YS_F1Pro开发板 第16章蓝牙模 蓝牙2.0模块简 HC-05模块程序实 HC-05模块接线及操 HC-05模块接线实物图(YS_F4Pro开发板 蓝牙4.0模块简 蓝牙4.0程序实 蓝牙4.0接线及操作(YS_F4Pro开发板 第17章温湿度传感器模 AM2302模块简 AM2302模块程序实 AM2302模块接线(YS_F4Pro开发板 AM2302模块接线(YS_F1Pro开发板 DHT11模块简 DHT11程序实 DHT11模块接线(YS_F4Pro开发板 DHT11模块接线(YS_F1Pro开发板 DS18B20简 DS18B20模块程序实 DS18B20模块接线(YS_F4Pro开发板 DS18B20模块接线(YS_F1Pro开发板 第18章NFC近场通信模块 NFC简 PN532模块概 PN532模块程序实 PN532模块接线(YS_F4Pro开发板 PN532模块接线(YS_F1Pro开发板 陀螺仪,3MEMSDMP(DigitalProcessorMPU-6050VLOGICI2C输出提供逻辑电平。VLOGIC电压可取1.8±5%或者VDD。(qunon欧拉角格式(EulerAngleForma)的融合演算数据。具有131LSBs/o/ses敏感度与全格感测范围为±250、±5001000±2000o/ses3轴角速度感测器(陀螺仪可程式控制,且程式控制范围为±2g、±4g、±8g和±16g的3轴数据、感测器同步化、感应等的负荷。运动处理数据库支持Android、户须另行校准的需求。速下降中断、High-G中断、零动作感应、触击感应、摇动感应功能。内建振荡器在工作温度范围内仅有±1%频率变化。可选外部时钟输入32.768KHz19.2MHz。图1- 根据图1-1的引脚图,我们列表对每个引脚进行解释说明表格1-1MPU-605016789中断数字输出(开漏或推挽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开发板的例程作为讲解。代码1-1I2C#define I2C通信速率(#define I2C#define #define#define#define#define

#define #define #define 代码1-2I2C0101函数功能I2C输入参数::*07void0819=======使用7位寻找模式;OwnAddress1设置I2C设备自己的地址。代码1-3I2C0101输入参数::*明:I2CstaticvoidI2C_MPU6050_Error{/*I2C /*I2C通信总线1517函数功能:I2C输入参数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*函数功能:I2C*输入参数Addr:I2C *HAL_StatusTypeDef* 明:在循环调用是需加一定延时时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*函数功能:通过I2C一个指定寄存器内*输入参数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*函数功能:*输入参数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的相关处理函数,包括:I2C通信错误处理函数、写入一个I2C设备是否处于准备好通信该文件内容主要是对MPU-6050模块各个寄存器的宏定义以及一些参数的代码1-40101函数功能:MPU6050输入参数::*明:voidMPU6050_WriteReg(uint8_treg_add,uint8_t{1012函数功能:MPU6050输入参数::*明:voidMPU6050_ReadData(uint8_treg_add,unsignedchar*Read,uint8_t{211-4MPU6050寄存器的写数据和读数据操作。直接I2C读写操作函数,MPU6050器件的地址为:MPU6050_SLAVE_ADDRESS0xD0(为啥是这个值呢,这里需要说明下,由于I2C87位由MPU6050_RA_WHO_AM_I寄存器决定,第八位由引脚AD0决定,下面有函数该寄存器的值,这个值为0x68,也就是AD0I2C的从器件地址为,也就是0xD0。代码1-5ID以及相关数0101函数功能 MPU6050的输入参数::*明:07uint8_t08unsignedcharRe= if(Re!=0x68){return0;}elsereturn1;}1921*函数功能:MPU6050的加速度数*输入参数:*:* 明:voidMPU6050ReadAcc(short{accData[0]=(buf[0]<<8)|accData[1]=(buf[2]<<8)|accData[2]=(buf[4]<<8)|3436*函数功能:MPU6050的角速度数*输入参数:*:* 明:voidMPU6050ReadGyro(short{gyroData[0]=(buf[0]<<8)|gyroData[1]=(buf[2]<<8)|gyroData[2]=(buf[4]<<8)|4951*函数功能:MPU6050的原始温度数*输入参数:*:* 明:voidMPU6050ReadTemp(short{ //温度*tempData=(buf[0]<<8)|6264*函数功能:MPU6050的温度数据,转化成摄氏*输入参数:*:* 明:void{short//温度temp3=(buf[0]<<8)|*Temperature=(((double)(temp3+13200))/280)-78也就是上述所讲的MPU6050_RA_WHO_AM_I寄存器的值是否为0x68。图1-4接线实物图图1-5接线实物图 继电器模静触点(闭触点)释放。2-1,简单的理解,就是IN1LED1导通(前提是接好相应的跳线帽,出厂已接好OPE图2-1图2-2根据我们的程序,当我们按下KEY2的时候,PF12输出低电平,此时开端和公共端(3.3V)导通。图2-3实物接线图2-4根据我们的程序,当我们按下KEY2的时候,PB0输出低电平,此时开端和公共端(3.3V)导通,也就是有电流给LED1供电,使LED1亮。图2-5接线实物 US-100超声波测距模同时具有GPIO,串口等多种通信方式,内带看门狗,工作温度可靠。US-100-20~70图3-1通讯840KHz的超声波脉冲,然后检测回波信号,当检测校准,叫校准后的结果通过RX管脚输出。0x55的指令给模块,然后等回传的数值,我们Trig10us840KHzEcho管脚10us以上的高电平,然后开启定时器的输入捕获中断,得到高电平的持续时间,并代入计算。3.3V3.3V图3-2接线实物3.3V3.3V图3-3接线实物 RC522射频卡模RFIDRFID:RadioFrequencyIdentification的英文简称,目前可供射频卡使用的几射频卡又称为非接触式IC卡,由IC、感应天线组成,并完成密封在一个标准PVC卡片中,无外露部分。非接触式IC卡的读写过程,通接触式提供给工作。另一部分则是结合数据信号,指挥完成数据、修改、调制和解调的原理,并将它们完全集成到各种非接触式通信方法和协议中(13.56MHzISO14443帧和错误检测。MFRC522MIFARE更告诉的非接触式ISO14443/MIFARE50mm,取决于天线的长3.3V的电源电源,CRCI/OUART用来处理与主机通信时的协议要求,FIFOUART之间的数图4-1MFRC522RC522SPI接口,所以我们直接配置好STM32SPI外设,设置和模块对应的参数,即可实现与RC522的通信。图4-24-3RC522图4-3RC522STM32F4的例程作为讲解,F1SPISPI操作函数的宏定义。相应的内容代码4-1SPI0101函数功能RC522输入参数::*明: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特率的预分频值为32,起始位为MSB。代码4-2RC5220101*函数功能:uint8_t*0814return代码4-3RC5220101**描述:读RC522*输入:ucAddress*返回:*调用09{ucAddr=((ucAddress<<1)&0x7E)| return2325*函数名:Wri*描述:写RC522*输入:ucAddress *返回:*调用:内部调用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为寻卡函数,将我们的寻卡命令PICC_REQALL装填到数组 MF522函数发送出去,如果没有寻找到卡,那么返回MI_ERR,若返回MI_OK,并且uILen为0x10位两个字节则说明寻卡成功。代码4-5010102*函数名:PcdAnticoll03*描述:防冲撞*输入:pSnr,卡片序列号,4*返回: =*调用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。功能,等待卡片进入范围,相应的ID。代码4-60101函数功能:输入参数::*明: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,并没有更深入的操作过程,当然,相应的函数图4-4接线实物图 光敏传感光敏传感器用语光线亮度检测,光线亮度传感器,智能小车寻光模块。亮度超过设定阀值,D0端输出低电平。例程采用ADC传感器模拟量的方式对传感器的值进行。另外一个图5-1接线实物例程采用ADC传感器模拟量的方式对传感器的值进行。另外一个5-2图5-2接线实物 热敏传感NTCLM393比较器输出的信号1)A0PCB尺寸为:3.2cm*1.4cm。50度时,模块则在相应环境温度调节到其绿灯亮,D0输出低D0输出端可以直接驱动我们的继电器模块,由此可以组成一个简易的温控本模块温度检测范围为:20~80,当单片机检测到高电平的值时,3个LED亮。图6-1接线实物,当单片机检测到高电平的值时,3个LED亮。图6-2实物接线 传感器模 采用SW-420闭型传感器,当产品不时,开关呈闭合导通状端输出高电平,绿色指示灯不亮。输出端接入开发板的一个IO口,由此检测高低电平,判断其及不状态。工作电压:3.3V~5V输出形式:数字开关量输出(01PCB尺寸:3.2cm*1.4cm 图7-1接线实物 图7-2接线实物 红 模振为455KHz,对应的发射频率(载波频率)为38KHz,ID为0(识别码编码信号,再发送给单片机,经单片机并得到相应的按键数据。 图8-1接线实物 体见图8-2。图8-2接线实物 SI4432远距离无线模118dBm和能力。最大:+20dBm,可配置+11到温度范围:- 图9-1图9-2接线实物图9-3接线实物第10章HC- HC-SR501感应模L不可重复触发/H<100-15~70感应模块采用双元探头,探头的窗口为长方形,双元(A元,B元)位于较差值,差值越大,感应越灵敏,当从正面探头或从上到下或从小到 VCC10-1中接红色方框那端,OUT之后便是准确的检测时间,接线端的左边画红色框端口为VCC。图10-1接线实物 VCC10-2OUT图10-2接线实物第11章OLED可以说,一代的移动终端设备,大多采用OLED,也是未来的趋势。图11-1OLED高分辨率:128*64(12864LCDOLED屏的单位面积像素点)兼容3.3V和5V控制的I/O电平(无需设置,直接兼容PctoLCD200211-2生产的字模数据到工程中。图11-2图11-3接线实物图11-4接线实物第12章ESP-01WIFITensilicaL10632MCU16位精简模式,主频支持80MHz和160MHz,支持RTOS,集成Wi-Fi无线标准:IEEE无线标准:IEEE802.11b、IEEE802.11g、IEEEWIFISTA、WIFIAP、WIFISTA+WIFISTA模式:模块通过路由器连接互联网,或电脑通过互联网实现对设备HSPI2(MISI(1(I(Demo中提供4路(用户可自IRIRRemoteContorlNEC编码及调制解调,采用38KHz的调制载波。ADCTOUT(Pin6)的输入电I2C4(UART(U0RXDIO13(CTS)下载: 或(AT0:U0TXD(GPIO2UART0ESP8266上电默认会输出将MTDOMTCK连接到对应的外部I2SI2S输入:(I2SI_DAIO13(I2S_BCK;IO1(I2SI_WS和客户端都连接至yingshi的无线路由器下。将设置为服务器端,是否代码12-1staticstaticvoidESP8266_GPIO_Config(void{24GPIOInitTypeDefGPIOESP8266RSTGPIOClK/*串口外设功能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/*使能接收,进入中断回调函数*/级设置,最后调用HAL_UART_Receive_IT使能接收。代码12-3ATboolboolESP8266_AT_Test(void{14charwhile(count<10)}return于判断函数的执行情况,也就是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我们知道该例程是将作为服务器端,等待ESP-01模块作为客户端连接。服务器IP字符串、服务器断开字符串、模块连接服务器的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模块接收到网络数据时向串口发送+IPD和数据,最后返回接收到的字符串首地代码12-9voidvoid{if({ strEsp8266_Fram_Record.InfBit.FramFinishFlag= 09ucTcpClosedFlag=strstr(strEsp8266_Fram_Record.Data_RX_BUF,"CLOSED\r\n")?1:}代码12-100101函数功能:输入参数::*{// 12代码12-110101int02/*Flash/**/SystemClock/**/printf("正在配置 \n"if{printf("ATtest}printf("\n<1 printf("\n<2printf("\n<3printf("\n<4whileprintf("ESP8266完毕/*无限循环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据接收,使用switch来进行接收数据的处理。APP模块使用前端的准备,这里只有安卓端的支持。首先,我们要先确定手图12- IP地顶部写着“正在的端口:xxxx”我这里是1234,记录此端口,待会要用。左右滑动窗口,来到图12-3。图12- 图12-3LED和一个蜂鸣器,此时,需是对例程进行修改,因为每个人IP不同,按钮的设置也可能不同。图12-4图12-5ESP-01图12-6接线实物图12-7接线实物第13章NRF2L01NRF2L012.4~2.5GHzISM频段的单片无线收发器芯SchockBurst模式控制器、功率放大SPI接口进行设置。极低的电流消耗:当工作在发射模式下为-6dBm时电流消耗,接收模式时为MUC可与该模块通过SPI接口的寄存器进行配置,达到控制模块、发射模式下,电流消耗接收模式下电流消耗-里贴出时序图是为了说明下面SPI初始化时CPOLCPHA设置。图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有效数据,1~32#define 0xA0//TX有效数据,1~32#define 0xE1//TXFIFO寄存器.#define 0xE2//RXFIFO寄存器.#define 0xE3//重新使用上一包数据,CE为高,数据包被不断发送#define 0xFF//空操作,#defineCONFIG 0x00//配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能#define 0x01//使能自动应答功能bit0~5,#define 0x02//接收地址允许,bit0~5,#defineSETUP_AW 0x03//设址宽度(所有数据通道):bit1,0:00,3字节;01,4字节;02,5字#defineSETUP_RETR 0x04//建立自动重发;bit3:0,自动重发计数器;bit7:4,自动重发延时#define 0x05//RF通道,bit6:0,工作通道频率#define 0x06//RF寄存器;bit3:传输速率(0:1Mbps,1:2Mbps);bit2:1,#defineSTATUS 0x07//状态寄存器;bit0:TXFIFO满标志;bit3:1,接收数据通道号(最发#define 0x10//#define 0x20//TX#define 0x40//#define 0x08//发送检测寄存器,bit7:4,数据包丢失计数器;bit3:0,#define 0x09//载波检测寄存器,bit0,载波检测#define 0x0A//0接收地址,5个字节,#define 0x0B//1接收地址,5个字节,#define 0x0C//2接收地址,最低字节可设置,高字节,相等#define#define相等相等相等#define#define#define#define#define#define#define#define志0x0D//3接收地址,最低字节可设置,高字节,0x0E//4接收地址,最低字节可设置,高字节,0x0F//5接收地址,最低字节可设置,高字节,0x10//发送地址(),ShockBurstTM模式下,RX_ADDR_P00x11//0有效数据宽度(1~32字节),00x12//1有效数据宽度(1~32字节),00x13//2有效数据宽度(1~32字节),00x14//3有效数据宽度(1~32字节),00x15//4有效数据宽度(1~32字节),00x16//5有效数据宽度(1~32字节),00x17//FIFO状态寄存器;bit0,RXFIFO寄存器空标志;bit1,RXFIFO89//bit4,TXFIFO空标志;bit5,TXFIFO满标志;bit6,1,循环发送上一数据包.0,不循环代码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}}我们对应好程序就可以将相应的引脚接到开发板的IO口。图13-23.3V图13-3接线实物CN14接口上,拔掉JP8JP9图13-4接线实物第14章心率传感器模块PulseSensor是一款用于脉搏心率测量的光电反射式模拟传感器。将其佩戴arduinoProcessing程序,其适用于心率方面的科学研究和教学演示,也非适用于二次开发。光电容积法的基本原理是利用组织在血管搏动时造成透光率不同来进根据相关文献和实验结果,560nm波长左右的拨可以反映皮肤浅部微脉动号为AM2520,而光采用了APDS-9008,这是一款环境光感受器,感受峰565nm,两者的峰值波长相近,灵敏度较高。此外,由于脉搏信号的0.05~200Hz之间,信号幅度均很小,一般在豪伏级水平,容易受到各种。在传感器后面使用了低通滤波器和由运放MCP6001构成的放大使放大后的信号可以很好地被单片机的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函数功能AD输入参数::*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位的连续转换模式,设置为定时器3的外部触发模式。最后配置好采样通道及采样时间。代码14-3#define#define#define#define#define#defineHAL_RCC_TIM3_CLK_DISABLE()//#define 83// 11#define 1999//定时器产生中断频率为:1MHz/1000=1KHz1ms13////这里设置获取得到1ms的定时周期,也就是中断频率为1ms。代码14-40101函数功能:输入参数::*明: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);该文件主要的内容是在定时器的中断中对获取到的ADC值进行相应的处理,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函数将其输出代码14-50101函数功能:主函数输入参数::*明: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}函数功能:输入参数::*明:voidsendDataToProcessing(charsymbol,intdat{68//symbol lsProcessingwhattypeofdatais//thedatatosendculminatinginacarriage我们打开心率传感器模块资料里面的《processing-3.0a8》文件夹,打开图14-2run快捷按钮,上位机的显示界面就会弹出来,这时先不要管,看一下原程序的下方会显示出软件识别出的com口,找到如图14-3所示位如果是识别出多个,比如“COM3,COM5”,serial.list()[0]COM3,serial.list()[1]表示COM5。图14-3com以看到脉搏波形了,当然,STM32方面也要准备完成。图14-4S+3.3VS+3.3V-图14-5图14-6接线实物第15章MH-Z14AMH-Z14A二氧化碳气体传感器是一个通用智能小型传感器,利用非色散红性,长。内置温度补偿;同时具有数字输出、模拟输出及输出,方便(UART(DAC使用4.5~5.5V<60mA(@5V供电150mA(@5V供电(ART(TT模拟输出(DAC(0.4~2V(0~2.5V) >5校准零点校准零点校准跨度点开启/该模块的程序并不难,只要通过STM32发送相应令至模块,然后比如我们的例程,通过串口发送读取命令:、、、、、、、、、按照所述接线方法,程序复位后,等待一段时间(3分钟图15-1MH-Z14A接线实物、、、、、、、、、图15-2接线实物第16章蓝牙模块2.0 (Master牙规工作状态。USB线连接至电脑,在电脑然后上电,模块进入AT命令响应状态。进入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函数功能:::*voidUsart_SendByte(uint8_tch{while(HAL_UART_GET_FLAG(&husartx_HC05,UART_FLAG_TXE)==0);//循环发送,/*UART41315*函数功能:*输入参数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为发送数据的函数,第一个函数是发送一个数据。第二个函数根代码16-4#defineUART_BUFF_SIZE03IOuint16_tuart_p=0; 函数功能:输入参数::*{HALUARTReceiveIT(&husartx}elseclean 2123*函数功能:*输入参数:*:*{*len=return(char3335函数功能:输入参数::*void{48uart_p=whileuart_buff数组为全局变量作存放数据,这样我们在中断接收中接收数get_rebuffclean_rebuff函数代码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打印相应的HC05信息。

代码16-6HC050101函数功能向HC05OKOK:令***:命令应答状态:1OK**0:成功发送并接收到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函数发送指令,等待一定get_rebuffstrstr对数据进行对比,如果为:OK,那么返回0,发送数据成功。代码16-70101函数功能:GPIOHC05输入参数::*07void0817for(i=0;}EV_MAX_NUM;i++) evList.num=代码16-801*函数功能:扫描蓝牙设备,并连接名称中含有"HC05"*输入参数:*00* uint8_t{ char for(i=0; evList.num;i++) evL[i],"HC05"NULL//非NULLHC05HC05_INFO("搜索到HC05模块,即将进行配对连接 return return29/*Flash/**//*LED*//*/*Flash/**//*LED*//**//**/while(KEY1_StateRead()==KEY_UP&&(hc05_mode==0))05模块内按键进入配置默认\n");1:ATuint8_thc05_connect=0;0:uint8_thc05_mode=0;//0:SPP规范charhc05_mode_str[10]="SLAVE";uint8_ti=0;charhc05_nameCMD[40];明:*01明:*01函数功能:主函数输入参数::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无无我们首先将模块与开发板接线完成,个人建议在通电前按住模块的的按钮,LED1呈现亮的状态,那么打开我们的蓝牙软件“蓝牙串口”一般在各大APP商店都有,本人是在APP助手到的。在软件的右上角点击“连接”,然后出现图16-3中的界面。再点击右上角的图16-3搜索到相应的设备后,可以直接点击“取消”,或者等待搜索过程过去,然后配对完成后,HC-05模块向APP不停的发送数据,在初始界面的左右滑HC-05模块。当开发板中断接收到数据,就会做出相应的操作,图16-4表格16-1接线实物4.0蓝牙4.0是2012年蓝牙版本,是3.0的升级版本,较3.0更省电,成本低,3ms低延迟,超长有效连接距离,AES-1284.0很重要的一个V4.0BLEAT指令,用户可以根据需要更改串口波特率、设备名称、配对等参数。UARTSPP蓝牙串口协议,具有成本低、体积小、在自动休眠模式下的待机电流为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,该文件的内容和蓝牙2.0的文件内容类似,只是将发送指令的函数代码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函数功能:主函数输入参数::*明:07int08char*/*Flash/**//*LED*//**//**//**//*使能接收,中断进入回调函数*/while(1)if{}if{}if(Task_Delay[0]==0){if(redata[0]!=0){switch(redata[1]){case78casecasecasecasecase}}}}无图16-6接线实物下面讲解如何通过APP连接蓝牙模KEY0进入从模式,等待此时在端,打开蓝牙设置,点击搜索设备,如果搜索到BT-05的蓝牙设备,那么点击配对,配对为: 当搜索到BT-05后,点击它进入下一界面。图16-7APPP操进入此界面后,等待连接成功,有相应的提示,如果连接成功,那么模块的LED灯是呈现长亮的形式。我们在发送区,发送相应的指令,开发板就会做图16-8第17章温湿度传感器模块AM2302电容数字温湿度模块是一款含有已校准数字信号输出的温湿度8位单片机相连接。每个传感器都在极为精确的湿度校验室中进行校20米以上,使其成为各类应用甚至苛刻应用场合的最佳选择。305.1K30米3.3V100cm,否则县衙压降会导致传传感器最小间隔时间为2s,间隔时间小于2s,可能导致温湿度据交换、控制均由此数据线完成。单总线通要求外接一个5.1KΩ的上拉电SDAAM230240位数据,高位先出,具体通讯时序如图17-1所示。图17-1800us数据格式:收到主机起始信号后,传感器从数据总线SDA传出40位数据,先出。10校验位:校验位=湿度+湿度低位+温度+温度低位17-2图17-2代码17-10101typedefstruct humi_low8bit;//原始数据:湿度低8//原始数据:温度高809}11/*宏定 12 AM2302连接引脚定义13#define 14#define 15#define 17 AM2302函数宏定义18#defineAM2302_Dout_LOW()19#defineAM2302_Dout_HIGH()20#defineAM2302_Data_IN()进行各种处理。然后是AM2302引脚及函数的宏定义。代码17- 0101函数功能:输入参数::一个字节,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后仍为高电平表示数据“1/*1whiletemp|=(uint8_t)(0x01<<(7-i//7-i1,MSBelsexus后为低电平表示数据}}return26~28us的高电平表示“0”70us高电平表示“1”,通过大于数据“0”的代码17-30101函数功能:输入参数AM2302_Data:AM2302*:** 明:8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数+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取的数据是否正,返回相应的结果。图17-3代码17-4DHT11是广州生产的一款温湿度的数字传感器。该传感NTC8位单片机DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O口。传感器内部湿度和温度数据40bit的数据传给单片机,数据采用校验和方式进平均最大电流0.5mA。湿度分辨率:1%RH8温度分辨率:1℃8采样周期数据格式:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和17-4所示,根据传感器数据输出的数据,我们可以得到相应的湿度温图17-4YS_F1ProYS_F4Pro的例子也可以正代码17-5DHT110101typedefstruct humi_low8bit;//原始数据:湿度低8temp_high8bit;//原始数据:温度高809}11/*宏定 12 DHT11连接引脚定义#define #define #define 1718#defineDHT1119#defineDHT11_Dout_HIGH()20#defineDHT11_Data_IN()AM2302代码17-6一个字节数0101函数功能:输入参数::一个字节,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后仍为高电平表示数据“1/*1while(DHT11DataIN()==GPIOPINtemp|=(uint8_t)(0x01<<(7-i//7-i1,MSBelsexus后为低电平表示数据}}return代码17-70101函数功能::***明:8bit8bit8bit8bit温度小数8bit09 if(DHT11_Data_I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论