1. 单片机开发环境
KEIL5——百度网盘链接:点击此处
推荐微信搜索KEIL5下载,下载资源很多,自行搜索下载安装
2. 主要材料清单
STM32F103C8T6最小系统 x 2 | A39C无线LORA模块 x 2 |
---|---|
光敏模块 x 1 | 液位传感器 x 1 |
0.96寸OLED屏幕 x 1 | 按键 x 1 |
继电器模块 x 1 | 5V水泵电机 x 1 |
J-LINK下载器 x 1 | USB-TTL x 1 |
3. 实物图
3.1 主机实物图
3.2 从机实物图
3.3 控制板原理图
原理图源文件:点击此处。用AD2022版本打开或者更高版本打开
注意:部分管脚可能连接错误,实际管脚连接与代码对应一致。
4. 代码
4.1 主机代码
int main(void)
{
Device_Init();
while (1)
{
OLED_ShowCHinese(0,2,15);
OLED_ShowCHinese(0+16,2,16);
OLED_ShowCHinese(0+32,2,17);
OLED_ShowCHinese(0+48,2,18);
OLED_ShowCHinese(0+64,2,11);
OLED_ShowNum(64+8,2,JQ_data,4,16);
OLED_ShowString(64+10+37,2,"lx",16);
OLED_ShowCHinese(0,4,20);
OLED_ShowCHinese(0+16,4,12);
OLED_ShowCHinese(0+32,4,13);
OLED_ShowCHinese(0+48,4,14);
OLED_ShowCHinese(0+64,4,11);
OLED_ShowNum(64+8,4,CO_data,4,16);
OLED_ShowCHinese(64+10+37,4,19);
OLED_ShowCHinese(0,6,21);
OLED_ShowCHinese(0+16,6,22);
OLED_ShowCHinese(0+32,6,23);
OLED_ShowCHinese(0+48,6,24);
OLED_ShowCHinese(0+64,6,11);
OLED_ShowNum(64+8,6,TP_data,4,16);
OLED_ShowString(64+10+37,6,"%",16);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
delay_ms(15);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
st4++;
st3 = 1;
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
}
}
if(st4 == 1 && st3 == 1){
UsartPrintf(USART1,"#A&\r\n");
st3 = 0;
}
if(st4 == 2 && st3 == 1){
UsartPrintf(USART1,"#B&\r\n");
st4=0;
st3 = 0;
}
if( TP_data > 3 && TP_data < 12){
beep_on();
delay_ms(100);
beep_off();
delay_ms(100);
}
else{
beep_off();
}
}
}
4.2 从机代码
int main(void)
{
Device_Init();
while (1)
{
adc_data0 = Get_Adc_Average(ADC_Channel_0,5);//PA0 光敏
adc_data1 = Get_Adc_Average(ADC_Channel_1,1);//PA1 湿度 80 - (adc_data1 * 100 / 4096) 1100 - 3100
htemp = DS18B20_Get_Temp() / 10;
if(adc_data1 <= 1100){
adc_data1 = 1100;
}
if(adc_data1 >= 3100){
adc_data1 = 3100;
}
adc_data1 = (adc_data1-1100)*100/(3100-1100);
adc_data1 = (100 - adc_data1)*0.6;
UsartPrintf(USART1,"#JQ%04d&#JC%02d&#JT%04d&\r\n",adc_data0,htemp,adc_data1);
if( adc_data1 > 15 && adc_data1 < 30 && adc_data0 < 1500){
//水泵开2s,关
water_on();delay_ms(1000);water_off();delay_ms(1000);
}
else if( adc_data1 > 15 && adc_data1 < 30 && htemp > 40){
//水泵开2s,关
water_on();delay_ms(1000);water_off();delay_ms(1000);
}
else if( adc_data1 > 3 && adc_data1 < 15){
//开水泵
water_on();
}
else if(kumen == 1){
water_on();
kumen = 0;
}
else if(kumen == 2){
water_off();
kumen = 0;
}
delay_ms(500);
}
}
4.3 代码烧录
完整代码下载:点击此处
魔术棒配置下载器,点击下载即可。不会下载,自行搜索教程。