提示:记录毕设
基于STM32的智能抽油烟机系统,主控使用STM32F103C8T6核心板
打开定时器2,作为系统运行时间;
esp8266每2.5S刷新一次;
dht11每1s刷新一次;
OLED每2s刷新一次;
系统启动后,会有“MyPro”这个WiFi,用手机网络助手连接上,
ip地址:192.168.1.1 ,端口8080
引脚连接:
ESP8266: EN B0
RST B1
RX B10
TX B11
OLED: D0 PA5(SCL1)
D1 PA7(SDA1)
RES PB7
DC PA4
CS PA6
火灾: 接 pcf8591
PCF8591: SCL2 A0
SDA2 A1
烟雾: 接在PCF8591上
CO: 接在PCF8591上
DHT11: 从“S”端开始往右分别PB9/3.3V/GND;
*/
可以承接stm32单片机、STC系列单片机设计、嵌入式、深度学习、多模态、语音、NLP。zixun问题lianxi:2424644692(扣扣)
我们在某宝有店铺噢~,搜:“晖亿科创”
int main(void)
{
while(1)
{
/*****************************************************/
//以下是读取MQ-2、MQ-7数据
/*****************************************************/
co=ADC_IN1(); //in0
delay_ms(10);
yanwu=ADC_IN2(); //in1
delay_ms(10);
Light=ADC_IN3(); //in2
/*****************************************************/
//以下是读取dht11数据
/*****************************************************/
if(dht_flag==1)
{
BEEP=~BEEP;
dht_flag=0;
DHT11_ReadData(&shidu,&wendu); //如果DHT11读取到数据了,那么就显示
printf("%d\r\n",wendu);
//sprintf(send_str1,"当前湿度:%d%%,当前温度:%d℃\r\n",shidu,wendu);
}
/*****************************************************/
//以下是温度或者一氧化碳超标报警,LED亮则说明报警
/*****************************************************/
if(wendu>=set_wendu||co/co_handle>=set_CO)LED=0;
else LED=1;
/*****************************************************/
//以下是火灾报警以及显示
/*****************************************************/
if(Light<10)
{
fire='Y';
}
else fire='N';
/*****************************************************/
//以下是调节pwm占空比
/*****************************************************/
if(yanwu<40) led0pwmval=160;
else if(yanwu>=40&&yanwu<80) led0pwmval=180;
else if(yanwu>=80&&yanwu<120) led0pwmval=200;
else if(yanwu>=120&&yanwu<160) led0pwmval=220;
else if(yanwu>=160) led0pwmval=240;
TIM_SetCompare2(TIM3,led0pwmval);
if(led0pwmval>240)led0pwmval=240;
if(led0pwmval<160)led0pwmval=160;
/*****************************************************/
//以下是向esp8266发送数据
/*****************************************************/
if(send_flag==1)
{
send_flag=0;
//esp8266通过wifi向网络助手发送send_str
sprintf(send_str1, "温度:%d℃ 湿度:%d%% 烟雾:%d%% 一氧化碳:%d%% 火灾:%c\r\n",wendu,shidu,yanwu,co,fire);
ESP8266_SendString ( DISABLE, send_str1, strlen ( send_str1 ), ( ENUM_ID_NO_TypeDef ) 0 );
}
/*****************************************************/
//以下是从esp8266接收/处理数据
/*****************************************************/
// 从缓存中直接读取,注意while循环一次才读取一次缓存
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
revStr=strEsp8266_Fram_Record .Data_RX_BUF;
if(strstr(revStr, ":c"))continue;
strtok(revStr, ":");
revStr=strtok(NULL, ":");
// 判断缓存内
if(revStr!=NULL)
{
if(*revStr=='A')set_wendu++;
else if(*revStr=='B')set_wendu--;
else if(*revStr=='C')set_yanwu++;
else if(*revStr=='D')set_yanwu--;
else if(*revStr=='E')set_CO++;
else if(*revStr=='F')set_CO--;
//else if(*revStr=='M')led0pwmval+=20;
//else if(*revStr=='N')led0pwmval-=20;
}
/*****************************************************/
//以下是OLED显示
/*****************************************************/
if(oled_turn==1)
{
OLED_Clear();
show_chinese();
show_threshold();
OLED_ShowNum(26,3,wendu,3,16);//显示温度值
OLED_ShowNum(90,3,yanwu/yanwu_handle,3,16);//显示烟雾值
OLED_ShowNum(26,6,Light,3,16);//显示火光
//这里,如果需要显示火灾模式为 数字 ,注释掉 OLED_ShowChar 函数
//若想显示为Y或者N ,注释掉 OLED_ShowNum 函数
//OLED_ShowChar(42,6,fire); //显示火灾(Y/N)
OLED_ShowNum(90,6,co/co_handle,3,16); //显示CO浓度
OLED_ShowNum(14,0,set_wendu,3,16); //2,显示
OLED_ShowNum(58,0,set_yanwu,3,16); //46,显示
OLED_ShowNum(100,0,set_CO,3,16); //88,显示
}
else if(oled_turn==0)
{
OLED_Clear();
OLED_ShowCHinese(0,3,14);
OLED_ShowCHinese(14,3,15);
OLED_ShowNum(30,3,led0pwmval,3,16);//显示电机速度
}
}
}
void show_caption()
{
//智能抽油烟机系统
OLED_ShowCHinese(2,0,0);
OLED_ShowCHinese(17,0,1);
OLED_ShowCHinese(32,0,2);
OLED_ShowCHinese(47,0,3);
OLED_ShowCHinese(62,0,4);
OLED_ShowCHinese(77,0,5);
OLED_ShowCHinese(92,0,6);
OLED_ShowCHinese(107,0,7);
}
void show_chinese()
{
//温度,烟雾,火灾,CO
OLED_ShowCHinese(0,3,8);
OLED_ShowCHinese(14,3,9);
OLED_ShowCHinese(0,6,10);
OLED_ShowCHinese(14,6,11);
OLED_ShowCHinese(64,3,12);
OLED_ShowCHinese(78,3,13);
OLED_ShowString(64,6,"CO:");
}
void show_threshold()
{
OLED_ShowString(2,0,"A:");//温度阈值
OLED_ShowString(46,0,"B:");//烟雾阈值
OLED_ShowString(88,0,"C:");//co阈值
}
链接: https://download.csdn.net/download/qq_43625266/85566512